気象庁の40年分データで「暖冬 × 大雪の矛盾」を検証した。
結論は2つ同時に成立する:平均的な雪は減っている。それでも大雪の印象は強くなっている。
はじめに
「最近は暖冬になったよね。でも毎年どこかでドカ雪のニュースを見る気がする」
この違和感を持っている人は多いと思う。実際どうなのか、気象庁の日次観測データ(47都道府県・1981〜2024年)で検証してみた。
答えは3つのQに分けると整理しやすい。
- Q1. 暖冬になっているのか? → YES(データで明確)
- Q2. 雪は増えているのか? → NO(むしろ大幅に減少)
- Q3. なぜ大雪の印象が強いのか? → ここが一番面白かった
この記事は気象データ分析シリーズの冬版です。
データと分析手法
使用データは3種類。
① 冬日・真冬日数(日次データから集計)
気象庁 daily_s1.php から冬季(12〜2月)の日次気温を取得。
- 冬日:日最低気温 < 0℃
- 真冬日:日最高気温 < 0℃(終日氷点下)
② 年間降雪合計・最深積雪(年次統計)
気象庁 annually_s.php から取得。
- 年間降雪合計(cm):その冬に降った雪の総量
- 最深積雪(cm):その年の最大積雪深。交通マヒの代理指標。
③ 地域分類
- 日本海側:新潟・富山・石川・福井・秋田・山形・北海道など13県
- 太平洋側:東京・宮城・静岡・高知など
- 内陸積雪:長野・群馬・山梨・岐阜・栃木
import requests, pandas as pd
from io import StringIO
def fetch_snow(prec_no, block_no):
"""annually_s.php から降雪データを取得(修正版)"""
url = (f"https://www.data.jma.go.jp/stats/etrn/view/annually_s.php"
f"?prec_no={prec_no}&block_no={block_no}&year=&month=&view=p1")
r = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=30)
html = r.content.decode("shift-jis", errors="replace")
t = pd.read_html(StringIO(html))[0]
t.columns = [f"c{i:02d}" for i in range(t.shape[1])]
return pd.DataFrame({
"year": pd.to_numeric(
t["c00"].astype(str).str.extract(r"(\d{4})", expand=False), # expand=False が重要
errors="coerce"),
"snow_total": pd.to_numeric(t.iloc[:, 21].values.ravel(), errors="coerce"),
"snow_depth": pd.to_numeric(t.iloc[:, 23].values.ravel(), errors="coerce"),
}).dropna(subset=["year"]).query("1981 <= year <= 2025")
expand=False が必要な理由
Series.str.extract() はデフォルトで DataFrame を返す(1列でも)。
expand=False を指定して Series にしないと、後続の数値変換でエラーになる。
Q1: 暖冬になっているのか?
全国平均 冬日数の変化
| 期間 | 冬日数(全国平均) | 変化 |
|---|---|---|
| 1981〜1990年 | 約40日/年 | ─ |
| 2020〜2024年 | 約24日/年 | −40% |
40年で冬に氷点下になる夜が4割減った。
都道府県別では近畿が最大

図1:都道府県別 冬日数変化量ランキング(1981-1990 → 2020-2024)
1位の奈良(−21.8日)を筆頭に、全47都道府県で冬日数は減少している(p<0.001 ***)。
Q1の答え:YES、暖冬化は全国的に進行している。
Q2: 雪は増えているのか?
地域別 年間降雪合計の変化
| 地域 | 1981〜1990年 | 2015〜2024年 | 変化 |
|---|---|---|---|
| 日本海側 | 278cm | 185cm | −93cm(−33%) |
| 太平洋側 | 46cm | 52cm | +6cm |
| 内陸積雪 | 62cm | 40cm | −22cm |
「雪の本場」の日本海側が3割以上も減少している。
最深積雪(積もった最大値)も同様の傾向だ。
| 地域 | 1981〜1990年 | 2015〜2024年 |
|---|---|---|
| 日本海側 | 55cm | 42cm |
| 内陸積雪 | 16cm | 12cm |

図2:年間降雪合計・最深積雪の推移(日本海側・太平洋側・内陸)
Q2の答え:NO、降雪量はむしろ大幅に減少している。
Q3: なぜ大雪の印象が強いのか?
Q1もQ2も答えは明快だった。
- 暖冬化している
- 雪は減っている
ではなぜ、多くの人は「最近ドカ雪が増えた」と感じるのだろうか。
そこで北陸4県の積雪を年ごとに追ってみた。
北陸4県(新潟・富山・石川・福井)の最深積雪を年ごとに見ると

図3:北陸4県 平均最深積雪の年次推移と変動係数(1981〜2025年)
上パネルの棒グラフで、赤棒(80cm超え)に注目してほしい。
1980年代:1981・1984・1985・1986年が80cm超え。10年で4回。
1990〜2000年代:大雪年ゼロ。静かな20年。
2018年:北陸4県平均99.5cm。福井では147cm(交通大マヒ)。
2021年:北陸4県平均91cm。新潟・長野で関越道立ち往生。
変動係数(下パネル)に注目
変動係数(CV = 標準偏差 ÷ 平均 × 100)は「データのばらつき度」を示す。高いほど年ごとの差が大きい。
| 時代 | 平均最深積雪 | 変動係数 | 大雪年(80cm+) |
|---|---|---|---|
| 1980年代 | 68cm | 53% | 4年/10年 |
| 1990年代 | 39cm | 34% | 0年/10年 |
| 2000年代 | 41cm | 48% | 0年/10年 |
| 2010年代 | 42cm | 70% | 1年/10年 |
| 2021〜24 | 53cm | 48% | 1年/4年 |
2010年代の変動係数70%は全時代で最高。 平均は1980年代より低いのにばらつきが最大になっている。
「ドカ雪が増えた気がする」の正体
以下のような変化が起きている。
1980年代の北陸の冬(最深積雪):
80, 90, 100, 70, 110, 85, 95 cm ...
→ 毎年多雪。「雪国の日常」として認識。
→ 多少の大雪はニュースにならない。
2010年代の北陸の冬(最深積雪):
20, 25, 30, 120, 18, 22, 90 cm ...
→ 平均は激減。ほとんどの年は少ない。
→ 120cmの年→交通マヒ→大ニュース
→ 90cmの年→「また来た」→大ニュース
平均が下がったことで、極端な年が「異常」として目立つようになった。
人間の記憶に残るのは平均ではなく例外的な出来事。1980年代は大雪が日常だったため記憶に残らなかったが、今は「普段は少ない」という基準が下がったため、同じレベルの大雪が強烈な印象を与える。
まとめ
3つのQへの答えを整理する。
Q1. 暖冬になっているか?
→ YES。冬日数は全国平均で40%減少。全47都道府県で有意な減少。
Q2. 雪は増えているか?
→ NO。日本海側の降雪量は−33%。最深積雪も全地域で減少傾向。
Q3. なぜ大雪の印象が強いのか?
→ 「平均が下がったから極値が目立つ」逆説。
北陸の変動係数は2010年代に70%と過去最高。ほとんどの冬は少雪だが、大雪の年が突然やってくる。少ない年が増えたぶん、大雪年のギャップが拡大し記憶に残りやすくなった。
シリーズ全体のまとめ
このシリーズで見えてきたのは「人間の直感とデータのズレ」だ。
| 記事 | 直感 | データ |
|---|---|---|
| 第1作 | 東京が一番暑くなったはず | 香川が1位だった |
| 第2作 | 温暖化はずっと進んでいた | 1998〜2010に停滞期があった |
| 第3作 | 暖冬なのに大雪が増えた | 降雪は減ったが変動が拡大した |
3作とも 「調べたら想定と違った、でもその違いが面白かった」 という構造になっている。
データ分析をしていると、「常識が間違っていた」よりも、「常識は半分正しかった」が一番面白い。
今回の「暖冬なのに大雪」も、まさにそういうケースだった。
気候変動は単純な「暑くなる・寒くなる」の話ではない。平均と極端現象、そして人間の記憶が重なることで、私たちはしばしば実際とは違う景色を見ている。
変動係数の計算
def calc_cv(series):
"""変動係数(%) = 標準偏差 / 平均 × 100"""
return series.std() / series.mean() * 100
分析期間: 1981〜2024年 / 47都道府県代表観測所 / データ: 気象庁