
結論:pandasの土台はNumPyです。データ分析や機械学習で速く・正確に前処理を進めるには、Pythonのfor文ではなく配列演算(=ベクトル化)に乗せるのが近道。本記事は、未経験〜初学者が週10時間×1〜2週で、ndarrayの基礎→dtype/shape→スライス/ビュー→ブロードキャスト→集約/軸→条件抽出→欠損/外れ値処理→乱数→線形代数までを“実務の型”で習得できるよう設計。コピペOKのレシピとミニプロジェクト、レビュー観点チェックリストを配布します。
この記事で身に付く力
- NumPy配列(ndarray)の正しい扱い方:dtype/shape/strideの基礎理解
- ベクトル化とブロードキャストで“速くて壊れにくい”前処理
- 乱数Generatorを用いた再現性あるデータ生成
- np.linalgの“最短セット”で線形代数を安全運用
関連記事:
>>【超入門】Pythonの基本文法:変数・型・演算子・条件分岐・ループを一気に攻略(保存版)
>>【保存版】pandas基礎:データフレームの作成・整形・結合・集計を“実務の型”で身につける
>>【実務で差がつく】pandas実践:欠損処理・結合・ウィンドウ関数・時系列・品質保証まで“読みやすく速い”型を習得
>>【保存版】可視化入門:Matplotlib/Plotlyの使い分けと“伝わるグラフ設計”10ステップ
>>【保存版】Jupyter Notebookの基本:環境構築・使い方・再現性・“読みやすいノート”設計まで完全ガイド
>>【保存版】scikit-learn基礎:回帰・分類・前処理・パイプライン・交差検証を“実務の型”で習得
>>【保存版】モデル評価:指標の選び方・交差検証・閾値最適化・ビジネス接続を“実務の型”で解説
よくあるつまずき(最初に避けたい落とし穴)
- shape/dtypeが曖昧で、
ValueError: operands could not be broadcast
。 - スライスのビュー/コピーを誤解し、元配列が意図せず書き換わる。
- for文で集計し、遅い&バグりやすいコードになる。
対策:まずは配列の3点セット(shape/dtype/stride)とブロードキャストのルールを押さえ、基本はベクトル化で書く。
現場10年の学び(ふみとの失敗談込み)
筆者(ふみと)はデータ/マーケティングサイエンティスト歴10年。初期はpandasでfor文を多用して処理が日を跨ぐことも…。
そこでNumPyで前処理の7割を安定化してからpandas/可視化へ橋渡しする運用に切り替えたところ、速度と再現性が劇的に改善。このページはその運用をそのまま“型”に落とし込んだものです。
NumPy“実務の型” 12ステップ(Python 3.10+ / NumPy 1.26+)
各ステップはJupyterでimport numpy as np
からスタート。コードはコピペでOKです。
1) ndarrayの作成と基本属性
import numpy as np
x = np.array(\[1, 2, 3], dtype=np.int64)
A = np.array(\[\[1., 2., 3.], \[4., 5., 6.]])
A.shape, A.ndim, A.dtype # ((2, 3), 2, dtype('float64'))
ポイント
dtype(整数/浮動/真偽)とshape(行×列)/ ndim(次元)を常に確認。
2) ゼロ/ワン/等差・乱数での初期化
np.zeros((3,4)), np.ones(5), np.arange(0, 10, 2)
np.linspace(0, 1, 5)
# 乱数(新API: Generator)
rng = np.random.default\_rng(42)
rng.normal(loc=0, scale=1, size=(2,3))
判断基準
乱数はGeneratorで固定種(シード)を使い再現性を担保。
3) スライスとビュー/コピー
B = np.arange(10)
view = B\[2:7] # ビュー(同じバッファを参照)
view\[:] = -1
B # 元も変わる
copy = B\[2:7].copy()
copy\[:] = 9
B # 元は変わらない
注意
スライス=ビューが基本。独立させたい時は.copy()
。
4) 形状変換(reshape/transpose/ravel)
C = np.arange(12).reshape(3,4) # 行優先(C-order)
C.T.shape # 転置(4,3)
C.ravel(order='C') # 1次元ビュー(可能なら)
原則:reshape
は要素数一定、転置は表示/計算順序に影響。
5) ブロードキャスト(次元合わせの規則)
X = np.ones((3,4))
v = np.array([1,2,3,4])
X + v # 末尾次元(4)が一致→行方向にvが“伸びる”
# 列方向に足したい:
col = np.array(\[10,20,30]).reshape(3,1)
X + col
法則
後ろから見てサイズ一致 or 1なら拡張可。例:(3,4)
と(4,)
、(3,1)
はOK、(2,4)
はNG。
6) 集約(axis)と数値安定化
D = np.array([[1,2,3],[4,5,6]])
D.sum(), D.sum(axis=0), D.mean(axis=1)
# 数値安定:大きな配列の合計はdtypeを上げる
E = np.array(\[1e10, 1, -1e10], dtype=np.float32)
E.sum(dtype=np.float64) # 桁落ち対策
目安:axis=0
は列方向(縦集計)、axis=1
は行方向(横集計)。必要ならdtype昇格。
7) 条件抽出・ブーリアンインデックス
arr = np.array([5, -2, 7, 0])
mask = arr > 0
arr[mask] # 正の要素
arr = arr.astype(float)
arr\[arr == 0] = np.nan # 浮動小数に昇格(NaNを扱うため)
複数条件:括弧+&
/|
(ビット演算)を使用:(a>0) & (b<1)
。
8) 欠損/外れ値の扱い
rng = np.random.default_rng(42)
x = rng.normal(size=1000)
x[rng.integers(0, 1000, 20)] = np.nan
np.nanmean(x), np.nanstd(x)
# 外れ値クリップ(中央値±3\*IQR 風の簡易)
q1, q3 = np.nanpercentile(x, \[25, 75])
iqr = q3 - q1
x\_clip = np.clip(x, q1 - 3*iqr, q3 + 3*iqr)
方針を明文化:nan*
系関数を使い、除外/補完/クリップの基準をREADMEに記載。
9) 結合・分割・スタック
A = np.arange(6).reshape(2,3)
B = np.arange(100,106).reshape(2,3)
np.concatenate(\[A,B], axis=0) # 行方向
np.hstack(\[A,B]) # 列方向(axis=1)
np.vstack(\[A,B]) # 行方向(axis=0)
np.split(A, 2, axis=0) # 2つに分割
先に寸法確認:hstack/vstack
は2D配列ではaxis=1/0
の糖衣。
10) 乱数(新API)と再現性
rng = np.random.default_rng(42)
rng.uniform(0, 1, 5)
rng.normal(0, 1, (2,3))
rng.integers(0, 10, 4)
rng.choice([0,1], size=10, replace=True)
運用ルール:default_rng(seed)
をプロジェクトで統一。古いnp.random
は避ける。
11) 線形代数(np.linalg)最短メモ
M = np.array([[3., 2.], [1., 2.]])
b = np.array([2., 0.])
sol = np.linalg.solve(M, b) # 連立一次方程式
w, V = np.linalg.eig(M) # 固有値・固有ベクトル
U, s, VT = np.linalg.svd(M) # 特異値分解
np.linalg.cond(M) # 条件数の確認
注意:解く前に条件数/正則性を確認し、必要ならスケーリング。
12) ベクトル化の威力(for文をやめる)
# 例:ユークリッド距離(各行の長さ)
rng = np.random.default_rng(42)
P = rng.normal(size=(10000, 3))
# 悪い例:for
# lens = np.array(\[np.sqrt((p\*p).sum()) for p in P])
# 良い例:ベクトル化
lens = np.sqrt((P\*P).sum(axis=1))
型で考える:まず配列化→軸を決める→集約。pandasは.values
でNumPyへ落とすのも有効。
スクール活用という選択肢(レビューで事故率を下げる)
独学でも到達できますが、ベクトル化設計や外れ値/欠損方針のレビューがあると事故率が激減。
6ヶ月ロードマップのpandas実務と直結させるなら、下記2校の無料カウンセリングから始めるのが近道です。
TechAcademy データサイエンスコース(受講料:174,600円~ ※更に割引あり)

株式会社キカガク AI人材長期育成コース(受講料:237,600円~)

ミニプロジェクト(提出推奨)
課題:「乱数で合成した売上データ(10000行)に対し、外れ値クリップ→月次合計→前年比をNumPyのみで計算し、pandasでExcelに書き出す」
rng = np.random.default_rng(42)
で乱数生成。ym
(YYYY-MM)をchoice
で作り、qty×price
で売上を生成。percentile/IQR
で外れ値をクリップ。unique
と==
のブロードキャストで月次合計を計算(for禁止)。- 前年比を計算し、pandasで
report.xlsx
に保存。
レビュー観点(チェックリスト)
- shape/dtypeの把握(コメント付き)
- ベクトル化でforを排除
-
nan*
関数で欠損を安全に処理 - Generatorで再現性(seed固定)
- Excel出力まで上から実行で通る([内部リンク:Jupyter Notebookの基本])
付録A:よく使う関数リスト(最短版)
- 生成:
zeros/ones/empty/arange/linspace
- 形状:
reshape/transpose/ravel/expand_dims/squeeze
- 集約:
sum/mean/std/var/min/max/percentile
(nan*
系も) - 条件:
where/clip
、論理:logical_and/or/not
- 乱数:
default_rng().normal/uniform/integers/choice
- 線形代数:
dot/matmul
(@
)、solve/eig/svd
付録B:性能チューニングの超要点
- メモリ連続性(C-order/F-order)を意識。
ascontiguousarray
で揃える。 - 小さな繰り返しはベクトル化、巨大行列はBLAS/LAPACKを呼ぶ演算(
dot/solve
)に寄せる。 - コピーを減らす:ビュー活用、
astype(copy=False)
。
この記事から次に読むべきもの(内部リンク)
-
-
【保存版】pandas基礎:データフレームの作成・整形・結合・集計を“実務の型”で身につける
データ分析の9割は前処理と整形です。ここをpandasで素早く正確にこなせるかが、成果物の質と速度を決めます。本記事は未経験〜初学者が週10時間×2〜3週で、pandasの基礎(読み込み/選択/整形/ ...
-
-
【実務で差がつく】pandas実践:欠損処理・結合・ウィンドウ関数・時系列・品質保証まで“読みやすく速い”型を習得
リード(結論)基礎を終えたら次は実務の現場で頻出する処理を“型”で覚える段階です。本記事は、pandas 2.x を前提に、欠損・外れ値・結合・ウィンドウ関数・時系列・カテゴリ処理・集計の自動化・大規 ...
-
-
【保存版】scikit-learn基礎:回帰・分類・前処理・パイプライン・交差検証を“実務の型”で習得
機械学習で迷子になる最大の理由は、前処理→学習→評価→改善の順番が曖昧なまま個々のアルゴリズムに飛びつくこと。本記事は、未経験〜初学者が週10時間×2〜3週で到達できるscikit-learnの最短ル ...
-
-
【保存版】可視化入門:Matplotlib/Plotlyの使い分けと“伝わるグラフ設計”10ステップ
結論:可視化は「きれいに描く」ことではなく、意思決定を動かすための設計です。本稿では、未経験〜初学者が 週10時間×1〜2週 で、Matplotlib/Plotlyを軸に “伝わるグラフ”の設計と実装 ...
-
-
はじめてのSQL:SELECT/WHERE/GROUP BYを最短で理解【コピペOK】
データ分析・自動レポート・簡易アプリの土台はSQLです。Pythonだけで押し切るより、前処理の7割をDB側で完結させる方が速く・安定します。本記事は、未経験〜初学者が週10時間×2〜3週で、SELE ...
最近のコメント