[PYTHON] Traitement des données du fichier Excel de l'état de l'émission de ma carte numérique (août)

introduction

Traitement des données du fichier Excel de l'état d'émission de ma carte numérique (septembre) suite

202008.png

Data wrangling

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

Recommended Posts

Traitement des données du fichier Excel de l'état de l'émission de ma carte numérique (août)
Data wrangling of Excel file of my number card issue status (septembre)
Fichier PDF de gestion des données de l'état d'émission de ma carte numérique