psp2

day05: 表計算

ざっくり「表計算」と言っていますが,段階ごとに表が違いますね.

  1. データを集める(収集)
  2. 集めたデータの様子を知る(要約)
  3. 項目と項目の関係性を調べる(関係)
  4. ある項目の値から,別の項目の値を予測する(予測)

データフレームの書き方

なにはともあれ,データを収集したときの表,データフレームですが,正しい書き方があります.

  1. 個々の変数(variable)が1つの列(column)を成す
  2. 個々の観測(observation)や標本,被験者,事象が1つの行(row)を成す

という規則に従います.これまで,何を列にするか行にするかを曖昧にしていたかもしれませんが,正しい書き方を学んでください.迷うときもあると思いますが…

たとえば,次の情報を友達数人から聞いたとします.

  1. 名前
  2. 性別
  3. 1〜12で好きな数
  4. 誕生月
  5. セロリの好きな程度(とても嫌い,嫌い,ふつう,好き,とても好き)
  6. 身長

この質問項目を決めた時点(友達に実際に聞く前)で変数が決まり,表を作ることができます.上記の1〜4の質問項目それぞれが列を成し,項目名が変数です.変数が並ぶ行を「ヘッダ(Header)」と呼びます.

名前 性別 好きな数 誕生月 セロリ好き度 身長
           

誰かから情報を集めるたびに行が増えていき,表は縦に長くなっていきます.

名前 性別 好きな数 誕生月 セロリ好き度 身長
薗田 7 5 とても嫌い 172
鈴木 3 12 好き 165
斎藤 4 10 嫌い 180

コンピュータ上のデータフレーム格納ファイル

どこかのホームページに公開されているコロナウイルス陽性者数の時系列などはpdfや画像などで公開されていますが,これらのデータをデータフレームに直すことをスクレイピング(scraping)と読んでいます.pdfや画像から罫線を読み取って,罫線で区切られる数字や文字列を認識して,データフレームに直します.

データフレームの保存は,表計算ソフトであるmicrosoft excelの保存ファイル(.xlsx)でももちろん良いですが,エクセルはデータだけでなく計算式も保存できます.なので要約したり,関係性を調べたりもできます.というか,むしろそちらがエクセルなど表計算ソフトの本分です.

データフレームの保存だけなら,CSV形式(Comma-Separated-Values(コンマ区切り変数群),.csv)が最も単純で昔から使われ続けています.

たとえば先ほどの

名前 性別 好きな数 誕生月 セロリ好き度 身長
薗田 7 5 とても嫌い 172
鈴木 3 12 好き 165
斎藤 4 10 嫌い 180

は,

名前,性別,好きな数,誕生月,セロリ好き度,身長
薗田,男,7,5,とても嫌い,172
鈴木,女,3,12,好き,165
斎藤,男,4,10,嫌い,180

のように項目(変数)をコンマで区切って書きます.ただし,コンマのすぐ後ろに空白をつけてはいけません.

直接CSVを書いてもいいですが,行ごとに列の頭を揃えられないのが難点です.

excel で書いて,excelで「名前をつけて保存」のときに「csv」を指定するとCSVで保存されます.

Pandas パッケージ

Pandasは,データフレームを扱う「パッケージ」です.パッケージとは,モジュール(.pyファイル)を集めたフォルダ(ディレクトリ)です.つまり,Pandasはデータフレームを扱うための,クラスおよびクラスメソッド,関数,定数が定義された多数のモジュールが集められたフォルダであり,データフレームを扱う上でほぼデファクトスタンダードなパッケージです.

というわけで,Pandasを読みに行けるようにダウンロード・インストールしましょう.

> poetry add pandas

自分が作るモジュールでpandasを読むときは

import pandas as pd

とします.pandasの別名もpdとすることが普通です.

「あれれ,pandasはパッケージだからfrom pandasではないの?」と思うかもしれませんが,

実は,パッケージフォルダのすぐ下に __init__.py というファイルが存在しているならば,import パッケージフォルダ は,その __init__.py をimportしたことになり,__init__.py の中で定義された関数や定数を呼び出すことができます. (__init__.pyに何も書かれていなければ,何も呼び出されず無意味ですが)

そういえば,

poetry new k01k01 フォルダを作ったとき,k01の下のパッケージとなるフォルダ k01__init__.py というファイルが自動作成されていましたね.

なので,すでに k01 パッケージは from の指定先フォルダとしてだけでなく, import の指定先にもなれます.

import k01

ただし,__init__.py に何の定義も書かれていないので無意味です.

k01/__init__.py の中に

```{python, file=’k01/init.py’} from k01 import myclass

Frac = myclass.Frac # myclass.pyのFracに k01.Frac という名札を付ける


などとしておくと,

```{.py}
from k01 import myclass

x = myclass.Frac(1,10)
print(x)

とやっていたことを,

import k01

x = k01.Frac(1,10)

と書けるようになります.

pandas を使って csv をデータフレームにする

pandasに,CSVファイルをデータフレームにする read_csvという関数があります.これを使います.

つづきはこちら