数据可视化(一)A股三大指数10年涨跌幅比较:数据爬取和整理

闲来无事,做一张A股三大指数10年涨跌对比图。首先爬取数据:

工具:
baostock
pandas

用baostock可以轻松的获取股票交易数据,这里我主要爬取过去十年A股三大指数的K线数据。

基本思路:

  1. 登录系统
  2. 利用内置函数获取历史k线数据
  3. 打印结果
  4. 输出结果到csv文件,方便后续处理
  5. 登出系统

代码如下:

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指数

思路:

  1. 读取之前获得的K线数据
  2. 获得2010.11.10日收盘指数以及每日收盘指数
  3. 遍历每日指数,计算得到累计涨跌,获得每日累计涨跌幅数据
  4. 将三大指数的累计涨跌数据统计到一个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')

数据展示:
在这里插入图片描述
下一步,数据可视化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值