Pandasサンプルプログラム


Pandasのサンプル

(1)csv読み込み(ヘッダーがない場合)

import pandas as pd
df = pd.read_csv('test.csv', header=None)

(2)csv読み込み(データがsjisの場合)

import pandas as pd
df = pd.read_csv('new_19_npb_hitter.csv', encoding="cp932")

(3)中身の確認

df.head()

(4)統計データの確認

df.describe()

(5)一つのカラムを表示

・ここでは本塁打について、着目してみましょう。df["X"]のようにカラム名を指定します

df["本塁打"]

(6)複数のカラムを表示

・これでは誰のデータかわからないので、選手名を指定してみましょう。 複数のカラムを指定する場合には、カッコを二重にします。 df[["X","Y"]]のように指定します

df[["選手名","本塁打"]]

(7)並び替え

・本塁打の多い順に表示しましょう。それにはsort_valuesを使用します。 多い順に表示するには、降順にするので、オプションに「ascending=False」を指定します

df[["選手名","本塁打"]].sort_values("本塁打", ascending=False)

(8)最大値のデータ表示

・本塁打を一番打った選手を表示します

print(df.loc[(df["本塁打"] == df["本塁打"].max()), ["選手名", "本塁打"]])

(9)カラムを追加してデータ表示

・セリーグパリーグを判定し、リーグというカラムを追加します。追加したリーグ毎に集計し表示します

df.loc[df['チーム'].isin(["西武","オリックス","ロッテ","日本ハム","楽天","ソフトバンク"]), 'リーグ'] = 'p'
df.loc[df['チーム'].isin(["広島","巨人","阪神","ヤクルト","中日","DeNA"]), 'リーグ'] = 'c'

df_c = df.loc[df["リーグ"]=="c",["選手名","本塁打"]]
df_p = df.loc[df["リーグ"]=="p",["選手名","本塁打"]]

print(df_c.loc[df_c["本塁打"] == df_c["本塁打"].max(), ["選手名", "本塁打"]])
print("")
print(df_p.loc[df_p["本塁打"] == df_p["本塁打"].max(), ["選手名", "本塁打"]])

・以下の様にも書くことができます(locの中の条件が複数ある場合には、条件をカッコで括ります)

df_c = df.loc[(df["チーム"]=="広島") | (df["チーム"]=="巨人") | (df["チーム"]=="阪神") | (df["チーム"]=="ヤクルト") | (df["チーム"]=="中日") | (df["チーム"]=="DeNA"),["選手名","本塁打"]]

df_p = df.loc[(df["チーム"]=="西武") | (df["チーム"]=="オリックス") | (df["チーム"]=="ロッテ") | (df["チーム"]=="日本ハム") | (df["チーム"]=="楽天") | (df["チーム"]=="ソフトバンク"), ["選手名","本塁打"]]

(10)相関係数を確認

corr関数で各データの相関関係がわかります。結果は1から-1までで、1に近ければ正の相関、-1に近かれば負の相関があります。

import pandas as pd
df = pd.read_csv("new_18_npb_ce.csv",encoding="cp932")
df.corr()

(11)データの集計

・groupbyとsumを使って集計します。ここではチームごとに三振と本塁打数を集計しましょう

import pandas as pd
df = pd.read_csv("new_19_npb_hitter.csv",encoding="cp932")
df2 = df.groupby("チーム").sum()[["三振", "本塁打"]]
df2

(12)データの可視化(折れ線グラフ)

・折れ線グラフで表示してみましょう。 ここではmatplotlibを使わずにdataframeのplot関数を使用します

df2.plot()

(13)データの可視化(散布図)

・相関がありそうなので、散布図を書いて確認します

plt.xlabel("struck out")
plt.ylabel("homerun")
plt.scatter(df2["三振"], df2["本塁打"])

(14)近似直線を引いてみる

from sklearn import linear_model
df = pd.read_csv("new_19_npb_hitter.csv",encoding="cp932")
clf = linear_model.LinearRegression()

x = df[["本塁打"]]
y = df["三振"]
       
clf.fit(x, y)
plt.plot(clf.predict(x), x)
plt.scatter(y, x)

(15)データを統合する

・下記の例では、2011~2019年までのデータを統合しています(縦方向)

import pandas as pd
df11 = pd.read_csv("data_2011_team_c.csv",encoding="cp932")
df12 = pd.read_csv("data_2012_team_c.csv",encoding="cp932")
df13 = pd.read_csv("data_2013_team_c.csv",encoding="cp932")
df14 = pd.read_csv("data_2014_team_c.csv",encoding="cp932")
df15 = pd.read_csv("data_2015_team_c.csv",encoding="cp932")
df16 = pd.read_csv("data_2016_team_c.csv",encoding="cp932")
df17 = pd.read_csv("data_2017_team_c.csv",encoding="cp932")
df18 = pd.read_csv("data_2018_team_c.csv",encoding="cp932")
df19 = pd.read_csv("data_2019_team_c.csv",encoding="cp932")

df = pd.concat([df11,df12,df13,df14,df15,df16,df17,df18,df19])

(16)データを連結する

・下記の例では、三つのデータ(チームデータ・攻撃データ・守備データ)を連結し(横方向)、csvに出力しています

import pandas as pd
df1 = pd.read_csv("data_2010_team1.csv", encoding="cp932")
df2 = pd.read_csv("data_2010_team2.csv", encoding="cp932")
df3 = pd.read_csv("data_2010_team3.csv", encoding="cp932")
df0 = df1.merge(df2)
df = df0.merge(df3)
df.to_csv("data_2010_team_c.csv", encoding="cp932")