Skip to content

Latest commit

 

History

History

d05

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

day05: 表計算

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

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

    名前 性別 身長
    薗田 172
    鈴木 165
    斎藤 180

    みたいな表です.これを データフレーム と言います.すべての基本となる表です.

    • 要約のときの表は,

      (統計量) 性別 身長
      代表値 163.5

      列ごとに代表値などでデータを置き換えたものです.

  • 関係を調べるときの表は,

    166以上 2 0
    166未満 0 1

    これを クロス集計表 といいます.

    • 収集したデータの項目と項目の重なっている標本の「数量」を書きます.
  • 予測結果の正誤評価するときの表は,

    男と予想 女と予想
    実際に男 10 3
    実際に女 5 5

    これを Confusion Matrix と言います.

    • この場合は予想と実際の重なっている標本の「数量」を書きます.
    • クロス集計表と似ているかもしれませんが,特徴は列名と行名が同じカテゴリであることです.

データフレームの書き方

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

  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を書いてもいいですが,エクセルなどから変換保存もできます.

Pandas パッケージ

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 addpip 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 をデータフレームにする

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

つづきはこちら