(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")