Open6

Pythonでデータ分析したいのでおぼえがき

ymkn8crzymkn8crz

機械学習と各種ライブラリ

  1. データ入手とデータ加工
    • NumPy(ナムパイ)
      数値計算に特化、配列や行列を効率良く扱える
    • pandas(パンダス)
  2. データ可視化
    • Matplotlib(マットプロットリブ)
  3. アルゴリズム選択→学習プロセス→精度評価
    • scikit-learn(サイキット・ラーン)
  4. 試験運用および結果利用

(いつも読み方忘れる...)

ymkn8crzymkn8crz

Windows派なので、Windows PowerShellで最近使ってるコマンドはここにまとめる

# Pythonの仮想環境を作成
python -m venv [仮想環境名]

# 仮想環境を有効化(仮想環境に入る)
[仮想環境名]\Scripts\Activate.ps1      # 最後は数字の1、「PowerShell Version 1」の1
pydataenv\Scripts\Activate.ps1  # 仮想環境名がpydataenvの場合

# JupyterLabを起動
(JupyterLabがインストールされている仮想環境名) > jupyter lab

# 仮想環境を無効化(仮想環境を抜ける)
(仮想環境名) > deactivate
ymkn8crzymkn8crz

JupyterLab使い方メモ

  • カッコ「(」を入力すると自動的に閉じカッコもついて「()」と入力補完してくれるようにするには、settings→Auto Close Bracketsにチェックを入れる
ymkn8crzymkn8crz

numpy覚えること多いけど、とりあえずこれだけでも
※絶賛編集中

import numpy as np

# ----- 配列の作成 -----
np.array([1, 2, 3])  # 1次元配列

np.array([[1, 2], [3, 4]])  # 2次元配列、要素数は揃える

np.zeros((2, 3))  # 2行3列の2次元配列を0で初期化 → [[0., 0., 0.], [0., 0., 0.]]
np.ones((2, 3))  # 2行3列の2次元配列を1で初期化 → [[1., 1., 1.], [1., 1., 1.]]
np.full((2, 3), 7)  # 2行3列の2次元配列を任意の値で初期化 → [[8, 8, 8], [8, 8, 8]]

np.arange(0, 10, 2)  # 連番生成 (スタートの値, 連番の終わり・超えない, いくつ連番するか) → [0, 2, 4, 6, 8]
np.linspace(0, 1, 5)  # 等間隔の値生成 → [0., 0.25, 0.5, 0.75, 1.] 0から1まで5つの要素
np.random.rand(2, 3)  # 2次元配列を0から1の乱数で作成 ランダム配列

# ----- 配列の基本操作 -----
a = np.array([1, 2, 3])
a.shape  # 配列の形状 →  (3,) 1次元配列で要素が3つ
a.ndim # 次元数 → 1
a.size # 要素数 → 3
a.dtype # データ型 → int64
a.reshape((3, 1)) # 配列の変形 → [[1],[2],[3]] 3列1行の配列 要素数が合わないとValueError

# 要素の抽出・スライス
b = np.array([[1, 2, 3],[4, 5, 6]])
b[0, 1]  # インデックス指定 → 2 (0行1列目)
b[:, 2]  # [3, 6] すべての行の2列目
b[1, :]  # [4, 5, 6] 1行目のすべての列
b[0:2, 1:3]  # スライス → [[2, 3], [5, 6]] (0-1行目の1-2列目)

# 条件で要素を抽出
c = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
c[c > 5]  # 条件に合う要素 → [6, 7, 8, 9, 10]

# ----- 配列の計算 -----
d = np.array([1, 2, 3, 4, 5])
d + 5  # 加算 → [6, 7, 8, 9, 10]
d - 5  # 減算 → [-4, -3, -2, -1, 0]
d * 5  # 乗算 → [5, 10, 15, 20, 25]
d / 5  # 除算 → [0.2, 0.4, 0.6, 0.8, 1.]

# 配列同士の演算
e = np.array([1, 2, 3, 4, 5, 6])
f = np.array([6, 5, 4, 3, 2, 1])
e + f   # 要素ごとの演算、要素数は同じにする → [7, 7, 7, 7, 7, 7]
np.dot(e, f)  # 行列積 → 56 (1*6 + 2*5 + 3*4 + 4*3 + 5*2 + 6*1)
e @ f  # こちらも行列積

# 統計関数
g = np.array([1, 2, 3, 4, 5])
np.sum(g)  # 合計
np.mean(g)  # 平均
np.min(g)  # 最小
np.max(g)  # 最大
np.std(g)  # 標準偏差

h = np.array([[1, 2, 3, 4, 5], [6, 6, 6, 6, 6]])
np.sum(h, axis=0)  # 合計 (列方向) → [7,  8,  9, 10, 11]
np.sum(h, axis=1)  # 合計 (行方向) → [15, 30]

# ----- ユーティリティ関数 -----
i = np.array([1, 4, 3, 3, 5, 2, 5, 6, 7, 3, 8, 8, 8])
np.unique(i)  # ユニークな要素 → [1, 2, 3, 4, 5, 6, 7, 8]
np.sort(i)  # 要素のソート → [1, 2, 3, 3, 3, 4, 5, 5, 6, 7, 8, 8, 8]

# ----- 配列の形状変更と結合 -----
j = np.array([1, 2, 3, 4, 5])
k = np.array([1, 2, 3])
np.concatenate([j, k], axis=0)  # 結合/連結 (行方向) → [1, 2, 3, 4, 5, 1, 2, 3]

j1 = np.array([[1, 2, 3], [1, 1, 1]])
k1 = np.array([[1, 2, 3], [2, 2, 2]])
np.concatenate([j1, k1], axis=1)  # 結合/連結 (列方向) → [[1, 2, 3, 1, 2, 3], [1, 1, 1, 2, 2, 2]]

j2 = np.array([1, 2, 3])
np.expand_dims(j2, axis=0)  # 次元の追加 → [[1, 2, 3]]

j3 = np.array([[1, 2, 3]])
np.squeeze(j3)  # 次元を削除 →[1, 2, 3]

# ----- 特殊な配列の生成 -----
np.eye(3)  #対角行列(3x3の単位行列) → [[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]
np.random.randint(1, 10, (2, 3))  # ランダム整数生成 1から10までの間の値で2行3列のランダム配列
ymkn8crzymkn8crz

pandasのほうが表が出てくるからなんとなく触ってて楽しいかも。numpyはガチ計算・ガチ演算って感じ。