pandasはPythonによるデータ解析に必須のツールで、データを整えるためのライブラリです。
pandasを理解できれば、データの整理をすることができます。データ解析や機械学習は、データの整理(データの前処理)が仕事の80%と言われいます。それだけ、重要で意味のある作業だということです。
ここでは、irisのデータを使ってpandasを使ってみましょう。
irisとは、花の形(ガクの長さや幅、花弁の長さや幅)で花の種類(setosa、versicolor、virginica)を分類するためのデータで、scikit-learnに入っています。
当ブログで採用している、Anacondaをインストールして、Jupyter Labを使うとスムースにコピペして確認できます。
それでは、やっていきましょう。
ライブラリのインポートとアイリスデータを整える
import pandas as pd from sklearn.datasets import load_iris iris = load_iris() df = pd.DataFrame(data=iris.data, columns=iris.feature_names) series1 = pd.Series(data=[iris.target_names[i] for i in iris.target], name="kind") df = pd.concat([df,series1], axis=1) df # 作成した ’df’ という名前のデータフレームを出力する
出力:
今回はこのコードの説明は省きます。本筋がデータの整理なので。
出力されたデータの形はデータフレームといい、’df’ という名前に設定しています。以後の ‘df’ は、このデータフレームのことを示しています。
出力の上にある、sepal length (cm), sepal width (cm), petal length (cm), petal width (cm), kind が変数名で ‘columns’ と呼び、列を表します。
出力の左にある、0~149の数字は ‘rows’ や ‘index’ と呼び、行を表します。
出力の下にある、150rows × 5columns は、150の行数、5の列数があることを示しています。
データを触ってみる
データの一部を抽出する
df["sepal length (cm)"]
出力:
‘df’ のなかの指定した列(sepal length (cm))のデータのみを抽出できました。
これは、別の方法でも同じ出力が可能です。
df[df.columns[0]]
df.columns
出力:
Index([‘sepal length (cm)’, ‘sepal width (cm)’, ‘petal length (cm)’,
‘petal width (cm)’, ‘kind’],
dtype=’object’)
コラム名(列の名前)が分かります。’sepal length (cm)’ と ‘sepal width (cm)’ と ‘petal length (cm)’ と ‘petal width (cm)’ と ‘kind’ の5つの列名が分かります。
さらに、
df.columns[0]
出力:
‘sepal length (cm)’
これで、列の指定ができます。df の columns(列名)の0番目を指定している。(0番目は1つ目という意味、ややこしいけど、だいたいのプログラミング言語はそんな感じ)
データの統計量(平均値)を出力
df.mean()
出力:
sepal length (cm) 5.843333
sepal width (cm) 3.057333
petal length (cm) 3.758000
petal width (cm) 1.199333
dtype: float64
各変数の平均値が出力されました。
この結果を確認してみましょう。
平均値は、変数をすべて足した値を総数で割った値です。
まず、sepal length (cm)のデータを確認してみます。
データの総数を出力します。
df[df.columns[0]].count()
出力:
150
データの総数が150個であると出力されました。
次に変数をすべて足した値を出力してみます。
df[df.columns[0]].sum()
出力:
876.5
これは、カラムの0番目、つまり ‘sepal length (cm)’ の総数を表しています。
df[df.columns[0]].sum()/df[df.columns[0]].count()
このコードは、変数をすべて足した値 ÷ データの総数 を計算しています。つまり、平均値です。
出力:
5.843333333333334
df.mean() の数値と一致しましたね。
データの一部のみ取り出す
データの sepal length (cm) と sepal width (cm) を取り出してみましょう。
df_2=df[["sepal length (cm)","sepal width (cm)"]] df_2
出力:
指定した列のみを取り出せました。
別の方法として、以下のコードがあります。
df_1 = df[df.columns[:2]] df_1
出力:
先ほどと同じ出力結果です。
このコードは、「columns(列)の2列目までを取り出す」、という命令です。
df_2=df[[“sepal length (cm)”,”sepal width (cm)”]] と指定するほうが、直感的ですが、df[df.columns[:2]]のほうが、入力ミスが少なく使い勝手がよいです。
わたしのような初心者は、直感的に分かりやすい方が、いいかもしれませんね。
今回は、以上です。
コメント