高校の探究学習や、大学入試の総合型選抜で、「自分でテーマを立てて、データで検証する」力が求められる時代になりました。今回は Python とオープンデータを使って、本格的な研究プロセスを最後まで通します。
研究の5ステップ
テーマ例:気温と熱中症搬送数の関係
「気温が高い日ほど熱中症で搬送される人が多い」という仮説を検証してみよう。
- 1問い: 気温が何度を超えたら熱中症が急増するのか?
- 2仮説: 30度を超えるあたりから指数関数的に増える
- 3データ: 気象庁の気温データ + 消防庁の熱中症搬送データ
- 4分析: 散布図 + 回帰分析
- 5発表: グラフ + 考察 + 提案
気温と搬送数の散布図(サンプルデータ)
Python
import numpy as npimport matplotlib.pyplot as pltimport pandas as pd
# サンプルデータ(実際は気象庁・消防庁から取得)data = { "max_temp": [25, 26, 28, 30, 31, 33, 35, 36, 37, 38, 39], "heatstroke_count": [5, 8, 12, 25, 40, 80, 150, 220, 350, 500, 720],}df = pd.DataFrame(data)
# 散布図 + 回帰plt.figure(figsize=(10, 6))plt.scatter(df["max_temp"], df["heatstroke_count"], s=80, alpha=0.7)
# 二次回帰coef = np.polyfit(df["max_temp"], df["heatstroke_count"], 2)x_smooth = np.linspace(25, 39, 100)y_smooth = coef[0] * x_smooth**2 + coef[1] * x_smooth + coef[2]plt.plot(x_smooth, y_smooth, "r--", label=f"二次フィット: y = {coef[0]:.1f}x² + {coef[1]:.1f}x + {coef[2]:.1f}")
plt.xlabel("最高気温 (°C)")plt.ylabel("熱中症搬送数")plt.title("気温と熱中症搬送数の関係")plt.legend()plt.grid(True, alpha=0.3)plt.show()
print(f"相関係数: {np.corrcoef(df['max_temp'], df['heatstroke_count'])[0,1]:.3f}")
公開データの入手先
| 分野 | サイト | 取得形式 |
|---|---|---|
| 気象 | 気象庁データダウンロードサービス | |
| 人口・統計 | (政府統計) | / CSV |
| 地域経済 | API | |
| 医療・健康 | 厚生労働省 オープンデータ | CSV / Excel |
| 環境 | 国立環境研究所 データバンク | CSV |
| 天文 | NASA Exoplanet Archive | CSV / VOTable |
を「研究の助手」として使う
prompt:研究の方針相談
高校2年生で、探究学習のテーマに「うちの市の通学路の信号機の効率」を選びました。
ガジェットや特別な機材なしに、Pythonとオープンデータでできる分析プランを5つ提案してください。
それぞれについて:
- 使うデータソース
- 分析手法
- 想定される結論
- 発表のスライド構成案
を出してください。論文未満・自由研究以上のレベル感でお願いします。 想定される実行結果(例示)
素晴らしいテーマです!5案を提案します。
## 案1: 信号待ち時間の分布分析
- データ: 自分で計測した(スマホで時間を測る、最低200回)
- 分析: ヒストグラム、平均、中央値、95%tile
- 結論候補: 「平均は40秒だが95%tileは120秒、最悪が突出」
- スライド: 計測方法 / グラフ / 考察 / 改善提案
## 案2: 交通量と信号サイクルの整合性
- データ: 国土交通省「道路交通センサス」
- 分析: 時間帯別交通量 vs 信号青時間の比較
- 結論候補: 「朝7-8時の交通量に対し青時間が短すぎる」
- スライド: データソース / 比較表 / 提案
## 案3: 気象と歩行者待ちの関係
- データ: 気象庁データ + 自分の観察ログ
- 分析: 雨の日と晴れの日で待ち時間体感が違うか
- 結論候補: 「雨でも待ち時間は同じだが、体感的には2倍」
- スライド: 主観 vs 客観
## 案4: 信号タイミング最適化シミュレーション
- データ: 自分の観察 + 仮想シナリオ
- 分析: Python シミュレーションで「サイクルを変えたら平均待ち時間がどう変わるか」
- 結論候補: 「現行60秒サイクルを75秒にすると平均が15%減」
- スライド: シミュレーションコード / 結果 / 提案
## 案5: 他都市との比較
- データ: e-Stat(人口)+ 自分の観察 + 他市役所への問合せ
- 分析: 人口あたり信号機数の比較
- 結論候補: 「うちの市は隣市より信号機が30%多い」
- スライド: データ表 / 散布図 / 政策提案
→ 案4がコード重視で、案2が政策提案として強いです!発表のコツ
- 最初に結論を1行で(「気温30度を超えると熱中症は指数関数的に増える」)
- 1スライド1メッセージ
- 散布図 + 回帰直線は最強の説得材料
- 生データの一部を必ず見せる(透明性の確保)
- 「もし〜だったら」のシミュレーションで実用性を訴える
次回予告
EP.07 から、より発展的なテーマへ。まずは入門。scikit-learn でアヤメの品種を分類する古典的タスクから。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。