2022年2月10日木曜日

WHOのデータ

 WHOによる,COVID-19における世界各国地域別の感染者・死者数日別データをjson形式で取り込んでいたが,形式が変わったのか読み込めなくなってしまった。jsonの形を再び分析する気にならなかったので,探してみるとWHO Coronavirus (COVID-19) DashboardにCSVデータが見つかった。

データ形式をころころ変えるのはやめてほしい。これが日本だと,URLごとデータが消えてしまうので,それよりはましかもしれない。これまでのコードを生かしながら,修正プログラムを作った。

#!/usr/bin/perl
# 02/10/2022 K. Koshigiri
# usage: covid.pl 2022/02/22 3
# extract 3 days' data from 2022/02/22
# original data = https://covid19.who.int/page-data/table/page-data.json
# data https://covid19.who.int/WHO-COVID-19-global-data.csv

use Time::Local 'timelocal';
\$in = "whox";
\$out = "who-dat.csv";
\$cvd = "https://covid19.who.int/WHO-COVID-19-global-data.csv";

(\$sec, \$min, \$hour) = (0,0,0);
(\$year, \$month, \$day) = split '/', \$ARGV[0];
\$epochtime = timelocal(\$sec, \$min, \$hour, \$day, \$month-1, \$year-1900)+32400;

system("lynx -source \$cvd > \$in");

open(OUT,">\$out");
  print OUT "Date, Country Code, Country, Region Code, Confirmed, Cumulative Confirmed, Deaths, Cumulative Deaths \n";

  for (\$i=0; \$i<\$ARGV[1]; \$i++) {
    \$ut=\$epochtime+86400*\$i;
    {\$sec, \$min, \$hour, \$day, \$month, \$year) = gmtime(\$ut);
    \$year += 1900;
    \$month += 1;
    if(\$month < 10) {
      \$ym = "\$year-0\$month";
    } else {
      \$ym = "\$year-\$month";
    }
    if(\$day < 10) {
      \$dt = "\$ym-0\$day";
    } else {
      \$dt = "\$ym-\$day";
    }
    print "\$dt\n";

    open(IN, "<\$in");
    while() {
        if(/\$dt/) {
          print OUT;
       }
     }
    close(IN);
  }
close(OUT);


0 件のコメント: