Informationen zum neuen Koronavirus, die täglich aktualisiert werden, werden auf der Website des Ministeriums für Gesundheit, Arbeit und Soziales veröffentlicht. Pressemitteilung zu neuer Coronavirus-Infektion (Ausbruchsituation, Ausbruch von Hauspatienten, Situation in Übersee usw.) Von dort aus habe ich ein Programm erstellt, das detaillierte Daten nach Präfektur sammelt (obwohl es sich nur um Daten nach 5/10 mit demselben PDF-Format handelt) und diese in Google SpreadSheet oder Excel aufzeichnet. Daher möchte ich sie vorstellen.
Da es in der Tabellenberechnungssoftware aufgezeichnet ist, können Sie die Änderungen in der Anzahl der infizierten Personen und der Schweregradrate usw. leicht aus der Vogelperspektive betrachten.
Wenn Sie es in Excel verwenden, können Sie es so verwenden, wie es ist, aber Sie müssen ein wenig vorbereiten, um von einem Python-Programm aus auf Google SpreadSheet zuzugreifen. Bitte besuchen Sie die folgende Site usw., treffen Sie Vorbereitungen und geben Sie den Namen der JSON-Datei und den Tabellenkalkulationsschlüssel in den Kommentarteil (um Zeile 105) des Programms ein. [Zögern Sie nicht länger] Zusammenfassung der Grundeinstellungen zum Lesen und Schreiben in Tabellenkalkulationen mit Python Google-Tabelle in Python bearbeiten
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 "Über die aktuelle Situation einer neuen Coronavirus-Infektion und die Reaktion des Ministeriums für Gesundheit, Arbeit und Soziales" not in i.text: continue
b = re.findall("Reiwa\d{1,2}Jahr\d{1,2}Mond\d{1,2}Tag", 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}Jahr\d{1,2}Mond\d{1,2}Tag", 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})(Jahr)(\d{1,2})(Mond)(\d{1,2})(Tag)", date)[0]])
if re.findall("Reiwa Mai 2002 0[1-9]Tag|Reiwa 2002 0[1-4]Mond\d{1,2}Tag", 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 'Status der positiven Präfekturtests' 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}|Gesamt){1,2}|(Andere))([※\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]["Anzahl der Positiven"] = a[0]
l[b]["Anzahl der Personen, die PCR-Tests durchführen"] = a[1]
l[b]["Diejenigen, die eine Krankenhausbehandlung usw. benötigen"] = a[2]
l[b]["Stark"] = a[3]
l[b]["Anzahl der entlassenen oder stornierten Personen"] = a[4]
l[b]["Tod (kumulativ)"] = a[5]
l[b]["Überprüfung"] = 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('Der Name der JSON-Datei.json', scope) #Der Name der JSON-Datei
gc = gspread.authorize(credentials)
SPREADSHEET_KEY = 'Tabellenkalkulationsschlüssel' #Tabellenkalkulationsschlüssel
workbook = gc.open_by_key(SPREADSHEET_KEY)
try:
worksheets = [
workbook.worksheet('Anzahl der Positiven'),
workbook.worksheet('Anzahl der Personen, die PCR-Tests durchführen'),
workbook.worksheet('Diejenigen, die eine Krankenhausbehandlung usw. benötigen'),
workbook.worksheet('Stark'),
workbook.worksheet('Anzahl der entlassenen oder stornierten Personen'),
workbook.worksheet('Tod (kumulativ)'),
workbook.worksheet('Überprüfung')
]
isFirst = False
except:
workbook.add_worksheet(title='Anzahl der Positiven', rows=100, cols=500)
workbook.add_worksheet(title='Anzahl der Personen, die PCR-Tests durchführen', rows=100, cols=500)
workbook.add_worksheet(title='Diejenigen, die eine Krankenhausbehandlung usw. benötigen', rows=100, cols=500)
workbook.add_worksheet(title='Stark', rows=100, cols=500)
workbook.add_worksheet(title='Anzahl der entlassenen oder stornierten Personen', rows=100, cols=500)
workbook.add_worksheet(title='Tod (kumulativ)', rows=100, cols=500)
workbook.add_worksheet(title='Überprüfung', rows=100, cols=500)
workbook.del_worksheet(workbook.sheet1)
worksheets = [
workbook.worksheet('Anzahl der Positiven'),
workbook.worksheet('Anzahl der Personen, die PCR-Tests durchführen'),
workbook.worksheet('Diejenigen, die eine Krankenhausbehandlung usw. benötigen'),
workbook.worksheet('Stark'),
workbook.worksheet('Anzahl der entlassenen oder stornierten Personen'),
workbook.worksheet('Tod (kumulativ)'),
workbook.worksheet('Überprüfung')
]
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('Anzahl der Positiven'),
wb.get_sheet_by_name('Anzahl der Personen, die PCR-Tests durchführen'),
wb.get_sheet_by_name('Diejenigen, die eine Krankenhausbehandlung usw. benötigen'),
wb.get_sheet_by_name('Stark'),
wb.get_sheet_by_name('Anzahl der entlassenen oder stornierten Personen'),
wb.get_sheet_by_name('Tod (kumulativ)'),
wb.get_sheet_by_name('Überprüfung')
]
isFirst = False
except:
wb = openpyxl.Workbook()
wss = [
wb.create_sheet('Anzahl der Positiven'),
wb.create_sheet('Anzahl der Personen, die PCR-Tests durchführen'),
wb.create_sheet('Diejenigen, die eine Krankenhausbehandlung usw. benötigen'),
wb.create_sheet('Stark'),
wb.create_sheet('Anzahl der entlassenen oder stornierten Personen'),
wb.create_sheet('Tod (kumulativ)'),
wb.create_sheet('Überprüfung')
]
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)
Speichern Sie einfach und führen Sie Python aus.
Zum Speichern der aufgezeichneten Daten wird ein date.pickle
generiert. Verschieben Sie es bitte nicht aus demselben Verzeichnis wie die ausführbare Datei.
Sie können Änderungen in der Anzahl der infizierten Personen leicht visualisieren.
Angesichts der Veränderungen in der Zahl der Infizierten im ganzen Land frage ich mich, ob sich die zweite Welle beruhigt ...? Wenn Sie den Infektionsübergang detailliert beobachten oder eine statistische Verarbeitung durchführen möchten, versuchen Sie es bitte. Es scheint, dass es automatisch aktualisiert werden kann, wenn es regelmäßig mit dem Taskplaner oder GCF ausgeführt wird.
Recommended Posts