Pandas-Aktien-Datenanalyse
Bei der Aktien-Datenanalyse ist pandas ein sehr leistungsfähiges Werkzeug, das uns helfen kann, Aktienmarktdaten zu verarbeiten und zu analysieren.
In diesem Kapitel verwenden wir yfinance (Yahoo-Finance-Bibliothek), um historische Aktiendaten herunterzuladen und verschiedene Analysen durchzuführen, einschließlich Datenbereinigung, Visualisierung, Berechnung technischer Indikatoren usw.
yfinance ist eine Python-Bibliothek, mit der sich historische und Echtzeitdaten für Vermögenswerte wie Aktien, Fonds und Kryptowährungen einfach von Yahoo Finance abrufen lassen.
Mit pandas können wir diese Daten als DataFrame speichern und anschließende Analysen durchführen.
- Datenbereinigung: Fehlende Werte behandeln, unnötige Spalten entfernen usw.
- Datenvisualisierung: Aktien-Zeitreihen, gleitende Durchschnitte, RSI usw. darstellen.
- Berechnung technischer Indikatoren: wie gleitender Durchschnitt (SMA), Relative Strength Index (RSI) usw.
- Analyse der Tagesrendite und der kumulierten Rendite: Hilft, die kurzfristige und langfristige Performance einer Aktie zu bewerten.
- Volatilitätsanalyse: Misst die Preisvolatilität einer Aktie.
Für weitere Finanzbibliotheken und quantitative Analysen können Sie sich an Folgendem orientieren:Quantitativer Handel mit Python
yfinance installieren
Zuerst müssen wir die yfinance-Bibliothek wie folgt installieren:
pip install yfinance --upgrade --no-cache-dir
Bei der Installation von yfinance wird pandas normalerweise automatisch als Abhängigkeit installiert. Das bedeutet, dass Sie bei der Verwendung von yfinance direkt die von pandas bereitgestellten Datenstrukturen und Funktionen verwenden können, um Daten zu verarbeiten und zu analysieren.
Importieren Sie die erforderlichen Bibliotheken:
import yfinance as yf import pandas as pd import matplotlib.pyplot as plt import seaborn as sns
Aktiendaten abrufen
Mit der yfinance-Bibliothek können wir ganz einfach Aktiendaten herunterladen.
Wir verwenden normalerweise die Funktion yf.download(), um historische Daten einer Aktie von Yahoo Finance abzurufen.
Der Aktiencode von Moutai ist 600519.SS, wobei.SS.SS das Suffix für die Shanghai Stock Exchange ist.
Verwenden Sie yfinance, um Aktiendaten abzurufen:
Beispiel
# Aktiendaten für Moutai (600519.SS) vom 2020-01-01 bis 2021-01-01 abrufen
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')
# Die ersten paar Zeilen der Daten anzeigen
print(stock_data.head())
Die Ausgabedaten werden unten angezeigt:

Die zurückgegebenen Daten enthalten die folgenden Spalten:
Open: OpenHigh: HighLow: LowClose: CloseAdj Close: Bereinigter Schlusskurs (unter Berücksichtigung von Dividenden, Aktiensplits usw.)Volume: Volumen
Die Funktion yf.download() gibt einen pandas.DataFrame zurück, der die historischen Daten der angegebenen Aktie enthält:
Beispiel
# Daten für die Moutai-Aktie abrufen (600519.SS)
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')
# Datentyp prüfen
print(type(stock_data)) # Sollte <class 'pandas.core.frame.DataFrame'> ausgeben
Die Ausgabe ist:
[*********************100%%**********************] 1 of 1 completed <class 'pandas.core.frame.DataFrame'>
Datenbereinigung und -verarbeitung
Bei der Analyse von Aktiendaten müssen wir normalerweise einige Datenbereinigungen und -verarbeitungen vornehmen.
Zu den üblichen Schritten gehören das Auffüllen fehlender Werte, das Entfernen irrelevanter Spalten, die Datentypkonvertierung usw.
In einigen Versionen von yfinance wird pandas automatisch eingebunden und muss nicht erneut importiert werden. Wenn Sie yfinance verwenden, können Sie daher direkt die von pandas bereitgestellten Datenstrukturen und Funktionen nutzen, um Daten zu verarbeiten und zu analysieren.
Fehlende Werte prüfen und auffüllen:
Beispiel
# Aktiendaten für Moutai (600519.SS) vom 2020-01-01 bis 2021-01-01 abrufen
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')
# Auf fehlende Werte prüfen
print(stock_data.isnull().sum())
# Fehlende Werte mit Forward Fill auffüllen
stock_data.ffill(inplace=True)
# Oder Backward Fill verwenden
# stock_data.bfill(inplace=True)
# Prüfen, ob fehlende Werte behandelt wurden
print(stock_data.isnull().sum())
Das Ausgabeergebnis ist wie folgt:
[*********************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
Irrelevante Spalten entfernen:
Beispiel
# Aktiendaten für Moutai (600519.SS) vom 2020-01-01 bis 2021-01-01 abrufen
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')
# Die Spalten 'Volume' und 'Adj Close' entfernen
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])
print(stock_data_cleaned.head())
Das Ausgabeergebnis ist wie folgt:

Datenvisualisierung: Aktienkurskurven darstellen
Mit matplotlib oder seaborn können wir Aktiendaten visualisieren, um Trends und Schwankungen zu erkennen.
Zeitreihe des Schlusskurses darstellen:
Beispiel
import matplotlib.pyplot as plt
# Aktiendaten für Moutai (600519.SS) vom 2020-01-01 bis 2021-01-01 abrufen
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')
# Die Spalten 'Volume' und 'Adj Close' entfernen
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])
# Schlusskurskurve von Moutai zeichnen
plt.figure(figsize=(10, 6))
plt.plot(stock_data_cleaned['Close'], label='Close Price')
plt.title('Maotai-Aktienkurs (2020)', fontsize=14)
plt.xlabel('Datum', fontsize=12)
plt.ylabel('Schlusskurs (CNY)', fontsize=12)
plt.legend()
plt.grid(True)
plt.show()
Die Ausgabe sieht wie folgt aus:

Berechnung technischer Indikatoren für Aktien
In der Aktienanalyse werden technische Indikatoren (wie gleitende Durchschnitte, Relative-Stärke-Index RSI usw.) häufig zur Unterstützung der Entscheidungsfindung eingesetzt. pandas kann uns bei der Berechnung dieser Indikatoren helfen.
1. Gleitender Durchschnitt (SMA)
Der einfache gleitende Durchschnitt (SMA) ist einer der am häufigsten verwendeten technischen Indikatoren und stellt den durchschnittlichen Schlusskurs über die letzten N Tage dar.
Beispiel
import matplotlib.pyplot as plt
# Aktiendaten für Moutai (600519.SS) vom 2020-01-01 bis 2021-01-01 abrufen
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')
# Die Spalten 'Volume' und 'Adj Close' entfernen
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])
# Berechne die 50-Tage- und 200-Tage-gleitenden Durchschnitte
stock_data_cleaned['SMA_50'] = stock_data_cleaned['Close'].rolling(window=50).mean()
stock_data_cleaned['SMA_200'] = stock_data_cleaned['Close'].rolling(window=200).mean()
# Schlusskurs und gleitende Durchschnitte darstellen
plt.figure(figsize=(12, 6))
plt.plot(stock_data_cleaned['Close'], label='Close Price')
plt.plot(stock_data_cleaned['SMA_50'], label='50-Tage-SMA')
plt.plot(stock_data_cleaned['SMA_200'], label='200-Tage-SMA')
plt.title('Maotai-Aktienkurs mit gleitenden Durchschnitten', fontsize=14)
plt.xlabel('Datum', fontsize=12)
plt.ylabel('Preis (CNY)', fontsize=12)
plt.legend()
plt.grid(True)
plt.show()
Die Ausgabe sieht wie folgt aus:

2. Relative-Stärke-Index (RSI)
RSI ist ein technischer Indikator, mit dem beurteilt wird, ob eine Aktie überkauft oder überverkauft ist. Im Allgemeinen signalisiert ein RSI über 70 eine überkaufte und unter 30 eine überverkaufte Situation.
Beispiel
import matplotlib.pyplot as plt
# Aktiendaten für Moutai (600519.SS) vom 2020-01-01 bis 2021-01-01 abrufen
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')
# Die Spalten 'Volume' und 'Adj Close' entfernen
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])
# RSI-Indikator berechnen
delta = stock_data_cleaned['Close'].diff(1)
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
# Durchschnittliche Gewinne und Verluste berechnen
avg_gain = gain.rolling(window=14).mean()
avg_loss = loss.rolling(window=14).mean()
# Relative Strength Index (RSI) berechnen
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
# RSI zu den Daten hinzufügen
stock_data_cleaned['RSI'] = rsi
# RSI-Kurve zeichnen
plt.figure(figsize=(12, 6))
plt.plot(stock_data_cleaned['RSI'], label='RSI')
plt.axhline(y=70, color='r', linestyle='--', label='Überkauft (70)')
plt.axhline(y=30, color='g', linestyle='--', label='Überverkauft (30)')
plt.title('RSI-Indikator für Maotai-Aktie', fontsize=14)
plt.xlabel('Datum', fontsize=12)
plt.ylabel('RSI', fontsize=12)
plt.legend()
plt.grid(True)
plt.show()
Die Ausgabe sieht wie folgt aus:

Anwendungen der Aktien-Datenanalyse
In der tatsächlichen Aktien-Datenanalyse können Sie pandas verwenden, um die folgenden gängigen Operationen durchzuführen:
1. Tagesrendite und kumulative Rendite
Die Berechnung der Tagesrendite und der kumulativen Rendite einer Aktie hilft dabei, ihre langfristige Wertentwicklung zu bewerten.
Beispiel
import matplotlib.pyplot as plt
# Aktiendaten für Moutai (600519.SS) vom 2020-01-01 bis 2021-01-01 abrufen
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')
# Die Spalten 'Volume' und 'Adj Close' entfernen
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])
# Tagesrenditen berechnen
stock_data_cleaned['Daily_Return'] = stock_data_cleaned['Close'].pct_change()
# Kumulierte Renditen berechnen
stock_data_cleaned['Cumulative_Return'] = (1 + stock_data_cleaned['Daily_Return']).cumprod()
# Kumulierte Renditen darstellen
plt.figure(figsize=(10, 6))
plt.plot(stock_data_cleaned['Cumulative_Return'], label='Kumulierte Rendite')
plt.title('Kumulierte Rendite der Maotai-Aktie (2020)', fontsize=14)
plt.xlabel('Datum', fontsize=12)
plt.ylabel('Kumulierte Rendite', fontsize=12)
plt.legend()
plt.grid(True)
plt.show()
Die Ausgabe sieht wie folgt aus:

2. Aktienvolatilität
Die Volatilität ist ein Indikator, der Aktienkursschwankungen misst.
Normalerweise können wir die Standardabweichung der Renditen verwenden, um die Aktienvolatilität zu messen.
Beispiel
import matplotlib.pyplot as plt
# Aktiendaten für Moutai (600519.SS) vom 2020-01-01 bis 2021-01-01 abrufen
stock_data = yf.download('600519.SS', start='2020-01-01', end='2021-01-01')
# Die Spalten 'Volume' und 'Adj Close' entfernen
stock_data_cleaned = stock_data.drop(columns=['Adj Close', 'Volume'])
# Tagesrenditen berechnen
stock_data_cleaned['Daily_Return'] = stock_data_cleaned['Close'].pct_change()
# Kumulierte Renditen berechnen
stock_data_cleaned['Cumulative_Return'] = (1 + stock_data_cleaned['Daily_Return']).cumprod()
# Berechne die Standardabweichung der täglichen Renditen (Volatilität)
volatility = stock_data_cleaned['Daily_Return'].std()
# Volatilität anzeigen
print(f"Tägliche Volatilität: {volatility:.4f}")
Die Ausgabe sieht wie folgt aus:
[*********************100%%**********************] 1 of 1 completed Daily Volatility: 0.0181Andere Erweiterungen