スクリプト

表のファイルをデータフレームにする(pythonのpandas)

エクセルの表をプログラミングで解析したいです。
それはPandas(パンダス)っていうPythonのツールが有用だね。
パンダってなんですか?
PandasはPythonの表計算に特化したツールだよ

もともとPythonには辞書型(dictionary)といって、項目別にデータを記録できる形式があります。
これを表でも使えるようにしたのがPandasです。

まず単純な表でやってみましょう。
以下のような名前、年齢、性別、身長、体重の表を用意します。
日本語入力は処理が増えるので、ここでは英語項目にします。

「sample_data.csv」という名前を付けます。

↓「sample_data.csv」の内容

name age sex height weight
A 25 male 181 81
B 40 female 158 61
C 32 male 165 67
D 37 female 171 61
E 56 male 175 89
F 49 female 161 61
G 65 male 168 72
H 72 female 155 57
I 58 female 148 52
J 41 male 176 85

このファイルをエクセルから、「csv形式」で保存します。
エクセルの「名前を付けて保存」 → 「形式」 →「csv(カンマ区切り)」でできます。



import pandas as pd
#pandasをpdという略称で使っていきます。
df = pd.read_csv('sample_data.csv', index_col='name')  
#pandasの「read_csv」という関数でデータファイルをdfに読み込みます。
#同時に名前(name)の欄をインデックスに指定します。

print(df)
#読み込んだデータを表示します。

データフレームという形式です。


print(type(df))
#dfの型(形式)を打ち出します。

class ‘pandas.core.frame.DataFrame’

pandasのデータフレーム形式となっています。

これが何につかえるんですか?
データの特性を知る
データのグラフを書く(別ページ)
データからパラメータを計算する
などなど、色々できるんだよ。

まず、pandasにはこのデータの特徴を一覧できる機能があります。

df.describe()

とすると、データの色々な統計パラメータが出力されます。

count:サンプル数、mean:平均、std:標準偏差、min:最小値、25,50,75%: パーセンタイル、max:最大値

df.info()

とすると、データに入っているそれぞれの値の特徴が見れます。
int64というのは整数値が入っているということです。age, height, weightの値ですね。
objectというのはここでは文字列が入っています。sexのmale, femaleに対応しています。

ここでBMIを計算してみます。
BMI = 体重(kg) / (身長(m)の二乗)
ですので

df['BMI'] = df['weight'] / ((df['height'] / 100) ** 2)  
#体重割る身長の2乗を計算して、'BMI'という項目に入れる

のように記載することができます。
df[項目名]でデータフレーム内の列を抜き出しています。
**は2乗の計算です。

ここで

print(df)

と、dfのBMIの項目が加わっているのがわかります。

こうやって手を加えたデータフレームをcsvで保存するのは簡単です。

df.to_csv('sample_data_bmi.csv')
#dfの内容を「sample_data_bmi.csv」という名前で保存

フォルダを見ると、sample_data_bmi.csvというファイルがあり

name age sex height weight BMI
A 25 male 181 81 24.724520008546747
B 40 female 158 61 24.435186668803073
C 32 male 165 67 24.609733700642796
D 37 female 171 61 20.86111966075032
E 56 male 175 89 29.06122448979592
F 49 female 161 61 23.533042706685695
G 65 male 168 72 25.510204081632658
H 72 female 155 57 23.725286160249738
I 58 female 148 52 23.739956172388606
J 41 male 176 85 27.44059917355372

BMIという項目が追加されています。

対話をするように書けるのが便利です。
これは、データフレームを一つのオブジェクト(モノ)として考えるという概念で作っているためです。 Pythonは「オブジェクト指向」のプログラミング言語と言われており、同じように対話感覚で使えるツールが数多くそろっているので便利なのです。

未経験の状態で、「オブジェクト指向」っていわれてもよくわからないので、とりあえずいっぱい使ってみましょう。
データのかたまりがモノとして操作できるような感じですかね。