Maison >développement back-end >Tutoriel Python >Comment rééchantillonner les données de séries chronologiques en Python

Comment rééchantillonner les données de séries chronologiques en Python

王林
王林avant
2023-08-29 20:13:05912parcourir

Comment rééchantillonner les données de séries chronologiques en Python

Les données de séries chronologiques sont une séquence d'observations collectées à intervalles de temps fixes. Les données peuvent provenir de n’importe quel domaine, comme la finance, l’économie, la santé et les sciences de l’environnement. Les données de séries chronologiques que nous collectons peuvent parfois avoir des fréquences ou des résolutions différentes, ce qui peut ne pas convenir à nos processus d'analyse et de modélisation des données. Dans ce cas, nous pouvons rééchantillonner les données de la série chronologique par suréchantillonnage ou sous-échantillonnage, modifiant ainsi la fréquence ou la résolution de la série chronologique. Cet article présentera différentes méthodes pour suréchantillonner ou sous-échantillonner les données de séries chronologiques.

Suréchantillonnage

Le suréchantillonnage signifie augmenter la fréquence des données de séries chronologiques. Ceci est généralement effectué lorsque nous avons besoin d'une résolution plus élevée ou d'observations plus fréquentes. Python propose plusieurs méthodes pour suréchantillonner les données de séries chronologiques, notamment l'interpolation linéaire, l'interpolation du voisin le plus proche et l'interpolation polynomiale.

Syntaxe

DataFrame.resample(rule, *args, **kwargs)
DataFrame.asfreq(freq, method=None)
DataFrame.interpolate(method='linear', axis=0, limit=None, inplace=False, limit_direction='forward', limit_area=None)

ici,

  • La fonction

    resample est une méthode fournie par la bibliothèque pandas pour rééchantillonner les données de séries temporelles. Elle est appliquée sur un DataFrame et prend le paramètre de règle, qui spécifie la fréquence souhaitée pour le rééchantillonnage (*args) et les arguments de mots-clés. (**kwargs) peut être fourni pour personnaliser le comportement de rééchantillonnage, comme la spécification de la méthode d'agrégation ou la gestion des valeurs manquantes.

  • La méthode

    asfreq est utilisée en conjonction avec la fonction de rééchantillonnage pour convertir la fréquence des données de la série chronologique. Elle prend le paramètre freq, qui spécifie la chaîne de fréquence souhaitée pour la sortie. Le paramètre de méthode facultatif permet de spécifier comment gérer. toute valeur manquante introduite lors du processus de rééchantillonnage, telle que le remplissage vers l'avant, le remplissage vers l'arrière ou l'interpolation.

  • La méthode d'interpolation est utilisée pour combler les valeurs manquantes ou les lacunes dans les données de séries chronologiques. Il interpole selon la méthode spécifiée (par exemple « linéaire », « le plus proche », « spline ») pour estimer les valeurs entre les observations existantes. Des paramètres supplémentaires peuvent contrôler l'axe d'interpolation, la limite de remplissage pour les valeurs NaN consécutives et s'il faut modifier le DataFrame en place ou renvoyer un nouveau DataFrame.

Interpolation linéaire

L'interpolation linéaire est utilisée pour suréchantillonner les données de séries chronologiques. Il comble les lacunes en traçant des lignes droites entre les points de données. L'interpolation linéaire peut être implémentée à l'aide de la fonction de rééchantillonnage de la bibliothèque pandas.

La traduction chinoise de

Exemple

est :

Exemple

Dans l'exemple ci-dessous, nous avons une série chronologique DataFrame avec trois observations sur des dates non consécutives. Nous convertissons la colonne 'Date' en un format datetime et la définissons comme index. La fonction de rééchantillonnage est utilisée pour suréchantillonner les données en un. fréquence quotidienne (« D ») à l'aide de la méthode asfreq. Enfin, la méthode d'interpolation avec l'option « linéaire » comble les écarts entre les points de données à l'aide de l'interpolation linéaire. Le DataFrame, df_upsampled, contient les données de séries chronologiques suréchantillonnées avec des valeurs interpolées.
import pandas as pd

# Create a sample time series DataFrame
data = {'Date': ['2023-06-01', '2023-06-03', '2023-06-06'],
        'Value': [10, 20, 30]}
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)

# Upsample the data using linear interpolation
df_upsampled = df.resample('D').asfreq().interpolate(method='linear')

# Print the upsampled DataFrame
print(df_upsampled)

Sortie

                Value
Date                 
2023-06-01  10.000000
2023-06-02  15.000000
2023-06-03  20.000000
2023-06-04  23.333333
2023-06-05  26.666667
2023-06-06  30.000000

Interpolation du voisin le plus proche

L'interpolation du voisin le plus proche est une méthode simple qui comble les écarts entre les points de données avec l'observation disponible la plus proche. Cette méthode peut être utile lorsque la série chronologique présente des changements brusques ou lorsque l'ordre des observations est important. l'option « la plus proche » pour effectuer l'interpolation du voisin le plus proche

. La traduction chinoise de

Exemple

est :

Exemple

Dans l'exemple ci-dessus, nous utilisons le même DataFrame original qu'avant. Après le rééchantillonnage avec la fréquence « D », la méthode d'interpolation avec l'option « la plus proche » comble les lacunes en copiant maintenant le DataFrame résultant, df_upsampled. a une fréquence quotidienne avec l'interpolation du voisin le plus proche.

import pandas as pd

# Create a sample time series DataFrame
data = {'Date': ['2023-06-01', '2023-06-03', '2023-06-06'],
        'Value': [10, 20, 30]}
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)

# Upsample the data using nearest neighbor interpolation
df_upsampled = df.resample('D').asfreq().interpolate(method='nearest')

# Print the upsampled DataFrame
print(df_upsampled)

Sortie

            Value
Date             
2023-06-01   10.0
2023-06-02   10.0
2023-06-03   20.0
2023-06-04   20.0
2023-06-05   30.0
2023-06-06   30.0

Sous-échantillonnage

Le sous-échantillonnage est utilisé pour réduire la fréquence des données de séries chronologiques, souvent pour obtenir une vue plus large des données ou pour simplifier l'analyse. Python propose différentes techniques de sous-échantillonnage, telles que la moyenne, la somme ou la maximisation des valeurs sur un intervalle de temps spécifié.

Syntaxe

DataFrame.mean(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)

Ici, une méthode d'agrégation, telle que

moyenne, somme ou maximum

, est appliquée après le rééchantillonnage pour calculer une valeur unique représentant les observations regroupées dans chaque intervalle de rééchantillonnage. Ces méthodes sont généralement utilisées lors du sous-échantillonnage des données. Ils peuvent être appliqués directement à un DataFrame rééchantillonné, ou ils peuvent être utilisés conjointement avec une fonction de rééchantillonnage pour agréger les données en fonction d'une fréquence spécifique (telle qu'hebdomadaire ou mensuelle) en spécifiant des règles appropriées. La traduction chinoise de Mean Downsampling

est :

Average downsampling

Le sous-échantillonnage moyen calcule la moyenne des points de données dans chaque intervalle. Cette méthode est utile lors du traitement de données haute fréquence et de l'obtention de valeurs représentatives pour chaque intervalle. Vous pouvez utiliser la fonction de rééchantillonnage conjointement avec la méthode moyenne pour effectuer un sous-échantillonnage moyen.

Example

的中文翻译为:

示例

In the below example, we start with a daily time series DataFrame spanning the entire month of June 2023. The resample function with the 'W' frequency downsamples the data to weekly intervals. By applying the mean method, we obtain the average value within each week. The resulting DataFrame, df_downsampled, contains the mean-downsampled time series data.

import pandas as pd

# Create a sample time series DataFrame with daily frequency
data = {'Date': pd.date_range(start='2023-06-01', end='2023-06-30', freq='D'),
        'Value': range(30)}
df = pd.DataFrame(data)
df.set_index('Date', inplace=True)

# Downsampling using mean
df_downsampled = df.resample('W').mean()

# Print the downsampled DataFrame
print(df_downsampled)

输出

            Value
Date             
2023-06-04    1.5
2023-06-11    7.0
2023-06-18   14.0
2023-06-25   21.0
2023-07-02   27.0

Maximum Downsampling

最大降采样计算并设置每个间隔内的最高值。此方法适用于识别时间序列中的峰值或极端事件。在前面的示例中使用max而不是mean或sum允许我们执行最大降采样。

Example

的中文翻译为:

示例

In the below example, we start with a daily time series DataFrame spanning the entire month of June 2023. The resample function with the 'W' frequency downsamples the data to weekly intervals. By applying the max method, we obtain the Maximum value within each week. The resulting DataFrame, df_downsampled, contains the maximum-downsampled time series data.

import pandas as pd
# Create a sample time series DataFrame with daily frequency
data = {'Date': pd.date_range(start='2023-06-01', end='2023-06-30', freq='D'),
        'Value': range(30)}
df = pd.DataFrame(data)
df.set_index('Date', inplace=True)

# Downsampling using mean
df_downsampled = df.resample('W').max()

# Print the downsampled DataFrame
print(df_downsampled)

输出

            Value
Date             
2023-06-04      3
2023-06-11     10
2023-06-18     17
2023-06-25     24
2023-07-02     29

结论

在本文中,我们讨论了如何使用Python对时间序列数据进行重新采样。Python提供了各种上采样和下采样技术。我们探讨了线性和最近邻插值用于上采样,以及均值和最大值插值用于下采样。您可以根据手头的问题使用任何一种上采样或下采样技术。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer