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

import yfinance as yf

# 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: Open
  • High: High
  • Low: Low
  • Close: Close
  • Adj 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

import yfinance as yf

# 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

import yfinance as yf

# 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

import yfinance as yf

# 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 yfinance as yf
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 yfinance as yf
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 yfinance as yf
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 yfinance as yf
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 yfinance as yf
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.0181
Andere Erweiterungen