Python3によるデータ処理の基礎

Pythonでデータ処理をするために必要となる方法についてのテキストを作成しています.
pandas,NumPy,matplotlib,SciPy,SQLAlchemy,PyArrow の最も基本的な事柄を解説しています.


テキスト本体:python_stat.pdf(191ページ,1.58MB)

テキスト中のサンプル(Jupyter Notebook)はこちら

# 目次
1 はじめに — 1
  1.1 本書を読むに当たって — 1
  1.2 作業環境について — 1
  1.3 pandasの読込み — 1
2 データ構造 — 1
  2.1 Series(pandasのデータ構造) — 2
    2.1.1 Seriesの要素のデータ型 — 3
    2.1.2 欠損値について — 4
    2.1.3 インデックスに基づくアクセス — 4
      2.1.3.1 ドット’.’表記によるアクセス — 6
    2.1.4 格納順位に基づくアクセス — 7
    2.1.5 スライスを用いたアクセス方法 — 8
      2.1.5.1 スライスに整数値を与える場合 — 8
      2.1.5.2 スライスに非整数のインデックス項目を与える場合 — 8
    2.1.6 要素の抽出 — 9
      2.1.6.1 マスクを用いた抽出 — 9
      2.1.6.2 条件式から真理値の列を生成する方法 — 10
    2.1.7 重複するインデックスを持つSeriesの扱い — 11
    2.1.8 Seriesからndarrayへの変換 — 12
      2.1.8.1 データとしてのインデックス — 12
      2.1.8.2 インデックスの検索 — 13
    2.1.9 ndarrayからSeriesへの変換 — 14
    2.1.10 整列(ソート) — 15
      2.1.10.1 整列順序の指定 — 16
      2.1.10.2 インデックスに沿った整列 — 16
    2.1.11 要素の削除 — 16
      2.1.11.1 dropメソッド — 16
      2.1.11.2 del文による削除 — 18
    2.1.12 Seriesオブジェクトの変更と複製について — 18
    2.1.13 Seriesオブジェクトの連結 — 19
    2.1.14 インデックスの再設定 — 20
      2.1.14.1 reset\_indexメソッドによる方法 — 20
      2.1.14.2 与えた項目列でインデックスで置き換える方法 — 20
    2.1.15 マルチインデックス — 20
      2.1.15.1 locによる安全なアクセス — 21
      2.1.15.2 インデックスレベルを指定した整列 — 22
      2.1.15.3 インデックスレベルへの名前の付与 — 22
    2.1.16 その他 — 23
      2.1.16.1 開始部分,終了部分の取り出し — 23
  2.2 DataFrame(pandasのデータ構造) — 24
    2.2.1 DataFrameの生成 — 24
      2.2.1.1 リストからDataFrameを生成する方法 — 24
      2.2.1.2 NumPyの配列(ndarray)からDataFrameを生成する方法 — 25
      2.2.1.3 辞書からDataFrameを生成する方法 — 25
      2.2.1.4 カラム単位でデータを与える方法 — 25
      2.2.1.5 カラムにSeriesを与える際の注意事項 — 26
    2.2.2 DataFrameの要素にアクセスする方法 — 27
      2.2.2.1 at によるアクセス — 27
      2.2.2.2 NaN(欠損値)について — 27
      2.2.2.3 pandas独自の欠損値〈NA〉 — 28
      2.2.2.4 整数の欠損値について — 29
      2.2.2.5 欠損値の判定 — 30
      2.2.2.6 iat によるアクセス — 31
      2.2.2.7 loc によるアクセス — 31
      2.2.2.8 iloc によるアクセス — 32
      2.2.2.9 列(カラム)の取出しと追加 — 33
      2.2.2.10 ドット `.’ 表記による列(カラム)へのアクセス — 35
      2.2.2.11 行の取出しと追加 — 36
      2.2.2.12 DataFrameをNumPyの配列(ndarray)に変換する方法 — 38
      2.2.2.13 データとしてのインデックスとカラム — 38
      2.2.2.14 データの格納位置の調査 — 39
    2.2.3 整列(ソート) — 39
      2.2.3.1 整列順序の指定 — 40
      2.2.3.2 インデックスに沿った整列 — 40
    2.2.4 行,列の削除 — 40
      2.2.4.1 カラムの抹消 — 41
    2.2.5 DataFrameの複製 — 42
    2.2.6 DataFrameの連結 — 43
      2.2.6.1 最も単純な連結処理 — 43
      2.2.6.2 横方向(カラム方向)の連結 — 44
    2.2.7 データの抽出 — 45
      2.2.7.1 複数の格納位置を指定した一括抽出 — 45
      2.2.7.2 マスクを用いた抽出 — 45
      2.2.7.3 条件式から真理値列を生成する方法 — 46
      2.2.7.4 論理演算子による条件式の結合 — 46
      2.2.7.5 queryによる抽出 — 47
      2.2.7.6 isin,betweenによる抽出 — 48
    2.2.8 DataFrameに関する情報の取得 — 50
      2.2.8.1 要約統計量 — 50
      2.2.8.2 データ構造に関する情報の表示 — 50
    2.2.9 その他 — 51
      2.2.9.1 開始部分,終了部分の取り出し — 51
      2.2.9.2 行と列の転置 — 51
      2.2.9.3 REPLでの表示量の設定 — 51
  2.3 日付と時刻 — 53
    2.3.1 Timestampクラス — 53
      2.3.1.1 タイムゾーン — 55
      2.3.1.2 コンストラクタのキーワード引数に日付・時刻の値を与える方法 — 56
      2.3.1.3 現在時刻の取得 — 56
    2.3.2 Timestampの差:Timedelta — 57
      2.3.2.1 Timedeltaの生成 — 57
    2.3.3 Timestampの列:date\_rangeとDatetimeIndex — 58
      2.3.3.1 date\_rangeの引数 — 58
      2.3.3.2 他の型への変換 — 59
      2.3.3.3 頻度の規則 — 59
    2.3.4 NaT(欠損値)について — 60
  2.4 データ集合に対する一括処理 — 61
    2.4.1 NumPyと連携したベクトル演算 — 61
    2.4.2 applyメソッド — 62
3 ファイル入出力 — 64
  3.1 DataFrameをCSVファイルとして保存する方法 — 64
  3.2 CSVファイルを読み込んでDataFrameにする方法 — 65
    3.2.1 CSVの指定した列をインデックスと見なす方法 — 65
    3.2.2 CSVの先頭行をデータと見なす方法 — 66
      3.2.2.1 インデックス及びカラム名の無いCSVファイルの読込み — 66
4 統計処理のための基本的な操作 — 67
  4.1 基本的なソフトウェアライブラリ — 67
    4.1.1 ライブラリの読込み — 67
  4.2 乱数生成について — 67
    4.2.1 得られる乱数の系列について — 68
    4.2.2 NumPyの乱数生成機能 — 68
      4.2.2.1 Generator API — 69
  4.3 サンプルデータの作成 — 70
  4.4 データの分析 — 70
    4.4.1 分位数(パーセンタイル,パーセント点) — 71
      4.4.1.1 中央値 — 72
    4.4.2 基本的な統計量 — 72
      4.4.2.1 最大値,最小値 — 72
      4.4.2.2 合計 — 72
      4.4.2.3 平均 — 73
      4.4.2.4 分散(不偏分散,標本分散) — 73
      4.4.2.5 標準偏差(不偏標準偏差/標本標準偏差) — 73
      4.4.2.6 尖度,歪度 — 74
      4.4.2.7 配列(ndarray)の統計量の算出 — 74
    4.4.3 要素,区間毎のデータ個数の調査 — 75
      4.4.3.1 要素の個数の調査 — 75
      4.4.3.2 最頻値 — 75
      4.4.3.3 区間毎の要素の個数の調査 — 76
      4.4.3.4 最頻の区間 — 77
      4.4.3.5 区間(Intervalオブジェクト) — 77
  4.5 データの可視化 — 79
    4.5.1 matplotlibによる作図の手順 — 79
    4.5.2 ヒストグラムの作成 — 79
      4.5.2.1 ヒストグラム作成方法のバリエーション — 80
    4.5.3 図を画像ファイルとして保存する方法 — 81
    4.5.4 複数の図を重ねて表示する方法 — 81
    4.5.5 箱ひげ図の作成 — 82
    4.5.6 折れ線グラフの作成 — 83
      4.5.6.1 線の太さ,線種,マーカー — 83
      4.5.6.2 グラフの色 — 84
    4.5.7 グラフ描画に関する各種の設定 — 85
    4.5.8 応用例:value\_countsの結果をヒストグラムにする — 86
    4.5.9 円グラフの作成 — 87
      4.5.9.1 グラフ作成における日本語フォントの使用 — 88
      4.5.9.2 円グラフ描画の開始角度と回転方向 — 89
      4.5.9.3 扇部の突出,百分率の表示 — 89
      4.5.9.4 扇部の色の設定 — 90
    4.5.10 棒グラフの作成 — 91
      4.5.10.1 複数のカラムを棒グラフにする — 92
    4.5.11 散布図の作成 — 92
  4.6 集計処理 — 94
    4.6.1 グループ集計 — 94
    4.6.2 クロス集計 — 95
      4.6.2.1 crosstab — 96
      4.6.2.2 pivot\_table — 96
    4.6.3 ダミー変数の取得(ワンホットエンコーディング) — 97
  4.7 ランダムサンプリング,シャッフル — 98
  4.8 変数間の関係の調査 — 100
    4.8.1 相関係数 — 100
    4.8.2 共分散 — 101
    4.8.3 多項式回帰 — 102
  4.9 統計的仮説検定 — 104
    4.9.1 z検定 — 104
      4.9.1.1 statsmodelsライブラリによるz検定 — 106
    4.9.2 t検定 — 107
      4.9.2.1 SciPyによるt検定(1群のt検定) — 109
    4.9.3 χ^2検定 — 110
      4.9.3.1 χ^2統計量 — 111
      4.9.3.2 p値算出のための自由度について — 112
      4.9.3.3 SciPyによるχ^2検定 — 113
5 データベース — 114
  5.1 データベースについての基本的な考え方 — 114
    5.1.1 データベースに対する基本的な操作 — 114
  5.2 本書で取り扱うデータベース関連のソフトウェア — 115
    5.2.1 SQLite — 115
    5.2.2 SQLAlchemy — 115
  5.3 データベースに対するアクセスの例 (1):DataFrameを基本とする処理 — 115
    5.3.1 サンプルデータの作成 — 115
    5.3.2 データベースへの接続 — 116
      5.3.2.1 Engineオブジェクト — 116
      5.3.2.2 Connectionオブジェクト — 116
    5.3.3 DataFrameのテーブルへの新規保存 — 117
    5.3.4 テーブルからDataFrameへの読込み — 117
    5.3.5 既存のテーブルへの追加保存 — 118
    5.3.6 既存のテーブルを新しいデータで置き換える — 119
    5.3.7 指定した条件によるデータの抽出 — 119
    5.3.8 read\_sql,to\_sqlのcon引数に関すること — 120
  5.4 データベースに対するアクセスの例 (2):SQLによるトランザクション処理 — 120
    5.4.1 トランザクションの開始 — 120
    5.4.2 既存のレコードの変更(データベースの更新) — 121
    5.4.3 既存のレコードの削除 — 121
    5.4.4 新規レコードの追加 — 122
    5.4.5 executeメソッドの戻り値 — 122
    5.4.6 データベースの使用の終了 — 123
  5.5 SQL — 124
    5.5.1 データベースの作成 — 124
    5.5.2 テーブルの作成 — 125
      5.5.2.1 カラムのデータ型 — 125
    5.5.3 テーブルの結合 — 127
6 各種ライブラリが提供する関数やメソッド — 128
  6.1 scipy.special — 128
    6.1.1 階乗 n! — 128
    6.1.2 順列 nPr,組合せ nCr — 129
  6.2 scipy.stats — 130
    6.2.1 確率密度関数:PDF(Probability Density Function) — 130
      6.2.1.1 正規分布 — 130
      6.2.1.2 t分布 — 131
      6.2.1.3 χ^2分布 — 132
      6.2.1.4 指数分布 — 132
      6.2.1.5 対数正規分布 — 133
      6.2.1.6 三角分布 — 134
    6.2.2 確率質量関数:PMF(Probability Mass Function) — 135
      6.2.2.1 二項分布 — 136
      6.2.2.2 幾何分布 — 136
      6.2.2.3 超幾何分布 — 137
      6.2.2.4 ポアソン分布 — 138
    6.2.3 累積分布関数:CDF(Cumulative Distribution Function) — 139
    6.2.4 パーセント点関数:PPF(Percent Point Function) — 140
    6.2.5 乱数生成:RVS(Random Variates) — 141
      6.2.5.1 一様乱数の生成 — 141
      6.2.5.2 乱数生成の初期設定:random\_state — 142
    6.2.6 確率変数オブジェクトによる効率的な処理の方法 — 143
7 Apache製データ処理基盤との連携 — 145
  7.1 Apache Arrow — 145
    7.1.1 基本的なデータ構造 — 145
      7.1.1.1 Array — 146
      7.1.1.2 Table — 147
      7.1.1.3 ChunkedArray — 148
    7.1.2 pandasのバックエンドにArrowを使用する方法 — 149
      7.1.2.1 TableベースのDataFrameの作成 — 149
      7.1.2.2 Array,ChunkedArrayベースのSeriesの作成 — 150
      7.1.2.3 性能評価 — 151
  7.2 Apache Parquet — 153
    7.2.1 DataFrameの内容をParquetファイルに保存する方法 — 153
    7.2.2 Parquetファイルの内容をDataFrameに読み込む方法 — 154
      7.2.2.1 Parquetの読み取り結果をArrowベースのDataFrameにする方法 — 155
      7.2.2.2 Parquetの内容を選択的に読み込む方法 — 155
A 統計学の用語 — 158
  A.1 確率変数と確率を表す関数 — 158
    A.1.1 確率に関する重要な事柄 — 158
    A.1.2 確率質量関数 — 159
      A.1.2.1 二項分布 — 159
      A.1.2.2 幾何分布 — 159
      A.1.2.3 超幾何分布 — 159
      A.1.2.4 ポアソン分布 — 159
    A.1.3 確率密度関数 — 160
      A.1.3.1 正規分布 — 160
      A.1.3.2 指数分布 — 160
      A.1.3.3 対数正規分布 — 160
    A.1.4 尖度,歪度 — 160
    A.1.5 分位数,パーセント点 — 162
  A.2 母集団と標本に関する重要な事柄 — 163
    A.2.1 標本の抽出 — 163
      A.2.1.1 標本分散と不偏分散 — 163
    A.2.2 推定 — 163
      A.2.2.1 点推定 — 164
      A.2.2.2 区間推定 — 165
    A.2.3 χ^2分布 — 167
    A.2.4 t分布(スチューデントのt分布) — 167
  A.3 仮説検定 — 168
    A.3.1 有意水準と誤りについて — 168
    A.3.2 母平均に関する検定(\(t\)検定) — 169
    A.3.3 母分散に関する検定(\(\chi ^2\)検定) — 170
B pandasで扱うデータの型 — 172
  B.1 Seriesオブジェクトの要素の型の分類 — 172
C サンプルプログラム — 173
  C.1 疑似データセットの作成 — 173