[PYTHON] Créez une tranche d'âge avec les pandas

Les valeurs agrégées pour chaque année sont résumées pour chaque 10 ans. Définissez la classe avec cut of pandas et agréger avec groupby.

Les données utilisées sont le format CSV de l'Excel de «Population par âge» publié par le Bureau des statistiques du Ministère de l'intérieur et des communications.

Pour faciliter l'utilisation, supprimez la ligne de description en haut des données, la note en bas et les lignes «100+» et «Inconnu». Le fichier ajusté est «population-by-age.csv».

Traité par des pandas

Commencez par charger les modules numpy et pandas. J'ai également ajouté un paramètre pour dessiner le graphique en IPython.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
pd.options.display.mpl_style = 'default'

Lisez le fichier CSV. Spécifiez la première colonne comme index. Après la lecture, vérifiez le type de données.

df = pd.read_csv('population-by-age.csv', index_col='age')
print df.dtypes
y1920    int64
y1930    int64
y1940    int64
y1950    int64
y1960    int64
y1970    int64
y1980    int64
y1990    int64
y2000    int64
y2010    int64
dtype: object

De plus, vérifions le début et la fin, et les statistiques. L'affichage est omis.

print df.head(3)
print df.tail(3)
print df.describe()

Utilisez cut pour définir la classe. Si vous voulez changer la largeur de la classe, ajustez le troisième argument de range. Inclure ou ne pas inclure les deux extrémités de la classe est spécifié comme une option. Basculez entre les options * include_lowest * et * right * en conséquence.

labels = [ "{0} - {1}".format(i, i + 9) for i in range(0, 100, 10) ]
c = pd.cut(df.index, np.arange(0, 101, 10),
           include_lowest=True, right=False,
           labels=labels)

print df.groupby(c).sum()
            y1920     y1930     y1940     y1950     y1960     y1970     y1980
0 - 9    14314635  16778220  17961607  20728122  17049068  16965066  18547450   
10 - 19  11520624  13340649  15816378  17267585  20326076  16921989  17231873   
20 - 29   8533259  10367140  11756837  13910662  16527810  19749434  16882381   
30 - 39   7020188   7798498   9370143  10250310  13555835  16578939  19973312   
40 - 49   5902331   6332741   7041270   8487529   9835689  13217564  16427887   
50 - 59   4074855   5046797   5446760   6137697   7842597   9230197  12813527   
60 - 69   2968342   2977915   3782574   4074610   5092019   6709761   8429928   
70 - 79   1378630   1478319   1541314   1967261   2518482   3401952   5059662   
80 - 89    236419    315624    338472    354836    638738    879221   1503633   
90 - 99     13657     13997     18567     16258     32043     65629    118391   

            y1990     y2000     y2010  
0 - 9    13959454  11925887  10882409  
10 - 19  18533872  14034777  11984392  
20 - 29  16870834  18211769  13720134  
30 - 39  16791465  16891475  18127846  
40 - 49  19676302  16716227  16774981  
50 - 59  15813274  19176162  16308233  
60 - 69  11848590  14841772  18247422  
70 - 79   6835747  10051176  12904315  
80 - 89   2665908   4147012   6768852  
90 - 99    286141    688769   1318463  

J'ai donc pu agréger les valeurs agrégées pour chaque année d'âge tous les 10 ans.

Les fonctions d'agrégation peuvent être spécifiées en plus de «sum», et plusieurs fonctions d'agrégation peuvent être spécifiées. Vérifions les résultats suivants.

print df.groupby(c).agg(['count', 'min', 'max', 'mean', 'std'])

Dessin graphique

Puisqu'il est difficile de comprendre la relation avec uniquement les nombres ci-dessus, faites un graphique pour avoir un aperçu des nombres. Disposons-les côte à côte pour comparer les options * empilées * lors du dessin.

fig, axes = plt.subplots(ncols=2)
df.groupby(c).sum().plot(kind='bar', ax=axes[0])
df.groupby(c).sum().T.plot(kind='bar', stacked=True, ax=axes[1])

population-10year-bar.png

Si l'on regarde les chiffres à 10 ans, la population de plus de 60 ans augmente plus récemment. En revanche, on constate que la population des jeunes est en déclin. En regardant les graphiques empilés, nous pouvons voir que la population a augmenté régulièrement de 1920 à 2000, mais a diminué jusqu'en 2010. Quant à la répartition de la production, le ratio de la partie supérieure de la barre dans le graphique augmente.

Maintenant que nous connaissons les tendances générales, nous allons dessiner chaque série de la base de données d'origine. Si vous le tracez simplement, ce sera désordonné, alors dessinons-le sous forme de graphique séparé pour chaque année. Cette fois, la variable ʻaxes` est bidimensionnelle, donc soyez prudent lorsque vous spécifiez l'index du tableau.

fig, axes = plt.subplots(nrows=5, ncols=2)
for i, y in enumerate(['y1920', 'y1930', 'y1940', 'y1950', 'y1960']):
    df[y].plot(ax=axes[i, 0])
    axes[i, 0].set_title(y)
    if y != 'y1960':
        axes[i, 0].get_xaxis().set_visible(False)
for i, y in enumerate(['y1970', 'y1980', 'y1990', 'y2000', 'y2010']):
    df[y].plot(ax=axes[i, 1])
    axes[i, 1].set_title(y)
    if y != 'y2010':
        axes[i, 1].get_xaxis().set_visible(False)

population-10year-transition.png

Si vous regardez les graphiques individuels, vous pouvez voir l'effet du baby-boom. On constate également que le nombre de naissances a diminué depuis le deuxième baby-boom, et que la base de personnes âgées s'est élargie (la durée de vie a été allongée) depuis 1970.

Recommended Posts

Créez une tranche d'âge avec les pandas
Créer un environnement avec virtualenv
Créer une API avec Django
Standardisez par groupe avec les pandas
Créez dynamiquement de nouvelles trames de données avec des pandas
Manipuler des chaînes avec un groupe pandas par
Génération de fonctionnalités avec pandas group par
J'obtiens une erreur avec les pandas d'importation.
Créer une application en classifiant avec Pygame
Créer une visionneuse de traitement d'image avec PySimpleGUI
Créez rapidement un fichier Excel avec Python #python
Créer un écran de mise à jour avec Django Updateview
[Python] Créez rapidement une API avec Flask
Générer une instance Excel compatible avec les compléments avec xlwings
Créez une application de mots anglais avec python
Créez un fichier msi évolutif avec cx_Freeze
Créez une application qui devine les étudiants avec Python
Créer un programme académique avec optimisation des combinaisons
Créez une application de composition d'images avec Flask + Pillow
[Pandas Python] Créer un DataFrame vide à partir d'un DataFrame existant
Créer une image avec des caractères avec python (japonais)
Créez rapidement un serveur API avec Python + Falcon
Visualisez rapidement avec les pandas
Traitement des ensembles de données avec des pandas (1)
Échantillonnage bootstrap avec Pandas
Convertir 202003 en 2020-03 avec les pandas
Traitement des ensembles de données avec des pandas (2)
Extraire N échantillons pour chaque groupe avec Pandas DataFrame
Pandas apprenant avec la chimioinfomatique
Un moyen simple de créer un module d'importation avec jupyter
Créez une application qui devine les étudiants avec la version python-GUI
Créer un nombre aléatoire avec une densité de probabilité arbitraire
Visualisation des données avec les pandas
[Xlsxwriter] Créer une feuille Excel de mise en forme conditionnelle avec pandas + xlsxwriter [pandas] Memo
Créez des jeux avec Pygame
Créer un filtre avec scipy
Manipulation des données avec les Pandas!
Créez un environnement Open AI Gym avec Bash sur Windows 10
Mélangez les données avec les pandas
Tapez après avoir lu un fichier Excel avec pandas read_excel
Créez un environnement pour l'automatisation des tests avec AirtestIDE (Astuces)
[En 3 lignes] Tracez la pyramide des âges (graphique à barres du groupe d'âge / sexe) avec les pandas seuls
Créer un nouveau csv avec des pandas basé sur le csv local
Créez un environnement pour "Deep Learning from scratch" avec Docker
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
Makefile minimal et buildout.cfg pour créer un environnement avec buildout
Créez un exemple de scène semblable à un jeu avec juste le script Blender 2.80
Créons une application qui authentifie OIDC avec Azure AD
Créer une fonction d'authentification à l'aide de django-allauth et CustomUser dans Django
Créer une application Todo avec Django ① Créer un environnement avec Docker
[Python Kivy] Comment créer un fichier exe avec pyinstaller
Comment lire un fichier Excel (.xlsx) avec Pandas [Python]
Comment créer une trame de données et jouer avec des éléments avec des pandas
J'ai essayé de créer un article dans Wiki.js avec SQL Alchemy
Lire csv avec des pandas python
Charger json imbriqué avec des pandas
Créez Cloud TPU avec tf-nightly
Créer / rechercher / créer une table avec PynamoDB
Créer un gif 3D avec python3