【松尾研データサイエンティスト育成講座】第2章・練習問題を解いてみた:Pandas編
松尾研「データサイエンティスト育成講座」の第2章では、データ操作に欠かせないライブラリの基礎を学びます。本日はそのうちの一つ、Pandasの練習問題を解いてみました。
2.1.3 Pandasの基礎
<練習問題 1>
以下のデータに対して、Moneyが500以上の人を絞り込んで、レコードを表示させてください。from pandas import Series,DataFrame import pandas as pd attri_data1 = {'ID':['1','2','3','4','5'] ,'sex':['F','F','M','M','F'] ,'Money':[1000,2000,500,300,700] ,'name':['Saito','Horie','Kondo','Kawada','Matsubara']} attri_data_frame1 = DataFrame(attri_data1)
<練習問題 1の答え>
attri_data_frame1[attri_data_frame1['Money']>=500]
「attri_data_frame1」と名付けられたDataFrameから、条件に合うデータのみ抽出する問題です。初めてPandasにふれた時、記法に抵抗感がありました。ブラケット([ ])の中にブラケットが登場するブラケット地獄。「そんなにカッコをいっぱい使われたら、よくわかんなくなっちゃうよ!」と最初は泣きたくなりました。でも、落ち着けば簡単ですね。演算子を使って条件を記述すればいいだけです。
<練習問題 2>
上記のデータに対して、男女別(MF別)の平均Moneyを求めてください。
<練習問題 2の答え>
attri_data_frame1.groupby('sex')['Money'].mean()
Pandasによる集計には欠かせないgroupby()を使う問題です。何を軸に集計するかを指定(今回は男女別)→集計する対象を指定(今回はお金)→計算方法を指定(今回は平均)……の順に考えていけばOK。
<練習問題 3>
上記のデータに対して、以下のデータの同じIDの人をキーとして、データをマージしてください。そして、MoneyとMathとEnglishの平均を求めてください。attri_data2 = {'ID':['3','4','7'] ,'Math':[60,30,40] ,'English':[80,20,30]} <200b> attri_data_frame2 = DataFrame(attri_data2)
<練習問題 3の答え>
pd.merge(attri_data_frame1,attri_data_frame2)
merge()を使って2つのDataFrameをガッチャンコする問題です。今回の場合は何も指定しなくても、重複するIDを認識してデータをマージしてくれます。
Pandasは表形式のデータを扱うにあたって欠かせないライブラリであり、慣れてくれば非常に心強い味方ともなる存在。けれど、最初はとっつきにくい気がします。ひととおりの文法を押さえたら、あとは適当なCSVをいじってみるのが手っ取り早い攻略法かもしれません。