Je l'écrirai sous forme de mémorandum lors de l'utilisation de * pandas *. C'est ce que dit la réponse ici.
df = pd.concat([df,pd.DataFrame(df.sum(axis=0),columns=['Grand Total']).T])
df = pd.concat([df,pd.DataFrame(df.sum(axis=1),columns=['Total'])],axis=1)
Les bases de * pandas * sont résumées dans le manuel officiel afin qu'il puisse être lu en 10 minutes environ.
Comme données de test, nous utiliserons des informations météorologiques passées qui peuvent être téléchargées à partir de l'Agence météorologique. Les conditions météorologiques totales pour Tokyo pendant un an (janvier-décembre 2013) sont totalisées mensuellement et le total des lignes et des colonnes est calculé.
Agence météorologique | Télécharger les données météorologiques antérieures
Rendre la bibliothèque Python indépendante disponible dans pyvenv
.
$ PYVENV_DIR=$HOME/.pyvenv/data-analytics
$ pyvenv-3.4 $PYVENV_DIR
$ source $PYVENV_DIR/bin/activate
$ pip install pandas
Appelons le fichier téléchargé de l'Agence météorologique weather-tokyo-2013.csv
. Comme il est difficile de gérer les * pandas * lors de leur téléchargement, un pré-traitement est effectué.
>>> import pandas as pd
# Read CSV file, whose "day" column is parsed with `dateutil.parser.parse`.
>>> fname = 'weather-tokyo-2013.csv'
>>> df = pd.read_csv(fname, parse_dates=['day'])
# Check DataFrame overview.
>>> df.dtypes
>>> df.head(3)
>>> df.describe()
J'ai pu confirmer que le fichier CSV était chargé dans * DataFrame *.
Extrayez ensuite la partie "mois" de la colonne "jour" et ajoutez-la à la colonne "mois". La colonne "jour" est reconnue comme une date et une heure lors de la lecture du CSV, vous pouvez donc utiliser l'API datetime.
>>> df['month'] = df['day'].apply(lambda x: x.month)
groupby
qui fournit un comportement de type SQL" GROUP BY ". Cette fois, additionnons le nombre de jours par "aperçu météo (jour)" et "mois". Par exemple, vous pouvez voir le nombre de jours ensoleillés par mois.>>> grouped = df.groupby(['weather_day', 'month'])['day'].count()
>>> type(grouped)
>>> grouped.index
>>> grouped.head(3)
La valeur de retour de groupby
est * Series *, utilisez donc la méthode ʻunstack` pour la convertir en * DataFrame *. Cela vous permettra de calculer les totaux des lignes et des colonnes dans le processus d'ouverture, dans ce cas les totaux mensuels pour l'aperçu météorologique.
>>> monthly = grouped.unstack()
# Add "Total" column on each row.
>>> monthly = pd.concat([monthly,
pd.DataFrame(monthly.sum(axis=1), columns=['Total'])],
axis=1)
# Add "Grand Total" row on each column.
>>> monthly = pd.concat([monthly,
pd.DataFrame(monthly.sum(axis=0), columns=['Grand Total']).T])
En plus des sommes simples, vous pouvez également filtrer par nom de ligne ou de colonne pour additionner. En considérant un jour avec "pluie" dans les conditions météorologiques comme un jour de pluie et un jour avec "bien" comme un jour ensoleillé, le nom d'index peut être utilisé pour calculer comme suit. (Étant donné que les données réelles incluent des conditions météorologiques telles que "pluie temporaire ensoleillée", il y a des jours où elles sont dupliquées.)
>>> monthly = pd.concat([monthly,
pd.DataFrame(monthly[monthly.index.map(lambda x: 'pluie' in x)].sum(axis=0), columns=['Rainy']).T])
>>> monthly = pd.concat([monthly,
pd.DataFrame(monthly[monthly.index.map(lambda x: 'Bien' in x)].sum(axis=0), columns=['Fine']).T])
Enfin, écrivez les résultats agrégés dans un fichier texte. Vous pouvez contrôler l'en-tête, le nom de l'index, etc. avec des arguments facultatifs. Par exemple, le délimiteur est spécifié par * sep *.
>>> fname = 'weather-tokyo-2013-monthly-weather_name.csv'
>>> monthly.to_csv(fname, sep=',')
Après cela, vérifiez le résultat avec un logiciel de calcul de table tel qu'Excel.
Vous pouvez ouvrir le fichier de données dans Excel et dessiner le graphique, mais vous pouvez également dessiner en Python en utilisant * matplotlib *. Si vous souhaitez l'utiliser pendant un certain temps, utilisez * ipython *. Il effectuera les tâches du traitement de dessin graphique dans les coulisses.
$ pip install matplotlib ipython
$ ipython
Vous êtes maintenant dans le shell interactif IPython. Lisez les données que vous venez d'exporter et dessinez un graphique de la transition mensuelle entre les jours ensoleillés et pluvieux.
In [1]: import pandas as pd
In [2]: pd.options.display.mpl_style = 'default'
In [3]: fname = 'weather-tokyo-2013-monthly-weather_name.csv'
In [4]: df = pd.read_csv(fname, index_col=0)
In [5]: df.T[['Fine', 'Rainy']][:12].plot(color=['r', 'b']).set_xlabel('Month')
Out[5]: <matplotlib.text.Text at 0x106cb89e8>
transpose ()
, qui est une transposition de lignes et de colonnes.color
à plot ()
pour spécifier la couleur de chaque série. Comme l'ordre de spécification des colonnes correspond, Fine est "r" = Rouge et Rainy est "b" = Bleu.Un graphique comme celui-ci doit être dessiné dans une fenêtre séparée.
Comme il pleut en juin, il pleut beaucoup (moins de la moitié du nombre de jours), et vous pouvez voir qu'il n'y a presque pas de jours de pluie en janvier. Le temps change facilement en octobre, mais il semble qu'il y ait encore plus de jours ensoleillés que de jours pluvieux. De plus, étant donné que les conditions d'agrégation approximatives sont faciles à mettre en œuvre et que les fluctuations sont faciles à comprendre, lors de l'analyse détaillée, agrégons les valeurs de l'aperçu météorologique après les avoir catégorisées.
Recommended Posts