都道府県別の熱中症搬送人員数の予測と実際をEXCELの組み合わせグラフで描く

 前回の記事では2019年の都道府県別の熱中症搬送人員数を1枚のグラフで描いた.今回は都道府県別に2008年から2021年までの熱中症搬送人員数の予測と実際をEXCELの組み合わせグラフで描く.

 Heat-related mortality: a review and exploration of heterogeneityというレビューでは人口密度が高いほど熱の影響が大きいことが示されている.その理由として高度に設計された環境では蓄熱量が大きく,換気が悪く,自動車やエアコン等の熱源が局在するいわゆる都市のヒートアイランド現象が起きているためであると説明している.

 それを受けて,詳細は割愛するが,都道府県総人口をその可住地面積(e-Statより)で割った人口密度を投入してみた.するとその係数は大きさこそ小さいものの,符号は負となり,投入前よりもAICが改善した(488368->478801).人口密度が大きいほど搬送数が減少するという意味である.これはにわかには信じがたい.考えられる理由として,日本においては人口密度の高い都市部ほど空調導入率が高い可能性がある.しかし,空調導入率そのものの指標がないため,検証は困難である.

データ

 データは前回同様SQL Serverからクエリで抽出する.抽出結果をヘッダーごとコピーしてEXCELに貼り付け,テーブルに変換する.

USE HeatStrokeDB;
GO
SELECT	YEAR(T.年月日)	AS YEAR
,	MONTH(T.年月日)	AS MONTH
,	T.年月日	AS DATE
,	H.都道府県コード	AS PrefCode
,	T.都道府県	AS Pref
,	T.日最高気温	AS TEMP
,	V.日平均蒸気圧	AS VAPOR
,	P.総人口	AS POP
,	P.[65歳以上人口]	AS POP65
,	P.人口密度 AS DENSITY
,	H.[搬送人員(計)]	AS NUM
,	CAST(EXP(-21.41 
			+ 0.2760 * T.日最高気温 
			+ 0.07337 * V.日平均蒸気圧 
			- 0.9215 * (1/(1 + EXP(16 - 2 * MONTH(T.年月日)))) 
			- 0.00004231 * P.人口密度 
			+ LOG(P.[65歳以上人口]))	AS int)	AS MODEL
FROM	dbo.T_HeatStroke AS H
INNER JOIN	dbo.T_MaxTemperature	AS T
ON	H.都道府県コード = T.都道府県コード
AND	H.日付 = T.年月日
INNER JOIN	dbo.T_VaporPressure	AS V
ON	H.都道府県コード = V.都道府県コード
AND	H.日付 = V.年月日
INNER JOIN	dbo.T_PopulationDensity	AS P
ON	H.都道府県コード = P.都道府県コード
AND	YEAR(H.日付) = P.調査年
ORDER BY PrefCode, DATE

EXCEL VBAでの処理

 下記コードを実行する.

Sub makechart()

Dim mySh1   As Worksheet
Dim mySh2   As Worksheet

Dim myLstObj As ListObject

Dim h       As Long
Dim myRng1  As Range
Dim i       As Long
Dim Cht     As Chart

Dim j       As Long
Dim myXValue()  As Date
Dim myValue1()  As Integer
Dim myValue2()  As Integer

Dim SeriesM As Series
Dim SeriesR As Series
Dim myPref  As String

Set mySh1 = Worksheets("Sheet1")
Set myLstObj = mySh1.ListObjects(1)

For h = 1 To 47

Set mySh2 = Worksheets.Add

With mySh2
    For i = 2008 To 2021
        Set Cht = .Shapes.AddChart2(XlChartType:=xlColumnClustered, _
                                           Left:=200 * ((i - 2008) Mod 4), _
                                            Top:=200 * ((i - 2008) \ 4), _
                                          Width:=200, _
                                         Height:=200).Chart
        With myLstObj
            .Range.AutoFilter field:=4, Criteria1:=h
            .Range.AutoFilter field:=1, Criteria1:=i
            Set myRng1 = Intersect(.DataBodyRange, _
                                   .Range.SpecialCells(xlCellTypeVisible))
            myPref = myRng1.Cells(1, 5)
            For j = 0 To myRng1.Rows.Count - 1
                ReDim Preserve myXValue(j)
                ReDim Preserve myValue1(j)
                ReDim Preserve myValue2(j)
                
                myXValue(j) = myRng1.Cells(j + 1, 3)
                myValue1(j) = myRng1.Cells(j + 1, 12)
                myValue2(j) = myRng1.Cells(j + 1, 11)
            Next j
            Set SeriesM = Cht.SeriesCollection.NewSeries
            With SeriesM
                .Name = "Model"
                .XValues = myXValue
                .Values = myValue1
                .ChartType = xlLine
                .Format.Line.Weight = 1#
                '.Format.Line.ForeColor.ObjectThemeColor = msoThemeColorAccent2
            End With
            Set SeriesR = Cht.SeriesCollection.NewSeries
            With SeriesR
                .Name = "Real"
                .XValues = myXValue
                .Values = myValue2
                .ChartType = xlColumnClustered
            End With
            .Range.AutoFilter field:=1
            .Range.AutoFilter field:=4
        End With
        With Cht
            .HasTitle = True
            .ChartTitle.Caption = i
            .ChartGroups(1).GapWidth = 0
        End With
    Next i
    .Name = myPref
End With
Next h
End Sub

結果

北海道

北海道
北海道

青森県

青森県
青森県

岩手県

岩手県
岩手県

宮城県

宮城県
宮城県

秋田県

秋田県
秋田県

山形県

山形県
山形県

福島県

福島県
福島県

茨城県

茨城県
茨城県

栃木県

栃木県
栃木県

群馬県

群馬県
群馬県

埼玉県

埼玉県
埼玉県

千葉県

千葉県
千葉県

東京都

東京都
東京都

神奈川県

神奈川県
神奈川県

新潟県

新潟県
新潟県

富山県

富山県
富山県

石川県

石川県
石川県

福井県

福井県
福井県

山梨県

山梨県
山梨県

長野県

長野県
長野県

岐阜県

岐阜県
岐阜県

静岡県

静岡県
静岡県

愛知県

愛知県
愛知県

三重県

三重県
三重県

滋賀県

滋賀県
滋賀県

京都府

京都府
京都府

大阪府

大阪府
大阪府

兵庫県

兵庫県
兵庫県

奈良県

奈良県
奈良県

和歌山県

和歌山県
和歌山県

鳥取県

鳥取県
鳥取県

島根県

島根県
島根県

岡山県

岡山県
岡山県

広島県

広島県
広島県

山口県

山口県
山口県

徳島県

徳島県
徳島県

香川県

香川県
香川県

愛媛県

愛媛県
愛媛県

高知県

高知県
高知県

福岡県

福岡県
福岡県

佐賀県

佐賀県
佐賀県

長崎県

長崎県
長崎県

熊本県

熊本県
熊本県

大分県

大分県
大分県

宮崎県

宮崎県
宮崎県

鹿児島県

鹿児島県
鹿児島県

沖縄県

沖縄県
沖縄県

まとめ

 都道府県別の2008年から2019年の熱中症搬送人員数の予測と実際をEXCELの組み合わせグラフで描いた.モデルに投入しなかった変数が予測と実際の乖離をもたらしていると考えているが,その推定は容易ではない.地形は都道府県ごとに固定されているが,その違いの影響を定量的に評価するには困難を伴う.特に北海道は一つの単位として扱うには広大すぎる.また気候の影響は最高気温と平均水蒸気圧で代表させるには少なすぎるのかもしれない.空間異質性を推定できる空間統計を併用する必要性を感じている.さらに人体側では暑熱馴化,その日に限定されたイベントなど,特殊な事情が誤差を発生させている可能性もある.

 とは言え,回帰式の内部に都道府県人口(あるいは65歳以上人口)をオフセット項として導入したことで,異なる人口規模の都道府県に対してある程度普遍性のある一つの回帰式を提示できるようになった意義は大きい.さらなる拡張として,二次医療圏ごとや消防署の管区ごとの人口をオフセット項として投入することで,より小さな単位での熱中症搬送人員数を予測できる可能性がある.そのためにはより詳細な地域単位での搬送人員数の統計が必要である.

 熱中症搬送人員数の予測は一筋縄ではいかない.しかし少なくとも都道府県別に予測式を組み立てることは無駄ではないと思われる.市区町村別の搬送人員数の集計を総務省消防庁には希望したい.しかし労働人口は市区町村を超えて勤務していることが予想され,出動する消防署と収容される医療機関との地域差がさらなる誤差を生み出す可能性を考慮すると,現在の都道府県別の集計にはある程度の合理性があるのかもしれない.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください