Daten-Wrangling der Excel-Datei mit dem Status meiner Kartenausstellung (September) wurde fortgesetzt
import csv
import datetime
import pandas as pd
def df_conv(df, col_name, population_date, delivery_date):
df.set_axis(col_name, axis=1, inplace=True)
df["Basisdatum der Bevölkerungsberechnung"] = population_date.strftime("%Y/%m/%d")
df["Basisdatum für die Berechnung der Anzahl der Lieferungen"] = delivery_date.strftime("%Y/%m/%d")
df.insert(0, "Basisdatum der Berechnung", delivery_date.strftime("%Y/%m/%d"))
return df
def my_round(s):
return int(s * 1000 + 0.5) / 10
df = pd.read_excel(
"https://www.soumu.go.jp/main_content/000703058.xlsx", sheet_name=1, header=None
).sort_index(ascending=False)
df.dropna(thresh=3, inplace=True)
dfg = df.groupby((df[0] == "Zeitpunkt").cumsum())
dfs = [g.dropna(how="all", axis=1).iloc[::-1].reset_index(drop=True) for _, g in dfg]
print(len(dfs))
#Nach Gruppenklassifikation
dt = dfs[5].iloc[-1].dropna()
population_date = dt.iloc[1]
delivery_date = dt.iloc[2]
dfs[5].iloc[-1].dropna()
df0 = df_conv(
dfs[5].iloc[1:-1].reset_index(drop=True),
["Einstufung", "Population", "Anzahl der Lieferungen", "Populationに対するAnzahl der Lieferungen率"],
population_date,
delivery_date,
)
df0["Anzahl der Zuschüsse an die Bevölkerung"] = df0["Anzahl der Zuschüsse an die Bevölkerung"].apply(my_round)
df0.to_csv(
"summary_by_types.csv",
index=False,
quoting=csv.QUOTE_NONNUMERIC,
encoding="utf_8_sig",
)
df0
#Liste der Präfekturen
dt = dfs[2].iloc[-1].dropna()
population_date = dt.iloc[1]
delivery_date = dt.iloc[2]
df3 = df_conv(
dfs[2].iloc[1:-1].reset_index(drop=True),
["Name der Präfekturen", "Gesamtzahl (Bevölkerung)", "Anzahl der Lieferungen", "人口に対するAnzahl der Lieferungen率"],
population_date,
delivery_date,
)
df3["Anzahl der Zuschüsse an die Bevölkerung"] = df3["Anzahl der Zuschüsse an die Bevölkerung"].apply(my_round)
df3.to_csv(
"all_prefectures.csv",
index=False,
quoting=csv.QUOTE_NONNUMERIC,
encoding="utf_8_sig",
)
df3
#Nach Geschlecht und Alter
dt = dfs[1].iloc[-1].dropna()
population_date = dt.iloc[1]
delivery_date = dt.iloc[2]
df4 = df_conv(
dfs[1].iloc[2:-1].reset_index(drop=True),
[
"Alter",
"Population(Mann)",
"Population(Frau)",
"Population(Gesamt)",
"Anzahl der Lieferungen(Mann)",
"Anzahl der Lieferungen(Frau)",
"Anzahl der Lieferungen(Gesamt)",
"Zuschussrate(Mann)",
"Zuschussrate(Frau)",
"Zuschussrate(Gesamt)",
"Verhältnis der Anzahl der Zuschüsse zum Ganzen(Mann)",
"Verhältnis der Anzahl der Zuschüsse zum Ganzen(Frau)",
"Verhältnis der Anzahl der Zuschüsse zum Ganzen(Gesamt)",
],
population_date,
delivery_date,
)
df4["Zuschussrate(Mann)"] = df4["Zuschussrate(Mann)"].apply(my_round)
df4["Zuschussrate(Frau)"] = df4["Zuschussrate(Frau)"].apply(my_round)
df4["Zuschussrate(Gesamt)"] = df4["Zuschussrate(Gesamt)"].apply(my_round)
df4["Verhältnis der Anzahl der Zuschüsse zum Ganzen(Mann)"] = df4["Verhältnis der Anzahl der Zuschüsse zum Ganzen(Mann)"].apply(my_round)
df4["Verhältnis der Anzahl der Zuschüsse zum Ganzen(Frau)"] = df4["Verhältnis der Anzahl der Zuschüsse zum Ganzen(Frau)"].apply(my_round)
df4["Verhältnis der Anzahl der Zuschüsse zum Ganzen(Gesamt)"] = df4["Verhältnis der Anzahl der Zuschüsse zum Ganzen(Gesamt)"].apply(my_round)
df4.to_csv(
"demographics.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf_8_sig",
)
df4
#Nach Stadt
dt = dfs[0].iloc[-1].dropna()
population_date = dt.iloc[1]
delivery_date = dt.iloc[2]
df5 = df_conv(
dfs[0].iloc[2:-1].reset_index(drop=True),
["Name der Präfekturen", "Stadtname", "Gesamtzahl (Bevölkerung)", "Anzahl der Lieferungen", "人口に対するAnzahl der Lieferungen率"],
population_date,
delivery_date,
)
df5["Anzahl der Zuschüsse an die Bevölkerung"] = df5["Anzahl der Zuschüsse an die Bevölkerung"].apply(my_round)
df5["Stadtname"] = df5["Stadtname"].replace(r"\s", "", regex=True)
df5["Stadtname"] = df5["Stadtname"].mask(df5["Name der Präfekturen"] + df5["Stadtname"] == "Shinoyama City, Präfektur Hyogo", "Tamba Shinoyama Stadt")
df5["Stadtname"] = df5["Stadtname"].mask(df5["Name der Präfekturen"] + df5["Stadtname"] == "Stadt Kajiwara, Landkreis Takaoka, Präfektur Kochi", "Hibara-cho, Takaoka-gun")
df5["Stadtname"] = df5["Stadtname"].mask(df5["Name der Präfekturen"] + df5["Stadtname"] == "Sue Town, Kasuya County, Präfektur Fukuoka", "Sue-cho, Kasuya-gun")
if pd.Timestamp(df5.iloc[0]["Basisdatum der Berechnung"]) < datetime.date(2018, 10, 1):
df5["Stadtname"] = df5["Stadtname"].mask(
df5["Name der Präfekturen"] + df5["Stadtname"] == "Stadt Nakagawa, Präfektur Fukuoka", "Nakagawa-cho, Chikushi-Pistole"
)
else:
df5["Stadtname"] = df5["Stadtname"].mask(
df5["Name der Präfekturen"] + df5["Stadtname"] == "Stadt Nakagawa, Landkreis Chikushi, Präfektur Fukuoka", "Nakagawa City"
)
df_code = pd.read_csv(
"https://docs.google.com/spreadsheets/d/e/2PACX-1vSseDxB5f3nS-YQ1NOkuFKZ7rTNfPLHqTKaSag-qaK25EWLcSL0klbFBZm1b6JDKGtHTk6iMUxsXpxt/pub?gid=0&single=true&output=csv",
dtype={"Gruppencode": int, "Name der Präfekturen": str, "Name des Landkreises": str, "Stadtname": str},
)
df_code["Stadtname"] = df_code["Name des Landkreises"].fillna("") + df_code["Stadtname"]
df_code.drop("Name des Landkreises", axis=1, inplace=True)
df5 = pd.merge(df5, df_code, on=["Name der Präfekturen", "Stadtname"], how="left")
df5["Gruppencode"] = df5["Gruppencode"].astype("Int64")
df5.to_csv(
"all_localgovs.csv",
index=False,
quoting=csv.QUOTE_NONNUMERIC,
encoding="utf_8_sig",
)
df5