Wec McKinney : Python によるデータ分析入門

作成日 : 2020-11-01
最終更新日 :

概要

原題は "Python for Data Analysis"。 データファイルや関連する素材は下記の GitHub リポジトリに置かれている。
https://github.com/wesm/pydata-book/

感想

本書は、私には難しい。

1章 はじめに

よく使われるモジュールには慣習的な命名規則があるという。

	import numpy as np
	import matplotlib.pyplot as plt
	import pandas as pd
	import seaborn as sns
	import statsmodels as sm

このようにはっきり書かれた書籍はなかった。ありがたい。以下、この書評でも、 上記命名規則に従ってモジュールが命名されているとする。

2章 Python の基礎、IPython と Jupyter Notebook

Datetime フォーマット一覧が 表2-5 にある。抜粋すると次の通り。

タイプ定義
%Y年(4桁表記)
%y年(2桁表記)
%m月(2桁表記)[01,12]
%d日(2桁表記)[01,12]
%F%Y-%m-%d のショートカット(別名)。例:2012-4-18
%D%m/%d/%y のショートカット(別名)。例:04/18/12

これを見てみると、%F の例がおかしいような気がする。正しくは 2012-04-18 ではないだろうか。 実験した。なお、特機なき限り実験は WSL (Windows Subsystem for Linux) 20.04 の ipython 7.16.1 を使っている。

	In [2]: from datetime import datetime
	In [3]: dt = datetime(2012, 4, 18)
	In [4]: dt.strftime('%F')
	Out[4]: '2012-04-18'

やはり、2012-04-18 が正しい。

3章 Python 組み込みのデータ構造と関数、ファイルの扱い

3.2.6.2 に itertools モジュールがある。組み合わせや順列、直積などが扱える標準ライブラリだ。 現代的な言語は、こういったものがモジュールとして提供されていて、 ジェネレータとして使いやすくなっていることを実感した。

NumPyの基礎:配列とベクトル演算

p.132 では、ある種の統計量に対して argmax を用いる方法が紹介されている。 本文では、次のように述べられている。

一点だけ、argmax を用いる方法が常に最適ではないことに注意してください。 argmax を呼び出すと配列要素の全スキャンが発生します。 今回の例では、配列の要素の最大値が True であると事前にわかっていました。 このため True が見つかった時点で処理を中断でき、全スキャンの必要はありませんでした。

では、この場合、どのようにすればよかったのだろうか。Numpy の関数でこの場面で適切な関数がないか、 見てみたが、私にはわからなかった。argmax は次のように使われている。

In [257]: (np.abs(walk) >= 10).argmax()
Out[257]: 37

これは NumPy での文法である。これが素の Python ならば、index というメソッドがあって、 引数に合致するインデックスを返すのだが、 NumPy の index メソッドはそのようなことをしない。

5章 pandas入門

p.138 の例を試してみた。ディクショナリを pandas に渡すと、作成されるシリーズのインデックスは、 ソートされたディクショナリのキーの順になるのは確認した。 この順番を変えようと思って、本書の通り、 ディクショナリのキーをシリーズの中で並べたい順番に並べて渡したが、その順番にならなかった。

	In [12]: sdata={'Ohio':35000, 'Texas':71000,'Oregon':16000,'Utah':5000}
	
	In [13]: states={'Califolnia', 'Ohio', 'Oregon', 'Texas'}
	In [14]: obj4 = pd.Series(sdata, index=states)

	In [15]: obj4
	Out[15]:
	Texas         71000.0
	Ohio          35000.0
	Oregon        16000.0
	Califolnia        NaN
	dtype: float64

6章 データの読み込み、書き出しとファイル形式

6.1 はテキスト形式のデータの読み書きである。XML の読み書きも当然含まれているのだが、 日本の官公庁は XML でのデータ提供をしているのだろうかと思って e-stat (https://www.e-stat.go.jp) を見てみたら、どうやら XML でのダウンロードはサポートされていない(以前はされていたようだ)。 ダウンロード形式は csv または xlsx (マイクロソフトの Excel のフォーマット)に限られているようなのだ。 がっかりした。

それでも他に統計がないか見てみると、 財務省貿易統計報道発表資料(https://www.customs.go.jp/toukei/shinbun/happyou.htm) は、データが XML として蓄積されている。これらの XML は WEB でクリックすると見える。 上記資料の一覧は西暦表示されているのに、個別のデータはすべて元号表記であった。 元号表記すると、時系列データとしてデータを加工する手間が必要なので、生産性が落ちるだろう。 政治思想として元号表記が必要という人は一定数いるだろうが、 この元号表記のために日本の生産性が落ちていることについてどのような見解を持っているのだろうか。

p.199 以降「列指向の形式」という言い回しが頻出する。この列指向とはどういうことかと思ったが、 データフレームの列をひとまとめにして扱いやすい、という意味と理解しておく。

p.200 では、HDF5 形式が述べられている。頭の片隅に置いておく。

11章 時系列データ

p.348 に誤植がある。下から 1/4 ほど、「timedelata や、timedelta を何倍かしたもの」 とあるが、正しくは、「timedelta や、timedelta を何倍かしたもの」 だろう。

p.348 を自分の環境で試してみた。結果が少し異なる。

	In [5]: delta = datetime(2011,1,7) - datetime(2008,6,24,8,15)

	In [6]: delta
	Out[6]: datetime.timedelta(days=926, seconds=56700)

本書では下記の通り。

	Out[15]: datetime.timedelta(926, 56700)

p.351 の pd.isnull(idx) の結果表示が本書とは異なる。

	In [36]: pd.isnull(idx)
	Out[36]: array([False, False,  True])

本書では下記の通り。

	Out[38]: array([False, False,  True], dtype=bool)

11.5.2 は四半期の頻度という項である。pp.373-375 にわたって記載がある。pandas では、
p = pd.Period('2012Q4', freq='Q-JAN')
のようにパラメータ freq に会計年度の末月を指定することで、具体的に指す月を指定することができる。 p.374 の「図 11-2 異なる四半期頻度」を見る。この図は、freq の文字列と2012年の各月との対応を示している。 freq に 'Q-DEC' を指定した場合、'2012Q4' が指すのは 2012 年の 10 月、11 月、12 月である。 一方、freq に 'Q-FEB' を指定した場合、'2012Q4' が指すのは、2012 年の 1 月と 2 月である。では、 2012 年の 3 月はどうなっているかというと、これは期間 '2013Q1' を意味している。 これは注意しないといけない。

というのも、日本の多くの会社では、会計年度を当年 4 月から翌年 3 月としていること、 かつ、この会計年度で 2012年度第 4 四半期といったとき、期間が 2013 年 1 月 1 日から 2013 年 3 月 31 日を指すからだ。 一方、以下に示すように pandas では、'2012Q4' は期間が 2012 年 1 月 1 日から 2012 年 3 月 31 日までとなっている。

	In [4]: p=pd.Period('2012Q4', freq='Q-MAR')

	In [5]: p
	Out[5]: Period('2012Q4', 'Q-MAR')
	
	In [6]: p.asfreq('D', 'start')
	Out[6]: Period('2012-01-01', 'D')
	
	In [7]: p.asfreq('D', 'end')
	Out[7]: Period('2012-03-31', 'D')

書誌情報

書名Python によるデータ分析入門 第2版
著者Wec McKinney
訳者瀬戸山 雅人、 小林 儀匡、滝口 開資
発行日2018 年 7 月 24 日 初版第1刷
発行所オライリー・ジャパン
発売元オーム社
定価3800 円(税別)
サイズ
ISBN978-4-87311-845-1
その他越谷市立図書館で借りて読む

まりんきょ学問所コンピュータの部屋コンピュータの本Python > Wec McKinney : Python によるデータ分析入門


MARUYAMA Satosi