29
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonによるデータ処理のテキスト

29
Last updated at Posted at 2018-05-12

Pythonでデータ処理をするために必要となる方法についてのテキストを作成しています.
 
---------------------
テキストの本体(PDF形式191ページ:1.58MB) 2026/03/12更新
 (→ミラーサイトからDL)
 使用しているモジュール:
 JupyterLab, pandas, NumPy, SciPy, matplotlib, SQLAlchemy, PyArrow
 →テキスト中の実行例(Jupyter Notebook)
---------------------
Python自体のテキストはこちらで公開しています.
 
(2018/05/12)
学校でプログラミング教えています.
学生にデータ処理を教えるためのテキストを作っています.
 
Pythonをベースにしていますが,色んなシステムやパッケージを混在して使うことになりますので,初心者が見ると「何がどれだけあって,何をしているのか分からない」という状態になると思います.
それでとりあえず,
・作業環境はPython + JupyterLab
・表の扱いはpandas
・データの保存形式はCSVファイル,SQLデータベース(SQLite3),Parquet
・統計処理はNumPy + SciPy
と,使用するツールを限定して使い方を解説しています.

「pandasはPythonベースの表計算」みたいな喩え話を良く聞きますが,触ってみると,意外なほどに動いてくれない,という実感があると思います.それで,実用的に使えるレベルの分解能で解説を書いてみました.
 
生成AIが発達しつつある今でも,まとまった解説を提供するという意味で,人間が編纂したテキストの存在意義は大きいと考えています.
生成AIに十分な指示を与えるためにも,あるいは生成AIからの回答を十分に理解するためにも,APIに関する基礎知識は必須です.
 
テキストの著作権は保持していますが,フリーソフトとして公開します.

補足事項,ご案内など


【補足】(2026/02/17-03/12)
 年度末メンテナンスがほぼ終わりました.
 かなりpandas3対応が進んだ感じです.


【補足】(2025/11/08-2026/02/15)
 久しぶりにメンテナンスやっています.
 やっとDataFrameの基礎解説の部分のアップデートが終わりました.
 DataFrame,Seriesに対するtakeメソッドの解説を載せました.
 DataFrameに対するqueryメソッドの解説を載せました.
 データベースの基礎解説の部分のアップデートが終わりました.
 PyArrow,Parquetの基礎解説も書き始めました.
 欠損値の解説部分を増補しました.
 SciPyの乱数生成の解説部分を増補しました.
 統計的仮説検定の解説を増補しました.
 お気づきの点ありましたら,ご連絡いただけますと幸いです.


【補足】(2022/03/14-31)
 DataFrameの複製に関する基本的な解説を追加.
 Intervalクラスに関する部分に加筆.
 Timestampクラスに関する部分に加筆.
 折れ線グラフに関する部分に加筆.
 円グラフ,棒グラフ,散布図に関する基本的な解説を追加.
 crosstabとpivot_tableを明確に区別して解説する形にしました.
 その他,修正多数.(まだ続きます)


【補足】(2021/09/01-16)
 pandasの非推奨の機能(.valuesプロパティ)を使用して解説している部分を修正.
 DataFrameの解説の章の構成を若干変更.
 DataFrameの連結方法の解説が誤解を与えるものでしたので修正しました.
 Excelファイルの入出力機能に関する解説は一旦削除しました.(今後検討)
 統計学の用語解説の部分に良くない点が散見されます.これに関してもメンテナンス続けます.


【補足】(2021/08/04-30)
 pandasのSeries,DataFrameに関する解説に若干追記しました.
 pandasのアップデートへの対応.Seriesが重複するインデックス要素を持つ際のatプロパティの参照結果が旧版と異なっていたので修正しました.

 非推奨の機能を使用して説明している箇所が散見されます.しばらくメンテナンス続けます.


【補足】(2019/03/21-07/16)
 全面的に作り直しました.(修正ではなく)
旧版は,実際の教育現場で使ってみたところ使いにくさが露呈しました.pandasのデータ構造に関することから細かく解説することにしました.
 当分は修正と加筆が続くと思います.


【補足】(2018/05/13)
 統計学の用語や基礎知識についても解説していますが,このあたりはまだ「要注意項目」です.標準的な教科書に沿って,要約した解説をしていますが,かなり手を加えないといけないと考えています.「統計検定」の教科書も参考にしはじめています.
 機械学習用パッケージの使用方法についても掲載を検討中です.

目次

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


written by 中村勝則

29
50
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?