ざっくり「表計算」と言っていますが,段階ごとに表が違いますね.
- データを集める(収集)
- 集めたデータの様子を知る(要約)
- 項目と項目の関係性を調べる(関係)
- ある項目の値から,別の項目の値を予測する(予測)
-
収集のときの表は,
名前 性別 身長 薗田 男 172 鈴木 女 165 斎藤 男 180 みたいな表です.これを データフレーム と言います.すべての基本となる表です.
-
要約のときの表は,
(統計量) 性別 身長 代表値 男 163.5 列ごとに代表値などでデータを置き換えたものです.
-
-
関係を調べるときの表は,
男 女 166以上 2 0 166未満 0 1 これを クロス集計表 といいます.
- 収集したデータの項目と項目の重なっている標本の「数量」を書きます.
-
予測結果の正誤評価するときの表は,
男と予想 女と予想 実際に男 10 3 実際に女 5 5 これを Confusion Matrix と言います.
- この場合は予想と実際の重なっている標本の「数量」を書きます.
- クロス集計表と似ているかもしれませんが,特徴は列名と行名が同じカテゴリであることです.
なにはともあれ,データを収集したときの表,データフレームですが,正しい書き方があります.
- 個々の変数(variable)が1つの列(column)を成す
- 個々の観測(observation)や標本,被験者,事象が1つの行(row)を成す
という規則に従います.これまで,何を列にするか行にするかを曖昧にしていたかもしれませんが,正しい書き方を学んでください.迷うときもあると思いますが…
たとえば,次の情報を友達数人から聞いたとします.
- 名前
- 性別
- 1〜12で好きな数
- 誕生月
- セロリの好きな程度(とても嫌い,嫌い,ふつう,好き,とても好き)
- 身長
この質問項目を決めた時点(友達に実際に聞く前)で変数が決まり,表を作ることができます.上記の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を書いてもいいですが,エクセルなどから変換保存もできます.
Pandas
は,データフレームを扱う「パッケージ」です.パッケージとは,モジュール(.py
ファイル)を集めたフォルダ(ディレクトリ)です.つまり,Pandasはデータフレームを扱うための,クラスおよびクラスメソッド,関数,定数が定義された多数のモジュールが集められたフォルダであり,データフレームを扱う上でほぼデファクトスタンダードなパッケージです.
これまでの回で,自分で関数やクラスを定義したモジュールを書き,それをメインプログラムから呼び出すことをしていましたが,呼び出すときは,
from フォルダ import pyファイル
という形でした.これはつまり
from パッケージ import モジュール
と読んでもいいですね.
ところで,この書き方ですが,読みに行けるモジュールは限定されていて,
A
┣━ main.py (メインプログラムの書かれたファイル)
┣━ B (ディレクトリ)
┃ ┗━ func1.py (関数やクラスの定義されたファイル)
┗━ func2.py
上のようなフォルダ構造であれば,main.py
から読めるモジュールは,自分と同じ階層にあるfunc2.pyか,同じ階層のフォルダBより下にあるモジュールしか読めません.上位階層のモジュールは読めません.
もう一つ読みに行ける場所があり,それがSitePackagesです.poetryの場合,.venv/lib/python3.10/site-packages/
の下のパッケージは読みに行けます.このSitePackagesは,poetry add
やpip install
でインストールされたパッケージが置かれます.ふつうはPyPIという公式Pythonの用意したインターネット上のパッケージ置き場からダウンロード・インストールしますが,自分が作ったパッケージもインストールできます.
というわけで,Pandasを読みに行けるようにダウンロード・インストールしましょう.
> poetry add pandas
自分が作るメインプログラムやモジュールでpandasを読むときは
import pandas as pd
とします.pandasの別名もpdとすることが普通です.
「あれれ,pandasはパッケージだからfrom pandas
ではないの?」と思うかもしれませんが,
深い話があるので今の所は気にしないでください.
実はフォルダpandas
の直下に__init__.py
というモジュールがあって,中で
...
from pandas.core.arrays.sparse import SparseDtype
from pandas.tseries.api import infer_freq
from pandas.tseries import offsets
from pandas.core.computation.api import eval
...
というようなimport文がたくさん書かれています.この__init__.py
というモジュールはクラス定義のdef __init__(self):
みたいなコンストラクタであり,クラスメソッドmyclass.__init__()
がクラス名関数myclass()
を定義していたように,フォルダ名pandas
をあたかもpandas.py
であるかのように読むための特別モジュールになっているわけです.
pandasに,CSVファイルをデータフレームにする read_csv
という関数があります.これを使います.