pandas金融数据分析教程-part1

  本文是利用python来分析金融数据的一个入门教程,同时也是数据分析利器pandas的一个实战教程。文中将利用pandas来分析中国A股历史交易数据,数据来源为tushare
  由于大数据、人工智能技术的快速发展,国内外许多金融机构早就不仅仅专耕于金融领域,并且在大数据分析、自动化策略等方面投入了大量的精力,因为数据科学与计算机技术的发展不仅可以大幅提高传统交易模式的速度,提高准确度,并且能够自动化管理更大的数据量,尤其在国外,利用数据分析和自动化交易技术早已经成为了主流。

396876_cc92_7.jpg

  下面将数据处理的代码贴在下面,代码中主要涉及的知识点如下:

  • DataFrame和Series的基本结构
  • DataFrame的行、列选取方式和规范
  • 时间索引的基础和切片
  • 滑动窗口和移动平均数
  • 数据按时间周期的重采样

  具体的讲解请查看代码中的注释,直接看注释不直观?需要清晰、直观的体验点击这里!

  通过tushare获取的数据为pandas.DataFrame格式,可以保存在本地

# coding: utf-8
import tushare as ts
df = ts.get_hist_data('000001')
df.to_csv('./000001.csv')

  然后可以通过直接读取本地文件来导入数据, read_csv函数的详细介绍查看这里

import pandas as pd
df = pd.read_csv('./000001.csv', header=0, index_col='date')
df.index = pd.DatetimeIndex(df.index)  # 将普通字符型索引传化为时间索引

  DataFrame是一个二维表,类似于excel的一个sheet中的内容,也类似于数据库中的表的概念。 读入数据后,可以通过许多DataFrame内置的函数来对数据进行一个整体的查看

df.head(10) # 查看前10行数据 
df.describe() # 查每一列的行数、期望、各个分位数等
df.shape # 查看数据表的大小

  对DataFrame的整体有一个初步的认识之后,下面是对其行和列的选取操作

df['open']  # 可以选取DataFrame的对应的列
df.iloc[0]  # 通过此方式来选取数据的行
df.loc['2016-09-27']  # 可以通过索引选取对应的行
df[['open', 'close', 'high']] # 选取多个列
df.iloc[0:3] # 选取多个行
df['2016-09'] # 按照时间索引选取所有的9月数据,只有在索引类型为时间索引时才可以这么操作
df[0:-1:2] 
# 从前往后每隔两个数据取一个数据,第一个数为开始行数,第二个数为结束行数(选取到此行之前)
# 第三个数为间隔数目

  可以通过DataFrame内置的plot函数来进行画图,其内部是利用了matplotlib实现的。为了画图的美观,首先设置一些画图的参数:

import matplotlib.pyplot as plt 
plt.style.use('seaborn-darkgrid') # 设置画图的风格
plt.rc('font', family='SimHei', size=6) #设置图中字体和大小
plt.rc('figure', figsize=(4,3), dpi=200) # 设置图的大小

  将其中一列画折线图

df.open.plot()  # 索引为时间后,会在图上的x轴以合理的间隔显示
价格折线图.png

  原始数据中,所有的价格都是实际值,实际情况下,我们可能需要价格的变化值,或者是价格的变化率

df.open.diff() # 后一天减去前一天的差值
df.close.pct_change() # 后一天对比前一天的变化率

  我们可以对变化率进行初步的统计分析,看看收盘价变化率的概率分布情况

df.close.pct_change().hist(bins=30) # hist函数用于查看一个序列的直方图,bins参数表示将数据分为多少段
变化率直方图.png

  可以为DataFrame和Series设置一个指定长度的滑动窗口,然后在窗口长度内进行数据操作,例如求mean,max,min等

df.open.rolling(5).mean() # 以5个数据作为一个数据滑动窗口,在这个5个数据上取均值
df.open.rolling(5).max() # 以5个数据作为一个数据滑动窗口,在这个5个数据上取最大值
# 将原始数据和5日、20日均线画到一个图上,由于需要让数据从时间最远处开始,所以将实际数据倒序
df.open.plot()
df[::-1].open.rolling(5).mean().plot()
df[::-1].open.rolling(20).mean().plot()
移动平均数.png

  对于时间序列数据,除了求移动平均值等常用操作之外,还有一个常用的操作就是对时间数据进行重采样(resample)。

  例如上面的示例数据是每日的交易数据,我们需要按周来查看开盘价,即需要对数据按周进行重采样。

  需要注意的是,重采样时候DataFrame或Series的索引必须为时间索引

df.open.resample('W').max()  # 按周为采样规则,每周内取最大值

  常用采样参数:B:工作日; D:天; W:周; M:月; SM:半月
  详情点击查看

df.open.plot()
df.open.resample('7D').max().plot()
降采样价格.png

写在最后:
  文中的代码,以及具体的分析过程,可以点击这里查看和下载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容