[PYTHON] Écrivons un processus d'agrégation pour une certaine période en utilisant pandas × groupby × Grouper

J'ai écrit cet article à partir de la motivation de "Je veux écrire dans les pandas le processus de création de fonctionnalités qui agrègent certaines colonnes tous les N jours, mais que dois-je faire?"

L'exemple de code est un extrait de Google Colony lié ci-dessous. GoogleColab --pandas × groupby × exemple Grouper

De plus, les données sont utilisées ici (kaggle Datasets --Bitcoin Historical Data).

Tout d'abord, c'est à partir du prétraitement des données, que la colonne Timestamp est convertie en type datetime pour le traitement précédent.

load_dataset


import pandas as pd

btc = pd.read_csv("/content/bitstampUSD_1-min_data_2012-01-01_to_2019-08-12.csv")
btc[btc.columns.values] = btc[btc.columns.values].ffill()

# https://stackoverflow.com/questions/19231871/convert-unix-time-to-readable-date-in-pandas-dataframe
btc["Timestamp"] = pd.to_datetime(btc["Timestamp"], unit='s')

btc.head()

"""
Timestamp	Open	High	Low	Close	Volume_(BTC)	Volume_(Currency)	Weighted_Price
0	2011-12-31 07:52:00	4.39	4.39	4.39	4.39	0.455581	2.0	4.39
1	2011-12-31 07:53:00	4.39	4.39	4.39	4.39	0.455581	2.0	4.39
2	2011-12-31 07:54:00	4.39	4.39	4.39	4.39	0.455581	2.0	4.39
3	2011-12-31 07:55:00	4.39	4.39	4.39	4.39	0.455581	2.0	4.39
4	2011-12-31 07:56:00	4.39	4.39	4.39	4.39	0.455581	2.0	4.39
"""

Le problème est ** le processus de création de fonctionnalités en agrégeant certaines colonnes tous les N jours **, mais comme le titre l'indique, ** pandas x groupby x Grouper ** est utilisé. "Grouper par" est souvent utilisé lors du traitement d'agrégation, mais cette fois, c'est une erreur d'utiliser "Grouper" car nous voulons l'organiser tous les ** N jours ** et chaque cycle / section fixe. Puisqu'il est temps de résumer, si vous spécifiez la colonne Horodatage pour la clé Grouper et spécifiez freq = 'D', le processus de récapitulation chaque jour est terminé.

groupby_grouper


# freq='D'En le définissant sur, il peut être résumé au quotidien
btc.groupby(pd.Grouper(key='Timestamp', freq='D')).mean()
"""
Open	High	Low	Close	Volume_(BTC)	Volume_(Currency)	Weighted_Price
Timestamp							
2011-12-31	4.472552	4.472624	4.472552	4.472624	7.590527	34.069690	4.472579
2012-01-01	4.680778	4.680778	4.680778	4.680778	5.861697	27.856539	4.680778
2012-01-02	5.000000	5.000000	5.000000	5.000000	11.566478	57.832389	5.000000
2012-01-03	5.145917	5.145917	5.145917	5.145917	13.506125	68.725391	5.145917
2012-01-04	5.176708	5.228729	5.176708	5.228729	17.221039	91.624089	5.195443
...	...	...	...	...	...	...	...
2019-08-08	11802.176188	11809.075389	11794.541660	11802.534583	7.059914	83271.678234	11801.428490
2019-08-09	11820.325465	11826.872431	11813.188132	11820.873674	5.099464	60251.317095	11819.498275
2019-08-10	11582.574299	11587.521007	11576.103201	11582.249007	5.219845	60211.963986	11581.356693
2019-08-11	11378.198736	11382.765819	11373.714118	11379.078882	3.062079	34822.593814	11378.195194
2019-08-12	11527.440000	11551.570000	11520.000000	11520.000000	23.805939	274731.256920	11540.450291
2782 rows × 7 columns
"""

c'est tout.

référence

Recommended Posts

Écrivons un processus d'agrégation pour une certaine période en utilisant pandas × groupby × Grouper
Faisons un module pour Python en utilisant SWIG
Faire une liste d'allocation / allocation d'adresses IP pour une certaine zone
Créons une fonction pour le test paramétré à l'aide d'un objet frame