
コロナウイルス COVID-19 の世界的な症例を視覚化する
時系列アニメーションバブルプロットの使用
視覚化に役立つリソースをここに集めました。 2020 年 3 月 26 日のライブ ウェビナーのビデオを視聴し、これらの分析を選択した理由を読み、データにアクセスするか、 JMPライブレポート、添付のスクリプトを試したり、データを使用して独自の分析を行ったりしてください。
コロナウイルス COVID-19 の蔓延に関するデータを伝達するこの継続的な取り組みでは、多くの最新情報が提供されています。 最新バージョンには、グローバル サマリーとローカル サマリーを確認するいくつかのグラフ ビルダー プロットが含まれています。 また、バブル プロットには、日々のカウントの変化を表す色が追加されています。 グラフには対数スケールと線形スケールを切り替えるためのタブ ボックスがあり、ローカル カウント図では、線形スケール プロットには分割軸グラフがあり、低カウント領域と高カウント領域の両方を一緒に表示します。
こちらの HTML バージョンをご覧ください。 JMPライブページ。
序文:
- コロナウイルスとその蔓延によって引き起こされるすべての問題は深刻で、多くの人々に影響を与えており、中には恐ろしい形で影響を与えている人もいます。 この数字を作成することによって、この問題の深刻さを矮小化することは私の意図ではありません。 ヒステリーや外国人排斥を助長することが私の目標でもありません。
- 私のスクリプトでは、オリジナルの作成者が使用した場所の名前を再コード化しています。 私には政治的意図はありません。 Google Map API を使用してジオコーディングを行う場合、国の位置を取得するために API が必要です。 「台湾、台湾」はレストランの場所になりますが、「台湾、中国」は台湾の中心近くの地理コードになります。 繰り返しますが、これは政治的なものではなく、機能的なものです。
- コロナウイルスの報告と検出に関するすべてのデータには大きな議論の余地があります。 私はこのデータの正確性を保証しません。ただし、これは私が知る限り、公的に入手可能なデータ (英語) を集約したものとしては最も優れています。 もっと良いものがあれば、ぜひ教えてください。
- 私のデータではありません。 ジョンズ・ホプキンス大学ホワイティング工学部システム科学工学センターの人々は、データとともに見栄えの良いダッシュボードを公開しました。 データを利用できるようにしてくれたこのチームに多大な感謝と称賛を送ります。ブログを読むそしてぜひチェックしてみてください視覚化。
彼らはまた、生データを含む GitHub ページ簡単にアクセスできる形式で。 (称賛 x 10^6)。
時系列アニメーションでバブル プロットを使用する理由
バブル プロットは、多数の次元を 1 つのプロットで表すことができるため、高度な実用性があります。 時系列アニメーションを追加すると、視聴者による複雑な事前の注意深い処理をまったく必要とせずに、これらの次元間の関係の変化を視覚化し、伝えることができます。 (別名:見た目もカッコよくてわかりやすい)
バブル プロットは次の関係を調べるのに役立つと述べたことに注意してください。多数次元だけでなく、時間の経過とともにアニメーション化される一時間の経過とともにアニメーション化されるディメンション (変数)。 X 軸に 1 つのディメンション、Y 軸に時間を設定した実行/管理チャートのようなプロットを作成し、時間によってアニメーション化する人を見てきました。 これは退屈な実行/管理図と呼ばれます。これは行わないでください。
ここで構築する図について。 X 軸と Y 軸は測地線スケールに基づいているため、点はマップ上で整列します。 グラフ上の点の空間関係がわかります。背景の地図の形状によってコンテキストが与えられます。 次に、マーカーのサイズ ディメンションを追加します。これは、各場所の期間別の累積症例数です。 最後に、期間シーケンスを使用してプロットをアニメーション化し、時間の経過とともに成長または表示されるバブルを生成します。 各ポイントには国と地域ごとにラベルが付いています。 この図では、すべての個々のポイントを国 ID に集約したり、国 ID 内の地域 ID に分割したりすることができます。
グラフを生成するスクリプトは、移動するターゲットを追跡します。 データの作成者は変更を加え続けるため、ソース データに変更があった場合、これは数日間しか機能しない可能性があります。 2020 年 2 月 12 日の朝の時点では、正常に動作しています。 スクリプトの最後には、JMP Live で図を公開または更新するオプションがあります。 JMP Live のパッケージにアクセスするための私のトップシークレット API キーを持っていないため、これは機能しません。 これは、JMP Live がある場合にパブリッシュとリフレッシュがどのように機能するかを示す例として役立つかもしれません。
スクリプトの仕組み。
- スクリプトの後半で必要なすべての変数を設定します
- データをダウンロードしてフォーマットします
- この部分には奇妙な点がいくつかあります。 いくつかの時点で、データをローカルに保存し、テーブルを閉じてから再度開きます。 スクリプトを強制的に順次実行するのに苦労していましたが、これはそれを実現する方法です。 場合によっては、次のステップが開始される前にテーブルの更新が完了せず、テーブルが不安定になることがありました。この強引な方法が私の性格とスタイルにマッチしています。
- バブルプロットを生成する
- 公開または更新が必要かどうかを判断し、図を公開または更新します。
スクリプトを見ると、セクションを式で囲んでいることに気づくかもしれません。 これは、コード折りたたみオプションと組み合わせると、長いスクリプトを整理する便利な方法です (スクリプト エディターの環境設定を確認してください)。
2020 年 3 月 26 日更新
今週初めに、私が使用していたデータセットが非推奨になりました。 そして今朝、非推奨のデータが別の場所に移動されました。 言うまでもなく、このプロジェクトは本当に感動的なターゲットです。 Johns Hopkins CSSE には別のデータ GitHub リポジトリがあり、毎日データが更新されます。 以下の新しいスクリプト「Compile COVID-19 Time Series Data」は、リポジトリ内にどのファイルがあるかを確認し、それらをダウンロードして組み立てます。 このデータセットにはいくつかの興味深い「特徴」があります。 私は recode を使用して問題の多くを解決し、いくつかの独創的な数式を使用して残りを解決しました。
いくつかの問題と解決策
- 各サイトの場所は一貫していないため、最新の場所を使用し、他の場所ではそれを置き換えました。
- 累積数は増加するか、変わらないはずです。 累積カウントが減少した場合は、前日の値が使用されます。 これにより、累積カウントから導出される日次カウントに負の数値が含まれるのを防ぎます。
- テーブル内の列名は、時間の経過とともに一貫しません。 ラベルは 3/24/20 テーブルの列名に統一されます。
- 一部の地名には、タイプミスの不一致や末尾/先頭のスペースが含まれています。 Recode はこれらを解決します。
- 場所は、各場所の確認済み数の合計によって値順と色順に表示されます。
- 最終的な表には数式が含まれていません。 テーブルは、ソートに依存する計算に影響を与えることなくソートできます。
2020 年 4 月 3 日更新
本日スクリプトを更新しました。 実行には 1 分ほどかかることに注意してください。 クリーンアップ スクリプトでは多くの処理が行われており、一部の数式は完了するまでに少し時間がかかります。
このバージョンには、重複行を削除するセクションとその他のいくつかの調整が最後に含まれています。
累計カウントと日別カウントのバブル プロットを作成するための新しい列式。 これらは、5 日または 7 日の平均を取るのではなく、場所の列ごとの移動平均です。 移動平均により、さらにいくつかのポイントが得られます。
グラフに関する情報を提供する役立つ記事:
•時系列に何をプロットするか、特にバブル プロットについてのメモ。 累積カウントではバブルが増え続けていますが、日ごとのカウントではホット スポットが示されていることに注意してください。(ジョエル・セラニキオ)
• https://www.futurehealth.live/blog/2020/2/17/all-the-coronavirus-maps-are-wrong
• https://www.futurehealth.live/blog/2020/2/10/coronavirus-dataviz-sucks
•地図および地図の形状を使用する場合の注意事項。 (ケネス・フィールド)
• https://www.esri.com/arcgis-blog/products/product/mapping/mapping-coronavirus-responsibly/
•遅行指標と異なる軸スケールでのデータの解釈に関する注意。 (カイザー・ファン)
• https://junkcharts.typepad.com/numbersruleyourworld/2020/03/how-to-act-like-a-data-scientist-8-dont-use-lagging-indicators-to-forecast.html
@ケビンB昔ながらの分割軸トリック。 変数を X 軸に配置し、最初の変数の右または左に再度配置します。 シンプルですよね?しかし、整理するのは手に負えないほど困難です。なぜなら、正気で同じ軸に同じ変数を 2 回配置する人がいるからです。 一方の軸は範囲の下限を取得し、もう一方の軸は上限を取得します。
たとえば、左側は 0 ~ 60 分、右側は 1 ~ 24 時間です。 さらに、もっと贅沢したい場合は、3 番目の X 軸に 2 日目から 10 日目までを表示します。
@bfoulkes正直に言うと、私が思いついたのはこれだけなので、皆さんがこれで何ができるか楽しみにしています。 おそらくイベントの時間のようなものですか?または、影響を受ける地域ごとに高度成長と停滞期の間の時間...
このスクリプトは、進行状況を追跡し、影響を受けた領域を把握し続けるのに最適です。その方法を教えてくれてありがとう。
このプロジェクトは、動くターゲットを追いかけるようなものです。 データの作成者はデータを移動し続けます。
私はスクリプトを更新しました (はい、バレンタインデーですが、モンスター ラザニアが焼き終わるのを待っている間に)。
データの取得はもう少しシンプルになり、データ フィルター ボックスの代わりに、各カテゴリが独自のタブ ボックスに表示されます。
また、バブル プロットにポイントが表示されないという問題もありましたが、これも修正されました。
この世界的な公衆衛生上の悲劇に対応するための便利な (そしてとてもクールな) スクリプトを提供する、本当に興味深く素晴らしい方法です、バイロン@バイロン_JMP 。JMP で時系列データを扱えるのは非常に便利です。
コードを .jsl ファイルにコピーしようとしましたが、一部のカスタマイズが必要であることに気付きました。たとえば、JMP Live アカウントを指定します。もう少し汎用的なものになるようにスクリプトを更新してもらえますか?そして、リンクしていただきありがとうございます生データを含む GitHub ページそのため、JMP の新しいデータを自分で調べてみることができます。