Des informations sur le nouveau virus corona, mises à jour quotidiennement, sont publiées sur le site Web du ministère de la Santé, du Travail et des Affaires sociales. Communiqué de presse sur la nouvelle infection à coronavirus (situation d'épidémie, épidémie de patients nationaux, situation à l'étranger, etc.) À partir de là, j'ai créé un programme qui recueille des données détaillées par préfecture (bien qu'il ne s'agisse que de données après 5/10 avec le même format PDF) et les enregistre dans Google SpreadSheet ou Excel, je voudrais donc le présenter.
Comme il est enregistré dans un logiciel de calcul de table, vous pouvez facilement obtenir une vue d'ensemble des changements dans le nombre de personnes infectées et le taux d'aggravation en les graphiques plus tard.
Si vous l'utilisez dans Excel, vous pouvez l'utiliser tel quel, mais vous devez vous préparer un peu pour accéder à Google SpreadSheet à partir d'un programme Python. Veuillez consulter le site suivant, etc., préparez-vous et entrez le nom du fichier json et la clé de la feuille de calcul dans la partie commentaire (autour de la ligne 105) du programme. [N'hésitez plus] Résumé des paramètres initiaux de lecture et d'écriture sur des feuilles de calcul avec Python Modifier la feuille de calcul Google en Python
import requests
import re
import regex
from bs4 import BeautifulSoup
from tika import parser
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import openpyxl
import pickle
isGss = False if bool(int(input("1. GoogleSpreadSheet 2. Excel ")) -
1) else True
req = requests.get(
"https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000121431_00086.html")
req.encoding = 'utf-8'
soup = BeautifulSoup(req.text, 'html.parser')
urls = {}
try:
with open("dates.pickle", "rb") as f:
dates = pickle.load(f)
except:
dates = []
column_cnt = len(dates) + 2
for i in soup.select("div[class='m-grid__col1']")[1].find_all("a"):
url = i["href"]
if "À propos de la situation actuelle de la nouvelle infection à coronavirus et de la réponse du ministère de la Santé, du Travail et du Bien-être social" not in i.text: continue
b = re.findall("Reiwa\d{1,2}Année\d{1,2}Mois\d{1,2}journée", i.text)
if b: date = b[0]
else:
temp_r = requests.get(url)
temp_r.encoding = 'utf-8'
date = re.findall("Reiwa\d{1,2}Année\d{1,2}Mois\d{1,2}journée", temp_r.text)[0]
date = date.translate(
str.maketrans({
"0": "0",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9"
}))
date = "".join([(i.zfill(2) if i.isdigit() else i) for i in re.findall(
"(Reiwa)(\d{1,2})(Année)(\d{1,2})(Mois)(\d{1,2})(journée)", date)[0]])
if re.findall("Reiwa Mai 2002 0[1-9]journée|Reiwa 2002 0[1-4]Mois\d{1,2}journée", date): continue
elif date not in dates:
urls[date] = i["href"]
dates.append(date)
with open("dates.pickle", "wb") as f:
pickle.dump(dates, f)
pdfs = {}
for date, url in urls.items():
temp_r = requests.get(url)
temp_r.encoding = 'utf-8'
soup = BeautifulSoup(temp_r.text, 'html.parser')
for j in soup.find_all('a', href=True):
if 'Statut des tests préfectoraux positifs' in j.text:
pdfs[date] = "https://www.mhlw.go.jp" + j['href']
def makeDict(text):
l = {}
for i in regex.findall(
"(\p{Han}(?:\s+\p{Han}|Total){1,2}|(Autre))([※\d\s]+?[\nG])",
re.sub("※\d{1,2}", "", text).translate(
str.maketrans({
"\u3000": " ",
",": "",
"-": "0"
}))):
a = list(map(int, i[1].replace("G", "").split()))
b = "".join(i[0].split())
l[b] = {}
l[b]["Nombre de positifs"] = a[0]
l[b]["Nombre de personnes effectuant des tests PCR"] = a[1]
l[b]["Ceux qui ont besoin d'un traitement hospitalier, etc."] = a[2]
l[b]["Sévère"] = a[3]
l[b]["Nombre de personnes renvoyées ou annulées"] = a[4]
l[b]["Décès (cumulatif)"] = a[5]
l[b]["Vérification"] = a[6]
return l
cnt = 0
if len(pdfs) == 0: pass
elif isGss:
scope = [
'https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive'
]
credentials = ServiceAccountCredentials.from_json_keyfile_name('Le nom du fichier json.json', scope) #Le nom du fichier json
gc = gspread.authorize(credentials)
SPREADSHEET_KEY = 'Clé de feuille de calcul' #Clé de feuille de calcul
workbook = gc.open_by_key(SPREADSHEET_KEY)
try:
worksheets = [
workbook.worksheet('Nombre de positifs'),
workbook.worksheet('Nombre de personnes effectuant des tests PCR'),
workbook.worksheet('Ceux qui ont besoin d'un traitement hospitalier, etc.'),
workbook.worksheet('Sévère'),
workbook.worksheet('Nombre de personnes renvoyées ou annulées'),
workbook.worksheet('Décès (cumulatif)'),
workbook.worksheet('Vérification')
]
isFirst = False
except:
workbook.add_worksheet(title='Nombre de positifs', rows=100, cols=500)
workbook.add_worksheet(title='Nombre de personnes effectuant des tests PCR', rows=100, cols=500)
workbook.add_worksheet(title='Ceux qui ont besoin d'un traitement hospitalier, etc.', rows=100, cols=500)
workbook.add_worksheet(title='Sévère', rows=100, cols=500)
workbook.add_worksheet(title='Nombre de personnes renvoyées ou annulées', rows=100, cols=500)
workbook.add_worksheet(title='Décès (cumulatif)', rows=100, cols=500)
workbook.add_worksheet(title='Vérification', rows=100, cols=500)
workbook.del_worksheet(workbook.sheet1)
worksheets = [
workbook.worksheet('Nombre de positifs'),
workbook.worksheet('Nombre de personnes effectuant des tests PCR'),
workbook.worksheet('Ceux qui ont besoin d'un traitement hospitalier, etc.'),
workbook.worksheet('Sévère'),
workbook.worksheet('Nombre de personnes renvoyées ou annulées'),
workbook.worksheet('Décès (cumulatif)'),
workbook.worksheet('Vérification')
]
isFirst = True
cas = [
worksheet.range(1, column_cnt, 50, column_cnt + len(pdfs) - 1)
for worksheet in worksheets
]
for date, url in sorted(pdfs.items()):
print(date)
file_data = parser.from_buffer(requests.get(url))
text = file_data["content"]
l = makeDict(text)
if isFirst:
for worksheet in worksheets:
cells = worksheet.range(2, 1, 50, 1)
for i, key in enumerate(l.keys()):
cells[i].value = key
worksheet.update_cells(cells)
isFirst = False
for i, worksheet in enumerate(worksheets):
cells = cas[i][cnt::len(pdfs)]
cells[0].value = date
for j, a in enumerate(l.keys()):
key = list(l[a].keys())[i]
cells[j + 1].value = l[a][key]
cnt += 1
for i, worksheet in enumerate(worksheets):
worksheet.update_cells(cas[i])
else:
filename = "covid19.xlsx"
try:
wb = openpyxl.load_workbook(filename)
wss = [
wb.get_sheet_by_name('Nombre de positifs'),
wb.get_sheet_by_name('Nombre de personnes effectuant des tests PCR'),
wb.get_sheet_by_name('Ceux qui ont besoin d'un traitement hospitalier, etc.'),
wb.get_sheet_by_name('Sévère'),
wb.get_sheet_by_name('Nombre de personnes renvoyées ou annulées'),
wb.get_sheet_by_name('Décès (cumulatif)'),
wb.get_sheet_by_name('Vérification')
]
isFirst = False
except:
wb = openpyxl.Workbook()
wss = [
wb.create_sheet('Nombre de positifs'),
wb.create_sheet('Nombre de personnes effectuant des tests PCR'),
wb.create_sheet('Ceux qui ont besoin d'un traitement hospitalier, etc.'),
wb.create_sheet('Sévère'),
wb.create_sheet('Nombre de personnes renvoyées ou annulées'),
wb.create_sheet('Décès (cumulatif)'),
wb.create_sheet('Vérification')
]
wb.remove(wb.get_sheet_by_name('Sheet'))
isFirst = True
for date, url in sorted(pdfs.items()):
print(date)
file_data = parser.from_buffer(requests.get(url))
text = file_data["content"]
l = makeDict(text)
if isFirst:
for ws in wss:
for i, key in enumerate(l.keys()):
ws.cell(i + 2, 1, key)
isFirst = False
for i, ws in enumerate(wss):
ws.cell(1, column_cnt + cnt, date)
for j, a in enumerate(l.keys()):
key = list(l[a].keys())[i]
ws.cell(j + 2, column_cnt + cnt, l[a][key])
cnt += 1
wb.save(filename)
Enregistrez et exécutez simplement à partir de Python.
Un dates.pickle
sera généré pour sauvegarder les dates enregistrées, veuillez ne pas le déplacer du même répertoire que le fichier exécutable.
Vous pouvez facilement visualiser les changements dans le nombre de personnes infectées.
En regardant l'évolution du nombre de personnes infectées dans tout le pays, je me demande si la deuxième vague s'installe ...? Si vous souhaitez observer la transition d'infection en détail ou si vous souhaitez effectuer un traitement statistique, veuillez l'essayer. Il semble qu'il puisse être mis à jour automatiquement s'il est exécuté régulièrement à l'aide du planificateur de tâches ou GCF.