上次簡單的爬取了一些榜單資料,并提取出想要的資訊,這次想要将資料爬取下來後,使用pyecharts展示,簡單搜了下pyecharts有很多教程,例如《使用PYTHON抓取貓眼近10萬條評論并分析》,本來是想直接copy了事,一運作發現報錯很多。上了官網(https://github.com/pyecharts/pyecharts) 下載下傳檢視官方樣例文檔,發現我下載下傳的是最新的V1.3的版本,相較V0.5x變化改動很多
比如之前搜到的教程中,柱狀圖的形成代碼是:
# coding=utf-8
__author__ = '湯小洋'
# 導入Style類,用于定義樣式風格
from pyecharts import Style
import json
# 導入Geo元件,用于生成柱狀圖
from pyecharts import Bar
# 導入Counter類,用于統計值出現的次數
from collections import Counter
# 定義樣式
style = Style(
title_color='#fff',
title_pos='center',
width=1200,
height=600,
background_color='#404a59'
)
# 根據城市資料生成柱狀圖
data_top20 = Counter(cities).most_common(20) # 傳回出現次數最多的20條
bar = Bar('《一出好戲》粉絲來源排行TOP20', '資料來源:貓眼-湯小洋采集', title_pos='center', width=1200, height=600)
attr, value = bar.cast(data_top20)
bar.add('', attr, value, is_visualmap=True, visual_range=[0, 3500], visual_text_color='#fff', is_more_utils=True,
is_label_show=True)
bar.render('粉絲來源排行-柱狀圖.html')
但是新版本的提供的示例是
from pyecharts.charts import Bar
from pyecharts import options as opts
# V1 版本開始支援鍊式調用
bar = (
Bar()
.add_xaxis(["襯衫", "毛衣", "領帶", "褲子", "風衣", "高跟鞋", "襪子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
.set_global_opts(title_opts=opts.TitleOpts(title="某商場銷售情況"))
)
bar.render()
pyecharts 不再包括Style類,不能直接通過bar.add添加所需參數,但是官方提供的樣例并沒有解釋所有參數,我隻好又繼續搜,但是大部分都是根據V0.5x的版本寫的,無奈,,還是根據官方源檔案 bar.py 一個個對比參數看了,可以看到參數如下:
【後續搜到這篇《python 可視化資料神器》,不過排版較亂,但是是最新的,也比較全】
def add_yaxis(
self,
series_name: str,#名稱
yaxis_data: types.Sequence[types.Union[types.Numeric, opts.BarItem, dict]],
*,#數值 ex: [['a',1],['b',2]]
#名稱和數值為必傳參數
is_selected: bool = True, #是否被選中顯示
xaxis_index: types.Optional[types.Numeric] = None,#使用x軸的index,在單個圖表中存在多個x軸時有用
yaxis_index: types.Optional[types.Numeric] = None,#y軸同上
color: types.Optional[str] = None,
stack: types.Optional[str] = None,#堆疊資料
category_gap: types.Union[types.Numeric, str] = "20%", #單系柱距離
gap: types.Optional[str] = None,#不同系柱距離
label_opts: types.Label = opts.LabelOpts(), #數軸
markpoint_opts: types.MarkPoint = None, #标記點
markline_opts: types.MarkLine = None,#标記線
tooltip_opts: types.Tooltip = None,#提示框元件
itemstyle_opts: types.ItemStyle = None, #圖元樣式
):
資料的擷取和存取我直接照搬了《使用PYTHON抓取貓眼近10萬條評論并分析》的代碼,修改了擷取位址和存儲位址,原擷取位址是:
http://m.maoyan.com/mmdb/comments/movie/1200486.json?v=yes&offset=0&startTime=2018-08-18%2022%3A25%3A03
1200486表示電影的專屬id,offset表示偏移量;startTime表示擷取評論的起始時間,從該時間向前取資料,即擷取最新的評論
我本來直接在貓眼網站上找到這個位址,但是暫時找不到,幹脆直接修改了id為1229534
我主要修改的是資料可視化代碼,如下:
#統計每個城市出現的次數
data = []
value = []
attr = []
for city in set(cities):
data.append((city, cities.count(city)))
#資料超過94個時會報錯,應該是有限制吧
data = Counter(cities).most_common(93)
value = [city[1] for city in data]
#确定最小值和最大值
max2 = value[0]
min2 = value[-1]
#将數值調整為可分段顯示
if (max2-min2)%5!=0:
max2 = max2 + (5-(max2-min2)%5)
# 使用Counter類統計出現的次數,并轉換為元組清單
data_top25 = Counter(cities).most_common(25)
attr = [city[0] for city in data_top25]
value = [city[1] for city in data_top25]
max1 = value[0]
min1 = value[-1]
class Collector:
charts = []
#将柱狀圖和地圖在一個頁面展示
@staticmethod
def funcs(fn):
Collector.charts.append((fn, fn.__name__))
C = Collector()
@C.funcs
def bar_base():
c = (
Bar()
.add_xaxis(attr)
#category_gap是指單系柱距離
.add_yaxis("", value,category_gap="15%")
.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
.set_global_opts(
title_opts=opts.TitleOpts(
title="《銀河補習班》粉絲來源排行TOP25", subtitle="資料來源:貓眼",pos_left="400px"),
visualmap_opts=opts.VisualMapOpts(min_=min1, max_=max1),
#interval=0顯示所有x值,不設定會自動隐藏一些x值
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(interval=0))
)
)
return c
@C.funcs
def geo_base():
c = (
Geo()
.add_schema(
maptype="china"
)
# data為list類型,必須将data中的字段都轉化為清單并形成新的清單
.add("", [list(x) for x in data])
#is_show=False不顯示坐标值
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(is_piecewise=True,min_=min2, max_=max2),
title_opts=opts.TitleOpts(title="《銀河補習班》粉絲位置分布", subtitle="資料來源:貓眼",pos_left="300px"),
)
)
return c
Page().add(*[fn() for fn, _ in C.charts]).render('C:/Users/Administrator/Desktop/使用python爬取貓眼影評并進行可視化處理分析/粉絲來源.html')
最終展示結果:
後續補充:
有人私信要源代碼,我已經上傳至GitHub,直接去GitHub上下載下傳吧,連結:
https://github.com/wangjie182/python_learning_spider.git
或者百度雲:
連結: https://pan.baidu.com/s/13_9sfDZ5xVYjKrmbpg39mw 提取碼: v3mu
那就拜托:
點贊評論收藏了!~