闲来无事,做一张A股三大指数10年涨跌对比图。首先爬取数据:
工具:
baostock
pandas
用baostock可以轻松的获取股票交易数据,这里我主要爬取过去十年A股三大指数的K线数据。
基本思路:
- 登录系统
- 利用内置函数获取历史k线数据
- 打印结果
- 输出结果到csv文件,方便后续处理
- 登出系统
代码如下:
import baostock as bs
import pandas as pd
def get_stockdata(stock_code, stock_name, start_time):
# 登陆系统
lg = bs.login()
# 获取沪深A股历史K线数据
rs = bs.query_history_k_data_plus(stock_code, "date,open,high,low,close,preclose,pctChg",
start_date=start_time,
frequency="d", adjustflag="2")
# adjustflag 默认前复权(1),后复权(2),不复权(3)
# 打印结果集
data_list = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
# 结果集输出到csv文件
result.to_csv("/home/cdd/Desktop/Scraping/stocks/stock_analysis_2/stock_data1/" + stock_code + stock_name + ".csv", index=False)
print(result)
# 登出系统
bs.logout()
if __name__ == '__main__':
get_stockdata(stock_code='sz.399006', stock_name='创业板指', start_time='2010-11-11')
get_stockdata(stock_code='sh.000001', stock_name='上证综指', start_time='2010-11-11')
get_stockdata(stock_code='sz.399001', stock_name='深圳成指', start_time='2010-11-11')
数据展示:
下面,处理数据获得每日相对于2010年11月10日的累计涨跌数据:
累计涨跌 = (当日指数-2010.11.10指数)/ 2010.11.10指数
思路:
- 读取之前获得的K线数据
- 获得2010.11.10日收盘指数以及每日收盘指数
- 遍历每日指数,计算得到累计涨跌,获得每日累计涨跌幅数据
- 将三大指数的累计涨跌数据统计到一个csv文件中
代码如下:
def get_data(stock_code, stock_name):
# 加载数据
filename = '/home/cdd/Desktop/Scraping/stocks/stock_analysis_2/stock_data1/' + stock_code + stock_name + '.csv'
# 读取csv文件,转换为dataframe格式
data = pd.read_csv(filename)
# 创建列表,存放每日收盘价,相对于第一天的涨跌幅
pct_to_firsts = []
# 读取每日收盘价
close = data.iloc[0:, 3]
# 读取基准日收盘价,我们以2010年11月11日开始,所以该收盘价为2010.11.10日的收盘价
first_price = data.iloc[0, 4]
# 遍历每日收盘价, 计算相对于第一天的涨跌幅,并将其存放在pct_to_firsts列表中
for price in close:
pct_to_first = round(((price-first_price)*100 / first_price), 2)
pct_to_firsts.append(pct_to_first)
# 将涨跌幅这一列数据加到data中
data['pct_to_first'] = pct_to_firsts
# 重新保存为csv文件,方便后续分析
data.to_csv("/home/cdd/Desktop/Scraping/stocks/stock_analysis_2/stock_data1/" + stock_code + stock_name + "2" + ".csv", index=False)
def data_process(stock1, stock2, stock3):
# 加载数据
filename1 = '/home/cdd/Desktop/Scraping/stocks/stock_analysis_2/stock_data1/' + stock1 + '.csv'
filename2 = '/home/cdd/Desktop/Scraping/stocks/stock_analysis_2/stock_data1/' + stock2 + '.csv'
filename3 = '/home/cdd/Desktop/Scraping/stocks/stock_analysis_2/stock_data1/' + stock3 + '.csv'
# 读取csv文件,转换为dataframe格式
data1 = pd.read_csv(filename1)
data2 = pd.read_csv(filename2)
data3 = pd.read_csv(filename3)
# 分别获取三大指数的累计涨跌数据
pct_to_first1 = data1.iloc[0:, 7]
pct_to_first2 = data2.iloc[0:, 7]
pct_to_first3 = data3.iloc[0:, 7]
# 将上述数据添加到data1中
data1['上证综指'] = pct_to_first1
data1['深圳成指'] = pct_to_first2
data1['创业板指'] = pct_to_first3
# 去掉data1中多余的列
data1.drop(['open', 'high', 'low', 'close', 'preclose', 'pctChg', 'pct_to_first'], axis=1, inplace=True)
# 保存为csv文件
data1.to_csv("/home/cdd/Desktop/Scraping/stocks/stock_analysis_2/stock_data1/" + "三大指数累积涨幅对比" + ".csv", index=False)
if __name__ == '__main__':
data_process('sh.000001上证综指2', 'sz.399001深圳成指2', 'sz.399006创业板指2')
数据展示:
下一步,数据可视化。