Closed amay077 closed 4 years ago
お知らせの量かなり多いので、現在のコンポーネントだと、縦にめちゃくちゃ長くなりそうですね。 お知らせのコンポーネントをスクロールする形にするなど、デザインに関しても考慮する必要ありそうです!
そうですね、トップページに載せるのは現状ママで最新の2~3件、それ以外および過去のものは、 https://github.com/tokyo-metropolitan-gov/covid19/issues/1082 と同じく「お知らせページ」のような別ページを用意するのがよいかな、と思います。
issueにかぶせで申し訳ありませんが、 現状のデータ更新の手間を、でできる範囲で楽にできないか、という観点の提案です。
現在、excelで作成->phpでjsonを吐き出し->masterマージという形で公開しています。 以下の形でアプリケーションに組み込めないでしょうか?
お試しでマクロでJSONを書き出すところまで作ってみました。課題等がなければどなたかアプリケーションへの反映部分を実装していただけないでしょうか?(火曜以降なら私もさわる時間つくれそう,...)
県発表のPDFを GoogleShread Sheetで追記 ↓ マクロでjsonを書き出し(自動) ↓ アプリケーション側で読み込んでいい感じで処理に組み込み
↑を書いたあと確認したのですが、 マクロでJSON書き出しはログイン必須、回数制限がついているのですね。 JSONをコピペしてgithubに貼り付けてデプロイでも良いかもしれません。
@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"
},
今のマクロの処理を共有して一緒に修正しましょうか? こちらも調べている最中です、こんなようにやってみます。同じく修正がまだ必要です。
@billhung 確認ありがとうございます。 マクロの修正をお願いします。みんなが簡単に更新でいるようになることに価値を感じます。
以下は自由に修正していただいてOKですmm
紹介していただいたScriptの追加はできました 🎉
まだマクロの問題を判明中ですが、こんな感じでデバッグできそうです。
)
@ctyo
GOOD NEWS!
行141を
var objects = getObjects(dataRange.getValues(), normalizeHeaders(headers));
から
var objects = getObjects_(dataRange.getValues(), headers);
に変更するだけで、完成なデータに少し近づいてきた。
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
流れを読めてなくて申し訳ないのですが、データの自動更新について最終的には下記の完全自動化の動作がゴールかなと思ってます。
過渡期としては下記で、現状進んでいるのはこちらの準自動化だと認識してます。(間違ってたらごめんなさい)
完全自動化の前に準自動化が必要ではあるかもしれないんですが、平行して完全自動化も考えたいと思います。 (もし、完全自動化が早期に実現できそうなら、完全自動化を優先したい)
@codeforalone さんのコードや、北海道の自動化が参考になるのではと思っています。
codeforaloneさんのコード https://github.com/codeforalone/covid19-scrapy
COVID-19Hokkaidoデータ編③完全自動化(バリデーション・エラー検知) https://qiita.com/Kanahiro/items/782cb6d5497d3c3704ec
兵庫県のデータ取得 https://qiita.com/y-chan/items/87919fd712d1560c5e95
流れを読めてなくて申し訳ないのですが、データの自動更新について最終的には下記の完全自動化の動作がゴールかなと思ってます。
- 愛知県のPDFデータが更新される
- 定期的に愛知県のPDFデータをスクレイピングし、更新があれば自動でdata.jsonが更新される
- サイトのグラフが自動で書き換わる
過渡期としては下記で、現状進んでいるのはこちらの準自動化だと認識してます。(間違ってたらごめんなさい)
- 愛知県のPDFデータが更新される
- 定期的に人間が目視で愛知県のPDFデータを確認
- GoogleスプレッドシートにPDFデータを転記
- data.jsonが書き換わる?
- ちょっとこのへんわからないけど、たぶん手動でコミット、プッシュとかそんな感じ?
完全自動化の前に準自動化が必要ではあるかもしれないんですが、平行して完全自動化も考えたいと思います。 (もし、完全自動化が早期に実現できそうなら、完全自動化を優先したい)
@codeforalone さんのコードや、北海道の自動化が参考になるのではと思っています。
codeforaloneさんのコード https://github.com/codeforalone/covid19-scrapy
COVID-19Hokkaidoデータ編③完全自動化(バリデーション・エラー検知) https://qiita.com/Kanahiro/items/782cb6d5497d3c3704ec
兵庫県のデータ取得 https://qiita.com/y-chan/items/87919fd712d1560c5e95
これですが、ひとまず自分の方で試します。まずは愛知県のサイトのPDFからスクレイピングする部分を実装します
ポンチ絵書いてみました。多分必要になるのはこんなところ(黄色部分)かと。 一つのプログラム内で完結することもできるし、さらに分割することもできると思いますが、このくらいの粒度で分割されていると変化に対応しやすそう。
「東京都 新型コロナ対策サイト 地域展開 情報共有」にも各地域のスクレイピングの記事が紹介されてました。(ので表も作っておいた)
https://hackmd.io/9TTyyjchR8ufuMd9z08Rcg?view
とりあえず県内の発生事例をCSVに変換しました。こんな感じでOKですか?
おおーー!素晴らしい!!そんな感じです。
@Miura55 CSVからJSONを生成するコードを作りました。もし可能であれば、出力するCSVの書式を合わせられると連携しやすくて良いかもです。
ありがとうございます。今から修正かけます
@hajime-miyauchi ちょっと相談ですが、県内の発生事例はPDFからJSONに変換できましたけど、検査陽性者に関しては画像データしかなく、文字を取るのが難しいのでこれに関しては従来どおり手作業で抜き出して、JSONに追加する形でやろうと思いますが、いかがでしょうか?
ちなみに今自動更新でできたJSONがこんな感じです! https://github.com/Miura55/convid-19-scrape/blob/up-loadcsv/data.json
@Miura55 その画像については現状目視確認して、Googleスプレッドシートに反映するとあとはコマンド実行すればdata.jsonができあがるところまではできています。(下記参照)
可能であればPyOCRも試してみたいなとは思ってました。数字だけなので精度はそんなに悪くないと思うのですが、やってみないとなんともというところですね。
実は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
@Miura55 試してたんですね!早い!
その精度だとちょっとしんどいですね。取り急ぎ私のコードでGoogle Spreadシートからの読み込みには対応できてるので、そのデータについては自動化は後回しですね。
ひとまず、画像しかないところはスプレッドシートを読み込んで後はスクレイプでjsonを生成してみました。これでいいですよね? https://github.com/Miura55/convid-19-scrape/blob/master/data/data.json
@Miura55 diffとってないのでパッと見ですが、patients_summaryの日付が歯抜けになってる気がします。
そうですか?僕は宮内さんの作ってたjsonを参考にして作成しています
あっ分かりました。日付は全てピックアップされてるはずですが、データの並びが日付順になってませんね。今出先なので帰ったら修正します
順番が不定になっているようなのでちゃんと確認できてないのですが。もしかしたら順番が不定なだけで歯抜けになってないかもしれません。あとで確認してみます。
現在のdata.jsonは日付順になっているので、Pythonの実行環境にもよるかもしれませんね。
標準ライブラリでやればこういうことが無いと思いますが、僕のはデータ整形にpandas使っているので変換中に並びが崩れてしまったかもしれませんね
あ、あと、小計0の日も多分グラフ表示に必要なんです...
なので、patientsを単純に集計するだけだと0の日が抜けちゃう。
そういえばそうですね、0は完全に無視してましたね。それもこみでコード直しますね
直したら今日の分のデータがjsonで出来てるのでプルリク出せそうです
https://github.com/code4nagoya/covid19/pull/143
今日の分こちらのプルリクも上がってるのでご参照下さいー
@hajime-miyauchi 日付もソートさせてだいぶ見やすくなりました! https://github.com/Miura55/convid-19-scrape/blob/master/data/data.json
@Miura55 可能であればDIFFでの確認をお願いしますー。
@hajime-miyauchi これでいかがですかー?
jsondiffというツールでもDIFF取ってみましたが、良さそうです! http://www.jsondiff.com/
バックデートして接触状況が更新されている箇所が何箇所かわかりますね! (左が @Miura55 さんのツールで出力したJSON、右が現在のJSON)
@Miura55 さんのツールのほうに移行するか、ツールをマージするかどうするのが良いでしょう?
私のツールは自動化までのつなぎなのでまるっと捨てても大丈夫です!
@hajime-miyauchi 僕のツールに移行していいかもです!ちなみに今はこのレポジトリのup-loadcsv
ブランチに3時間おきにデータが更新されるので、このブランチをクローンさせてデータをcovid19のレポジトリにコピー→プルリクという流れで更新するイメージです。
具体的にはこんな感じです!
https://github.com/Miura55/convid-19-scrape/blob/master/README.md
それでいきましょう!一度プルリク出してみてください!
https://github.com/code4nagoya/covid19-scrape
codd4nagoyaにもリポジトリ用意しました。 @Miura55 さんにAdmin権限つけたので、もしよければこちらに移行してもらえると助かりますー。
プルリク出してみたので、ご確認お願いしますー!
https://github.com/code4nagoya/covid19-scrape
codd4nagoyaにもリポジトリ用意しました。 @Miura55 さんにAdmin権限つけたので、もしよければこちらに移行してもらえると助かりますー。
こちらのコード移行したのでよろしくです!
PDFからCSV変換についてcamelot-pyを使うとdataframeに変換できます。 以下サンプルです。
愛知県の感染状況のPDFデータをCSVに変換 https://imabari.hateblo.jp/entry/2020/03/30/132758
ありがとうございます。tabulaよりも良さそうですね。試してみます
兵庫県のですが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()
@imabari ありがとうございます。camelot-pyでCSV変換できました。途中でデータが結合される問題も解消しました。
こちらは、
愛知県発表以外に(感染者情報がある)市区町村の情報も載せたい できれば自動的に情報を収集して更新したい
という当初の目的は、情報収集の仕組みが難しいため却下となりました。 この issue の役割は終わったので close します。
改善詳細 / Details of Improvement
31 の続き
期待する見せ方・挙動 / Expected behavior
情報ソースとしては現在(3/12)のところ、以下が挙げられます(#31 では 愛知県のみ)。
[FYI] tokyo 版では、お知らせページを作るissueも上がっているようです tokyo-metropolitan-gov#1082