Traitement des données du fichier Excel de l'état d'émission de ma carte numérique (septembre) suite
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["Date de base du calcul de la population"] = population_date.strftime("%Y/%m/%d")
df["Date de base pour le calcul du nombre de livraisons"] = delivery_date.strftime("%Y/%m/%d")
df.insert(0, "Date de base du calcul", 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] == "Point dans le temps").cumsum())
dfs = [g.dropna(how="all", axis=1).iloc[::-1].reset_index(drop=True) for _, g in dfg]
print(len(dfs))
#Par classification de groupe
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),
["Classification", "population", "Nombre de livraisons", "populationに対するNombre de livraisons率"],
population_date,
delivery_date,
)
df0["Nombre de subventions à la population"] = df0["Nombre de subventions à la population"].apply(my_round)
df0.to_csv(
"summary_by_types.csv",
index=False,
quoting=csv.QUOTE_NONNUMERIC,
encoding="utf_8_sig",
)
df0
#Liste des préfectures
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),
["Nom des préfectures", "Nombre total (population)", "Nombre de livraisons", "人口に対するNombre de livraisons率"],
population_date,
delivery_date,
)
df3["Nombre de subventions à la population"] = df3["Nombre de subventions à la population"].apply(my_round)
df3.to_csv(
"all_prefectures.csv",
index=False,
quoting=csv.QUOTE_NONNUMERIC,
encoding="utf_8_sig",
)
df3
#Par sexe et âge
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),
[
"âge",
"population(Homme)",
"population(femme)",
"population(Total)",
"Nombre de livraisons(Homme)",
"Nombre de livraisons(femme)",
"Nombre de livraisons(Total)",
"Taux de subvention(Homme)",
"Taux de subvention(femme)",
"Taux de subvention(Total)",
"Ratio du nombre de subventions à l'ensemble(Homme)",
"Ratio du nombre de subventions à l'ensemble(femme)",
"Ratio du nombre de subventions à l'ensemble(Total)",
],
population_date,
delivery_date,
)
df4["Taux de subvention(Homme)"] = df4["Taux de subvention(Homme)"].apply(my_round)
df4["Taux de subvention(femme)"] = df4["Taux de subvention(femme)"].apply(my_round)
df4["Taux de subvention(Total)"] = df4["Taux de subvention(Total)"].apply(my_round)
df4["Ratio du nombre de subventions à l'ensemble(Homme)"] = df4["Ratio du nombre de subventions à l'ensemble(Homme)"].apply(my_round)
df4["Ratio du nombre de subventions à l'ensemble(femme)"] = df4["Ratio du nombre de subventions à l'ensemble(femme)"].apply(my_round)
df4["Ratio du nombre de subventions à l'ensemble(Total)"] = df4["Ratio du nombre de subventions à l'ensemble(Total)"].apply(my_round)
df4.to_csv(
"demographics.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf_8_sig",
)
df4
#Par ville
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),
["Nom des préfectures", "Nom de Ville", "Nombre total (population)", "Nombre de livraisons", "人口に対するNombre de livraisons率"],
population_date,
delivery_date,
)
df5["Nombre de subventions à la population"] = df5["Nombre de subventions à la population"].apply(my_round)
df5["Nom de Ville"] = df5["Nom de Ville"].replace(r"\s", "", regex=True)
df5["Nom de Ville"] = df5["Nom de Ville"].mask(df5["Nom des préfectures"] + df5["Nom de Ville"] == "Ville de Shinoyama, préfecture de Hyogo", "Ville de Tamba Shinoyama")
df5["Nom de Ville"] = df5["Nom de Ville"].mask(df5["Nom des préfectures"] + df5["Nom de Ville"] == "Ville de Kajiwara, comté de Takaoka, préfecture de Kochi", "Hibara-cho, Takaoka-gun")
df5["Nom de Ville"] = df5["Nom de Ville"].mask(df5["Nom des préfectures"] + df5["Nom de Ville"] == "Ville de Sue, comté de Kasuya, préfecture de Fukuoka", "Sue-cho, Kasuya-gun")
if pd.Timestamp(df5.iloc[0]["Date de base du calcul"]) < datetime.date(2018, 10, 1):
df5["Nom de Ville"] = df5["Nom de Ville"].mask(
df5["Nom des préfectures"] + df5["Nom de Ville"] == "Ville de Nakagawa, préfecture de Fukuoka", "Nakagawa-cho, Chikushi-gun"
)
else:
df5["Nom de Ville"] = df5["Nom de Ville"].mask(
df5["Nom des préfectures"] + df5["Nom de Ville"] == "Ville de Nakagawa, comté de Chikushi, préfecture de Fukuoka", "Ville de Nakagawa"
)
df_code = pd.read_csv(
"https://docs.google.com/spreadsheets/d/e/2PACX-1vSseDxB5f3nS-YQ1NOkuFKZ7rTNfPLHqTKaSag-qaK25EWLcSL0klbFBZm1b6JDKGtHTk6iMUxsXpxt/pub?gid=0&single=true&output=csv",
dtype={"Code de groupe": int, "Nom des préfectures": str, "Nom du comté": str, "Nom de Ville": str},
)
df_code["Nom de Ville"] = df_code["Nom du comté"].fillna("") + df_code["Nom de Ville"]
df_code.drop("Nom du comté", axis=1, inplace=True)
df5 = pd.merge(df5, df_code, on=["Nom des préfectures", "Nom de Ville"], how="left")
df5["Code de groupe"] = df5["Code de groupe"].astype("Int64")
df5.to_csv(
"all_localgovs.csv",
index=False,
quoting=csv.QUOTE_NONNUMERIC,
encoding="utf_8_sig",
)
df5