Open6
Pythonでデータ分析したいのでおぼえがき
機械学習と各種ライブラリ
- データ入手とデータ加工
-
NumPy(ナムパイ)
数値計算に特化、配列や行列を効率良く扱える - pandas(パンダス)
-
NumPy(ナムパイ)
- データ可視化
- Matplotlib(マットプロットリブ)
- アルゴリズム選択→学習プロセス→精度評価
- scikit-learn(サイキット・ラーン)
- 試験運用および結果利用
(いつも読み方忘れる...)
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
JupyterLab使い方メモ
- カッコ「(」を入力すると自動的に閉じカッコもついて「()」と入力補完してくれるようにするには、settings→Auto Close Bracketsにチェックを入れる
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列のランダム配列
pandasのほうが表が出てくるからなんとなく触ってて楽しいかも。numpyはガチ計算・ガチ演算って感じ。
matplotlib、バージョンが違うのか全くインポートできない、、、
とりあえずPython3.10.6をインストールしたので、仮想環境も新しく作ろう。。
→Python3.13.0だとplt.plot()が動かないそう