データサイエンティスト育成講座(4)
こんにちは。
かなり期間が空いてしまいましたが、
今回も前回に続いて「データサイエンティスト育成講座」を読み進めていきます。
今回は第6章「Pandasを使ったデータ加工処理」です。
機械学習の勉強はほかの本でやってましたが、
実際にデータ分析をするためにいろいろデータをいじるということはしたことがないので、
学ぶことの多そうな章かなという印象でしたが、さてさて…
PandasのDataFrameを使ってやっていきます。
DataFrameは辞書型データを受け取ってできるクラスなのかな?
この本はとりあえず写経をしてみてどんなことができるかがなんとなくわかるように書かれているみたいで、
何が何の型なのかとかが書いてなくてすこしモヤモヤします。
まぁそうやって興味を持った時点でこの本の目標は達成してるってことなのかもしれません。
気になったら各自もっと調べろというスタンスっぽい。
まずはインデックスに関する基本的な操作。
各インデックスごとの集計とか、削除とか。
続いてデータの結合の仕方。
ここらへんは例を見れば何やってるかわかりやすいです。
その後出てくるマッピング処理ってやつなんですが、
df1['up_two_num'] = df1['birth_year'].map(lambda x: str(x)[:3])
みたいにすると'birth_year'の上3桁を取り出した'up_two_num'というが加わるとのこと。
この直前にはmapには辞書型データを与えて対応を作っていたけど、無名関数も入れられるんですね。
おもろい。
そのあとのgroupbyメソッドを使ったデータの集約の演習問題やってるときに思ったんですが、
出力が表になるときとならないときはどう違うんでしょ?
そのデータ型とかも違うのかな?なんで違う表示のされ方するんかな?
たとえば、実際に問題の中で使われてるデータでいうと、
学校と性別ごとにG1期の数学の点数の平均を出すと、
student_data_math.groupby(['school','sex'])['G1'].mean()
となりますが、G1期からG3期までの各平均点を出すと、
student_data_math.groupby(['school','sex'])['G1','G2','G3'].mean()
G1 | G2 | G3 | ||
---|---|---|---|---|
school | sex | |||
GP | F | 10.579235 | 10.398907 | 9.972678 |
M | 11.337349 | 11.204819 | 11.060241 | |
MS | F | 10.920000 | 10.320000 | 9.920000 |
M | 10.380952 | 10.047619 | 9.761905 |
って出力されるんですよねー
まぁライブラリの中身を読めばわかるんでしょうが…
と思ったら、解答の方に書いてあって、
上はSeries型、下はDataFrame型らしいです。
ふーん。
欠損データの扱い方、時系列データの扱い方などと続きますが、
この章はとりあえず読むだけ読んで、後で必要になったときにコマンドを見に戻ってくる方がよさそうですね(いまさら)
てなわけで今回は終わりにしまーす。