Bellmark Education Grant Foundation Wöchentlicher Bellmark-Empfangsstatus Aggregiert aus PDF nach Präfektur / Stadt / Gemeinde / Stadt / Dorf
Derzeit wurde auch Webbellmark gestartet. Sie können über die Webbellmark-Website auf Ihren Lieblingsshop zugreifen und Bellmark-Punkte entsprechend Ihrem Einkauf sammeln.
Sie können auch Jaran und Rakuten Travel verwenden, sodass Sie unterstützen können, ohne sich selbst zu bezahlen, indem Sie es verwenden, bevor Sie sich für Go To Travel bewerben.
Dieser Prozess aggregiert den Grenzbereich der X- und Y-Koordinate zur Position vieler Koordinaten. Ich passe Dinge an, die viele Charaktere haben und sich in zwei Phasen befinden oder bei denen es eine leichte Abweichung gibt
def snap_adjustment(s, limit=5):
count = s.value_counts().sort_index()
index = 0
value = 0
for i, v in count.items():
if (i - index) < limit:
if v > value:
s = s.replace(index, i)
index = i
value = v
else:
s = s.replace(i, index)
else:
index = i
value = v
return s
import pathlib
import time
import pandas as pd
import pdfplumber
import requests
from bs4 import BeautifulSoup
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
def snap_adjustment(s, limit=5):
count = s.value_counts().sort_index()
index = 0
value = 0
for i, v in count.items():
if (i - index) < limit:
if v > value:
s = s.replace(index, i)
index = i
value = v
else:
s = s.replace(i, index)
else:
index = i
value = v
return s
url = "https://www.bellmark.or.jp/collect/accept.htm"
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")
links = {
href.get("href")
for href in soup.select("div.cal-process > div.cal-row-date > div > a")
}
dfs = []
for link in links:
p = fetch_file(link)
with pdfplumber.open(p) as pdf:
for page in pdf.pages:
crop = page.within_bbox((0, 65, page.width, page.height - 40))
df_tmp = (
pd.DataFrame(crop.extract_words(keep_blank_chars=True))
.astype({"x0": float, "x1": float, "top": float, "bottom": float})
.sort_values(["top", "x0"])
)
df_tmp["top"] = snap_adjustment(df_tmp["top"], 6)
df_tmp["x0"] = snap_adjustment(df_tmp["x0"])
table = (
df_tmp.pivot_table(
index=["top"],
columns="x0",
values="text",
aggfunc=lambda x: "".join(str(v) for v in x),
)
).values
df = pd.DataFrame(table, columns=["Präfekturen", "Stadt", "Gemeinde, Stadt, Dorf", "Teilnehmende Gruppen", "Empfangsdatum"])
dfs.append(df)
time.sleep(3)
df = pd.concat(dfs)
df
df["Gemeinde"] = df["Stadt"].fillna("") + df["Gemeinde, Stadt, Dorf"].fillna("")
df1 = df.reindex(columns=["Präfekturen", "Gemeinde", "Teilnehmende Gruppen", "Empfangsdatum"])
df1.to_csv("data.csv")
df1
import japanize_matplotlib
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["figure.dpi"] = 200
df1["Präfekturen"].value_counts(ascending=True).plot.barh(figsize=(5, 10))
#Grafik speichern
plt.savefig("01.png ", dpi=200, bbox_inches="tight")
plt.show()
s = df1.groupby(["Präfekturen", "Gemeinde"])["Gemeinde"].count().sort_values(ascending=True)
s.tail(50).plot.barh(figsize=(5, 10))
#Grafik speichern
plt.savefig("02.png ", dpi=200, bbox_inches="tight")
plt.show()