Python基礎

【保存版】NumPy基礎:配列・ブロードキャスト・ベクトル化・乱数・線形代数を“実務の型”で最短習得

結論: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円~ ※更に割引あり)

TechAcademy 無料相談

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

キカガク 無料相談

ミニプロジェクト(提出推奨)

課題:「乱数で合成した売上データ(10000行)に対し、外れ値クリップ→月次合計→前年比NumPyのみで計算し、pandasでExcelに書き出す」

  1. rng = np.random.default_rng(42)で乱数生成。
  2. ym(YYYY-MM)をchoiceで作り、qty×priceで売上を生成。
  3. percentile/IQRで外れ値をクリップ。
  4. unique==のブロードキャストで月次合計を計算(for禁止)。
  5. 前年比を計算し、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/percentilenan*系も)
  • 条件: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 点セットブロードキャスト を身体化。
  • 迷ったら ベクトル化axisdtype を意識するだけで 速く壊れにくい 前処理になる。
  • 乱数・線形代数は 最小限の道具 を安全運用。再現性と安定性 が現場の信頼につながります。

この記事から次に読むべきもの(内部リンク)

スキルアップ
【保存版】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
はじめてのSQL:SELECT/WHERE/GROUP BYを最短で理解【コピペOK】

データ分析・自動レポート・簡易アプリの土台はSQLです。Pythonだけで押し切るより、前処理の7割をDB側で完結させる方が速く・安定します。本記事は、未経験〜初 学者が週10時間×2〜3週で、SEL ...

最近のコメント

    • この記事を書いた人
    • 最新記事

    ふみと

    このブログでは、データサイエンティストとして市場価値を上げる方法を独自にまとめて発信しています。

    【プロフィール】
    ・大手企業データサイエンティスト/マーケティングサイエンティスト(10年、年収900万円台)/案件100件以上
    ・資格:JDLA E資格(日本ディープラーニング協会主催)/JDLA Community(CDLE会員)/Advanced Marketer/ビジネス統計スペシャリスト/統計検定2級/TOEIC 805
    ・スキル:Python/Tableau/SQL/機械学習/Deep Learning/RPA

    -Python基礎