
結論:pandas を正しく速く使う土台は NumPy です。
データ分析や機械学習で速く・正確に前処理を進めるには、Pythonのfor文ではなく配列演算(=ベクトル化)に乗せるのが近道。
本記事は、未経験〜初学者が週10時間×1〜2週で、ndarrayの基礎→dtype/shape→スライス/ビュー→ブロードキャスト→集約/軸→条件抽出→欠損/外れ値処理→乱数→線形代数までを“実務の型”で習得できるよう設計。
コピペOKのレシピとミニプロジェクト、レビュー観点チェックリストを配布します。
この記事で身に付く力
-
NumPy 配列(ndarray)の正しい扱い:
dtype/shape/ndim/strideの基礎理解。 -
ベクトル化とブロードキャスト:速くて壊れにくい前処理の書き方。
-
乱数 Generator の運用:再現性のあるデータ生成(新 API 基準)。
-
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。必要に応じて print() を挟み、値や形状を確認しましょう。
1) ndarrayの作成と基本属性
目的:配列の 形(shape)、次元数(ndim)、要素型(dtype) を即確認する習慣をつける。
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'))ポイント
演算前に 形と型の整合性チェック。エラーの 8 割はここで防げます。
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 + 固定シード(例: 42)で 再現性 を担保。古い np.random 直使用は避ける。
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法則
後ろから見て サイズが 一致 か 1 なら拡張可。
-
OK:
(3,4)と(4,)、(3,1) -
NG:
(3,4)と(2,4)
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 は 行方向(横集計)。
7) 条件抽出・ブーリアンインデックス(if 書かずに絞る)
目的:複雑な条件でも 配列操作だけでフィルタ する。
arr = np.array([5, -2, 7, 0])
mask = arr > 0
arr[mask] # 正の要素
arr = arr.astype(float)
arr\[arr == 0] = np.nan # 浮動小数に昇格(NaNを扱うため)ポイント:and / or ではなく ビット演算子 & / | を使う(丸括弧を忘れない)。
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) を統一。ノートブックの冒頭で固定。
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文をやめる)
目的: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)。
まとめ
- NumPy は pandas の基礎体力。まず 配列の 3 点セット と ブロードキャスト を身体化。
- 迷ったら ベクトル化。
axisとdtypeを意識するだけで 速く壊れにくい 前処理になる。
- 乱数・線形代数は 最小限の道具 を安全運用。再現性と安定性 が現場の信頼につながります。
この記事から次に読むべきもの(内部リンク)
-
-
【保存版】pandas基礎:データフレームの作成・整形・結合・集計を“実務の型”で身につける
対象:未経験〜初学者/pandas 2.x・Python 3.10+ を想定ゴール:読み込み→選択→整形→結合→集計→欠損→日時→ピボット→出力まで、実務でそのまま使える書き方を10ステップで習得 デ ...
-
-
【実務で差がつく】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週で、SEL ...
最近のコメント