天天看點

使用python爬取貓眼評論并用pyecharts進行資料可視化分析--bar,geo

上次簡單的爬取了一些榜單資料,并提取出想要的資訊,這次想要将資料爬取下來後,使用pyecharts展示,簡單搜了下pyecharts有很多教程,例如《使用PYTHON抓取貓眼近10萬條評論并分析》,本來是想直接copy了事,一運作發現報錯很多。上了官網(https://github.com/pyecharts/pyecharts) 下載下傳檢視官方樣例文檔,發現我下載下傳的是最新的V1.3的版本,相較V0.5x變化改動很多

使用python爬取貓眼評論并用pyecharts進行資料可視化分析--bar,geo

比如之前搜到的教程中,柱狀圖的形成代碼是:

# 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

使用python爬取貓眼評論并用pyecharts進行資料可視化分析--bar,geo

我主要修改的是資料可視化代碼,如下:

#統計每個城市出現的次數
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')


           

最終展示結果:

使用python爬取貓眼評論并用pyecharts進行資料可視化分析--bar,geo
使用python爬取貓眼評論并用pyecharts進行資料可視化分析--bar,geo

後續補充:

有人私信要源代碼,我已經上傳至GitHub,直接去GitHub上下載下傳吧,連結:

https://github.com/wangjie182/python_learning_spider.git

或者百度雲:

連結: https://pan.baidu.com/s/13_9sfDZ5xVYjKrmbpg39mw 提取碼: v3mu

那就拜托:

點贊評論收藏了!~