
2 min read283 words
Python数据分析入门
Python
金融数据分析
talib与mplfinance
10分钟掌握量化回测神器talib与mplfinance - 小红书
第1步:引入库
#数据计算与分析 importpandasaspd import numpy as np #数据可视化 importmatplotlib.pyplotasplt importmatplotlibasmpl importseabornassns #金融数据分析与可视化 import mplfinance as mpf #金融数据可视化 import talib #金融指标计算
第2步:数据导入
file_path = '数据文件路径' #数据导入与查看 df = pd.read_csv(file_path) #导入csv df #查看最前5条和最后5条数据 df.head() #查看最前5条数据 df.tail() #查看最后5条数据 print(df.head()) print(df.tail()) #查看数据类型 type(data['column_name'])
第3步:数据整理与清洗
#删除数据 df = df.drop(columns=['column_name']) #删除列 df_dropped = df.drop(0) # 删除索引为 0 的行 #按行截取部分数据 df = df.loc[2:8] df = df.loc[1:] df = df.loc[:10] df = df.loc['index_name':] #从某一行开始往后所有数据 # 按索引选择行 print(df.iloc[1:3]) # 选择第二到第三行(按位置) # 按标签选择行 print(df.loc[1:2]) # 选择第二到第三行(按标签)
数据格式转换
#查看数据格式类型 pd.index.dtype #索引列的数据格式 print("pd索引类型:", pd.index.dtype) #将date列转化为日期格式 df['date'] = pd.to_datetime(df['date'], format='%Y%m%d') #将索引列转化为日期格式 pd.index = pd.to_datetime(pd.index) #将某一列设置为索引 df.set_index('date', inplace=True)
数据运算处理
#把某些列的数值*1000 pd_scaled[['column1', 'column2']] = pd_scaled[['column1', 'column2']] * 1000
缺失值处理
#删除缺失值 df = df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) #axis:默认为0,逢空值剔除整行,axis=1逢空值去掉整列。 #how:默认为'any' 任何一个数据为空就去掉整行/列,'all' 一行(或列)都为空才去掉这整行/列。 #thresh:设置需要多少非空值的数据才可以保留下来的。 #subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。 #inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。 #通过isnull() 判断各个单元格是否为空 df['column_name'].isnull()
数据合并与连接
#merge() — 数据库风格的连接,类似 SQL 中的 JOIN 操作。支持内连接、外连接、左连接和右连接。 result = pd.merge(left, right, on='ID', how='inner', suffixes=('_x', '_y')) #concat() — 沿轴连接,将多个 DataFrame 沿指定轴(行或列)进行连接,常用于行合并(垂直连接)或列合并(水平连接)。 result = pd.concat([df1, df2], axis=0, ignore_index=True) #join() — 基于索引连接,Pandas 中的简化连接操作,通常用于基于索引将多个 DataFrame 连接。 result = left.join(right, how='inner', lsuffix='_left', rsuffix='_right')
参考资料:
https://gairuo.com/p/pandas-merge
https://gairuo.com/p/pandas-concat
第4步:绘制图形
可视化相关设置
#设置中文字体 mpl.rcParams['font.sans-serif'] = ['Arial Unicode MS'] #设置中文字体 mpl.rcParams['axes.unicode_minus'] = False #解决负号显示问题
K线图
import mplfinance as mpf #画K线图 mpf.plot(sh_data, type='candle', # 使用蜡烛图 style='charles', # 使用经典的黑白风格 title='Candlestick Chart', ylabel='Price', xlabel='Date', volume=True, # 显示成交量 ylabel_lower='Volume', figsize=(12, 6), figratio=(12, 8), # 图形比例 figscale=1.2) # 图形缩放
其他
Talib 代码
#计算5日MA指标 MA_5 = talib.MA(df['close'].values, timeperiod=5)