scikit-learnにあるデータセットを使った、pandasでのデータの整理を解説していきます。
コピペのコードを少しずつ変化させていくことが、コードの理解を深めるための近道です。
データの扱い方(前処理)はデータサイエンスの仕事の80%といわれています。
つまり、このデータを自由自在に扱うことが、データ分析、データサイエンティストに必須のスキルといえます。
今回は、分類問題で使われるcancerデータセットを使って、データの扱い方やそのためのコードを学んでいきたいと思います。
データを説明変数であるXと、目的変数であるyに分けるところまで実際に行っていきましょう。
環境構築は、


データの形であるdataフレームが分からない場合は以下の記事を参照して下さい。

データの読み込み

必要なライブラリをインポートする
import pandas as pd from sklearn.datasets import load_breast_cancer
cancerデータセットをデータフレームにする
cancer = load_breast_cancer() df = pd.DataFrame(data=cancer.data,columns=cancer.feature_names) df['cancer'] = cancer.target df
569行✕31列のデータフレームが出来上がった
「cancer」のデータセットを詳しくみてみよう。
cancer.data
cancer.data
出力:
よく分からない数値がいっぱい並んでいますね。
これは、上のdf(データフレーム)の説明変数のみの数値を示しています。
下のコードで、「cancer.data」の行数と列数が分かります。
cancer.data.shape
出力:
(569, 30)
つまり、569行、30列です。
df(データフレーム)の行数が同じで、列数が1つ少ないですね。dfの目的変数の1列以外の、説明変数のみの数値であるということです。
cancer.feature_names
cancer.feature_names
出力:
これは、説明変数の列名(columns)を示しています。説明変数の数は30列でした。説明変数の列名も30個あるはずです。確認してみましょう。
len(cancer.feature_names)
出力:
30
思った通り、30でしたね。
このコードは、「cnacer.feature_names」の個数(len())を出力させます。
次に、目的変数を確認してみましょう。
cancer.target
cancer.target
出力:
0と1の数値がいっぱいありますね。cancerは悪性が0、良性が1の二値分類になっていることが確認できます。
データの数を確認してみましょう。
cancer.target.shape
出力:
(569,)
569個の数値があるということですね。
この目的変数の名前も確認します。
cancer.target_names
出力:
これは、数値の0がmalignant(悪性)、数値の1がbenign(良性)ということを示しています。
目的変数と説明変数に分割する
X = df.iloc[:,:-1] # 説明変数(特徴量) y = df.iloc[:,-1] # 目的変数(ターゲット)
コードの説明:
では、説明変数(特徴量)と目的変数(ターゲット)のなかみを確認してみよう
説明変数(特徴量)
X
出力:
569行✕30列のデータフレームが出来上がった
なくなった1列は、データフレームの一番最後の列である「cancer」の列である。
目的変数(ターゲット)
y
出力:
データフレーム(df)の最後の列の「cancer」のみの数値が取り出されている。
ここで、どうやって数値を選択したかを確認してみましょう。
コードの詳細は、コードを少し変化させると分かってきます。
コードの変化させて、理解を深める
df.iloc[1,1]
出力:
17.77
このコードの意味は、
dfの1行目の1列目の数値を指定しています。
つまり、下の赤枠です。
df.iloc[0,3]
出力:
1001.0
これは、dfの0行目の3列目の数値を指定しています。[ , ]内のはじめの数が行数、あとの数が列数を表しています。
つまり、黄色枠です。
さらに、
df.iloc[:,0]
出力:
さきほどの法則にしたがえば、[ , ]内のはじめの数である行数が : となっています。: は「すべての」という意味です。つまり、すべての行の0列目を指定しています。
なので、dfの0列目である「mean radius」のすべての数値が出力されているということです。
ちなみに、
df.iloc[:,-31]
このコードも同じ出力がされます。
これは、すべての行で、列は後ろから31列目を指定しています。
dfは31列なので、後ろから31列目は0列目のことで、上の出力と同じになります。
また、
df.iloc[:,:5]
出力:
これは、すべての行数の0から5列目(:5)を指定しています。
青線で示した行です。
ここまでくれば、「目的変数と説明変数に分割するためのコード」は理解できるはずです。振り返って、コードを確認してみましょう。
データの前処理はこちらをご覧下さい。
実際のデータ分析の流れは、
コメント