松尾研究室のGCIデータサイエンティスト育成講座
をやってみたところ、解答が無かったので、自分で作ってみました。
間違えていたらすみません、教えて頂けると嬉しいです
<練習問題 1>
下記の2つのデータテーブルに対して、内部結合してみましょう。
pd.merge(attri_data_frame5,attri_data_frame4,on="ID")
<練習問題 2>
attri_data_frame4をベースにattri_data_frame5のテーブルを外部結合してみましょう。
pd.merge(attri_data_frame5,attri_data_frame4,how="right")
<練習問題 3>
attri_data_frame4に対して、以下のデータを縦結合してみましょう。
<練習問題 1>
以前の章で使用した「student-mat.csv」のデータを使います。ageを2倍にしたカラムを追加してみましょう。
# chapter1で用意したデータがあるpathに移動して、以下を実行してください。例) cd pathの名前
student_data_math = pd.read_csv("student-mat.csv",sep=";")
student_data_math["d_age"]=student_data_math["age"].map(lambda x:2*x)
student_data_math
<練習問題 2>
上記と同じデータで、「absences」のカラムについて、以下の3つのビンに分けてそれぞれの人数を数えてみましょう。なお、cutのオプション設定で、デフォルトは右側が閉区間になっていますが、今回は0が入るためのright=Falseを追加してください。
# 分割の粒度
absences_bins = [0,1,5,100]
cut_ab=pd.cut(student_data_math.absences,absences_bins,right=False)
pd.value_counts(cut_ab)
<練習問題 3>
上記と同じデータで、「absences」のカラムについて、qcutを用いて3つのビンに分けてみましょう。
# 分割の粒度
absences_bins = [0,1,5,100]
cut_ab=pd.qcut(student_data_math.absences,3)
pd.value_counts(cut_ab)
<練習問題 1>
先ほど使用した「student-mat.csv」を使って「student-mat.csv」を使って、pandasの集計処理してみましょう。まずは、schoolを軸にして、G1の平均点をそれぞれ求めてみましょう。
student_data_math.groupby("school")["G1"].mean()
<練習問題 2>
次は、schoolと性別を軸にして、G1,G2,G3の平均点をそれぞれ求めてみましょう。
student_data_math.groupby(["school","sex"])["G1"].mean()
student_data_math.groupby(["school","sex"])["G2"].mean()
student_data_math.groupby(["school","sex"])["G3"].mean()
<練習問題 3>
次は、schoolと性別を軸にして、G1,G2,G3の最大値、最小値をまとめて算出してみましょう。
functions=["max","min"]
student_data_math.groupby(["school","sex"])["G1"].agg(functions)
student_data_math.groupby(["school","sex"])["G2"].agg(functions)
student_data_math.groupby(["school","sex"])["G3"].agg(functions)
<練習問題 1>
以下のデータに対して、1列でもNaNがある場合は削除し、その結果を表示してください。
# データの準備
import numpy as np
from numpy import nan as NA
import pandas as pd
sample_data_frame2 = pd.DataFrame(np.random.rand(15,6))
# NAにする
sample_data_frame2.ix[2,0] = NA
sample_data_frame2.ix[5:8,2] = NA
sample_data_frame2.ix[7:9,3] = NA
sample_data_frame2.ix[10,5] = NA
sample_data_frame2.dropna()
<練習問題 2>
上記で準備したデータに対して、NaNを0で埋めてください。
sample_data_frame2.fillna(0)
<練習問題 3>
上記で準備したデータに対して、NaNをそれぞれの列の平均値で埋めてください。
sample_data_frame2.fillna(sample_data_frame2.mean())
6.3.1 総合問題1
以前使用した「student-mat.csv」を使って、以下の問いに答えてください。
(1) 上記のデータに対して、年齢×性別でG1の平均点を算出し、縦軸が年齢、横軸が性別となるような表(テーブル)を作成しましょう。
student_data_math.groupby(["age","sex"],as_index=False)["G1"].mean()
(2) (1)で表示した結果テーブルについて、NAになっている行(レコード)を全て削除した結果を表示しましょう。
student_data_math.groupby(["age","sex"],as_index=False)["G1"].mean().dropna()