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

 熱中症の搬送人員と最高気温との相関関係を可視化し閾値をχ二乗検定するでは最高気温と搬送人員との相関関係を解析した.今回は水蒸気圧と搬送人員との関係を可視化し,閾値を求めた.

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

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

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

 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曲線

結果の解釈

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

コメントを残す

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

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