闲来无事,做一张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.', 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.', 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.深圳成指2', 'sz.创业板指2')
数据展示:

下一步,数据可视化。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/16408.html