美文网首页
股票数据分析(一)

股票数据分析(一)

作者: 我念东风终不负 | 来源:发表于2017-10-19 18:05 被阅读170次

近期由于一些特别的原因,需要获取股票数据并进行分析,由于之前没有过相关知识储备,很是踩了一些坑,特此记录,以备查验。

1.数据源获取:

一些比较老的资料都是教你从新浪甚至雅虎去爬取股票交易数据。
其实python有一个免费/开源的财经数据接口包tushare(由于本次只需要股票数据,还没深入研究其他的,但是粗粗扫了两眼,口水一地啊),直接pip安装即可(依赖pandas,lxml,如没有也需要安装)。

安装好后我们来看一下数据,这里我们以获取上证指数17年9月1号到9月10号的数据为例

>>> import tushare as ts
>>> ts.get_hist_data('sh', '2017-09-01','2017-09-10', 'D')
               open     high    close      low      volume  price_change  \
date
2017-09-08  3364.43  3380.89  3365.24  3353.69  1984051.88         -0.26
2017-09-07  3383.63  3387.80  3365.50  3363.18  2211186.75        -19.89
2017-09-06  3372.43  3391.01  3385.39  3364.76  2290907.75          1.07
2017-09-05  3377.20  3390.82  3384.32  3371.57  2165529.50          4.74
2017-09-04  3369.72  3381.40  3379.58  3359.13  2674278.50         12.46
2017-09-01  3365.99  3381.93  3367.12  3358.47  2824975.75          6.31

后面还有其他列,篇幅原因就不列出了,可以直接看API 。。。:)

2.数据存储

这里有特殊要求,需要用HDF5存储(没接触过的存储,以前的数据要么存数据库,要么存csv,excel。。)
tushare其实也给了接口,有两种方法(第二种方法需要安装pytables,pip自动安装会有问题,推荐手动安装,参考Python常用包下载地址):


df = ts.get_hist_data('sh')
df.to_hdf('hdf.h5','sh')
df = ts.get_hist_data('sh')
store = HDFStore('store.h5')
store['sh'] = df
store.close()

数据存储成功后,现在来看一下写入的hdf5文件内容(附:HDF5查看工具(密码:qotk):HDFExplorer
索引:

索引.png 值: 值.png

※※

由于后面需要用到index,这里我使用的是另一种方法,以table格式写入hdf5文件:

df = ts.get_hist_data('sh','2017-09-01','2017-09-10', 'D')
store = pd.HDFStore('store.h5')
store.append('sh', df, format='table', data_columns=['open', 'close', 'volume'])
store.close()

打开文件如下

table.png

3.数据读取

这里需要查询指定条件(这里我只查了时间条件,如果还有其他条件,在where的list中加入即可)的指定字段数据:

>>> reader = pd.HDFStore('store.h5', mode='r')
>>> print(reader.select('sh', where=['index=="2017-09-01"'], columns=['open','close','volume']))
               open    close      volume
date
2017-09-01  3365.99  3367.12  2824975.75
>>> reader.close()

附代码:

# -*- encoding: utf-8 -*-

import tushare as ts
import pandas as pd

FILENAME = 'ybb_sh.h5'
INDEX = 'ybb'

CODE = 'sh'
START = '2017-09-01'
END = '2017-09-30'


# get_data(date = "2017-09-10",field = ['open','volume'])


# 上证指数记录获取
def get_sh_hist_data(code, start, end, ktype, columns = []):
    return ts.get_hist_data(code, start, end, ktype).loc[:, columns]


# 操作HDF5文件
def handle_hdf5(filename, mode):
    return pd.HDFStore(filename, mode=mode)


# 写入HDF5
def write_hdf5(filename, index, dateframe, data_columns = []):
    writer = handle_hdf5(filename, 'w')
    try:
        writer.append(index, dateframe , data_columns = data_columns)
        return True
    except Exception as e:
        return False
    finally:
        writer.close()


# 按条件读取记录
def get_hdf5(filename, index, where = [], columns = []):
    reader = handle_hdf5(filename, 'r')
    try:
        return reader.select(index, where = where, columns= columns)
    except Exception as e:
        print(e)
    finally:
        reader.close()

# 目标函数
def get_data(date = '', field = []):
    return get_hdf5(FILENAME, INDEX, ['index=="%s"' %(date) ] , field)


if __name__ == '__main__':
    df = get_sh_hist_data(CODE, START, END, 'D', ['open','close','volume'])

    print('HDF5写入成功!') if write_hdf5('ybb_sh.h5', INDEX, df, ['open','close','volume']) else print('HDF5写入失败')
    print('开始读取。。。')
    res = get_data(date="2017-09-13",field = ['open','volume'])
    print(res)

未完待续。。。

相关文章

网友评论

      本文标题:股票数据分析(一)

      本文链接:https://www.haomeiwen.com/subject/shxpuxtx.html