資料視覺化(一)A股三大指數10年漲跌幅比較:資料爬取和整理

快樂蟲發表於2020-11-13

閒來無事,做一張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')

資料展示:
在這裡插入圖片描述
下一步,資料視覺化。

相關文章