まえがき

前の記事で、pandasをつかってデータフレームを扱う基礎を学んだね。 めちゃめちゃ便利だということがわかったと思うが、pandasを使ってデータを整形して、最終的に何がしたいかというと、データの分析がしたいんだよね。なぜ分析したいかというと、データから何かしらの情報を得てそれを今後に役立てたいから。 今後への役立て方の一つに予測があるわけだね。そう、回帰だ。深層学習も回帰だよね。深層学習をやるにはTensorFlowっていうライブラリがめっちゃ便利だが、統計的機械学習をやるには、sklearnがある。ということでsklearnを使って統計的機械学習をやっていこう!

の前に、pandas + sklernをGPUでバク速でやってくれるのがrapidsっていうフレームワークだったよね!実際に大量のデータを使って運用するときは予測にも時間をかけていられないと思うので、GPUを使った運用を考えたほうがいいですね。というか、一回現場で働いてみて、そのあと博士課程で戻ってくるのは全然ありだな。楽しそう。そっちのほうが実際の問題がわかるので有用だと思います。

はい、そのまま載せます。ちなみに、standard deviationは標準偏差です。

1. preperocessing

# 5.1.1
game_sales = pd.read_csv('sales.csv', encoding='CP932').dropna()
na_sales_0_to_3 = game_sales["NA_Sales"].between(0.01,3)
game_sales = game_sales[na_sales_0_to_3]
na_sales_reshape = game_sales["NA_Sales"].values.reshape(-1,1)

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(na_sales_reshape)
na_sales_scaled = scaler.transform(na_sales_reshape)
game_sales["NA_Sales_Std"] = pd.Series(na_sales_scaled.flatten())

print(game_sales["NA_Sales_Std"].head(10), end='\n\n')

# 5.1.2
old_mean_std = game_sales['NA_Sales'].agg(["mean","std"]).round(2)
new_mean_std = game_sales['NA_Sales_Std'].agg(["mean","std"]).round(2)

print(old_mean_std, end='\n\n')
print(new_mean_std, end='\n\n')

# 5.1.3
fig, axes = plt.subplots(2,1,figsize=(8,6))
sns.boxplot(data=game_sales, x='NA_Sales', ax=axes[0])
sns.boxplot(data=game_sales, x='NA_Sales_Std',  ax=axes[1])

plt.show()

linear regression

# 5.2.1
game_sales = pd.read_csv('sales.csv', encoding='CP932').dropna()
col_list = ['NA_Sales', 'EU_Sales', 'JP_Sales', 'Other_Sales', 'Global_Sales',
            'Critic_Count', 'User_Score', 'Critic_Score']

from sklearn.preprocessing import scale
X = scale(game_sales[col_list].values)
y = scale(game_sales['User_Count'].values)

from sklearn.linear_model import LinearRegression
reg_model = LinearRegression()
reg_model.fit(X,y)

# 5.2.2
reg_coef = reg_model.coef_
report = [f'{a}\t: {b}' for a, b in zip(col_list, reg_coef)]

for info in report:  print(info)
print(f'Regression Score :{reg_model.score(X,y)}')

# 5.2.3
fig = sns.regplot(x='User_Count', y='Global_Sales', data=game_sales)
fig.set(xlim=(100, 4000), ylim=(2, 20))

plt.show()

Logistic Regression

ロジスティック回帰分析は、いくつかの要因(説明変数)から「2値の結果(目的変数)」が起こる確率を説明・予測することができる統計手法です。 らしいです。はい、2値しか予測できない、というところがめちゃめちゃポイントですね。しっかりと頭に入れておきましょう。

あと、ここに来てやっとわかったのですが、ダミー変数とは次のような値を示すのですね。 ダミー変数はカテゴリーデータを0と1だけで構成されているカテゴリーごとの列データに変換したもののことを指します。 はい、これ結構大事です。今まで知りませんでした。あと、もう一つ大事なのが、dfオブジェクトについている、select_dtypesメソッドですね。

select_dtypes(include=['number']): This function is a convenient method provided by pandas library to filter columns based on their data types. The argument include=['number'] specifies that we want to include only columns with numeric data types.

ロジスティック回帰は分類に使われるということですね。他にもたくさん分類機があるんですね。 from sklearn.neighbors import KNeighborsClassifier とか、 from sklearn.tree import DecisionTreeClassifier とか、 from sklearn.ensemble import RandomForestClassifier

とかね。

クラスタリング!!大事です!!!はい!

クラスタリングはちょっと自分で色々と勉強してみてください。俺にはまだわからないことが多すぎます。 ただ、めちゃめちゃ使うやつだけここで教えておきたいと思います。

salary = salary.select_dtypes(include=['number'])