個人的に Pandas を使ってデータ分析をする機会が増えてきて,今までの浅い経験ではうまく使いこなせず,Pandas を中心に細かく学び直している.最近 Pandas 関連の記事を多く書いていることにも関連しているし,少し前には Pandas を学べる「Kaggle Courses」を紹介した.そして並行して「Pandas ライブラリ活用入門」を読んだため,書評をまとめておく.
目次 📚
全部で「第18章」から構成されている.また Python 入門者のために充実した付録も載っている.本書の序盤にも「読み方」が載っているけど,個人的には Pandas を優先的に学ぶなら「第1,2,3部」を読んで,機械学習にも興味があれば「第4部」まで読むと良いと思う.とは言え,Pandas を中心に主要な機能を解説したリファレンス的な内容になるため,全体をザッと流し読みしてから,気になった機能を実際に試しながら読み直すスタイルが僕には1番合っていた👍
- 第1部「基本的な使い方の基本」
- 第1章 : DataFrame の基礎
- 第2章 : pandas のデータ構造
- 第3章 : プロットによるグラフ描画
- 第2部「データ操作によるクリーニング」
- 第4章 : データを組み立てる
- 第5章 : 欠損データへの対応
- 第6章 : "整然データ"を作る
- 第3部「データの準備―変換/整形/結合など」
- 第7章 : データ型の概要と変換
- 第8章 : テキスト文字列の操作
- 第9章 : apply による関数の適用
- 第10章 : groupby 演算による分割-適用-結合
- 第11章 : 日付/時刻データの操作
- 第4部「モデルをデータに適合させる」
- 第12章 : 線形モデル
- 第13章 : 一般化線形モデル
- 第14章 : モデルを診断する
- 第15章 : 正則化で過学習に対処する
- 第16章 : クラスタリング
- 第5部「締めくくり―次のステップへ」
- 第17章 : pandas 周辺の強力な機能
- 第18章 : さらなる学びのための情報源
- 第6部「付録」
- 付録 A : インストール
- 付録 B : コマンドライン
- 付録 C : プロジェクトのテンプレート
- 付録 D : Python の使い方
- 付録 E : ワーキングディレクトリ
- 付録 F : 環境
- 付録 G : パッケージのインストール
- 付録 H : ライブラリのインポート
- 付録 I : リスト
- 付録 J : タプル
- 付録 K : 辞書
- 付録 L : 値のスライス
- 付録 M : ループ
- 付録 N : 内包表記 (comprehension)
- 付録 O : 関数
- 付録 P : 範囲とジェネレータ
- 付録 Q : 複数代入
- 付録 R : numpy の ndarray
- 付録 S : クラス
- 付録 T : Odo (TheShapeshifter)
本書の誤植は以下に載っている.
本書で使う Jupyter Notebook とデータセットは以下の GitHub リポジトリに公開されている.
Pandas 基礎の基礎 : DataFrame と Series 📚
第1章「DataFrame の基礎」と第2章「pandas のデータ構造」を読めば,Pandas の代表的なオブジェクトである DataFrame と Series の基本的な操作(関数や属性など)を学べる.例えばよく使う関数だと pd.read_csv()
/ head()
/ tail()
/ loc()
/ iloc()
や,プロパティだと shape
/ columns
など.他にもいろいろ載っている.
- pandas.read_csv — pandas 1.2.4 documentation
- pandas.DataFrame.head — pandas 1.2.4 documentation
- pandas.DataFrame.tail — pandas 1.2.4 documentation
- pandas.DataFrame.loc — pandas 1.2.4 documentation
- pandas.DataFrame.iloc — pandas 1.2.4 documentation
- pandas.DataFrame.shape — pandas 1.2.4 documentation
- pandas.DataFrame.columns — pandas 1.2.4 documentation
import pandas as pd df = pd.read_csv('../data/gapminder.tsv', sep='\t') type(df) # pandas.core.frame.DataFrame df.shape # (1704, 6) df.columns # Index(['country', 'continent', 'year', 'lifeExp', 'pop', 'gdpPercap'], dtype='object')
可視化 📚
第3章「プロットによるグラフ描画」では可視化テクニックを学べる.読む前は Matplotlib の解説かなぁーと予想していたけど,実際には Matplotlib だけではなく Seaborn や Pandas の DataFrame.plot
を使った例も紹介されていた.Seaborn を使えばより高度なグラフをお手軽に描けるし,シンプルなグラフで良ければ Pandas でも描ける.また本書の冒頭にはグラフの例がカラー印刷で載っているため,グラフを見るだけでも楽しめる📊
- ヒストグラム
- 密度プロット
- 散布図
- hexbin(六角形ビニング)プロット
- 箱ひげ図
- etc
import matplotlib.pyplot as plt import seaborn as sns tips = sns.load_dataset('tips') sns.lmplot(x='total_bill', y='tip', data=tips) plt.show()
実際に自分で考えたグラフを描こうとすると用語も理解しておく必要があり,Matplotlib のドキュメントに載っている Anatomy of a figure がとてもわかりやすかった.以下に引用して載せておく.
そして Seaborn を使った「ペアプロット図(散布図行列)」の実装は以下の記事で試したりもした
整然データ 📚
第6章「"整然データ"を作る」を中心に第4,5,6章では「整然データ (Tidy Data)」を実現する Tips を学んでいく.「整然データ」は簡単に言えば,データセットを解析しやすくするために構造化したフレームワークで,以下の記事がとてもわかりやすかった.
具体的な Tips としては,具体的には pd.concat()
や merge()
関数を使ったデータセットの連結やインデックスの再設定,そして melt()
関数を使って「横持ち」のデータセットを「縦持ち」に変換するなど,実践的で参考になった.
- pandas.concat — pandas 1.2.4 documentation
- pandas.DataFrame.merge — pandas 1.2.4 documentation
- pandas.DataFrame.melt — pandas 1.2.4 documentation
また「欠損値 (Missing data) : NaN」の取り扱いも出てくる.NaN
に関しては以下の記事で詳しく試した.
日付操作 📚
第11章「日付/時刻データの操作」では,Pandas の日付や時刻に関連する機能を学べる.例えば pd.to_datetime()
関数を使うと指定したカラムを object
型から datetime64
型に変換できる.以下の例では Date
を date_dt
に datetime64
型として変換している.
import pandas as pd ebola = pd.read_csv('../data/country_timeseries.csv') ebola['date_dt'] = pd.to_datetime(ebola['Date']) ebola.info() # <class 'pandas.core.frame.DataFrame'> # RangeIndex: 122 entries, 0 to 121 # Data columns (total 19 columns): # # Column Non-Null Count Dtype # --- ------ -------------- ----- # 0 Date 122 non-null object # 1 Day 122 non-null int64 # 2 Cases_Guinea 93 non-null float64 # 3 Cases_Liberia 83 non-null float64 # 4 Cases_SierraLeone 87 non-null float64 # 5 Cases_Nigeria 38 non-null float64 # 6 Cases_Senegal 25 non-null float64 # 7 Cases_UnitedStates 18 non-null float64 # 8 Cases_Spain 16 non-null float64 # 9 Cases_Mali 12 non-null float64 # 10 Deaths_Guinea 92 non-null float64 # 11 Deaths_Liberia 81 non-null float64 # 12 Deaths_SierraLeone 87 non-null float64 # 13 Deaths_Nigeria 38 non-null float64 # 14 Deaths_Senegal 22 non-null float64 # 15 Deaths_UnitedStates 18 non-null float64 # 16 Deaths_Spain 16 non-null float64 # 17 Deaths_Mali 12 non-null float64 # 18 date_dt 122 non-null datetime64[ns] # dtypes: datetime64[ns](1), float64(16), int64(1), object(1) # memory usage: 18.2+ KB
また pd.read_csv()
関数に parse_dates
パラメータを指定すると,データセットを読み込むときに datetime64
型に変換できる.
import pandas as pd ebola = pd.read_csv('../data/country_timeseries.csv', parse_dates=[0]) ebola.info() # <class 'pandas.core.frame.DataFrame'> # RangeIndex: 122 entries, 0 to 121 # Data columns (total 18 columns): # # Column Non-Null Count Dtype # --- ------ -------------- ----- # 0 Date 122 non-null datetime64[ns] # 1 Day 122 non-null int64 # 2 Cases_Guinea 93 non-null float64 # 3 Cases_Liberia 83 non-null float64 # 4 Cases_SierraLeone 87 non-null float64 # 5 Cases_Nigeria 38 non-null float64 # 6 Cases_Senegal 25 non-null float64 # 7 Cases_UnitedStates 18 non-null float64 # 8 Cases_Spain 16 non-null float64 # 9 Cases_Mali 12 non-null float64 # 10 Deaths_Guinea 92 non-null float64 # 11 Deaths_Liberia 81 non-null float64 # 12 Deaths_SierraLeone 87 non-null float64 # 13 Deaths_Nigeria 38 non-null float64 # 14 Deaths_Senegal 22 non-null float64 # 15 Deaths_UnitedStates 18 non-null float64 # 16 Deaths_Spain 16 non-null float64 # 17 Deaths_Mali 12 non-null float64 # dtypes: datetime64[ns](1), float64(16), int64(1) # memory usage: 17.3 KB
さらに後半では「リサンプリング」と「タイムゾーン変換」の例も載っている.Pandas では resample()
関数を使って「ダウンサンプリング(高い周期から低い周期)」や「アップサンプリング(低い周期や高い周期)」に変換できる.tz_convert()
関数を使うとタイムゾーンを変換できる.
- pandas.DataFrame.resample — pandas 1.2.4 documentation
- pandas.DataFrame.tz_convert — pandas 1.2.4 documentation
機械学習 📚
Pandas だけではなく機械学習にも興味があれば,第12章「線形モデル」から第16章「クラスタリング」までを読むと,Python の statsmodels や scikit-learn を使った機械学習モデルの実装例を学べる.目次の一部を抜粋すると以下などが載っている.ただし統計学の基礎から学べるわけではなく,あくまでライブラリを使った実装例の紹介が中心となるため,機械学習関連の他の本を併読するべきだと思う.前提知識に依存するところではあるけど,個人的には知識不足もあり本書だけだと理解できないところもあったし,本書の読者層も似た傾向になる気がする.
- 線形モデル
- 線形回帰
- 重回帰
- 一般化線形モデル
- ロジスティック回帰
- ポアソン回帰
- 正規化
- リッジ回帰
- ラッソ回帰
- 交差検証
まとめ 📚
Pandas の機能を深く理解するために「Pandas ライブラリ活用入門」を読んだ.実際に試して気付くことも多く,全体をザッと流し読みしてから,気になった機能を試しながら読み直した.リファレンス的な内容ではあるけど,Pandas でできることを全体把握できたため,読んで良かった💡今後は Pandas を使った機械学習など,実践的な内容に学習項目をステップアップしていくぞー!