前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理,
PS:如有需要Python學習資料的小伙伴可以點擊下方鏈接自行獲取
Python免費學習資料、代碼以及交流解答點擊即可加入
大家好,最近大A的白馬股們簡直跌媽不認,作為重倉了抱團白馬股基金的養雞少年,每日那是一個以淚洗面啊,
不過從金融界最近一個交易日的大盤云圖來看,其實很多中小股還是紅色滴,綠的都是白馬股們,
以下截圖來自金融界網站-大盤云圖:
那么,今天我們試著用python爬取最近交易日的股票資料,并試著用excel簡單繪制上面這個樹狀圖,
- 爬取網易財經各板塊股票資料
- excel樹狀圖
- 簡單的樹狀圖
- 帶有增長率的樹狀圖
一.爬取網易財經各板塊股票資料
目標網址:
http://quotes.money.163.com/old/#query=hy010000&DataType=HS_RANK&sort=PERCENT&order=desc&count=24&page=0
由于這個爬蟲部分比較簡單,這里不做過多贅述,僅介紹一下思路并附上完整代碼供大家參考,
爬蟲思路:
請求目標網站資料,決議出主要行業(新)的資料:行業板塊名稱及對應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 = https://www.cnblogs.com/python147/p/j['list']
df = pd.DataFrame(data)
df['板塊'] = 板塊
dfs.append(df)
print(f'已爬取{len(dfs)}個板塊資料')
result = pd.concat(dfs)
二.繪制Excel樹狀圖
excel樹狀圖是在office2016級之后版本中新加的圖表型別,想要繪制需要基于此版本及之后的版本哦,
簡單的樹狀圖繪制流程:框選資料—>插入—>圖表—>選中樹狀圖 即可,
以下圖為例,在樹狀圖中,每個色塊代表一個省份,色塊面積大小則由其GDP值大小決定,
三.帶有增長率的樹狀圖
我們發現,在基礎的樹狀圖中,色塊顏色除了區別色塊之外并沒有其他特殊含義,拿GDP來說,除了值之外我們一般也會去看其增長率,那么是否可以讓色塊顏色和增長率有關聯呢?
下面我們試著探究一下,如果成功的話,那么金融界的大盤云圖似乎也可以用excel樹狀圖來進行繪制了不是!
1.思路:
我們希望色塊顏色能代表增長率,比如紅色是上漲,綠色是下降且顏色越深代表絕對值越大
再對每個色塊進行對應的顏色填充即可
由于 樹狀圖頂多支持多級,色塊顏色也只能手動單一填充,怎么辦呢?既然手動可以,那么其實就可以用VBA自動化這個程序咯,
2、增長率配色
基于上述思路,我們需要對增長率進行配色,最簡單的就是用條件格式里的色階,
框選增長率資料—>開始—>條件格式—>色階(選中那個讓值越大顏色越紅的,由于這里有負增長率,所以選了帶紅綠的):
為了更好的展示區分正負增長率,我們在設定完色階后再進行管理規則:
我們將中間值設為數字0,這樣負增長率就是綠色,正增長率就是紅色;
我們將最大值設定為百分點值80,也就是增長率前80%的值都是最紅的,
最終配色效果:
四.VBA填充色塊顏色
先看效果:
湖北因為收到疫情影響最大,有接近小半年屬于封省狀態,全年增長率為負數,
由于條件格式下單元格顏色是不固定的無法通過vba獲取,我們需要將顏色賦值到新的一列中去,需要用到如下操作:
選中增長率資料復制,然后點擊剪切板最右下角會出現剪貼板,再滑鼠左鍵選擇需要粘貼的地方如E2,點擊剪貼板中需要粘貼的資料即可, 這個時候,被粘貼的單元格區域的顏色就是固定的了,你可以選擇洗掉資料只留顏色部分,
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
執行腳本程序如下:
好了,以上就是本次全部內容,大家可以試著爬取股票資料,然后試著繪制一下,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/265807.html
標籤:Python
