2020年12月29日火曜日

[Python] 警視庁の事故データを地図上にプロットしてみた

 今年7月に公開された2019年の交通事故データを使い、日本地図の上にプロットしました。

https://nyoshimura.github.io/JapanTrafficAccident/JapanTrafficAccident.html



  1. 使ったデータ
  2. データの前処理
  3. 地図作成
について書きます。

1. 使ったデータ

警視庁のオープンデータを使いました。


日本語なのでencodingはcp932を使う必要があります。
df = pd.read_csv("./honhyo_2019.csv",encoding='cp932')

2019年以前のデータも含まれていますが、データの90%以上が2019年のものです。










2. データの前処理

元のデータだと緯度経度が度分秒表記かつ整数化のため1000掛けてあるので、通常の10進法緯度経度に変換しました。 (参考: https://www.wingfield.gr.jp/archives/2687)
def dms2dec(latlong_raw):
    var_degree = int(latlong_raw/1e7)
    var_minutes = int(latlong_raw/1e5 - var_degree*100) 
    var_seconds = (latlong_raw/1e3 - var_degree*1e4 - var_minutes*100)
    decimal_latlong = var_degree + var_minutes/60 + var_seconds/3600
    
    return decimal_latlong

3. 地図作成

foliumを使ってopenstreetmap上にプロットしました。

dataframe、 色、地図、凡例名を渡してレイヤー生成する関数を作成してみました。
def addLatLong2map(df_in, color_in, folium_map, legend_name):
    lgd_txt = '<span style="color: {col};">{txt}</span>'
    FeatureGroup_in = folium.FeatureGroup(name= lgd_txt.format( txt= legend_name, col= color_in))
    for index_df in range(len(df_in)):
        folium.CircleMarker([dms2dec(df_in["地点 緯度(北緯)"][index_df]), 
                             dms2dec(df_in["地点 経度(東経)"][index_df])],
                             radius=2,color=color_in,
                             fill=True,fill_opacity=0.9).add_to(FeatureGroup_in)
    folium_map.add_child(FeatureGroup_in)

# create map
folium_map = folium.Map(location=[35.415377, 139.595271], zoom_start=11)

# for loop for lat/long
df_person = df[df["事故類型"]==1].reset_index()
df_nodeath = df_person[df_person['死者数'] == 0].reset_index()
df_death = df_person[df_person['死者数'] > 0].reset_index()

start_time = time.time()

addLatLong2map(df_nodeath,'#ffa500',folium_map, 'pedestrian accident')
print("--- %s seconds for accident loop ---" % (time.time() - start_time))

addLatLong2map(df_death,'#ff0000',folium_map, 'pedestrian death')

# turn on layer control
folium_map.add_child(folium.map.LayerControl())

print("--- %s seconds for all loop ---" % (time.time() - start_time))
    
# save map
folium_map.save('./docs/JapanTrafficAccident.html')

ソースコードはnotebookですがこちら:

Github pagesをホストに使ってhtmlファイルも保存しました:

今後はこの地図上に色々情報付加していく所存。
おしまい。

2020年5月5日火曜日

[covid19] 最近の専門家提言資料を一通り読んだらテレビで教えてくれないことばかりだった話

テレビで「新しい生活様式」ばっかりやるけど、厚生労働省のHPに上がっている提言一通り読んだら知らないことばっかり書いてあってビビったので思わずまとめてみた: https://github.com/nyoshimura/covid19-JP

  • 実効再生産数は数値目標として微妙
  • 政府と専門家が提言内で暗に示唆している数値目標
  • 緊急事態の解除条件
  • PCR検査数増やしても緊急事態解除はできない

実効再生産数は数値目標として微妙

5/1のスッキリで皆さん知りたがっていた実効再生産数 (1人の感染者が何人に移すか)。

ドイツが毎日公表しているとかで謎の信頼を得ているこの数字ですが、直近20日間については実際の再生産数より低く見積もる可能性を日本の専門家達は指摘しています。

(5/1専門家提言より抜粋)
 

この数字は感染爆発を事前に検知するために活用されるべきなのに、直近20日間は低く見積もるんですよ。微妙すぎる。

日本の専門家達はこの数字より倍化時間(何日で感染者数が倍になるか)が指標として使えると提言内で示唆しています。

政府と専門家が提言内で暗に示唆している数値目標


テレビでは中々教えてくれないですけど、専門家提言資料にはたくさん数字が出てきます:
  • 人工呼吸器やECMO(人工肺)より病床数が不足 (使用率38.2%, 東京100%オーバー)
  • 軽症者の療養施設に関して39都道府県で13000室が利用可能だが地域別に見ると不足
  • 空床数見える化に参加している医療機関は46%, 拡充必須
  • 倍化時間3日を下回るとオーバーシュート傾向, 要緊急事態宣言
  • 新規感染者数が100人を超えているとコントロールできない
image

いくつかの数字の根拠が曖昧なため、首相が宣言できるレベルではないです。

ただ、実効再生産数ではなく倍化時間を指標として緊急事態宣言を出したことでオーバーシュートを防げた。
 陽性率ではなく新規感染者数を追うことで感染爆発リスクを回避してきた。
他国やメディアに惑わされず専門家が事実ベースで対策を講じていることは間違いないと思います。

緊急事態の解除条件

これも実は専門家提言に曖昧だが書いてある:

(5/1専門家提言より抜粋)
 

数字は適当ですが、例えば下記4つが専門家提言から読み取れる日本の指標(KPI)です。

指標条件(地域ごとの)緊急事態
新規感染者数e.g. 50人以上の場合発動
倍化時間e.g. 3日以下の場合発動
病床使用率e.g. 50%以下の場合解除
空床可視化参加率e.g. 80%以上の場合解除

病床使用率については政府資料よりhttps://www.stopcovid19.jp/が分かりやすい:

PCR検査数増やしても緊急事態解除はできない


専門家提言資料にはPCR検査数と陽性率についても数字が出ています。 しかし検査数を増やして陽性率が多少増減したところで、
  • 新規感染者が多い限り感染経路特定が追いつかない
  • 病床数が足りない限り医療崩壊は防げない
という観点から、緊急事態解除には何ら影響を及ぼさないです。本質ではないのです。 

まとめ


正直想像以上に専門家提言はよくまとまっていましたが、残念なのは経済的観点がこれまで一切考慮されていないところですね。医療と疫学の観点しか提言には含まれていないため、失業数も数値目標や出口戦略の一つとして必要かと。日本では自殺数と失業数の相関が極めて高いので:


おしまい。

2020年5月1日金曜日

日本におけるCOVID19の陽性率, 重症率, 死亡率を可視化してみた

毎日テレビで数ばかり報道されても困るので。
割合を調べようと思ったら結構誰も出していないので自分で出しました。
データは東洋経済オンラインさんの物を流用しました : https://github.com/nyoshimura/covid19

陽性率の重要性


テレビでは人数ばかり報道されていますが, 100人検査した日と1000人検査した日では陽性になる人数も10倍変わりますよね。なので割合が知りたい。

あと, 4人検査して3人陽性だったら75%!!というのは母数が少なすぎですよね。なので累計で割合を出しました。

  • PCR_Positive_rate(陽性率) = 陽性の人数 / PCR検査した人数
  • PCR_Severe_rate(重症率) = 重症の人数 / 陽性の人数
  • PCR_Death_rate(死亡率) = 死者数 / 陽性の人数

drawing
3月は重症率がかなり大きい。これは検査数の少なさが一つの要因です。
3月上旬は検査数を抑えていたため正確な陽性率が分からず, 重症化してから検査するケースが今に比べて多かったと推察されます。

一方4月に入ってからは検査数を強化しているため, 11%まで陽性率が上昇しています。
この陽性率が日本の「現状」であり, 韓国の2.6%などと比較すると「高い」と言えます。

また死亡率は4月中旬から緩やかに上昇傾向です。
感染者の増加率が一定であるにも関わらず死亡率が上昇しているのは望ましくありません。

病床数の変動, 呼吸器の稼働率, 医療従事者の稼働率などのデータも見ないと断言はできませんが, 医療が追いついていない, 疲弊している可能性が読み取れます。

今後どうなるのか


最近だと堀江さんが分かりやすい対談をアップしてました:
ワクチン, 免疫, 重症化を防ぐ特効薬, と多方面から対策を検討している。
それでもワーストでは2年後まで終息しないそうです。

堀江さん一派の言う「緊急事態宣言延長なんてバカバカしい」という主張はもっともだと思う一方, 医療崩壊を起こすことによる死者数もまた計り知れない。

経済的弱者を捨てるのか, 患者を捨てるのか。
意見は割れるでしょうが, 前者は政府が「救える」, 後者は誰も「救えない」。
陽性率は依然10%と高く, 死亡率は上昇傾向です。

おしまい