1. import の3つの書き方
モジュールとは、関数や定数などをまとめた「機能の部品箱」です。
Python には標準で多くのモジュールが用意されており(標準ライブラリ)、
import で読み込むだけですぐに使えます。
自分でファイルを作って独自のモジュールにすることもできます。
モジュールを読み込む方法は主に3つあり、それぞれ呼び出し方と使いどころが異なります。
-
import モジュール名— モジュール全体を読み込む。使う際はmath.sqrt()のように「モジュール名.関数名」で呼び出す。 どのモジュールの関数かが一目でわかり、名前の衝突が起きにくいため、最も安全な書き方。 -
from モジュール名 import 関数名— 特定の関数・クラスだけを取り込む。sqrt(2)のようにモジュール名なしで直接呼べるため簡潔。 ただし同名の変数・関数が別に定義されていると上書きされてしまうリスクがある。 -
import モジュール名 as 別名— モジュールに短いエイリアスをつける。import numpy as npのように長い名前を短縮でき、 毎回フルネームを書く手間が省ける。AI/MLの世界では事実上の標準として定着している。
PyTorchやNumPyを使う際も import torch、import numpy as np と書くだけで
膨大な機能が使えます。
💡 エイリアスはなぜ使う?
numpy のような長い名前を毎回フルネームで書くのは面倒で、打ち間違いの原因にもなります。
import numpy as np と宣言することで、以降は np.array([1, 2, 3]) と
短く書けるようになります。
また、これらの略名は世界中のコードで「公式の慣例」として統一されているため、
他の人が書いたコードを読む際も np = numpy、pd = pandas と即座に判断できます。
import numpy as np # np が業界標準 import pandas as pd # pd が業界標準 import matplotlib.pyplot as plt # plt が業界標準 import torch # torch はそのまま(元から短いため) import torch.nn as nn # nn が業界標準
2. math モジュール
math は数学関数・定数を提供する標準ライブラリです。
sqrt()(平方根)、log()(自然対数)、exp()(指数関数)、
ceil()(切り上げ)、floor()(切り捨て)などが使えます。
NumPy が使えない環境や、単純な数値計算には math が手軽です。
なお、math はスカラー値(1つの数値)にしか使えません。
リストや配列にまとめて適用したい場合は、のちに学ぶ NumPy の方が適しています。
💡 {z:+d} のフォーマット指定子について:
f-string の : 以降はフォーマット指定子です。d は整数として表示、+ は正の数にも符号を付けることを意味します。
z = 3 → f"{z:+d}" → "+3" (+ が付く)
z = 0 → f"{z:+d}" → "+0" (0 にも + が付く)
z = -3 → f"{z:+d}" → "-3" (負は通常どおり - が付く)
# 符号を揃えて縦に並べると視覚的に読みやすくなる
💡 シグモイド関数について:
シグモイド関数 σ(z) = 1 / (1 + e−z) は、どんな実数値でも 0〜1 の範囲に収める関数です。
出力を「確率」として解釈できるため、ニューラルネットワークの二値分類問題(陽性/陰性、病変あり/なし)の
最終層でよく使われます。
z が大きいほど 1(陽性)に近づき、小さいほど 0(陰性)に近づきます。z = 0 のとき出力はちょうど 0.5 です。
3. random モジュール
random は乱数生成・シャッフル・サンプリングができる標準ライブラリです。
機械学習では train/test データの分割、バッチのサンプリング、データ拡張(ランダムな回転・反転など)でよく使います。
重要なのが random.seed() による「シードの固定」です。
seed 値が同じならプログラムを何度実行しても同じ乱数列が生成されるため、
「再現性」が確保されます。機械学習ではデータ分割が実行ごとに変わるとモデル評価が変動するため、
seed の固定は必須の習慣です。
4. datetime モジュール
datetime は日付・時刻の生成・計算・フォーマット変換ができる標準ライブラリです。
患者の年齢計算・入院日数・次回受診日の算出・ログのタイムスタンプ管理でよく使います。
主なクラスは3つです。
date は年月日のみ(時刻なし)、
datetime は年月日+時分秒、
timedelta は「2つの日時の差」や「N日間」という期間を表します。
date - date や datetime - datetime の演算結果は timedelta になります。
💡 timedelta の詳細:
timedelta は「日時の差」や「一定期間」を表すオブジェクトです。
日付の加減算に使えます。
from datetime import date, timedelta delta = timedelta(days=30) # 30日間 delta = timedelta(weeks=2) # 2週間(= 14日) delta = timedelta(days=1, hours=6, minutes=30) # 複数単位の組み合わせも可 # 日時 ± timedelta で未来・過去の日付を計算 date(2026, 5, 1) + timedelta(days=30) # → 2026-05-31 date(2026, 5, 1) - timedelta(days=7) # → 2026-04-24 # timedelta のプロパティ diff = date(2026, 5, 19) - date(2026, 4, 1) diff.days # → 48 (日数の整数部分) diff.seconds # → 0 (秒の端数。通常は date - date では 0) diff.total_seconds() # → 4147200.0 (全体を秒換算した合計)
.days だけ使えばほぼ事足りますが、時分秒まで含む datetime 同士の差では
.total_seconds() で「総秒数」を取り出すと計算に便利です。
5. 練習問題
mathで標準偏差を計算する
以下の SpO2 データについて、math.sqrt() を使って標準偏差を計算してください。標準偏差 = √(分散)、分散 = Σ(x - mean)² / n
ヒントを見る(答え+解説)
import math
spo2_data = [98, 97, 96, 99, 95, 94, 98, 97, 96, 99]
mean = sum(spo2_data) / len(spo2_data)
variance = sum((x - mean)**2 for x in spo2_data) / len(spo2_data)
std = math.sqrt(variance)
print(f"データ: {spo2_data}")
print(f"平均: {mean:.2f}%")
print(f"標準偏差: {std:.2f}%")
# → 平均: 96.90% / 標準偏差: 1.51%
ジェネレータ式 sum((x - mean)**2 for x in spo2_data) で偏差の二乗和を一行で計算し、math.sqrt() で平方根を取ります。NumPy を使えば np.std() で一発ですが、ここで計算手順を理解しておくのが大切です。
randomでトレーニングデータをサンプリング
20件の患者IDリスト(P001〜P020)から、seed=123でシャッフルして先頭80%をtrain、残り20%をtestに分割してください。
ヒントを見る(答え+解説)
import random
patient_ids = [f"P{i:03d}" for i in range(1, 21)]
random.seed(123)
shuffled = patient_ids.copy()
random.shuffle(shuffled)
split = int(len(shuffled) * 0.8)
train = shuffled[:split]
test = shuffled[split:]
print(f"全体: {len(patient_ids)}件")
print(f"train: {len(train)}件 → {train}")
print(f"test: {len(test)}件 → {test}")
# → train: 16件 / test: 4件
random.seed() でランダムの初期値を固定すると再現性が確保できます。copy() で元リストを保持しつつ shuffle() で順番を変え、スライスで分割するパターンは機械学習のデータ分割でよく使います。
datetimeで入院日数を計算する
入院日と退院日から入院日数を計算し、退院から30日後のフォローアップ日も表示してください。
ヒントを見る(答え+解説)
from datetime import date, timedelta
admission_str = "2026-04-15"
discharge_str = "2026-05-03"
admission = date.fromisoformat(admission_str)
discharge = date.fromisoformat(discharge_str)
stay_days = (discharge - admission).days
followup = discharge + timedelta(days=30)
print(f"入院日: {admission}")
print(f"退院日: {discharge}")
print(f"入院日数: {stay_days}日間")
print(f"フォローアップ日: {followup}")
# → 入院日数: 18日間 / フォローアップ日: 2026-06-02
date - date の差は timedelta オブジェクトになり、.days で日数を取り出せます。+ timedelta(days=30) で指定日数後の日付を計算できます。
まとめ
このレッスンのポイント
import モジュール名/from モジュール import 関数/import モジュール as 別名math: sqrt/log/exp/ceil/floor/pi/e — 数値計算の基本random: seed/shuffle/sample/choice/random — データ分割・サンプリングdatetime: date.today/timedelta/strptime/strftime — 日付計算・フォーマット- 次は
import numpy as np(L19)、その先はimport torchへ
自由に試してみましょう:
完了するとトップページに進捗が表示されます
