pip install camelot
pip install pandas
pip install requests
pip install beautifulsoup4
pip install matplotlib
pip install japanize-matplotlib
import csv
import datetime
import pathlib
import re
from urllib.parse import urljoin
import camelot
import pandas as pd
import requests
from bs4 import BeautifulSoup
from pdfminer.high_level import extract_text
def fetch_file(url, dir="."):
r = requests.get(url)
r.raise_for_status()
p = pathlib.Path(dir, pathlib.PurePath(url).name)
p.parent.mkdir(parents=True, exist_ok=True)
with p.open(mode="wb") as fw:
fw.write(r.content)
return p
url = "https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/kenkou/kekkaku-kansenshou01/houdou_00008.html"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
r = requests.get(url, headers=headers)
r.raise_for_status()
soup = BeautifulSoup(r.content, "html.parser")
d1 = []
d2 = []
for i in soup.select('ul.m-listLink > li > a[href$=".pdf"]')[::-1]:
text = i.get_text(strip=True)
t = re.match("(\d{4})Jahr(\d{1,2})Mond(\d{1,2})Tag", text)
#Datum der Pressemitteilung
if t:
year, month, day = map(int, t.groups())
dt_date = datetime.date(year, month, day)
else:
dt_date = datetime.date.today()
#PDF Datei
link = urljoin(url, i.get("href"))
p = fetch_file(link)
s = extract_text(p, page_numbers=[1])
m = re.search("(\d{4})Jahr(\d{1,2})Woche\((\d{1,2})Mond(\d{1,2})So ~(\d{1,2})Mond(\d{1,2})Tag\)", s)
if m:
s_year, s_week, s_month, s_day, e_month, e_day = map(int, m.groups())
dt_start = datetime.date(s_year, s_month, s_day)
dt_end = datetime.date(s_year, e_month, e_day)
if dt_start > dt_end:
dt_end = datetime.date(s_year + 1, e_month, e_day)
tables = camelot.read_pdf(
link, pages="2", split_text=True, strip_text=" ,\n", line_scale=40
)
df_tmp = pd.DataFrame(
tables[0].data[2:], columns=["Präfekturen", "Anzahl der Berichte", "Pro Fixpunkt"]
).set_index("Präfekturen")
df_tmp = df_tmp.mask(df_tmp == "-").astype(float)
df_tmp["Anzahl der Berichte"] = df_tmp["Anzahl der Berichte"].astype("Int64")
df_tmp.loc["Jahr"] = s_year
df_tmp.loc["Woche"] = s_week
df_tmp.loc["Anfangsdatum"] = dt_start
df_tmp.loc["Endtermin"] = dt_end
s1 = df_tmp["Anzahl der Berichte"]
s1.name = dt_date
d1.append(s1)
s2 = df_tmp["Pro Fixpunkt"]
s2.name = dt_date
d2.append(s2)
df1 = pd.concat(d1, axis=1, sort=False).T.astype({"Jahr": int, "Woche": int})
df2 = pd.concat(d2, axis=1, sort=False).T.astype({"Jahr": int, "Woche": int})
df3 = df1.join(df2, rsuffix="(Pro Fixpunkt)")
df = df3.reindex(
columns=[
"Jahr",
"Woche",
"Anfangsdatum",
"Endtermin",
"Hokkaido",
"Hokkaido (pro Fixpunkt)",
"Präfektur Aomori",
"Präfektur Aomori (pro Fixpunkt)",
"Präfektur Iwate",
"Präfektur Iwate (pro Festpunkt)",
"Präfektur Miyagi",
"Präfektur Miyagi (pro Festpunkt)",
"Akita",
"Präfektur Akita (pro Fixpunkt)",
"Präfektur Yamagata",
"Präfektur Yamagata (pro Festpunkt)",
"Präfektur Fukushima",
"Präfektur Fukushima (pro Festpunkt)",
"Präfektur Ibaraki",
"Präfektur Ibaraki (pro Festpunkt)",
"Präfektur Tochigi",
"Präfektur Tochigi (pro Festpunkt)",
"Präfektur Gunma",
"Präfektur Gunma (pro Festpunkt)",
"Saitama",
"Präfektur Saitama (pro Festpunkt)",
"Präfektur Chiba",
"Präfektur Chiba (pro Festpunkt)",
"Tokio",
"Tokio (pro Festpunkt)",
"Präfektur Kanagawa",
"Präfektur Kanagawa (pro Festpunkt)",
"Präfektur Niigata",
"Präfektur Niigata (pro Festpunkt)",
"Präfektur Toyama",
"Präfektur Toyama (pro Festpunkt)",
"Präfektur Ishikawa",
"Präfektur Ishikawa (pro Festpunkt)",
"Präfektur Fukui",
"Präfektur Fukui (pro Festpunkt)",
"Präfektur Yamanashi",
"Präfektur Yamanashi (pro Fixpunkt)",
"Präfektur Nagano",
"Präfektur Nagano (pro Festpunkt)",
"Präfektur Gifu",
"Präfektur Gifu (pro Festpunkt)",
"Präfektur Shizuoka",
"Präfektur Shizuoka (pro Fixpunkt)",
"Präfektur Aichi",
"Präfektur Aichi (pro Festpunkt)",
"Präfektur Mie",
"Präfektur Mie (pro Festpunkt)",
"Präfektur Shiga",
"Präfektur Shiga (pro Festpunkt)",
"Kyoto",
"Kyoto (pro Festpunkt)",
"Präfektur Osaka",
"Osaka (pro Fixpunkt)",
"Präfektur Hyogo",
"Präfektur Hyogo (pro Festpunkt)",
"Präfektur Nara",
"Präfektur Nara (pro Festpunkt)",
"Präfektur Wakayama",
"Präfektur Wakayama (pro Festpunkt)",
"Präfektur Tottori",
"Präfektur Tottori (pro Festpunkt)",
"Präfektur Shimane",
"Präfektur Shimane (pro Festpunkt)",
"Präfektur Okayama",
"Präfektur Okayama (pro Festpunkt)",
"Präfektur Hiroshima",
"Präfektur Hiroshima (pro Festpunkt)",
"Präfektur Yamaguchi",
"Präfektur Yamaguchi (pro Festpunkt)",
"Präfektur Tokushima",
"Präfektur Tokushima (pro Festpunkt)",
"Präfektur Kagawa",
"Präfektur Kagawa (pro Festpunkt)",
"Präfektur Ehime",
"Präfektur Ehime (pro Festpunkt)",
"Präfektur Kochi",
"Präfektur Kochi (pro Fixpunkt)",
"Präfektur Fukuoka",
"Präfektur Fukuoka (pro Festpunkt)",
"Präfektur Saga",
"Präfektur Saga (pro Festpunkt)",
"Präfektur Nagasaki",
"Präfektur Nagasaki (pro Festpunkt)",
"Präfektur Kumamoto",
"Präfektur Kumamoto (pro Festpunkt)",
"Präfektur Oita",
"Präfektur Oita (pro Festpunkt)",
"Präfektur Miyazaki",
"Präfektur Miyazaki (pro Fixpunkt)",
"Präfektur Kagoshima",
"Präfektur Kagoshima (pro Festpunkt)",
"Präfektur Okinawa",
"Präfektur Okinawa (pro Fixpunkt)",
"Gesamtzahl",
"Gesamtzahl (pro Festpunkt)",
"Letztes Jahr synchronisiert (insgesamt)",
"Letztes Jahr synchronisiert (Gesamtzahl) (pro Fixpunkt)",
]
)
df.to_csv(
"influ_all.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf_8_sig", na_rep="-",
)
import japanize_matplotlib
import matplotlib.pyplot as plt
#Auflösung
import matplotlib as mpl
mpl.rcParams['figure.dpi'] = 200
df1.set_index("Endtermin", inplace=True)
df1.loc[:, "Hokkaido": "Präfektur Okinawa"].fillna(0).plot.bar(subplots=True, layout=(7, 7), figsize=(30, 30), sharey=True)
#Grafik speichern
plt.savefig("influ.png ", dpi=200, bbox_inches="tight")
plt.show()
Recommended Posts