python爬取基金股票最新數據,並用excel繪製樹狀圖

你們好,最近大A的白馬股們簡直跌媽不認,做爲重倉了抱團白馬股基金的養雞少年,每日那是一個以淚洗面啊。php

python爬取基金股票最新數據,並用excel繪製樹狀圖

跌媽不認html

不過從金融界最近一個交易日的大盤雲圖來看,其實不少中小股仍是紅色滴,綠的都是白馬股們。python

如下截圖來自金融界網站-大盤雲圖:json

python爬取基金股票最新數據,並用excel繪製樹狀圖

2月26日大盤雲圖app

那麼,今天咱們試着用python爬取最近交易日的股票數據,並試着用excel簡單繪製上面這個樹狀圖。網站

  • 爬取網易財經各板塊股票數據
  • excel樹狀圖
  • 簡單的樹狀圖
  • 帶有增加率的樹狀圖

1、爬取網易財經各板塊股票數據

目標網址:url

http://quotes.money.163.com/old/#query=hy010000&DataType=HS_RANK&sort=PERCENT&order=desc&count=24&page=0
python爬取基金股票最新數據,並用excel繪製樹狀圖

網易財經-行情中心spa

因爲這個爬蟲部分比較簡單,這裏不作過多贅述,僅介紹一下思路並附上完整代碼供你們參考。excel

爬蟲思路:code

請求目標網站數據,解析出主要行業(新)的數據:行業板塊名稱及對應id(如金融,hy010000)

根據行業板塊對應id構造新的行業股票數據網頁

因爲翻頁網址不變,代入參數,獲取所有頁數,而後翻頁爬取所有數據

爬蟲代碼:

# -*- coding: utf-8 -*-
""" Created Feb 28 10:30:56 2021 @author: 能夠叫我才哥 """

import requests
import re
import pandas as pd

# 獲取所有板塊及板塊id
url = 'http://quotes.money.163.com/old/#query=hy001000&DataType=HS_RANK&sort=PERCENT&order=desc&count=24&page=0'

r = requests.get(url)

html = r.text
# 替換非字符爲空,便於下面的正則
html = re.sub('\s','',html)
# 正則獲取 板塊及id所在區域
labelHtml = re.findall(r'</span>主要行業\(新\)</a>(.*?)</span>證監會行業\(新\)',html)[0]
# 正則板塊和id,結果爲由元組組成的列表
label = re.findall(r'"qid="(hy.*?)"qquery=.*?"title="(.*?)">',labelHtml)
# 轉化爲dataframe類型
dfLabel = pd.DataFrame(label,columns=['id','板塊'])

# 根據板塊id和翻頁獲取頁面數據(json格式)
def get_json(hy_id, page):
    query = 'PLATE_IDS:' + str(hy_id)
    params={
        'host''http://quotes.money.163.com/hs/service/diyrank.php',
        'page': page,
        'query': query,
        'fields''NO,SYMBOL,NAME,PRICE,PERCENT,UPDOWN,FIVE_MINUTE,OPEN,YESTCLOSE,HIGH,LOW,VOLUME,TURNOVER,HS,LB,WB,ZF,PE,MCAP,TCAP,MFSUM,MFRATIO.MFRATIO2,MFRATIO.MFRATIO10,SNAME,CODE,ANNOUNMT,UVSNEWS'#你能夠不用這麼多字段
        'sort''PERCENT',
        'order''desc',
        'count''24',
        'type''query',
        }
    url = 'http://quotes.money.163.com/hs/service/diyrank.php?'
    r = requests.get(url,params=params)
    j = r.json()
    
    return j

# 空列表用於存取每頁數據
dfs = []
# 遍歷所有板塊
for hy_id,板塊 in dfLabel.values:
    # 獲取頁數
    j = get_json(hy_id, 0)
    pages = j['pagecount']
    
    for page in range(pages):
        j = get_json(hy_id, page)
        data = j['list']
        df = pd.DataFrame(data)
        df['板塊'] = 板塊
        dfs.append(df)
    print(f'已爬取{len(dfs)}個板塊數據')

result = pd.concat(dfs)     

2、excel樹狀圖

excel樹狀圖是在office2016級以後版本中新加的圖表類型,想要繪製須要基於此版本及以後的版本哦。

簡單的樹狀圖繪製流程:框選數據—>插入—>圖表—>選中樹狀圖 便可。

python爬取基金股票最新數據,並用excel繪製樹狀圖

樹狀圖繪製流程

如下圖爲例,在樹狀圖中,每一個色塊表明一個省份,色塊面積大小則由其GDP值大小決定。

python爬取基金股票最新數據,並用excel繪製樹狀圖

2020年全國各地GDP

3、帶有增加率的樹狀圖

咱們發現,在基礎的樹狀圖中,色塊顏色除了區別色塊以外並無其餘特殊含義。拿GDP來講,除了值以外咱們通常也會去看其增加率,那麼是否可讓色塊顏色和增加率有關聯呢?

下面咱們試着探究一下,若是成功的話,那麼金融界的大盤雲圖彷佛也能夠用excel樹狀圖來進行繪製了不是!

一、思路:

咱們但願色塊顏色能表明增加率,好比紅色是上漲,綠色是降低且顏色越深表明絕對值越大

再對每一個色塊進行對應的顏色填充便可

因爲 樹狀圖頂多支持多級,色塊顏色也只能手動單一填充,怎麼辦呢?既然手動能夠,那麼其實就能夠用VBA自動化這個過程咯。

二、增加率配色

基於上述思路,咱們須要對增加率進行配色,最簡單的就是用條件格式裏的色階。

框選增加率數據—>開始—>條件格式—>色階(選中那個讓值越大顏色越紅的,因爲這裏有負增加率,因此選了帶紅綠的):

python爬取基金股票最新數據,並用excel繪製樹狀圖

 

爲了更好的展現區分正負增加率,咱們在設置完色階後再進行管理規則:

咱們將中間值設爲數字0,這樣負增加率就是綠色,正增加率就是紅色;

咱們將最大值設置爲百分點值80,也就是增加率前80%的值都是最紅的。

python爬取基金股票最新數據,並用excel繪製樹狀圖

 

最終配色效果:

python爬取基金股票最新數據,並用excel繪製樹狀圖

配色效果

4、VBA填充色塊顏色

先看效果:

湖北由於收到疫情影響最大,有接近小半年屬於封省狀態,整年增加率爲負數。

python爬取基金股票最新數據,並用excel繪製樹狀圖

各省GDP及增加率

因爲條件格式下單元格顏色是不固定的沒法經過vba獲取,咱們須要將顏色賦值到新的一列中去,須要用到以下操做:

選中增加率數據複製,而後點擊剪切板最右下角會出現剪貼板,再鼠標左鍵選擇須要粘貼的地方如E2,點擊剪貼板中須要粘貼的數據便可。 這個時候,被粘貼的單元格區域的顏色就是固定的了,你能夠選擇刪除數據只留顏色部分。

python爬取基金股票最新數據,並用excel繪製樹狀圖

單元格色複製操做流程

VBA思路:

  • 激活須要操做的圖表(Activate)
  • 遍歷所有的系列和數據點(ActiveChart.FullSeriesCollection(1).Points.Count)
  • 從第一個數據點開始,獲取對應增加率單元格顏色(ActiveSheet.Range("E" & i + 1).Interior.Color)
  • 將單元格賦值給該數據點(Selection.Format.Fill.ForeColor.RGB)

VBA代碼:

Sub My_Color()
 
 ActiveSheet.ChartObjects("圖表 1").Activate
 '遍歷所有的數據點 For i = 1 To ActiveChart.FullSeriesCollection(1).Points.Count '選中數據點
 ActiveChart.FullSeriesCollection(1).Points(i).Select
 '獲取單元格顏色 MyColor = ActiveSheet.Range("E" & i + 1).Interior.Color '將單元格顏色賦值給對應數據點填充色
 Selection.Format.Fill.ForeColor.RGB = MyColor
 Next

執行腳本過程以下:

python爬取基金股票最新數據,並用excel繪製樹狀圖

 

好了,以上就是本次所有內容,你們能夠試着爬取股票數據,而後試着繪製一下。

相關文章
相關標籤/搜索