データソースは、厚生労働省発表のPDFデータを用います。

2020年3月20日時点のURLから

https://www.mhlw.go.jp/stf/newpage_10204.html

国内事例(チャーター便、クルーズ船の患者を除く)における都道府県別
患者報告数(2020年3月15日12時時点)
のPDFを利用することとします。

PDFの読み込み

データ取得部分は今回は割愛します。
PDFデータの読み込みにはpdfminerを使用します。

from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO

def convert_pdf_to_txt(path):

     rsrcmgr = PDFResourceManager()
     retstr = StringIO()
     laparams = LAParams()
     laparams.detect_vertical = True
     device = TextConverter(rsrcmgr, retstr, laparams=laparams)
     fp = open(path, 'rb')
     interpreter = PDFPageInterpreter(rsrcmgr, device)
     maxpages = 1
     caching = True
     pdf_text = ''

     for page in PDFPage.get_pages(fp, None,
         maxpages=maxpages,caching=caching,
         check_extractable=True):
         interpreter.process_page(page)
         str2 = retstr.getvalue()
         pdf_text += str2


 fp.close() device.close() retstr.close() return pdf_text
 result_list = []
 result_txt = convert_pdf_to_txt('000608453.pdf')

Japanmapへ読み込むための加工

Japanmapへ読み込ませるために、データを辞書型へ変換し
人数のデータを整数へ加工します。

lines = result_txt.split('\n')
 data = {}
 for i,line in enumerate(lines[4:],start=0):
     if line and ('道' in line or '県' in line or '府' in line or '都' in line ):
         data[line.strip()] = int(lines[4+37+(2*(i))].split(' ')[0])

色の調整

数値データをカラーデータへ変換します。

m = max(data.values())
def color_scale(r):
    return (255,0,int(255 - 255/m * r*5))
 
for p,d in data.items():
     c = color_scale(d)
     data[p] = c

描画

%matplotlib inline
import japanmap
import matplotlib.pyplot as plt

rcParams['figure.figsize'] = 8,8
plt.imshow(picture(data));
plt.title('Corona viruls confirmed in Japn 2020-3-20')