タダです。
この記事は「後回し改善ウィーク」の3日目の記事です。機械学習やデータ分析の勉強目的で Udemy で購入したまま進んでなかった「【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門」に取り掛かっています。
Python の文法やデータ解析で使うライブラリやコーディングを学び、Kaggle 日本語版である SIGNATE の練習問題を解いてコンペに参加するのが本講座の特徴です。また、数式や論文も使わないため初学者の方にとっても取っ掛かりやすいのも良いポイントです。
この記事では、これから SIGNATE や Kaggle に挑んでいきたいため、本講座で学んだ Python でのデータ分析に用いたコーディングをまとめて知識を整理します。
開発環境の紹介
開発環境は、 Anaconda を導入して行います。このツールを入れることで、データ解析としてスターダードな JupyterNotebook や Python の各種数理ライブラリも既に入っているので導入後即座に開発できる状況です。
利用したライブラリについて
本講座で扱ったデータ解析のためのライブラリは、以下のものになります。それぞれのライブラリで使った処理別にまとめていきます。
- numpy
- pandas
- matplotlib
- scikit-learn
- LiniearRegression
- DecisionTreeClassifier
CSVの読み出し / 書き出し
データが入ったCSVを読み出したりするときは、pandas
を使います。
import pandas as pd # 読み出し(ヘッダー情報を無しにしたい場合はオプションを指定) sample = pd.read_csv("sample.csv", header=None) # 書き出し(ヘッダー情報やインデックスを無しにしたい場合はオプションを指定) sample.to_csv("sample2.csv", header=None, index=None)
データの中身を確認する
データの中身を確認する方法はいくつかあります。
# 先頭5行を表示する sample.head() # 最終5行を表示する sample.tail() # 行数と列数を確認する sample.shape # 基礎統計量を確認する sample.desctibe() # データの型を確認する sample.info()
データの最大値、平均値、最小値を確認する
データの最大値、平均値、最小値を確認する際は、max()、mean()、min()
で行います。
# sample の中にある test のデータの最大値を確認する sample["test"].max() # sample の中にある testのデータの平均値を確認する sample["test"].mean() # sample の中にある testのデータの最小値を確認する sample["test"].min()
グラフの描画
データの可視化として、グラフを描画するのに役立つのがmatplotlib
です。以下のコード例では、デフォルトの折れ線グラフを表示する例ですが、この他にヒストグラムや箱ひげ図、グリッド線の描画も可能です。
import pandas as pd from matplotlib import pyplot as plt %matplotlib inline sample = pd.read_csv("sample.csv") # y のデータを描画 sample["y"].plot() # y のデータを描画して横12インチ、縦4インチのサイズのテストと言うグラフを描画 sample["y"].plot(figsize=(12,4), title="テスト")
データの欠損値を確認し、補完する
データの中には、データが欠損しているものがあり、これを確認し、補完するテクニックも学びました。データ操作において影響を及ぼすため、まずはその有無を確認し、欠損値を補います。
# 欠損値の有無の確認 sample.isnull() # 欠損値がない列の確認 sample.isnull().any() # 欠損値の合計数の確認 sample.isnull().sum() # 欠損値の補完(以下の例では欠損値を0で補完している) sample.fillna(0) # 欠損値補完後の値の確認 sample.value_counts()
データのモデルを作り、予測する(単回帰、重回帰)
単回帰の場合と、重回帰の場合にわけて、処理の流れをまとめます。単回帰は、説明変数が1つで、重回帰は説明変数が2つ以上の場合の回帰になります。2つの処理の違いで異なるのは、重回帰の場合、質的データ(天候、性別など数字に表現しないデータ)をダミー変数化して数値データで扱えるようにするところにあります。
単回帰の場合
import pandas as pd from sklearn.linear_model from LiniarRegression as LR sample = pd.read_csv("sample.csv") x = sample["x"] y = sample["y"] # 回帰モデルの箱を作る model = LR() # モデルを作る model = model.fit(説明変数,目的変数) # 傾きと切片の確認 model.corf_ # 傾き model.intercept_ #切片 # モデルを予測する model.predict(説明変数)
重回帰の場合
import pandas as pd from sklearn.linear_model from LiniarRegression as LR sample = pd.read_csv("sample.csv") x = pd.get_dummies(sample[["x", "z"]]) # ダミー変数化 y = sample["y"] # 回帰モデルの箱を作る model = LR() # モデルを作る model = model.fit(x,y) # 傾きと切片の確認 model.corf_ # 傾き model.intercept_ #切片 # モデルを予測する model.predict(x)
データのモデルを作り、予測する(決定木)
講座でモデルを作るときにもう1つ学んだ手法が決定木になります。決定木は、質問に対する分岐を階層的に作ることで、判別/回帰を行うモデルです。基本的に2択の選択肢を作るため人間は判別しやすいが、調整しすぎると過学習になりやすいのが注意点です。Graphviz を使って決定木を作ります。
import pandas as pd from sklearn.tree import DecisionTreeClassifier as DT from sklearn.tree import export_graphviz import pydotplus from IPython.display import Image sample = pd.read_csv("sample.csv") # 説明変数化したいカラムを一気に選択する x = sample.iloc[:,0:10] # iloc[ 開始行:終了行, 開始列:終了列 ]で選択可能 x = pd.get_dummies(sample[["x", "z"]]) y = sample["y"] # 決定木のモデルの箱を作る model = DT(max_depth=2, min_samples_leaf=500) # モデルを作る model.fit(x,y) # モデルから決定木を表示する(dot ファイルに決定木を表示する) export_graphviz(model, out_file="tree.dot", feature_names=x.columns, class_names=["0","1"], filled=True, rounded=True) # モデルから決定木を表示する(JupyterNotebook 上に dot ファイルを表示する) g = pydotplus.graph_from_dot_file(path="tree.dot") Image(g.create_png())
まとめ
データ解析のための Python で扱った、頻出コーディング例をまとめました。今回は扱ったのは一例に過ぎないと思うので今後もいろんな表現を学んでいきたいと思います。また、Kaggle や SIGNATE のコンペに参加していって、そこで学んだこともまとめていきます!