
Pandas, NumPy және Matplotlib арқылы деректерді талдау
Қаржы деректерін квант маман сияқты тазартып, түрлендіріп, визуализациялау
NumPy: Капот астындағы қозғалтқыш
Python-дағы кез келген байыпты қаржы есептеуі түптеп келгенде NumPy арқылы жүреді. Python тізімдері икемді болғанымен, олар баяу — әр элемент тип тексеру шығынымен толық Python объектісі. NumPy массивтері шикі сандарды тұтас жад блоктарында сақтайды, бұл таза Python циклдерінен 100 есе жылдам жұмыс істейтін операцияларды мүмкін етеді.
Айырмашылық тәжірибеде мынадай:
import numpy as np
# Create an array of 1 million random daily returns
returns = np.random.normal(0.0005, 0.02, 1_000_000)
# Vectorized operations — no loops needed
cumulative = np.cumprod(1 + returns) # Growth of $1
sharpe = returns.mean() / returns.std() * np.sqrt(252)
max_drawdown = np.min(cumulative / np.maximum.accumulate(cumulative) - 1)
print(f"Sharpe Ratio: {sharpe:.3f}")
print(f"Max Drawdown: {max_drawdown:.2%}")
Қаржы үшін негізгі NumPy концепциялары:
- Векторланған операциялар — элемент бойынша циклдеудің орнына бүтін массивтерге бірден математика қолдану.
- Broadcasting — арифметика үшін түрлі пішіндегі массивтерді автоматты түрде туралау (мыс., скаляр орташаны әр элементтен алу).
- Сызықтық алгебра —
np.linalgпортфолио оптимизациясында пайдаланылатын матрицалық көбейту, меншікті мән декомпозициясы және шешушілерді береді. - Кездейсоқ сампылдау — Монте-Карло симуляциялары, бутстрап сампылдау және стохастикалық модельдеу
np.random-ге сүйенеді.
Өнімділік кеңесі: Python for-циклдерінен әрдайым векторланған NumPy операцияларын артық көріңіз. 500 активте циклмен 30 секунд алатын портфолио оптимизациясы векторланған NumPy-мен 50 миллисекундтан аз уақытта аяқталады — 600 есе жылдамдату.
Pandas: Қаржы деректері үшін DataFrame
NumPy — қозғалтқыш болса, pandas — құрал тақтасы. Ол NumPy массивтерін қаржы деректерін өңдеуді интуитивті және мәнерлі ететін белгіленген, индекстелген құрылымдарға ораулайды.
Екі негізгі құрылым:
- Series — индексі бар бір баған деректер (жабылу бағалары уақыт қатары деп ойлаңыз).
- DataFrame — ортақ индексті болісетін, әркайсысы Series болатын бағандар кестесі (OHLCV шам-график деректері деп ойлаңыз).
Деректерді жүктеу мен қарау түзу:
import pandas as pd
# Read from CSV
df = pd.read_csv("btc_daily.csv", parse_dates=["date"], index_col="date")
# Or from JSON (common in API responses)
df = pd.read_json("https://api.example.com/candles?symbol=ETH")
# Quick inspection
print(df.shape) # (365, 5)
print(df.dtypes) # Column types
print(df.describe()) # Statistical summary
print(df.tail()) # Last 5 rows
Pandas-ты қаржы үшін мінсіз ететін нәрсе — оның DatetimeIndex. Индексіңіз datetime типті болғаннан кейін, қуатты уақыт қатары операцияларын ашасыз:
# Slice by date range
q1_data = df["2025-01":"2025-03"]
# Resample daily data to weekly OHLC
weekly = df["close"].resample("W").ohlc()
# Forward-fill missing data (weekends, holidays)
df = df.asfreq("D").ffill()
Осы операциялар қаржы деректерінің тәртіпсіз шындықтарын — олқылықтар, уакыт белдеу айырмашылықтары, тұрақсыз уакыт белгілер — өнделеп, сізге деректер құбырынан гөрі талдауга көбірек назар аударуга мүмкіндік береді.
Айналмалы есептеулер: жылжымалы орташа мен волатильность
Қаржы талдауы тұтастай терезелі. Сіз жеке нүктеге оқшауланған түрде сирек мән бересіз — контекст оның жуырдағы тарихқа қатынасынан келеді. Pandas-тың .rolling() әдісі осы жердегі негізгі құралыңыз.
import pandas as pd
import numpy as np
# Assume df has a "close" column with DatetimeIndex
df["sma_20"] = df["close"].rolling(20).mean()
df["sma_50"] = df["close"].rolling(50).mean()
df["ema_12"] = df["close"].ewm(span=12).mean()
# Daily returns and rolling volatility
df["returns"] = df["close"].pct_change()
df["vol_30d"] = df["returns"].rolling(30).std() * np.sqrt(365)
# Bollinger Bands
df["bb_upper"] = df["sma_20"] + 2 * df["close"].rolling(20).std()
df["bb_lower"] = df["sma_20"] - 2 * df["close"].rolling(20).std()
# Rolling correlation between two assets
df["corr_btc_eth"] = df["btc_returns"].rolling(60).corr(df["eth_returns"])
Әр трейдер білуі керек негізгі айналмалы есептеулер:
- Жай жылжымалы орташа (SMA) — N период бойынша тең салмақтап орташалау. Кешеуілдейді, бірақ тұрақты.
- Экспоненциалды жылжымалы орташа (EMA) —
.ewm()арқылы жуырдағы деректерге көбірек салмақ береді. Баға өзгерісіне жиірек жауап береді. - Айналмалы волатильность — терезе бойы кірістердің стандартты ауытқуы, жылдыққа келтірілген. Позиция мөлшері мен тәуекел бюджеті үшін маңызды.
- Айналмалы корреляция — екі активтің уақыт бойы бірге қозғалуын өлшейді. Портфолио диверсификациясы үшін критикалық.
GaiaEx сияқты платформаларда сіз трейдинг API арқылы тарихи шам деректерін алып, оны pandas DataFrame-ге жүктеп, осы индикаторларды секундтар ішінде есептей аласыз — сол уақытта активтеріңіз MPC әмияныңызда қауіпсіз қалады.
Портфолио талдауы үшін GroupBy мен агрегация
Бірнеше активті басқарған кезде, .groupby() міндетті болады. Ол сізге деректерді санат бойынша бөлу, есептеулер қолдану, және нәтижелерді біріктіруге мүмкіндік береді — бөлу-қолдану-біріктіру үлгісі.
# DataFrame with multiple assets
trades = pd.DataFrame({
"symbol": ["BTC", "ETH", "BTC", "SOL", "ETH", "BTC"],
"side": ["buy", "buy", "sell", "buy", "sell", "buy"],
"pnl": [120.5, -45.2, 89.0, 210.3, 55.8, -30.1],
"volume": [5000, 3200, 4800, 1500, 2900, 5100],
})
# Performance by asset
summary = trades.groupby("symbol").agg(
total_pnl=("pnl", "sum"),
avg_pnl=("pnl", "mean"),
trade_count=("pnl", "count"),
total_volume=("volume", "sum"),
win_rate=("pnl", lambda x: (x > 0).mean()),
)
print(summary.sort_values("total_pnl", ascending=False))
Портфолио жұмысы үшін дамыған агрегация үлгілері:
- Көп деңгейлі groupby — актив және жақ бойынша бөліп, актив бойынша long мен short өнімділігін көруге.
- Меншікті агрегация функциялары — актив топ бойынша Шарп коэффициентін, Сортино коэффициентін немесе максималды даундроуды есептеу.
- Pivot кестелері —
pd.pivot_table()пайдаланып активтің айлық кірістерін ыстылық картасына ыңғайлы форматка қайта кестелеу. - Groupby-мен пересамплинг — көп-активті уақыт қатары талдау үшін уақыт негізіндегі пересамплингті санатты бөлумен ұштастыру.
Matplotlib: баға қозғалысы мен сигналдарды диаграммалау
Визуализациясыз деректер — тек сандар. Matplotlib талдауыңызды шикі деректерде көрінбейтін үлгілерді ашатын диаграммаларға айналдырады.
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
fig, axes = plt.subplots(3, 1, figsize=(14, 10),
sharex=True, gridspec_kw={"height_ratios": [3, 1, 1]})
# Price + Moving Averages
axes[0].plot(df.index, df["close"], label="Close", linewidth=1.2)
axes[0].plot(df.index, df["sma_20"], label="SMA 20", linestyle="--")
axes[0].fill_between(df.index, df["bb_upper"], df["bb_lower"],
alpha=0.1, color="blue", label="Bollinger Bands")
axes[0].set_ylabel("Price (USD)")
axes[0].legend(loc="upper left")
# Volume bars
colors = ["green" if c > o else "red"
for c, o in zip(df["close"], df["open"])]
axes[1].bar(df.index, df["volume"], color=colors, alpha=0.7)
axes[1].set_ylabel("Volume")
# Rolling Volatility
axes[2].plot(df.index, df["vol_30d"], color="purple")
axes[2].set_ylabel("30d Volatility")
axes[2].axhline(y=0.8, color="red", linestyle=":", alpha=0.5)
axes[2].xaxis.set_major_formatter(mdates.DateFormatter("%b %Y"))
plt.tight_layout()
plt.savefig("analysis_dashboard.png", dpi=150)
plt.show()
Бұл кәсіби үш-панельді дэшборд шығарады: үстінде Боллинджер жолақтарымен баға қозғалысы, ортасында көлем, астында волатильность. Бұл макет кәсіби трейдинг терминалдарында көретініңізге сәйкес келеді.
Статистикалық визуализация үшін seaborn Matplotlib үстіне жоғары деңгейлі функциялар құрады:
import seaborn as sns
# Return distribution
sns.histplot(df["returns"].dropna(), bins=100, kde=True)
# Correlation heatmap across assets
corr_matrix = portfolio_returns.corr()
sns.heatmap(corr_matrix, annot=True, cmap="RdYlGn", center=0)Барлығын бірге қосу: толық талдау құбыры
Нақты күш осы құралдарды қайталанатын құбырға тізбектегенде пайда болады. Мыналар — кәсіби квантшылар күнделі пайдаланатын жұмыс ағыны:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def analyze_asset(symbol: str, df: pd.DataFrame) -> dict:
"""Full analysis pipeline for a single asset."""
df["returns"] = df["close"].pct_change()
df["log_returns"] = np.log(df["close"] / df["close"].shift(1))
return {
"symbol": symbol,
"total_return": (df["close"].iloc[-1] / df["close"].iloc[0]) - 1,
"annual_vol": df["returns"].std() * np.sqrt(365),
"sharpe": df["returns"].mean() / df["returns"].std() * np.sqrt(365),
"max_drawdown": (df["close"] / df["close"].cummax() - 1).min(),
"skewness": df["returns"].skew(),
"kurtosis": df["returns"].kurtosis(),
}
# Analyze multiple assets
results = [analyze_asset(sym, data) for sym, data in assets.items()]
summary = pd.DataFrame(results).set_index("symbol")
print(summary.round(4))
Бұл құбыр шикі баға деректерін алып, әр актив үшін толық тәуекел-табыс профилін шығарады. Осы жерден бастап, осы көрсеткіштерді портфолио оптимизаторына бере аласыз, бөлу ұсынымдарын генерациялай аласыз, немесе қайта теңдеу сигналдарын іске қосатыныздо мүмкін.
Pandas-NumPy-Matplotlib стегі — Python қаржысындағы басқа барлық нәрсе құрылатын негіз. Осы үш кітапхананы игерсеңіз, кез келген нарықты талдай, кез келген индикаторды құра және кез келген стратегияны визуализациялай алатын дағдыға ие боласыз — NYSE-де акциялар, GaiaEx-те крипто, немесе CME-де туынды құралдар сауда жасайтыныз болмасын.

