一次不算愉悦的爬虫与可视化之旅

2023-12-26 17:10

本文主要是介绍一次不算愉悦的爬虫与可视化之旅,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“超哥的杂货铺”,轻松关注

本文用一个实例“还原”爱奇艺指数的两幅图表,带你学习pyecharts可视化。目录安排如下:
两个目标效果与数据来源分析目标1:绘制播放地域分布图    数据获取    数据处理    图形绘制    优化参数    遗留问题目标2:绘制明星看点曲线图    数据获取    数据处理    图形绘制    单个明星看点    全部明星看点    遗留问题总结


以上是截取自pyecharts官方github上的介绍,来源:

https://github.com/pyecharts/pyecharts。相比于基础的Matplotlib绘图库,pyecharts的图形更加好看,支持交互式,使用也非常简便。

本文使用了爱奇艺指数工具,选取了前段时间比较火的电视剧《小欢喜》为参照,使用pyecharts,尝试一步一步还原该剧的看点和播放地域分布的实际效果图,使用的pyecharts版本为0.5x,(注意和最新的1.0不兼容)。在开始之前请安装该版本,并安装相应的中国地图包。

pip install pyecharts==0.5.11
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg

本次的目标站点为http://index.iqiyi.com,我们首先搜索关键词“小欢喜”,通过浏览器抓包的方式,获取数据,然后把这些数据进行一定的加工,方便pyecharts进行调用,之后通过设置一些参数,达到理想的效果,我会详细说明每个参数对应的实际含义。后台回复“小欢喜”获取全部代码。

两个目标效果与数据来源分析

目标数据是通过json方式存储的,我们只需要使用requests库模拟请求,就可以很容易得到网站的源数据。本次的绘图目标主要是两个:①热度tab下的播放地域分布;② 看点tab下的明星看点分布。见下图。


我们从chrome开发者模式的network选项卡中找到这两个数据,并用下面的代码获取初始数据。
目标1:绘制播放地域分布图
数据获取

输出province的结果如下图

可以看出结构还是非常简单的。我们需要的数据正是data里的name和value。

数据处理

在正式开始引入pyecharts之前,需要说明一个小坑(别问我怎么知道的,简直太折磨人了):这里的省份名不能直接使用,pyecharts能够识别的地名是:北京,上海,内蒙古等形式的,不能带有后面的省,市等字,上面的数据直接绘制是没有效果的(台湾是有结果的,因为它没有“省”这个字)。数据处理的代码如下:

图形绘制

我们的目标是一个中国地图的样式,所以需要用到pyecharts的Map图形,下面是Map的文档说明:

这样我们就绘制出了基本的图形,如果用鼠标在地图上移动,已经能够正确显示数值了。但显然这样的图形和我们的目标差距还很大,接下来我们进行一些参数的调整。

优化参数

首先是将地图着色,需要用到参数:is_visualmap=True,效果如下:

虽然颜色是有了,但是只有一种颜色,这是因为默认的颜色数值是从0-100,表示从浅到深的颜色,并且是连续的,而我们这里的“value”值显然是远大于100的。因此我们需要指定颜色的范围。使用visual_range=[21508, 76318672]即可,该列表的值分别为province_values的最大和最小值。修改代码如下:可以看到,颜色的填充已经出来了,不同省份有了不同的颜色。

进一步我们注意到,目标图形中并不是每个省份一个颜色,而是好多省份显示同一种颜色,由高到低显示5种级别的绿色,颜色越深,数值越大。例如,北京是第一级别,颜色最深,江苏上海浙江是第二级别,显示同样的第二级别绿色,以此类推。读者可以在源网站上通过点击左下角的色块进行查看。

那么pyecharts如何将颜色分为不同的等级呢?答案是使用is_piecewise=True设置为分段型(默认为连续),并且使用visual_split_num设置分段个数,如这里需要设置为5。效果如下:


分段的效果是出来了,但是颜色不是我们想要的,我们需要使用

visual_range_color 指定颜色的值。

指定了visual_range_color后,分段效果出来了 ,现在的问题是,它用浅色表示值大的,深色表示值小的,所以我们可以在指定颜色的时候进行一个反转,即:

visual_range_color=['#3DC768', '#57D284', '#7ADDA0', '#A0E7BC', '#C9F1D9'][::-1]#表示将列表倒序

另外,目前的分段值是自动计算出的,我们还可以使用pieces参数指定每一分段的颜色范围。max值是本段的最大值,min为本段的最小值,我这里设定min为低一级段的最大值加1。label可以指定色块右侧的标签,好像去不掉,如果不指定的话就会显示数值。

pieces=[{"max": 76318672, "min": 54372809, "label": "高"},{"max": 54372808, "min": 46136120, "label": "中高"},{"max": 46136119, "min": 30790974, "label": "中"},{"max": 30790973, "min": 15530879, "label": "中低"},{"max": 15530878, "min": 21508, "label": "低"}]

左下角的图例里low和High的值也可以通过visual_range_text来指定,可以指定为空,也可以指定为“高”和“低”

我们继续把图中每个省的红点去掉一起看效果。参数is_map_symbol_show控制是否显示红点,默认为Ture,我们改为False即可。最终代码和效果如下:


对了,你可能会问我怎么知道这些颜色的16进制值的,我告诉你,我一个一个量的(捂脸…为了此文操碎了心...),用了一个软件叫“屏幕任意取色器”,可以将鼠标经过的点的颜色取下来,告诉你数值。

遗留问题

目标图形里,移动鼠标到相应的省份会显示其省份名字和排名,这个我查了一些资料,但是还不太明白怎么做。好像是应该通过label_formatter回调函数解决,但试了一下没有成功,如果你知道怎么做,欢迎与我交流~

到此,我们基本完成了播放地域的还原(虽然没有100%)。篇幅较长,但代码不多,希望对您有所帮助。

目标2:绘制明星看点曲线图
数据获取

该图形共涉及10位明星在一共49集的看点,我们主要使用pyecharts的Line图形来实现,先实现1位明星的,再进行堆叠。从图中可以看出,如果仅显示黄磊的曲线,发现它不是简单的按照数值的曲线,而是沿着X对称的,这是需要注意的。

数据处理

和目标1一样,首先我们需要准备数据,原始的数据中,10个明星的值是放在一起的,每49个一组,一共490个。

我们把它整理成key-value的形式,其中key是明星的名字,value是一个list,包含他每一集对应的数值。

图形绘制

接下来绘图,我直接给出最终的代码,并附上各个参数的含义,读者可以像上面那样一步一步的进行添加,看看这个过程中的变化。我们用到的Line图的文档说明如下:

单个明星看点

单独列一些几个重要的参数:

is_smooth=True, #曲线平滑显示,默认是False
is_fill=True, #是否用颜色填充,设置为True时,需要指定area_color
area_color=colors[index], #同上文,也是使用软件测量出来的
symbol=None, #去掉曲线上的数据点,否则在拐点处会有一个小圈
area_opacity=0.4, #设置透明度,不设置的话,出不来填充效果
is_datazoom_show=True, #设置横轴组件可缩放
line_opacity=0, #设置曲线的透明度,0为完全透明,表示无轮廓
datazoom_range=[0, 49], #设置缩放的范围
is_splitline_show=False,#去掉默认的网格线,更接近于原图
is_yaxis_show=False, #不显示y轴
xaxis_interval=9,#设置X轴标签的显示间隔,即1,11,21...
xaxis_min=0,#X轴的最小值
xaxis_max=49,#X轴的最大值

我们用上面的代码画出了黄磊的看点曲线图,可以看到与目标图大体上是一致的,但也有一些细节的差距,比如横轴显示的设置,逢10处虚线的设置,拖动条颜色的设置等。这几点我没有找到好的解决方案,读者朋友可以思考尝试一下。

全部明星看点

我们只需要把上面代码的break去掉,并加上颜色的配置(同样是一个一个测量出来的),就可以显示全部的曲线。效果如下面图所示:

需要指出的是,我之前考虑过添加is_stack参数为True,但是发现它会进行累加(可以通过设置显示Y轴来验证),这样出来的数值是不正确的,而如果不设置这个参数,又会在重叠时显示多种颜色,暂时还没想到好的解决方案。

你可能发现最终的图形形状轮廓和目标图形不一样,这个我也不知道是什么原因,但检查数据过后是没问题的。不过原网站似乎是存在bug的,例如,黄磊在37集和49集的数值分别为1628和1322,但是在原网站的图形中,却是49集的图形更高一些(不过单独显示黄磊的时候,没有问题,形状也和我的代码结果一致,其他明星也是正确的)。也许还存在其他我没有发现的点,这可能也是造成差异的原因吧。如果你有更好的想法,欢迎与我交流。

遗留问题

拖动轴的颜色和标签设置,逢整十的数值虚线绘制,如何在颜色重叠时显示一种颜色(颜色堆叠)

总结

至此我们尝试还原了爱奇艺指数上小欢喜这部剧的播放区域图和明星看点图,虽然没有做到100%的还原,也有很多问题没有解决,所以我觉得“不算愉悦”。但在这个过程中学习了pyecharts的使用,理解了其参数的含义。可以看到pyecharts虽然已经十分强大了希望对看到这里的你有所启发!

以清净心看世界;

用欢喜心过生活。

超哥的杂货铺,你值得拥有~

长按二维码关注我们

推荐阅读:

左手pandas右手Excel,带你学习数据透视表

实例讲解利用python进行数据获取与数据预处理

《向往的生活3》弹幕爬取与分析

我所理解的互联网数据分析师

这篇关于一次不算愉悦的爬虫与可视化之旅的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/540208

相关文章

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1