厚労省からの都道府県別の新型コロナ患者状況を日次で公開されるみなしオープンデータ。 データ形式は、テキストPDFデータ。ツールを用いてテキスト化し、数値を抽出、チェックして更新するのが日課。

COVID-19 JAPAN - 都道府県別 新型コロナウイルス陽性患者数)

先日、該当ファイルが急にベクトル画像PDFとなって変換エラー。 JUST PDF4の助けを借りて、2日間を乗り切り、その後は再びテキストPDFに戻って事なきを得た。 ただ、もう発生しないとは限らないので、自動化できるツールを用意しておいた。

変換アルゴリズム
1. PDFファイルを画像化(pdf2png)
2. 画像から特定位置の数字画像を数値化
3. CSVファイルとして出力

1. macOSでは、PDF操作用のクラスがあって変換は簡単にできる。 発見した、Objective-Cによる実装、pdf2png.m by typester をCatalinaでもコンパイルできるよう調整、背景を白塗りつぶし、解像度を上げて保存するように改良した。(pdf2png.m on GitHub Gist

gcc --std=c99 -Wall -g -o pdf2png pdf2png.m -framework Cocoa

2. まずは文字画像を抜き出す。白かどうかを縦横でチェックし、1文字を抽出。0から9までの数を画像ファイルとして手動で集める。 続いて、数字が書かれているる領域を特定。レイアウトは固定のようなので、必要箇所を決め打ちで走査することにし、前述と同様の手順で抜き出した画像と0から9までの画像の一点ずつを単純に差分をとった合計値を計算し、一番差分が少ないものがその数値だと判定するプログラムをつくる。 手書き文字認識の場合、ニューラルネットワークなどを使うといいが、元のフォントが同じなので、安定性は高いはず。(src on GitHub)

3. 抽出したデータで合計値で検算。簡単なエラーチェックにもなって、安心度アップ。

罫線を自動的に認識させると、より汎用的に使えていいかもしれない。OCRを使わないで済む、CSVオープンデータとしてもらえるのが一番だが、オープンデータであればなんとかできる武器は多いに越したことはない。

困ったときにどうにかできるスキルを磨くのにオススメ、中止になった高専プロコン競技部門を勝手につくるオープンソース企画「囲みます」。 強いAIアルゴリズムを考えて、実装して、楽しく対戦して遊んでいる内に実装力つきますよ!


データ出典:オープンデータ|厚生労働省(新型コロナウイルス感染症について)
第三波はどうなるか!?

遂に、厚労省がCSVオープンデータ公開スタート!
オープンデータ|厚生労働省
検査数、患者数、退院数、死亡者数などが、CSVオープンデータとして公開されました。(都道府県別や、病床数はまだの様子)
高校プログラミング「情報I」の範囲で補助教材として使えるように、シンプルにまずは活用例をつくってみました。


補助教材、CSVオープンデータをダウンロードしグラフ化、2軸」(src on GitHub)
早速 Chart.js を使ってグラフ化!2軸にして、検査数と発生数を比較できるようにしました。


補助教材、PCR 検査陽性者数(日別)」(src on GitHub)
まずはシンプルに日別の陽性者数のみ表示からいじり始めるといいです。

<body style="margin:0;text-align:center;"> <canvas id="chart"></canvas> データ出典:<a href=https://www.mhlw.go.jp/stf/covid-19/open-data.html>オープンデータ|厚生労働省</a>(新型コロナウイルス感染症について)<br> <script type="module"> import Chart from "https://code4sabae.github.io/kafumon/lib/Chart.mjs"; import util from "https://taisukef.github.io/util/util.mjs"; const main = async () => { // const url = "https://www.stopcovid19.jp/data/mhlw_go_jp/opendata/covid19.csv"; const url = "https://www.stopcovid19.jp/data/mhlw_go_jp/opendata/pcr_positive_daily.csv"; const json = await util.fetchCSVtoJSON(url); console.log(json); const date = []; const data1 = []; for (const d of json) { date.push(d["日付"]); data1.push(d["PCR 検査陽性者数"]); } const config = { type: "line", data: { labels: date, datasets: [ { data: data1, borderColor: 'rgb(255, 99, 132)', fill: false, lineTension: 0 }, ] }, options: { title: { display: true, text: "COVID-19 日本のPCR検査陽性者数" }, scales: { xAxes: [{ scaleLabel: { display: true, labelString: "日付" } }], yAxes: [{ scaleLabel: { display: true, labelString: "PCR 検査陽性者数" }, ticks: { beginAtZero: true } }], }, legend: { display: false } } }; new Chart.Chart(chart, config); }; main(); </script>


厚労省ページからダイレクトに取得はできないので、GitHub pagesに自動的に上げる形にしています。


BOM付きUTF-8エンコードCSVなのでExcelでもOK!


オープンデータ|厚生労働省」活用しましょう!


新型コロナウイルス関係 CSVオープンデータ|厚生労働省
日付付きのさまざまなデータをひとまとめにしたCSVオープンデータを作成するプログラムも作ってみました。(src on GitHub)

links
- 厚生労働省の方へ、CSVオープンデータ化で効率化しましょう! 新型コロナウイルス国内事例における都道府県別の患者報告数表示アプリ
- 2022年高校「情報I」プログラミング教材JavaScript版へコントリビュート

厚生労働省から接触管理アプリが発表されました。 近距離無線通信、Bluetoothを使用し、このアプリの利用者同士が近くにいる時刻と長さを記録しつづけるアプリです。

もし、検査し陽性となった際、感染を自己申告すると、過去14日間に接触したアプリ利用者にその感染リスクを知らせることができます。 自己申告には、医療機関からもらう処理番号と共に、サーバーでIDが公表されることへの同意が必要です。 利用者は1日1回、アプリが自動的に感染者リストをダウンロードして確認し、自分の端末内の接触データと照合し、該当すれば通知などで伝えます。

GPSなどの位置情報や、電話番号や端末IDなど、個人情報を一切使わず、接触を管理する「接触管理アプリ」の仕組みを調べてみました。


Exposure Notifications: Helping fight COVID-19 - Google」を元に作図。

GoogleとAppleが共同で作成したAPI「Exposure Notifications」を使ったアプリを提供できるのは1国につき1医療関係機関のみ。 今回提供されるアプリは「接触確認アプリケーション利用規約|厚生労働省」からリンクがあるようにオープンソースです。 公開されている設計図(プログラム)を見て、自分でその安全性をチェックすることができます。

GoogleのAndroidとAppleのiOSを足すと、アクティブなモバイル端末のシェア99.68%(対策ダッシュボードアクセスログ調べ)、この2社が組めばスマホユーザーはほぼカバーできます。 特にiOSでは、Bluetoothの電波を常時出し続けることは仕様上できないようで、OS側の支援は必須だったようです。

ドキュメントには、実際は使われない開発途中のものが混ざっているので注意が必要です。 「Exposure Notifications」の「Exposure Notification Bluetooth Specification」と「Exposure Notification Cryptography Specification」で公開されているように、ユーザー毎のIDは連番ではなく、10分ごとに変わります。 常に、同じIDが発信されてしまうと、誰でも取得できるBluetoothの電波を補足し、個人の行動情報が第三者に補足されてしまいます。


Bluetoothで発信されるデータの仕様がこちら。アプリ固有値が公開されるので、接触確認アプリを使っていることは周知されることは了承した上での利用が必要です。


データの流れのもとになった仕様はこちら。暗号化に128bitのAES、iv付きのAES-CTRが使われています。


AES-CTRを使った暗号化を Node.js で、実験してみました。ESモジュール化に対応した、Denoや、ブラウザ上でも使えるものもほしいところです。(src on GitHub)

新型コロナ感染症、COVID-19の現在患者数、新規陽性者が少なく、続々と退院が進み、ついに福井県も0人になりました。 対策病床数として確保した分の2.6%しか使っていない計算です。

COVID-19 JAPAN 新型コロナウイルス対策ダッシュボード

もともとの感染病床数のみ使用するとどうなるか、「対策病床数オープンデータを使用する」チェックボックスを外したものがこちら。

COVID-19 JAPAN 新型コロナウイルス対策ダッシュボード」(対策病床数未使用)
石川県、北海道、東京都、神奈川県でまだ現在患者数が本来の感染症病床数を上回っていることがわかります。

感染をいち早く封じ込めることが重要です。テクノロジー、うまく使っていきましょう!

COVID-19 Japan 新型コロナウイルス対策ダッシュボード」の役目はまだ終わりません。対策病床数が増え、黒色は減ったものの医療機関への負担は非常に大きく、如何に新たな患者発生を抑えるかが引き続き重要です。 外出自粛の効果と退院が進み、減少傾向が見られる都道府県も出てきていますが、潜在患者による感染拡大が進む可能性もあり油断禁物。


COVID-19 Japan 新型コロナウイルス対策ダッシュボード
ひとまず東京都のみですが、都内の地域別患者発生数表示を参考に追加しました。発生の多い地域には注意が必要です。差分を取って新規発生のみにする、昼間人口や住人で割る、域内の病院数と合わせて表示するなど、表示方法は検討の余地ありです。


対策病床数の更新は、オープンデータがまだなく、手動更新となっています。
みなさまのご協力により、だいぶ充実してきています。こちらのデータもオープンデータとして自由に二次利用いただけます。
新型コロナウイルス対策病床オープンデータ
出展として「新型コロナウイルス対策ダッシュボード」の表記と可能であればリンクいただければ、自由に加工、活用いただいて構いません。


新型コロナウイルス患者数オープンデータ(公式サイト、オープンデータサイト、対応状況)
本サイトは、厚生労働省のデータと、都道府県のオープンデータなどを集約して作っています。オープンデータがあっても、形式の違いなどがあるため、データ変換し集約プログラムを作って、運用しています。

病床数オープンデータを含めた、データ定義書を作成していますので、よかったらこちらご活用ください。
新型コロナウイルス感染症対策に関するオープンデータ項目定義書」 by Code for Japan / 福野泰介追記


コロナ病床使用率サイトに100万超アクセス 全国の状況一目で 福井の男性作成 - 毎日新聞
毎日新聞さんに、ご紹介いただきました。オープンデータによる官民連携の新しい形。本対策ダッシュボード提供のデータや、地元のオープンデータを使って、ぜひみなさまもチャレンジしてみてください。


新型コロナウイルスに対する当社の対応 | NECソリューションイノベータ
NECソリューションイノベータさんによる「オープンデータに基づく国内感染状況の可視化」でもJSONデータ、活用いただいています!

都道府県によるCOVID-19オープンデータ公開が増えています。 不測の事態でも、できるかぎり情報提供するために、つなぎこみ開発を進め、計15都道府県のデータの速報化、完了!

COVID-19 Japan - 都道府県別 新型コロナウイルス陽性患者数
また、前日からの動きを把握するための「矢印」を追加。厚労省データで5%以上増減がある県に傾向表示として加えました。


新型コロナウイルス患者数オープンデータ
速報連携状況は、こちらのオープンデータで確認できます。Code for Japan 作成の定義書に準拠しているか(data_standard / data_alt)、JSONによる提供か(data_json)しているデータはすぐ連携できてうれしいです。 ただ、いずれでもない形式でも、何とかすれば連携可能なもの(data_special)とフラグをつけています。

オープンデータがあっても退院数が不明な県、オープンデータが無い県は連携できていません。 対策病床数のオープンデータを提供する県はまだなし。各都道府県の方、ぜひご検討ください!気になる市民の方、ぜひご要望を!(病床数データを追記したCOVID-19データセット定義書登録フォーム


熊本県オープンデータサイト / 熊本県
こちら熊本県のオープンデータを例に、対応方法を紹介します。陽性患者属性のCSVデータが、オープンデータとして提供されています。ただ、こちらファイル名が更新時に変更になるので、更新されているかどうか、HTMLをチェックする必要があります。 HTMLから抽出した、CSVのURLにアクセスし、最新の現在患者数データを取得し、他の都道府県データと合わせて、JSON/CSV形式のファイルを生成するプログラムを定期的に動くようにして、対応完了。

const html = await (await fetch(url_opendata)).text() const dom = cheerio.load(html) const tbls = htmlparser.parseTables(dom) const json = util.csv2json(tbls[1]) for (const d of json) { const name = d['データ名称'] if (name.indexOf('陽性患者属性') == -1) continue const csvurl = d['ファイル(CSV形式)'].split(' ')[0] console.log(csvurl) const res = await covid19fast.makeData(pref, csvurl, url_opendata) console.log(res) break }

こちら上記を実現する JavaScript / Node.js のプログラムの一部です (src on GitHub)
IchigoJamなどでプログラミングを学ぶこどもたちには、なんとく意味が分かるはず。


本日、PCN仙台のオンラインIchigoJam講座で特別講師!
こどもたちが、プログラミングで活躍する日が楽しみです。


COVID-19 Japan - 都道府県別 新型コロナウイルス陽性患者数
油断すると、多量発生してしまうのが怖いCOVID-19。限りある地域の医療リソースを大切に。

おうちで学ぼう!自宅で戦おう!

プログラマーに有名な「ライフゲーム(the Game of Life)」の発明者、イギリスの数学者、ジョン・ホートン・コンウェイ氏が、新型コロナウイルス感染症(COVID-19)により亡くなったとのこと。

ライフゲームが考案されたのは1970年。1971年に開発された4bitのコンピューターIntel 4004から50年、世界中の人がその1,000万倍速いコンピューターを手にしている。

* Intel 4004: 741kHz、8クロックで1計算、秒間9.3万回。iPhone 11: CPUが1秒あたり1兆を超える演算処理を行なう新しい機械学習アクセラレータを搭載。


以前作成したライフゲームを4Kモニターなどでフルスクリーン動作するように改良。4Kモニターだと、3,840x2,160、830万のドットを使って人工生命をシミュレートする。この作りではどうにも動作が重く、MacBook Proで1秒1更新がやっとな様子。


lifegameclock
アプリづくりの練習に、ブラウザで使用するFullscreen APIを使ったサンプルとして、処理速度向上チャレンジとしてなど、何かの参考になればうれしい。(src on GitHub / オープンソース

テクノロジーで打ち勝とう!
#StopCOVID19

厚労省の業務効率化のために、現在患者数CSVデータから、現在厚労省がPDF公開している形式で見られるアプリを作りました。(左、厚労省PDF、右、本アプリ)

新型コロナウイルス感染症(国内事例)の状況 (厚生労働省 フォーマット)

新型コロナウイルス感染症、現在患者数が増え続けています(ダッシュボード)。早く正確なデータ公開と、それに基づく一人ひとりの行動が重要です。 日本全体を把握しようとする際、都道府県によるオープンデータが揃っていないので、頼りになるのは厚生労働省による現在患者数の発表です。(東京/福岡/福井はあります

厚生労働省が参考資料として発表する「国内事例における都道府県別の患者報告数」は、毎日夜20時〜21時ごろ、前日分のデータが、PDFで更新されています。 こちらをアプリで利用しやすい形式(JSON/CSV)に変換するプログラムで、二次利用可能なオープンデータ化し、対策ダッシュボードや、連携する第三者のアプリへと伝わっています。

課題は、PDFデータの変化によって、変換プログラムに手を入れる必要がたまにあること。もし、厚生労働省がCSVオープンデータとして提供してもらえると、この課題は解消します。とはいえ、いままでの形式での情報公開に加えての対応では、逆に手間が増えてしまいます。

そこで、作成したのが今回のアプリ「新型コロナウイルス感染症(国内事例)の状況 (厚生労働省 フォーマット)」です。 CSVデータさえあれば、現状PDFで公開される同じ形式が情報公開も同時に行うことができます。


日付を選択して、過去のデータを辿れます。


新型コロナウイルス感染症(国内事例)の状況 (厚生労働省 フォーマット)
英語表示にも対応しています。


COVID-19 Japan 新型コロナウイルス対策ダッシュボード
ダッシュボード、出典のAPPから、本アプリへリンクしました。


印刷用のレイアウトにも対応、従来のPDF公開や、紙として残すことも可能です。(CSS @media print で不要な項目は印刷しないのでA4横1ページに収まります)

CSVによるオープンデータ化の手順

1. Excelで「都道府県名、陽性患者累計、うち入院等、うち退院、うち死亡」を47都道府県分記入(サンプルCSV
* 項目名はアプリ側で合わせますので何でも構いません。ただ、一度付けたら変更は無いことが望ましいです。注釈が必要な場合、ウェブサイトなどで別途記載があるとより使いやすいです。

2. 「名前をつけて保存」で「ファイルフォーマット」を「CSV UTF-8 (カンマ区切り) (*.csv)」にし、2020-04-10.csv など年月日をファイル名にして保存
3. 厚労省のサイトにアップし、「国内事例における都道府県別の患者報告数 CSVオープンデータ」などと記載してウェブサイトを更新。

もしCSV運用が始まったら、本アプリを12時間以内に厚労省CSVデータに対応させます。オープンソースなので、ダウンロードして厚労省サイト内で使っていただいてもOKですし、そのアプリへリンクや、ウェブサイトへの埋め込みでの表示にも対応できます!

ツールで時間、創りましょう!

(追記、2020-07-06 厚生労働省CSVオープンデータ開始!CSVをグラフ化する高校プログラミング向け補助教材

新型コロナウイルス対策ダッシュボードで呼びかけている、医療関係の情報提供。「日本医師会総合政策研究機構」から、病床数やICTなど集中治療室の数、ピーク時予測患者数がまとまったデータが公開されたことを情報提供いただきました。 「地域の医療提供体制の現状 - 都道府県別・二次医療圏別データ集 - (2020 年4月版)

2020年4月現在、コロナウィルス新型感染症の感染拡大に伴う、医療資源の確保に向けて、地域の実データが対策のための資料に資することを願う。
とのことなので、こちらのデータを使わせていただき、現在病床数と合わせて表示してみた結果がこちら。

現状数値ではどの都道府県も足りません。各都道府県サイトで確保に向けての動きが掲載されているのでご確認ください。


軽症者は病床を使わないとして、重症者のみで表示した場合、いくつかの県で耐えられることが分かりますが、現在増加している病床が重症者向きになっているとは限らないので決して安心はできません。


コロナウイルス感染症ピーク時予測患者数と各種病床数(都道府県別)(PDF)(Excel)」
予測の計算や、ICUなど細かなデータが掲載されています。各都道府県ごとの医療体制も細かく記載があるので、合わせてご参照ください。


予測モデルは、官邸のサイトに資料があります「新型コロナウイルス感染症対策専門家会議(第5回)(持ち回り開催)日時:令和2年3月2日(月)
こちらのサイトもご参照ください。
西浦北大教授「3つのCOVID-19流行シナリオ、いずれも最悪の場合」|医療維新 - m3.comの医療コラム


新型コロナウイルス対策ダッシュボード
現場の一次情報、引き続き情報提供おまちしています。

福井県庁、新型コロナウイルス対策アプリに必要なオープンデータを、総務省推奨、Code for Japan 作成の推奨データセットに準拠する形で公開スタート!
新型コロナウイルス感染症のオープンデータを公開します! | 福井県ホームページ


COVID-19 Fukui 福井県 新型コロナウイルス対策ダッシュボード
早速、陽性患者オープンデータを使って、福井県カラム地図上で各市町の現在患者者数の多さを色の濃さで表現。


新型コロナウイルス感染症のオープンデータを公開します! | 福井県ホームページ
データはこちらからどなたでもオープンデータとしてご利用いただけます。


陽性患者情報、検査実施件数、陰性確認数、コールセンター相談件数、4つのデータセットがCSVで公開。


東京都版をベースに新たな定義された推奨データセットを使用(総務省資料より)


新型コロナウイルス感染症対策サイトのためのデータ公開について 令和2年3⽉31⽇総務省
詳細は「新型コロナウイルス感染症対策サイトのためのデータ公開について」「新型コロナウイルス感染症対策サイトのためのデータ公開支援 - Code for JapanCode for Japan」をご覧ください。 他の都道府県の担当の方もぜひご検討ください!(参考、オープンデータの作り方と育て方


福井新聞掲載された、福井高専学生開発の福井版対策サイトと共に、新型コロナウイルス対策ダッシュボードも連携サイトとして福井県庁からリンクいただきました。

コンピューターが少し分かれば、家の中でできることが無数にあります!
福井県内自粛でダメージが大きい外食産業との連携、森さんが集めた「#頑張ろう福井グルメ」のデータを使ってアプリ開発&公開。

TAKEOUT FUKUI 福井県のお持ち帰りグルメまとめました
スマホ、PC、タブレット、どれでも地図と合わせて使いやすいをテーマに作ったウェブアプリです。地図は、地理院地図/egmapjsを使用。素のJavaScriptなので、初心者の方でも改造簡単!


スマホなど縦長で見ると、画面下に地図が来ます。アイコンタップでページ内で詳細表示。使い勝手、もう少し良くする予定。


code4fukui/takeoutfukui: TAKEOUT FUKUI #頑張ろう福井グルメ
GoogleスプレッドシートからJSON/CSVへの変換を含めて、プログラムは、GitHubでオープンソースとして公開。Issuesにてご意見、ご要望と、改善自体もオープンに受け付けています。


COVID-19 Japan 新型コロナウイルス対策ダッシュボード
都道府県ごとの詳細画面に一般社団法人 日本耳鼻咽喉科学会が区分を定義した「ハイリスク地域」「ローリスク地域」の表示を追加。 現在患者数が10名以上の地域では、感染リスクが高いため、手術を延期したり、事前の検査が入念になるなどの、対応ガイドラインが公表され、本ダッシュボードへの案内も記載されています。 (学会からのお知らせ:一般社団法人 日本耳鼻咽喉科学会


「気管切開」の対応ガイド(2020 年 4 月 3 日版)一般社団法人 日本耳鼻咽喉科学会)」より
気管切開手術を行う場合の例、ハイリスク地域かローリスク地域かで、異なるフローが推奨されています。

標準PPEとSARS-CoV-2陽性症例への対応に必要となるfull-PPEについて

PPEとは個人防護具(Personal Protective Equipment)のこと。サージカルマスク、アイシールド、手術ガウン、手術用帽子、手袋による通常手術同様の防護が標準装備。

対して、full-PPEとは、感染症対策に強化した下記の装備のこと
- FFP2(N95)マスクあるいは電動ファン付呼吸用保護具
- 眼球保護としてのフェースシールド±ゴーグル
- 身体の保護としての不浸透性長袖ガウン
- 皮膚の露出の少ない手術用帽子

full-PPE 装着下での気管切開は,執刀医から関連する医療者の肉体的・精神的な負担となるため,複数例に対応する場合には同じ医療者に負担が重ならないような配慮も必要である.
医療関係者の負担を極力減らすための行動が必要です。 何か、データでご協力できることがあれば、ぜひお寄せください。


code4sabae/coughgathering: voice uploader web app and node.js server
国際チームで開発進む咳診断サービス、シリコンバレーにいるあみると改善した咳あつめアプリ「Virufy」(Virus + Verify)。 指示に合わせて音声を録音し、サーバーへアップロードし、アンケートシートへ連動する、シンプルでモダンなJavaScript/HTML/CSSのプログラムです(index.html on GitHub)。

緊急事態宣言が出され遠隔医療も解禁。テクノロジーでできること、一気に広げるチャンス!

全国の高専生や、エンジニア目指す小中学生、お家で地域に貢献してみよう!
興味ある方、こちらへどうぞ「Slack: Code for KOSEN

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / RSS