code4nagoya / covid19

愛知県 新型コロナウイルス感染症対策サイト / Aichi COVID-19 Task Force website
https://stopcovid19.code4.nagoya/
MIT License
66 stars 34 forks source link

「最新のお知らせ」の情報ソース追加及び自動更新 #73

Closed amay077 closed 4 years ago

amay077 commented 4 years ago

改善詳細 / Details of Improvement

期待する見せ方・挙動 / Expected behavior

情報ソースとしては現在(3/12)のところ、以下が挙げられます(#31 では 愛知県のみ)。

[FYI] tokyo 版では、お知らせページを作るissueも上がっているようです tokyo-metropolitan-gov#1082

fussy113 commented 4 years ago

お知らせの量かなり多いので、現在のコンポーネントだと、縦にめちゃくちゃ長くなりそうですね。 お知らせのコンポーネントをスクロールする形にするなど、デザインに関しても考慮する必要ありそうです!

amay077 commented 4 years ago

そうですね、トップページに載せるのは現状ママで最新の2~3件、それ以外および過去のものは、 https://github.com/tokyo-metropolitan-gov/covid19/issues/1082 と同じく「お知らせページ」のような別ページを用意するのがよいかな、と思います。

ctyo commented 4 years ago

issueにかぶせで申し訳ありませんが、 現状のデータ更新の手間を、でできる範囲で楽にできないか、という観点の提案です。

現在、excelで作成->phpでjsonを吐き出し->masterマージという形で公開しています。 以下の形でアプリケーションに組み込めないでしょうか?

お試しでマクロでJSONを書き出すところまで作ってみました。課題等がなければどなたかアプリケーションへの反映部分を実装していただけないでしょうか?(火曜以降なら私もさわる時間つくれそう,...)


県発表のPDFを GoogleShread Sheetで追記 ↓ マクロでjsonを書き出し(自動) ↓ アプリケーション側で読み込んでいい感じで処理に組み込み

ctyo commented 4 years ago

↑を書いたあと確認したのですが、 マクロでJSON書き出しはログイン必須、回数制限がついているのですね。 JSONをコピペしてgithubに貼り付けてデプロイでも良いかもしれません。

billhung commented 4 years ago

@ctyo さん いいアイデアだと思います。 少し調べた。 手動でExcel更新>phpでJSON出力>/data/data.jsonを更新する より 手動Google Spreadsheet更新>マクロscriptでJSON出力>GitHubのdata/data.jsonにコピペの方が楽 ーーーーーーーーーーーーーーーーーーーー 上記のMACRO、現在の出力したのは

  {
    "": "",
    "Sun Mar 15 2020 16:00:00 GMT+0900 (Japan Standard Time)": "名古屋市発表"
  },

data/data.jsonと比べて、こんなフォーマットが必要ですね。

            {
                "No": 3,
                "発表日": "2020-02-14T08:00:00.000Z",
                "年代・性別": "60代男性",
                "国籍": "日本",
                "住居地": "名古屋市",
                "接触状況": null,
                "": null,
                "備考": "名古屋市発表",
                "date": "2020-02-14",
                "w": 5,
                "short_date": "02\/14"
            },

今のマクロの処理を共有して一緒に修正しましょうか? こちらも調べている最中です、こんなようにやってみます。同じく修正がまだ必要です。

ctyo commented 4 years ago

@billhung 確認ありがとうございます。 マクロの修正をお願いします。みんなが簡単に更新でいるようになることに価値を感じます。

以下は自由に修正していただいてOKですmm

https://docs.google.com/spreadsheets/d/1oERqNAfnbFnXjKc0j82lechlrXWBHQuG1QU8JFtHnRU/edit#gid=1588368354

ctyo commented 4 years ago

紹介していただいたScriptの追加はできました 🎉

スクリーンショット 2020-03-18 12 05 20
billhung commented 4 years ago

まだマクロの問題を判明中ですが、こんな感じでデバッグできそうです。 covid19 git issue )

billhung commented 4 years ago

@ctyo GOOD NEWS! 行141を   var objects = getObjects(dataRange.getValues(), normalizeHeaders(headers)); から   var objects = getObjects_(dataRange.getValues(), headers); に変更するだけで、完成なデータに少し近づいてきた。 20200318 json export

billhung commented 4 years ago

Googleのシート https://docs.google.com/spreadsheets/d/12qStuXjsI8GE8qI1mLPLV--6TQcxAMPDu3-k9RCHN1k/edit#gid=0 修正したGoogle App Script https://stopcovid19aichi.slack.com/files/U01006985GD/FVCCUMG57/exportjson.gs

使い方は 1.Google Spreadsheet>Tools>"Script Editor"、そしてこのscriptをコピペだけ 2.そのあと、Google Spreadsheetの一番右上の「Export JSON出力」すれば 3.最後はここにあるdata.jsonにコピペ https://github.com/code4nagoya/covid19/tree/development/data Hope this helps. Bill

image

hajime-miyauchi commented 4 years ago

流れを読めてなくて申し訳ないのですが、データの自動更新について最終的には下記の完全自動化の動作がゴールかなと思ってます。

  1. 愛知県のPDFデータが更新される
  2. 定期的に愛知県のPDFデータをスクレイピングし、更新があれば自動でdata.jsonが更新される
  3. サイトのグラフが自動で書き換わる

過渡期としては下記で、現状進んでいるのはこちらの準自動化だと認識してます。(間違ってたらごめんなさい)

  1. 愛知県のPDFデータが更新される
  2. 定期的に人間が目視で愛知県のPDFデータを確認
  3. GoogleスプレッドシートにPDFデータを転記
  4. data.jsonが書き換わる?
  5. ちょっとこのへんわからないけど、たぶん手動でコミット、プッシュとかそんな感じ?

完全自動化の前に準自動化が必要ではあるかもしれないんですが、平行して完全自動化も考えたいと思います。 (もし、完全自動化が早期に実現できそうなら、完全自動化を優先したい)

@codeforalone さんのコードや、北海道の自動化が参考になるのではと思っています。

codeforaloneさんのコード https://github.com/codeforalone/covid19-scrapy

COVID-19Hokkaidoデータ編③完全自動化(バリデーション・エラー検知) https://qiita.com/Kanahiro/items/782cb6d5497d3c3704ec

兵庫県のデータ取得 https://qiita.com/y-chan/items/87919fd712d1560c5e95

Miura55 commented 4 years ago

流れを読めてなくて申し訳ないのですが、データの自動更新について最終的には下記の完全自動化の動作がゴールかなと思ってます。

  1. 愛知県のPDFデータが更新される
  2. 定期的に愛知県のPDFデータをスクレイピングし、更新があれば自動でdata.jsonが更新される
  3. サイトのグラフが自動で書き換わる

過渡期としては下記で、現状進んでいるのはこちらの準自動化だと認識してます。(間違ってたらごめんなさい)

  1. 愛知県のPDFデータが更新される
  2. 定期的に人間が目視で愛知県のPDFデータを確認
  3. GoogleスプレッドシートにPDFデータを転記
  4. data.jsonが書き換わる?
  5. ちょっとこのへんわからないけど、たぶん手動でコミット、プッシュとかそんな感じ?

完全自動化の前に準自動化が必要ではあるかもしれないんですが、平行して完全自動化も考えたいと思います。 (もし、完全自動化が早期に実現できそうなら、完全自動化を優先したい)

@codeforalone さんのコードや、北海道の自動化が参考になるのではと思っています。

codeforaloneさんのコード https://github.com/codeforalone/covid19-scrapy

COVID-19Hokkaidoデータ編③完全自動化(バリデーション・エラー検知) https://qiita.com/Kanahiro/items/782cb6d5497d3c3704ec

兵庫県のデータ取得 https://qiita.com/y-chan/items/87919fd712d1560c5e95

これですが、ひとまず自分の方で試します。まずは愛知県のサイトのPDFからスクレイピングする部分を実装します

hajime-miyauchi commented 4 years ago

ポンチ絵書いてみました。多分必要になるのはこんなところ(黄色部分)かと。 一つのプログラム内で完結することもできるし、さらに分割することもできると思いますが、このくらいの粒度で分割されていると変化に対応しやすそう。

スクリーンショット 2020-03-21 22 26 50

hajime-miyauchi commented 4 years ago

「東京都 新型コロナ対策サイト 地域展開 情報共有」にも各地域のスクレイピングの記事が紹介されてました。(ので表も作っておいた)

https://hackmd.io/9TTyyjchR8ufuMd9z08Rcg?view

スクリーンショット 2020-03-21 22 40 32

Miura55 commented 4 years ago

とりあえず県内の発生事例をCSVに変換しました。こんな感じでOKですか?

コメント 2020-03-22 070102

hajime-miyauchi commented 4 years ago

おおーー!素晴らしい!!そんな感じです。

hajime-miyauchi commented 4 years ago

@Miura55 CSVからJSONを生成するコードを作りました。もし可能であれば、出力するCSVの書式を合わせられると連携しやすくて良いかもです。

https://github.com/hajime-miyauchi/covid19-aichi-tools

Miura55 commented 4 years ago

ありがとうございます。今から修正かけます

Miura55 commented 4 years ago

@hajime-miyauchi ちょっと相談ですが、県内の発生事例はPDFからJSONに変換できましたけど、検査陽性者に関しては画像データしかなく、文字を取るのが難しいのでこれに関しては従来どおり手作業で抜き出して、JSONに追加する形でやろうと思いますが、いかがでしょうか? コメント 2020-03-25 224241

Miura55 commented 4 years ago

ちなみに今自動更新でできたJSONがこんな感じです! https://github.com/Miura55/convid-19-scrape/blob/up-loadcsv/data.json

hajime-miyauchi commented 4 years ago

@Miura55 その画像については現状目視確認して、Googleスプレッドシートに反映するとあとはコマンド実行すればdata.jsonができあがるところまではできています。(下記参照)

https://docs.google.com/presentation/d/1zImnNFo_XebMO6fmuUiPPALPw2NZGg57TXWmKnkQ2Lg/edit#slide=id.g825c5544ea_0_5

可能であればPyOCRも試してみたいなとは思ってました。数字だけなので精度はそんなに悪くないと思うのですが、やってみないとなんともというところですね。

https://qiita.com/henjiganai/items/7a5e871f652b32b41a18

Miura55 commented 4 years ago

実はPyOCRを試したんですが、画像の問題で思ってたよりも認識率が悪いですね。僕のGithubにはORCのコードを挙げていますが、出来る限り文字が認識できるように画像を加工しても全然です。 https://github.com/Miura55/convid-19-scrape/blob/master/OCR.py

実際に上記のコードで認識した結果です。 https://github.com/Miura55/convid-19-scrape/blob/master/ocr-test-out.txt

hajime-miyauchi commented 4 years ago

@Miura55 試してたんですね!早い!

その精度だとちょっとしんどいですね。取り急ぎ私のコードでGoogle Spreadシートからの読み込みには対応できてるので、そのデータについては自動化は後回しですね。

Miura55 commented 4 years ago

ひとまず、画像しかないところはスプレッドシートを読み込んで後はスクレイプでjsonを生成してみました。これでいいですよね? https://github.com/Miura55/convid-19-scrape/blob/master/data/data.json

hajime-miyauchi commented 4 years ago

@Miura55 diffとってないのでパッと見ですが、patients_summaryの日付が歯抜けになってる気がします。

Miura55 commented 4 years ago

そうですか?僕は宮内さんの作ってたjsonを参考にして作成しています

Miura55 commented 4 years ago

あっ分かりました。日付は全てピックアップされてるはずですが、データの並びが日付順になってませんね。今出先なので帰ったら修正します

hajime-miyauchi commented 4 years ago

順番が不定になっているようなのでちゃんと確認できてないのですが。もしかしたら順番が不定なだけで歯抜けになってないかもしれません。あとで確認してみます。

image

現在のdata.jsonは日付順になっているので、Pythonの実行環境にもよるかもしれませんね。

image

Miura55 commented 4 years ago

標準ライブラリでやればこういうことが無いと思いますが、僕のはデータ整形にpandas使っているので変換中に並びが崩れてしまったかもしれませんね

hajime-miyauchi commented 4 years ago

あ、あと、小計0の日も多分グラフ表示に必要なんです...

hajime-miyauchi commented 4 years ago

なので、patientsを単純に集計するだけだと0の日が抜けちゃう。

Miura55 commented 4 years ago

そういえばそうですね、0は完全に無視してましたね。それもこみでコード直しますね

Miura55 commented 4 years ago

直したら今日の分のデータがjsonで出来てるのでプルリク出せそうです

hajime-miyauchi commented 4 years ago

https://github.com/code4nagoya/covid19/pull/143

今日の分こちらのプルリクも上がってるのでご参照下さいー

Miura55 commented 4 years ago

@hajime-miyauchi 日付もソートさせてだいぶ見やすくなりました! https://github.com/Miura55/convid-19-scrape/blob/master/data/data.json

コメント 2020-03-26 235935

hajime-miyauchi commented 4 years ago

@Miura55 可能であればDIFFでの確認をお願いしますー。

Miura55 commented 4 years ago

@hajime-miyauchi これでいかがですかー? コメント 2020-03-27 214234

hajime-miyauchi commented 4 years ago

jsondiffというツールでもDIFF取ってみましたが、良さそうです! http://www.jsondiff.com/

バックデートして接触状況が更新されている箇所が何箇所かわかりますね! (左が @Miura55 さんのツールで出力したJSON、右が現在のJSON)

スクリーンショット 2020-03-27 23 02 45

@Miura55 さんのツールのほうに移行するか、ツールをマージするかどうするのが良いでしょう?

hajime-miyauchi commented 4 years ago

私のツールは自動化までのつなぎなのでまるっと捨てても大丈夫です!

Miura55 commented 4 years ago

@hajime-miyauchi 僕のツールに移行していいかもです!ちなみに今はこのレポジトリup-loadcsvブランチに3時間おきにデータが更新されるので、このブランチをクローンさせてデータをcovid19のレポジトリにコピー→プルリクという流れで更新するイメージです。 具体的にはこんな感じです! https://github.com/Miura55/convid-19-scrape/blob/master/README.md

hajime-miyauchi commented 4 years ago

それでいきましょう!一度プルリク出してみてください!

hajime-miyauchi commented 4 years ago

https://github.com/code4nagoya/covid19-scrape

codd4nagoyaにもリポジトリ用意しました。 @Miura55 さんにAdmin権限つけたので、もしよければこちらに移行してもらえると助かりますー。

Miura55 commented 4 years ago

プルリク出してみたので、ご確認お願いしますー!

Miura55 commented 4 years ago

https://github.com/code4nagoya/covid19-scrape

codd4nagoyaにもリポジトリ用意しました。 @Miura55 さんにAdmin権限つけたので、もしよければこちらに移行してもらえると助かりますー。

こちらのコード移行したのでよろしくです!

imabari commented 4 years ago

PDFからCSV変換についてcamelot-pyを使うとdataframeに変換できます。 以下サンプルです。

愛知県の感染状況のPDFデータをCSVに変換 https://imabari.hateblo.jp/entry/2020/03/30/132758

Miura55 commented 4 years ago

ありがとうございます。tabulaよりも良さそうですね。試してみます

imabari commented 4 years ago

兵庫県のですがjsonデータを作成しています

ご参考になれば https://github.com/imabari/hyougo/blob/master/hyougo_json.ipynb

日付の0補完も.asfreq("D", fill_value=0)の1行でできます。 df_pts = (df_kanja["確認日"].value_counts().sort_index().asfreq("D", fill_value=0).reset_index()

Miura55 commented 4 years ago

@imabari ありがとうございます。camelot-pyでCSV変換できました。途中でデータが結合される問題も解消しました。

amay077 commented 4 years ago

こちらは、

愛知県発表以外に(感染者情報がある)市区町村の情報も載せたい できれば自動的に情報を収集して更新したい

という当初の目的は、情報収集の仕組みが難しいため却下となりました。 この issue の役割は終わったので close します。