学习目标:选股策略1:4_批量导入数据及存储(hdf)
学习内容:
1:导入必要库
import os
import pandas as pd
pd.set_option('expand_frame_repr', False) # 当列太多时不换行
2:导入数据函数
# 导入数据
def import_stock_data(stock_code):
"""
只导入如下字段:'交易日期', '股票代码', '开盘价', '最高价', '最低价', '收盘价', '涨跌幅'
最终输出结果按照日期排序
:param stock_code:
:return:
"""
df = pd.read_csv(stock_code + '.csv', encoding='gbk')
#print(df)
df = df[['交易日期','股票代码', '开盘价', '最高价', '最低价', '收盘价', '涨跌幅']]
df.sort_values(by=['交易日期'], inplace=True)
df['交易日期'] = pd.to_datetime(df['交易日期'])
df.reset_index(inplace=True, drop=True)
return df
3:导入单个股票的数据
# 导入单个股票的数据
code = 'sz300001'
df =import_stock_data(code)
4:导入文件夹目录
# =====批量导入股票数据
# 系统自带函数os.walk,用于遍历文件夹中的所有文件,os是python自带的系统库
# 演示os.walk
for root, dirs, files in os.walk('stock_data'):
# root输出文件夹,dirs输出root下所有的文件夹,files输出root下的所有的文件
print ('root:', root)
print ('dirs:', dirs)
print ('files:', files)
5:批量读取文件名称
# ===批量读取文件名称
stock_list = []
for root, dirs, files in os.walk('stock_data'):
# 当files不为空的时候
if files:
for f in files:
if f.endswith('.csv'):
stock_list.append(f[:8])
print(stock_list)
6:批量导入股票数据
# ===批量导入股票数据
all_stock_data = pd.DataFrame()
for code in stock_list:
print (code)
# 导入数据
df =import_stock_data('stock_data/'+code)
# 合并数据
all_stock_data = all_stock_data.append(df, ignore_index=True) # 注意此时若一下子导入很多股票的时候,可能会内存溢出
print (all_stock_data)
7:将数据存入hdf文件中
# 将数据存入hdf文件中
all_stock_data.to_hdf(
'all_stock_data_h5.h5',
key='all_stock_data',
mode='w')
8:创建hdf文件
# =====将数据存入hdf文件
# 创建hdf文件
h5_store = pd.HDFStore( 'stock_data_H5_1.h5', mode='w')
# 批量读取股票并且存如store
for code in stock_list:
print (code)
# 导入数据
df = import_stock_data('stock_data/'+code)
# 存储数据方式1
h5_store[code] = df
# 存储数据方式2
df.to_hdf('stock_data_H5_2.h5', key=code, mode='a')
# 关闭hdf文件
h5_store.close()
# 另外一种方式读取hdf数据
# print pd.read_hdf(
# config.output_data_path + '/stock_data_H5_2.h5',
# key='sz000006'
# )
9:读取hdf数据
h5_store.open()
# =====读取hdf数据
# 创建hdf文件
# h5_store = pd.HDFStore('stock_data_H5_1.h5', mode='r')
#h5_store中的key
print (h5_store.keys())
# 读取某个key指向的数据
#print (h5_store.get('sz000006'))
#print (h5_store['sz000007'])
# 另外一种方式读取hdf数据
print (pd.read_hdf(
'stock_data_H5_2.h5',
key='sz000009'
))
# 关闭hdf文件
h5_store.close()