日別平均水蒸気圧と熱中症搬送人員との相関を可視化する

 熱中症の搬送人員と最高気温との相関関係を可視化し閾値をχ二乗検定するでは最高気温と搬送人員との相関関係を解析した.今回は水蒸気圧と搬送人員との関係を可視化し,閾値を求めた.重症度別の搬送人員についての検討は日平均蒸気圧と熱中症の重症度別搬送人員との関連を調べるに記述した.

過去の気象データ・ダウンロード

 データはここからダウンロードする.手順は日別最高気温のデータをダウンロードするを参照されたい.違いは『項目を選ぶ』で日平均蒸気圧をチェックすることである.

項目を選ぶで『日平均蒸気圧』を選ぶ
項目を選ぶで『日平均蒸気圧』を選ぶ

 2008 年から 2020 年までの5月1日から9月30日までの csv データを 1 ファイルずつダウンロードし,ファイル名を2008.csv など分かりやすいものに変更しておく.『表示オプションを選ぶ』で『都道府県名を格納(CSVファイルダウンロード実行時)』にチェックを入れるのを忘れないようにする.

データクレンジング

メモ帳でデータを修正

 メモ帳で先頭の2行を削除し,保存する.

メモ帳で先頭の2行を削除
メモ帳で先頭の2行を削除

Power Query で一括インポート

 データクレンジングで述べたように EXCEL の Power Query を用いて 2008 年から 2020 年までの csv ファイルを読み込む.

 抽出されたテーブルをテキストファイルで保存する.ファイル名を T_平均水蒸気圧.txt とする.

SQL Server での結合

 ウィザードを用いて T_平均水蒸気圧.txt をインポートする.テキストファイルから SQL Server に気象データをインポートするを参考にされたい.

結果

最高気温と平均水蒸気圧

 最高気温を横軸に,平均水蒸気圧を縦軸に,重症度別にプロットした散布図である.全体として右肩上がりの分布を示しており,右肩に行くほど重症化しているように見える.

 飽和水蒸気圧が気温に正相関することは理解しておく必要がある.

最高気温と平均水蒸気圧
最高気温と平均水蒸気圧

クエリ

 上図を描くのに用いたクエリは下記の通り.

USE EMERGENCYDB;
GO
SELECT	'軽症'	AS '重症度'
	,	T.日別最高気温
	,	M.平均水蒸気圧
FROM	dbo.Emergency AS E
INNER	JOIN	dbo.Temperature	AS T
ON	E.日付	= T.年月日
AND	E.都道府県コード = T.都道府県コード
INNER	JOIN dbo.T_平均水蒸気圧	AS M
ON	E.日付 = M.年月日
AND	E.都道府県コード = M.都道府県コード
WHERE	E.軽症 > 0

UNION

SELECT	'中等症'
	,	T.日別最高気温
	,	M.平均水蒸気圧
FROM	dbo.Emergency AS E
INNER	JOIN	dbo.Temperature	AS T
ON	E.日付	= T.年月日
AND	E.都道府県コード = T.都道府県コード
INNER	JOIN dbo.T_平均水蒸気圧	AS M
ON	E.日付 = M.年月日
AND	E.都道府県コード = M.都道府県コード
WHERE	E.中等症 > 0

UNION

SELECT	'重症'
	,	T.日別最高気温
	,	M.平均水蒸気圧
FROM	dbo.Emergency AS E
INNER	JOIN	dbo.Temperature	AS T
ON	E.日付	= T.年月日
AND	E.都道府県コード = T.都道府県コード
INNER	JOIN dbo.T_平均水蒸気圧	AS M
ON	E.日付 = M.年月日
AND	E.都道府県コード = M.都道府県コード
WHERE	E.重症 > 0

UNION

SELECT	'死亡'
	,	T.日別最高気温
	,	M.平均水蒸気圧
FROM	dbo.Emergency AS E
INNER	JOIN	dbo.Temperature	AS T
ON	E.日付	= T.年月日
AND	E.都道府県コード = T.都道府県コード
INNER	JOIN dbo.T_平均水蒸気圧	AS M
ON	E.日付 = M.年月日
AND	E.都道府県コード = M.都道府県コード
WHERE	E.死亡 > 0

平均水蒸気圧と搬送人員

 平均水蒸気圧を横軸に,搬送人員を縦軸にプロットした散布図である.EXCEL の散布図で可視化する同様,指数関数的増加傾向を示しているように見える.

平均水蒸気圧と搬送人員
平均水蒸気圧と搬送人員

閾値を求めたい

 単調増加であるなら,ROC 曲線を描いて閾値を求めることができる.そのため,超幾何分布を取る四分表を調べていく.

ストアドプロシージャの作成

 下記のクエリを実行してストアドプロシージャを作成する.

CREATE PROCEDURE VaporPressure 
	@VaporPressure int 
AS
BEGIN
	SET NOCOUNT ON;
SELECT	@VaporPressure	AS '閾値'
,	SUM(CASE WHEN E.[搬送人員(計)] > 0 AND W.平均水蒸気圧 >= @VaporPressure	THEN 1 ELSE 0 END) AS 'a'
,	SUM(CASE WHEN E.[搬送人員(計)] = 0 AND W.平均水蒸気圧 >= @VaporPressure	THEN 1 ELSE 0 END) AS 'b'
,	SUM(CASE WHEN E.[搬送人員(計)] > 0 AND W.平均水蒸気圧 < @VaporPressure	THEN 1 ELSE 0 END) AS 'c'
,	SUM(CASE WHEN E.[搬送人員(計)] = 0 AND W.平均水蒸気圧 < @VaporPressure	THEN 1 ELSE 0 END) AS 'd'
,	SUM(CASE WHEN E.[搬送人員(計)] > 0					THEN 1 ELSE 0 END) AS 'a+c'
,	SUM(CASE WHEN E.[搬送人員(計)] = 0					THEN 1 ELSE 0 END) AS 'b+d'
,	SUM(CASE WHEN				W.平均水蒸気圧 >= @VaporPressure	THEN 1 ELSE 0 END) AS 'a+b'
,	SUM(CASE WHEN				W.平均水蒸気圧 < @VaporPressure	THEN 1 ELSE 0 END) AS 'c+d'
,	COUNT(*)										AS 'N'
FROM	dbo.Emergency	AS E
INNER	JOIN	dbo.T_平均水蒸気圧	AS	W
ON	E.日付 = W.年月日
AND	E.都道府県コード = W.都道府県コード
END
GO

ストアドプロシージャを実行する

 下図のようにストアドプロシージャを実行する.今回はパラメーター @VaporPressure に値 15 から 40 までを 1 ずつ増加させて実行した.

ストアドプロシージャを実行する
ストアドプロシージャを実行する
ストアドプロシージャに引数を代入して実行する
ストアドプロシージャに引数を代入して実行する

ROC曲線

 得られた結果をEXCELにコピペして感度と特異度を求め,1 – 特異度を横軸に,感度を縦軸に散布図を描く.24 hPa を閾値として設定すると,感度は 0.63, 特異度は 0.75 である.

ROC曲線
ROC曲線

結果の解釈

 湿度とは相対湿度のことであり,水蒸気圧のその気温での飽和水蒸気圧に対する百分率であり,気温に影響を受ける.一方で水蒸気圧は飽和水蒸気圧を上限とするため,やはり気温の制約を受ける.そのため,水蒸気圧は気温との多重共線性が問題となる.最高気温と平均水蒸気圧の項でも述べたが,気温と水蒸気圧とは正の相関があるため,平均水蒸気圧の増加に伴い搬送人員が増加しているのは,最高気温の高さを交絡として観察しているだけの可能性もある.平均水蒸気圧が独立危険因子なのか否かは,多変量解析を行ってみないと分からない.

“日別平均水蒸気圧と熱中症搬送人員との相関を可視化する” への1件の返信

コメントを残す

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

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