熱中症の重症度別搬送人員数を最高気温と平均湿度別にプロットする

気温・湿度別の重症度別搬送人員

 熱中症の搬送人員と最高気温との相関関係を可視化し閾値をχ二乗検定するでは最高気温と搬送数をプロットした.今回は気象庁から湿度のデータをダウンロードし,重症度別にプロットして可視化する.

平均湿度のデータをダウンロードする

 データは気象庁の過去の気象データ・ダウンロードにある.

地点を選ぶ

地点を選ぶ
地点を選ぶ

項目を選ぶ

項目を選ぶ
項目を選ぶ

期間を選ぶ

期間を選ぶ
期間を選ぶ

表示オプションを選ぶ

表示オプションを選ぶ
表示オプションを選ぶ

Power Query でデータクレンジングする

「データの取得」「ファイルから」「フォルダーから」
「データの取得」「ファイルから」「フォルダーから」
プレビュー
プレビュー
「テキストフィルター」「指定の値で始まる...」
「テキストフィルター」「指定の値で始まる…」
フィルター条件を記述
フィルター条件を記述
Csv.Document関数を記述
Csv.Document関数を記述
第1引数に[Content], 第2引数に[Encoding=932]を指定
第1引数に[Content], 第2引数に[Encoding=932]を指定
「他の列の削除」
「他の列の削除」
Tableを展開する
Tableを展開する
「1行目をヘッダーとして使用」
「1行目をヘッダーとして使用」
「その他の列のピボット解除」
「その他の列のピボット解除」
ヘッダーは「年月日」「属性」「値」となる
ヘッダーは「年月日」「属性」「値」となる
「年月日」列のデータ型を「日付」にする
「年月日」列のデータ型を「日付」にする
「平均湿度」列のデータ型を「整数」にする
「平均湿度」列のデータ型を「整数」にする
「石狩」を「北海道」に置換する
「石狩」を「北海道」に置換する
カスタム列を挿入し右端1文字を削除する
カスタム列を挿入し右端1文字を削除する
「北海」を「北海道」に置換する
「北海」を「北海道」に置換する

クエリのマージ

クエリのマージ
クエリのマージ
テーブルと照合列の列を指定する
テーブルと照合列の列を指定する
Tableを展開し,都道府県コードのみチェックする
Tableを展開し,都道府県コードのみチェックする

 

SQL Server でデータを結合する

 上記の作業で得られたテーブルをテキストファイルで保存し,SQL Server のウィザードを使用してアップロードする.作業そのものは前回の記事を同様であり,省略する.

クエリ

 下記のクエリを実行すると重症度別の搬送人員が得られる.結果をヘッダー付きでコピーし,EXCELに貼り付ける.

USE EMERGENCYDB;
GO
SELECT	'軽症'	AS '重症度'
	,	E.軽症	AS '搬送数'
	,	A.人口 
	,	T.日別最高気温
	,	M.湿度
	,	E.都道府県コード
	,	T.都道府県
	,	T.年月日
FROM	dbo.Emergency	AS E
INNER	JOIN dbo.Temperature	AS T
ON	E.日付 = T.年月日
AND	E.都道府県コード = T.都道府県コード
INNER	JOIN	dbo.T_Moisture	AS M
ON	E.日付 = M.年月日
AND	E.都道府県コード = M.都道府県コード
INNER	JOIN	dbo.T_Population	AS A
ON	E.都道府県コード = A.都道府県コード
AND	YEAR(E.日付) = A.調査年
WHERE	E.軽症 > 0

UNION

SELECT	'中等症'	AS '重症度'
	,	E.中等症	AS '搬送数'
	,	A.人口 
	,	T.日別最高気温
	,	M.湿度
	,	E.都道府県コード
	,	T.都道府県
	,	T.年月日
FROM	dbo.Emergency	AS E
INNER	JOIN dbo.Temperature	AS T
ON	E.日付 = T.年月日
AND	E.都道府県コード = T.都道府県コード
INNER	JOIN	dbo.T_Moisture	AS M
ON	E.日付 = M.年月日
AND	E.都道府県コード = M.都道府県コード
INNER	JOIN	dbo.T_Population	AS A
ON	E.都道府県コード = A.都道府県コード
AND	YEAR(E.日付) = A.調査年
WHERE	E.中等症 > 0

UNION

SELECT	'重症'	AS '重症度'
	,	E.重症	AS '搬送数'
	,	A.人口 
	,	T.日別最高気温
	,	M.湿度
	,	E.都道府県コード
	,	T.都道府県
	,	T.年月日
FROM	dbo.Emergency	AS E
INNER	JOIN dbo.Temperature	AS T
ON	E.日付 = T.年月日
AND	E.都道府県コード = T.都道府県コード
INNER	JOIN	dbo.T_Moisture	AS M
ON	E.日付 = M.年月日
AND	E.都道府県コード = M.都道府県コード
INNER	JOIN	dbo.T_Population	AS A
ON	E.都道府県コード = A.都道府県コード
AND	YEAR(E.日付) = A.調査年
WHERE	E.重症 > 0

UNION

SELECT	'死亡'	AS '重症度'
	,	E.死亡	AS '搬送数'
	,	A.人口 
	,	T.日別最高気温
	,	M.湿度
	,	E.都道府県コード
	,	T.都道府県
	,	T.年月日
FROM	dbo.Emergency	AS E
INNER	JOIN dbo.Temperature	AS T
ON	E.日付 = T.年月日
AND	E.都道府県コード = T.都道府県コード
INNER	JOIN	dbo.T_Moisture	AS M
ON	E.日付 = M.年月日
AND	E.都道府県コード = M.都道府県コード
INNER	JOIN	dbo.T_Population	AS A
ON	E.都道府県コード = A.都道府県コード
AND	YEAR(E.日付) = A.調査年
WHERE	E.死亡 > 0
(77678 行処理されました)

EXCEL の散布図でプロットする

 「重症度」でフィルターをかけると,「軽症」「中等症」「重症」「死亡」に分類される.それぞれの重症度でフィルターをかけた状態で散布図のデータ系列を作成する.結果は下図の状態である.

気温・湿度別の重症度別搬送人員
気温・湿度別の重症度別搬送人員

まとめ

 気象庁のサイトから最高気温と平均湿度をダウンロードし,総務省消防庁の熱中症救急搬送人員と結合して重症度別にプロットした.

 統計学的検定は行っていないが,やるとすればロジスティック回帰分析になるだろう.湿度を加えた場合に感度と特異度が向上するのか,逆に低下するのかは興味深い.重症度別に層別解析を行うことも考えられる.

eStatの地図で見る統計(統計GIS)データダウンロードから小地域の境界データをダウンロードし,人口密度をQGISで表現する

こちらの方が自然に感じられる

 国勢調査をもとに作成された境界データダウンロードサービスがある.市区町村よりも更に細かい,町字の粒度でのGISデータである.今回は関東地方のデータをダウンロードし,QGISで人口密度を可視化する.

“eStatの地図で見る統計(統計GIS)データダウンロードから小地域の境界データをダウンロードし,人口密度をQGISで表現する” の続きを読む

Power Query で Microsoft 日本語公式サイトから列挙体を取得する

 Microsoft の公式サイト,英語なら取得は容易であるが,当然日本語は取得できない.今回は日本語サイトから英語と日本語の両者を取得しようと試みた.

 結論から言うと,この記事で述べた方法で全ての日本語と英語とが分離できたわけではない.2 バイト文字と 1 バイト文字との分離という手法を用いたが,最終的には手動での対応が必要だった.

“Power Query で Microsoft 日本語公式サイトから列挙体を取得する” の続きを読む

Microsoft 公式サイトから列挙体のテーブルをインポートする

これらの設定の適用対象レベルの選択

 既知の情報だったら申し訳ないが,個人的に印象的だったので備忘録として公開する.これまではオブジェクトブラウザーからコピペしていたのだが,公式サイトから Power Query でテーブルをまるごとインポートできるようだ.

“Microsoft 公式サイトから列挙体のテーブルをインポートする” の続きを読む

EXCEL VBA でフォルダ内のブックを開きデータを読み込む

FileSystemObject と VBA の関係

 Power Query が使えないと不便である.先日 EXCEL 2010 の素の環境でフォルダ内のブックをすべて開き,データを読み込む必要があったのだが,Power Query が使えなかったため,VBA でブックを開いて読み込まなければならなかった.備忘録としての記事である.

 この記事はPower Query でフォルダから複数ファイルを一括インポートすると対応している.やっていることは同じだが,.xls 形式だとクエリの検証に時間がかかるため,VBA で読み込んだほうが動作は早いかもしれない.

 フォルダー内のファイル一覧を取得するには FileSystemObject を使う場合と Dir() 関数を使う方法とがある.ここでは FileSystemObject を使うことにする.

 データは Range オブジェクトに格納されているため,Range オブジェクトを取得するのが当面の目標となる.

“EXCEL VBA でフォルダ内のブックを開きデータを読み込む” の続きを読む

色の知覚(1)太陽光

太陽光の分光強度分布 (National Renewable Energy Laboratory)

 色彩に関してはこれまで先人の膨大な研究の積み重ねがある.その一端を紹介し,色の物理的性質から生理的反応への橋渡しについて考察する.

 今回は太陽光について調べた.データベースは主に National Renewable Energy Laboratory から取った.日本国内にも太陽光についてのデータベースは気象庁新エネルギー・産業技術総合開発機構がデータを公開している.

“色の知覚(1)太陽光” の続きを読む

厚労省「地域ごとのまん延の状況に関する指標等」の PDF から Power BI Desktop でデータを抽出し EXCEL のグラフに表現する

各都道府県の新型コロナウイルス確定患者数の推移

 新型コロナウイルスのパンデミック宣言以降,Twitter でフォローしているアカウントに自然と相互協調の動きがみられる.

 このツイートから始まった一連のやりとりで,厚労省の発表した PDF からテーブルを抽出するくだりに注目した.

 今回はここを画像つきで実施してみた.

“厚労省「地域ごとのまん延の状況に関する指標等」の PDF から Power BI Desktop でデータを抽出し EXCEL のグラフに表現する” の続きを読む

EXCEL VBA で Series オブジェクトをソートできなかった話

実行時エラー '451': Property Letプロシージャが定義されておらず,Property Getプロシージャからオブジェクトが返されませんでした

 Series オブジェクトを PlotOrder プロパティでソートする必要があった話をした.今回,Series オブジェクトをソートするために Collection オブジェクトに代入したのだが,配列の最終要素を取得するところで実行時エラーとなり,解決していない.

 Series オブジェクトをソートするための方法としては,元のデータで比較する方法と,Series オブジェクトの最終 Point オブジェクトの Top プロパティを比較する方法がある.

 意味としてはどちらも同じだが,どうせなら元のデータで比較するのが王道と思われたのでそちらを試したのだが,今の自分にはスキル不足で手に負えなかった.悔しい.

“EXCEL VBA で Series オブジェクトをソートできなかった話” の続きを読む

今後25年間の日本の都市の将来推計人口を EXCEL VBA で描く

データ系列のマーカースタイルを消去

 これまでは日本の都市人口の過去の推移を見てきた.総務省には日本の都市人口の推移予測がある.今回はこのデータをグラフにする.

 データを可視化するにあたり,重要なのは引き算である.強調すべき系列のみを強調するために,VBA の知識が欠かせない.

 グラフの系列にデータラベルを表示する方法にはいくつかある.

“今後25年間の日本の都市の将来推計人口を EXCEL VBA で描く” の続きを読む

はたらくオブジェクト

Range オブジェクト編

「おい,新米 Range オブジェクト!何ボーッと突っ立ってんだよ」
「す,すみません!」
「お前,名前は?」
「は,はい.myRng1と申します.よろしくお願いいたします」
「仕事に来たら,まず名乗れ.それがここの流儀だ」
「それから,自分の職域も一緒に言うんだ.わかったか?」
「は,はい」
「最初に書いてあるだろ?Option Explicit ってな.俺も詳しくは知らねぇが,あのルールは絶対だ.名乗らない奴に居場所はない…ほら,仕事が来たぞ」
「何い?誰だ,こんな糞コード書いたのは?ワークシートに何回アクセスさせる気だよ,全く…ほれ,ここからあそこまで走って値を取ってこい」
「ここからあそこまでって…えーっ?本気で言ってます?」
「何言ってるんだ?ワークシートにアクセスするような力仕事は新米 Range オブジェクトの役割と相場が決まってるんだ.さあ行った行った」

“はたらくオブジェクト” の続きを読む