Pandas を用いた演算
# データフレーム操作に関するライブラリをインポートする
import pandas as pd
まずは Pandas の基本操作から
df = pd.DataFrame([[100, -20, -60, -20, 100, 300, 580, 940, 1380, 1900],
[92, -24, -60, -16, 108, 312, 596, 960, 1404, 1928],
[84, -28, -60, -12, 116, 324, 612, 980, 1428, 1956],
[77, -31, -59, -7, 125, 337, 629, 1001, 1453, 1985],
[70, -34, -58, -2, 134, 350, 646, 1022, 1478, 2014],
[62, -38, -58, 2, 142, 362, 662, 1042, 1502, 2042],
[56, -40, -56, 8, 152, 376, 680, 1064, 1528, 2072],
[49, -43, -55, 13, 161, 389, 697, 1085, 1553, 2101],
[42, -46, -54, 18, 170, 402, 714, 1106, 1578, 2130],
[36, -48, -52, 24, 180, 416, 732, 1128, 1604, 2160],
[30, -50, -50, 30, 190, 430, 750, 1150, 1630, 2190],
[24, -52, -48, 36, 200, 444, 768, 1172, 1656, 2220],
[18, -54, -46, 42, 210, 458, 786, 1194, 1682, 2250],
[13, -55, -43, 49, 221, 473, 805, 1217, 1709, 2281],
[8, -56, -40, 56, 232, 488, 824, 1240, 1736, 2312],
[2, -58, -38, 62, 242, 502, 842, 1262, 1762, 2342],
[-2, -58, -34, 70, 254, 518, 862, 1286, 1790, 2374],
[-7, -59, -31, 77, 265, 533, 881, 1309, 1817, 2405],
[-12, -60, -28, 84, 276, 548, 900, 1332, 1844, 2436],
[-16, -60, -24, 92, 288, 564, 920, 1356, 1872, 2468]],
index = list("abcdefghijklmnopqrst"),
columns = list("ABCDEFGHIJ"))
df #データの中身を確認
df.head() #最初の数レコードだけ確認
df.iloc[10:20, 5:9] # 指定した行、指定した列だけ抜き出す
df.iloc[:, 5:] # 指定した行、指定した列だけ抜き出す
df.iloc[[1, 3, 5, 7, 9], [2, 4, 6, 8]] # 指定した行、指定した列だけ抜き出す
df.T # 転置
df.iloc[[1, 3, 5, 7, 9], [2, 4, 6, 8]].T # 指定した行・列だけ抜き出してから転置
df.T.iloc[[1, 3, 5, 7, 9], [2, 4, 6, 8]] # 転置してから指定した行・列だけ抜き出す
簡単な統計量
# 基本統計量の表示
df.describe()
# 基本統計量の表示
df.T.describe()
行列の正規化(標準化)
正規化 (normalize) とは、異なる基準のデータを一定の基準にしたがって変形し利用しやすくすることです。
# 一般的には平均 0 、分散 (及び標準偏差) が 1 になるように値を変換することを指します。
# axis=1 とすれば、列ではなく行単位で正規化します。
df.apply(lambda x: (x-x.mean())/x.std(), axis=0)
# 最大値を1、最小値を0にするような正規化もできます。
# axis=1 とすれば、列ではなく行単位で正規化します。
df.apply(lambda x: (x-x.min())/(x.max() - x.min()), axis=0)
# 合計値が1になるような正規化もできます。
# axis=1 とすれば、列ではなく行単位で正規化します。
df.apply(lambda x: x/x.sum(), axis=0)
相関行列
相関行列とは、各要素間の相関係数を並べたものであり、その性質から必ず対称行列である。
df.corr()
df.T.corr()
ある条件でレコードをクラス分けする
df['D'] < 30 # ある条件
df[df['D'] < 30] # ある条件を満たす行だけ抜き出す
# classという名の列を作り、ある基準を満たしていれば 1 を、そうでなければ 0 を入れる
df['class'] = [1 if i < 30 else 0 for i in df['D'].tolist()]
df #データの中身を確認