Analyse des données boursières Pandas

Dans l'analyse des données boursières, pandas est un outil très puissant qui peut nous aider à traiter et analyser les données du marché boursier.

Dans ce chapitre, nous utilisons yfinance (bibliothèque Yahoo Finance) pour télécharger des données boursières historiques et effectuer diverses analyses, notamment le nettoyage des données, la visualisation, le calcul d'indicateurs techniques, etc.

yfinance est une bibliothèque Python qui permet d'obtenir facilement des données historiques et en temps réel pour des actifs tels que les actions, les fonds et les cryptomonnaies depuis Yahoo Finance.

Avec pandas, nous pouvons stocker ces données sous forme de DataFrame et effectuer des analyses ultérieures.

  • Nettoyage des données: Gérer les valeurs manquantes, supprimer les colonnes inutiles, etc.
  • Visualisation des données: Tracer des séries temporelles boursières, des moyennes mobiles, le RSI, etc.
  • Calcul des indicateurs techniques: comme la moyenne mobile (SMA), l'indice de force relative (RSI), etc.
  • Analyse des rendements quotidiens et des rendements cumulés: aide à évaluer la performance à court et à long terme d'une action.
  • Analyse de la volatilité: mesure la volatilité des prix d'une action.

Pour plus de bibliothèques financières et d'analyses quantitatives, vous pouvez consulter :Trading quantitatif en Python

Installer yfinance

Tout d'abord, nous devons installer la bibliothèque yfinance comme suit :

pip install yfinance --upgrade --no-cache-dir

Lors de l'installation de yfinance, pandas est généralement installé automatiquement comme dépendance. Cela signifie que lorsque vous utilisez yfinance, vous pouvez directement utiliser les structures de données et les fonctions fournies par pandas pour traiter et analyser des données.

Importer les bibliothèques requises :

import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

Obtenir des données boursières

À l'aide de la bibliothèque yfinance, nous pouvons facilement télécharger des données boursières.

Nous utilisons généralement la fonction yf.download() pour obtenir des données historiques d'une action depuis Yahoo Finance.

Le code boursier de Moutai est 600519.SS, où.SS.SS est le suffixe de la Bourse de Shanghai.

Utilisez yfinance pour obtenir des données boursières :

Exemple

import yfinance as yf

# Obtenir les données boursières de Moutai (600519.SS) du 2020-01-01 au 2021-01-01
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')

# Afficher les premières lignes des données
print(stock_data.head())

Les données de sortie sont affichées ci-dessous :

Les données renvoyées contiennent les colonnes suivantes :

  • Open: Open
  • High: High
  • Low: Low
  • Close: Close
  • Adj Close: Cours ajusté (en tenant compte des dividendes, des fractionnements d'actions, etc.)
  • Volume: Volume

La fonction yf.download() renvoie un pandas.DataFrame contenant les données historiques de l'action spécifiée :

Exemple

import yfinance as yf

# Obtenir les données de l'action Moutai (600519.SS)
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')

# Vérifier le type de données
print(type(stock_data))  # Devrait afficher <class 'pandas.core.frame.DataFrame'>

La sortie est :

[*********************100%%**********************]  1 of 1 completed
<class 'pandas.core.frame.DataFrame'>

Nettoyage et traitement des données

Lors de l'analyse des données boursières, nous devons généralement effectuer un nettoyage et un traitement des données.

Les étapes courantes comprennent le remplissage des valeurs manquantes, la suppression des colonnes non pertinentes, la conversion de type de données, etc.

Dans certaines versions de yfinance, pandas est automatiquement introduit et n'a pas besoin d'être importé à nouveau, donc lors de l'utilisation de yfinance, vous pouvez directement utiliser les structures de données et les fonctions fournies par pandas pour traiter et analyser les données.

Vérifiez les valeurs manquantes et remplissez-les :

Exemple

import yfinance as yf

# Obtenir les données boursières de Moutai (600519.SS) du 2020-01-01 au 2021-01-01
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')

# Vérifier les valeurs manquantes
print(stock_data.isnull().sum())

# Remplir les valeurs manquantes à l'aide d'un remplissage vers l'avant
stock_data.ffill(inplace=True)

# Ou utiliser un remplissage vers l'arrière
# stock_data.bfill(inplace=True)

# Vérifier si les valeurs manquantes ont été traitées
print(stock_data.isnull().sum())

Le résultat de sortie est le suivant :

[*********************100%%**********************]  1 of 1 completed
Open         0
High         0
Low          0
Close        0
Adj Close    0
Volume       0
dtype: int64
Open         0
High         0
Low          0
Close        0
Adj Close    0
Volume       0

Supprimer les colonnes non pertinentes :

Exemple

import yfinance as yf

# Obtenir les données boursières de Moutai (600519.SS) du 2020-01-01 au 2021-01-01
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')

# Supprimer les colonnes 'Volume' et 'Adj Close'
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])
print(stock_data_cleaned.head())

Le résultat de sortie est le suivant :


Visualisation des données : tracer les courbes des cours boursiers

En utilisant matplotlib ou seaborn, nous pouvons visualiser les données boursières pour nous aider à identifier les tendances et les fluctuations.

Tracer la série temporelle du prix de clôture :

Exemple

import yfinance as yf
import matplotlib.pyplot as plt
# Obtenir les données boursières de Moutai (600519.SS) du 2020-01-01 au 2021-01-01
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')

# Supprimer les colonnes 'Volume' et 'Adj Close'
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])

# Tracer la courbe du cours de clôture de Moutai
plt.figure(figsize=(10, 6))
plt.plot(stock_data_cleaned['Close'], label='Close Price')
plt.title('Prix de l'action Maotai (2020)', fontsize=14)
plt.xlabel('Date', fontsize=12)
plt.ylabel('Prix de clôture (CNY)', fontsize=12)
plt.legend()
plt.grid(True)
plt.show()

La sortie est la suivante :


Calcul des indicateurs techniques pour les actions

Dans l'analyse boursière, les indicateurs techniques (tels que les moyennes mobiles, l'indice de force relative RSI, etc.) sont souvent utilisés pour faciliter la prise de décision. pandas peut nous aider à calculer ces indicateurs.

1. Moyenne mobile (SMA)

La moyenne mobile simple (SMA) est l'un des indicateurs techniques les plus couramment utilisés, représentant le prix de clôture moyen sur les N derniers jours.

Exemple

import yfinance as yf
import matplotlib.pyplot as plt
# Obtenir les données boursières de Moutai (600519.SS) du 2020-01-01 au 2021-01-01
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')

# Supprimer les colonnes 'Volume' et 'Adj Close'
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])

# Calculer les moyennes mobiles sur 50 et 200 jours
stock_data_cleaned['SMA_50'] = stock_data_cleaned['Close'].moyenne mobile sur(fenêtre=50).glissante()
stock_data_cleaned['SMA_200'] = stock_data_cleaned['Close'].moyenne mobile sur(fenêtre=200).glissante()

# Tracer le cours de clôture et les moyennes mobiles
plt.figure(figsize=(12, 6))
plt.plot(stock_data_cleaned['Close'], label='Close Price')
plt.plot(stock_data_cleaned['SMA_50'], label='SMA 50 jours')
plt.plot(stock_data_cleaned['SMA_200'], label='SMA 200 jours')
plt.title('Cours de l'action Maotai avec moyennes mobiles', fontsize=14)
plt.xlabel('Date', fontsize=12)
plt.ylabel('Prix (CNY)', fontsize=12)
plt.legend()
plt.grid(True)
plt.show()

La sortie est la suivante :

2. Indice de force relative (RSI)

Le RSI est un indicateur technique utilisé pour évaluer si une action est en surachat ou en survente. En général, un RSI supérieur à 70 indique un surachat, et inférieur à 30 indique une survente.

Exemple

import yfinance as yf
import matplotlib.pyplot as plt
# Obtenir les données boursières de Moutai (600519.SS) du 2020-01-01 au 2021-01-01
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')

# Supprimer les colonnes 'Volume' et 'Adj Close'
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])

# Calculer l'indicateur RSI
delta = stock_data_cleaned['Close'].diff(1)
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)

# Calculer les gains et pertes moyens
avg_gain = gain.rolling(window=14).mean()
avg_loss = loss.rolling(window=14).mean()

# Calculer l'indice de force relative (RSI)
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))

# Ajouter le RSI aux données
stock_data_cleaned['RSI'] = rsi

# Tracer la courbe RSI
plt.figure(figsize=(12, 6))
plt.plot(stock_data_cleaned['RSI'], label='RSI')
plt.axhline(y=70, color='r', linestyle='--', label='Suracheté (70)')
plt.axhline(y=30, color='g', linestyle='--', label='Survendu (30)')
plt.title('Indicateur RSI pour l’action Maotai', fontsize=14)
plt.xlabel('Date', fontsize=12)
plt.ylabel('RSI', fontsize=12)
plt.legend()
plt.grid(True)
plt.show()

La sortie est la suivante :


Applications de l’analyse des données boursières

Dans l’analyse réelle des données boursières, vous pouvez utiliser pandas pour effectuer les opérations courantes suivantes :

1. Rendement quotidien et rendement cumulé

Le calcul du rendement quotidien et du rendement cumulé d’une action aide à évaluer sa performance à long terme.

Exemple

import yfinance as yf
import matplotlib.pyplot as plt
# Obtenir les données boursières de Moutai (600519.SS) du 2020-01-01 au 2021-01-01
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')

# Supprimer les colonnes 'Volume' et 'Adj Close'
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])

# Calculer les rendements quotidiens
stock_data_cleaned['Daily_Return'] = stock_data_cleaned['Close'].pct_change()

# Calculer les rendements cumulés
stock_data_cleaned['Cumulative_Return'] = (1 + stock_data_cleaned['Daily_Return']).cumprod()

# Tracer les rendements cumulés
plt.figure(figsize=(10, 6))
plt.plot(stock_data_cleaned['Cumulative_Return'], label='Rendement cumulé')
plt.title('Rendement cumulé de l’action Maotai (2020)', fontsize=14)
plt.xlabel('Date', fontsize=12)
plt.ylabel('Rendement cumulé', fontsize=12)
plt.legend()
plt.grid(True)
plt.show()

La sortie est la suivante :

2. Volatilité de l’action

La volatilité est un indicateur qui mesure les fluctuations du cours des actions.

Habituellement, nous pouvons utiliser l'écart-type des rendements pour mesurer la volatilité d'une action.

Exemple

import yfinance as yf
import matplotlib.pyplot as plt
# Obtenir les données boursières de Moutai (600519.SS) du 2020-01-01 au 2021-01-01
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')

# Supprimer les colonnes 'Volume' et 'Adj Close'
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])

# Calculer les rendements quotidiens
stock_data_cleaned['Daily_Return'] = stock_data_cleaned['Close'].pct_change()

# Calculer les rendements cumulés
stock_data_cleaned['Cumulative_Return'] = (1 + stock_data_cleaned['Daily_Return']).cumprod()

# Calculer l'écart-type des rendements quotidiens (volatilité)
volatility = stock_data_cleaned['Daily_Return'].std()

# Afficher la volatilité
print(f"Volatilité quotidienne: {volatility:.4f}")

La sortie est la suivante :

[*********************100%%**********************]  1 of 1 completed
Daily Volatility: 0.0181
Autres extensions