本文转自公众号“简说Python”
点击上方“Python爬虫与数据挖掘”,进行关注
回复“书籍”即可获赠Python从入门到进阶共10本电子书
今
日
鸡
汤
一、前言
昨天,手机突然叮咚一响,微信群跳出一条消息,“@老表 新图表库 敲可爱的画风”,还有仓库链接,
我打开看了下,原来是陈健冬大佬有搞了个新的可视化库,这,我必须尝鲜啊。
cutecharts 项目地址:https://github.com/chenjiandongx/cutecharts/
记得给个Star~
二、本文概要
Part one : 可视化库cutecharts基本使用介绍Part two : 爬取中国电竞价值排行榜-外设排行榜,利用cutecharts数据可视化分析Part three : 总结 抒情
Part one : 可视化库cutecharts基本使用介绍
1.cutecharts 安装
最简单的肯定是pip
安装:
$ pip3 install cutecharts
当然,也可以进行源码安装:
$ git clone https://github.com/chenjiandongx/cutecharts.git
$ cd cutecharts
$ pip3 install -r requirements.txt
$ python3 setup.py install
其中需要安装的第三方辅助库jinja2
,是基于Python的模板引擎,主要用于渲染可视化后的内容,最终形成可运行的html文件,当然,如果你不感兴趣,你不用过多了解,在安装cutecharts时会自动帮你安装上,但你得知道它是unicode编码,稍不注意,可能模板生成错误,比如我之前遇到过的问题:jinja2页面渲染出错-解决。
2.基本使用
目前cutecharts支持的可视化图像类型有:柱状图、折线图、饼状图、雷达图、散点图。
First : 柱状图
# 导入cutecharts中的Bar
from cutecharts.charts import Bar
# 导入测试用例
from cutecharts.faker import Faker
def bar_base() -> Bar:
chart = Bar("Bar-基本示例")
chart.set_options(labels=Faker.choose(), x_label="I'm xlabel", y_label="I'm ylabel")
chart.add_series("series-A", Faker.values())
return chart
bar_base().render_notebook()
渲染引擎提供了两个
.render(html_name) :生成一个本地文件,html_name为文件名(html文件),
默认名为:render.html
.render_notebook() :可以在jupyter中直接运行显示,如上文代码
本文案例代码都是在Jupyter Notebook上编写运行
显示情况:
当然,里面的颜色、文字内容我们都是可以更改的。
内容来自:github cutecharts
Second : 折线图
from cutecharts.charts import Line
from cutecharts.faker import Faker
def line_base() -> Line:
chart = Line("Line-基本示例")
chart.set_options(labels=Faker.choose(), x_label="I'm xlabel", y_label="I'm ylabel", legend_pos="upRight")
chart.add_series("series-A", Faker.values())
chart.add_series("series-B", Faker.values())
return chart
line_base().render_notebook()
显示情况:
当然,里面的颜色、文字内容我们都是可以更改的。
内容来自:github cutecharts
Third : 饼图
from cutecharts.charts import Pie
from cutecharts.faker import Faker
def pie_base() -> Pie:
chart = Pie("Pie-基本示例")
chart.set_options(labels=Faker.choose())
chart.add_series(Faker.values())
return chart
pie_base().render_notebook()
显示情况:
当然,里面的颜色、文字内容我们都是可以更改的。
内容来自:github cutecharts
Fourth : 雷达图
from cutecharts.charts import Radar
from cutecharts.faker import Faker
def radar_base() -> Radar:
chart = Radar("Radar-基本示例")
chart.set_options(labels=Faker.choose())
chart.add_series("series-A", Faker.values())
chart.add_series("series-B", Faker.values())
return chart
radar_base().render_notebook()
显示情况:
当然,里面的颜色、文字内容我们都是可以更改的。
内容来自:github cutecharts
Fifth : 散点图
from cutecharts.charts import Scatter
from cutecharts.faker import Faker
def scatter_base() -> Scatter:
chart = Scatter("Scatter-基本示例")
chart.set_options(x_label="I'm xlabel", y_label="I'm ylabel")
chart.add_series(
"series-A", [(z[0], z[1]) for z in zip(Faker.values(), Faker.values())]
)
chart.add_series(
"series-B", [(z[0], z[1]) for z in zip(Faker.values(), Faker.values())]
)
return chart
scatter_base().render_notebook()
显示情况:
当然,里面的颜色、文字内容我们都是可以更改的。
内容来自:github cutecharts
这里由于篇幅关系,本文只对cutecharts基本图像展现做了介绍,对于以上五个类型的可视化图像的具体参数没有做展开介绍,感兴趣的可以去github查看更详细内容:
地址:https://github.com/chenjiandongx/cutecharts
Part two : 爬取中国电竞价值排行榜-外设排行榜,利用cutecharts数据可视化分析
【注】本文所有代码都是在Jupyter Notebook下运行,理论上移到本地开发工具也是可以运行的,如有问题,请留言评论。
1.爬取数据
"""
爬取中国电竞价值排行榜-外设排行榜
网站:http://djws.uuu9.com/rank/201907/
数据类:键盘 鼠标 耳机 显示器 电竞椅 笔记本 显卡 路由器
数据项:排名 型号厂家 天猫指数 京东指数 百度指数 性价指数 科技指数 综合指数
"""
具体实现代码:
# 爬取数据
import pandas as pd
url = "http://djws.uuu9.com/rank/201907/"
url_read = pd.read_html(url, header=0)[0]
url_read
url_read=url_read[url_read.index%2==0]
我们会发现,数据里的综合指数
数值为NaN
,这是因为这一栏数据在网站中是以图像条显示的,存储在i标签的width里,这里我们就不获取了,要获取也是有办法的,比如:正则表达式,如果你感兴趣,可以去试试。
电竞与外设-键盘前12名在3-7月的所有的数据。
# 爬取数据
import pandas as pd
def get_data(i):
url = "http://djws.uuu9.com/rank/20190%d/"%i
url_read = pd.read_html(url, header=0)[0]
url_read=url_read[url_read.index%2==0]
return url_read
df_data = []
# 循环抓取3-7月数据
for i in range(3,8):
df_data.append(get_data(i))
# axis: 1 表示列拼接,0 表示行拼接
df = pd.concat(df_data, axis=0)
为了后续工作方便,我们最好是跑一次,然后把数据存到本地,方便读取处理。
df.to_csv(r'rich_list.csv', mode='a', encoding='utf_8_sig', header=0, index=False)
2.数据可视化分析
获取了电竞与外设-键盘前12名在3-7月的所有的数据,共60条数据,方便数据读取显示,以下代码是在Pycharm上编写,理论上移植到其他开发工具或平台也可运行,如有问题欢迎留言交流。Core issues:键盘品牌分析
读取数据
import os
import pandas as pd
# 数据统计函数
def get_list_num(l):
name = list(set(l)) # 名字
value = [] # 次数
for item in name:
value.append(l.count(item))
return name, value
# 获取当前文件父目录路径
father_path = os.getcwd()
# # 原始数据文件路径
rpath_csv = father_path+r'/rich_list.csv'
# 读取数据
csv_read = pd.read_csv(rpath_csv)
Question one:对品牌分析
读取数据
manufacturer = list(csv_read["厂家"])
statistical = get_list_num(manufacturer)
可视化
# 导入cutecharts中的Bar
from cutecharts.charts import Bar
def bar_base() -> Bar:
chart = Bar("3-7月键盘品牌")
chart.set_options(labels=statistical[0], x_label="品牌名", y_label="出现次数")
chart.add_series("品牌频数比较", statistical[1])
return chart
bar_base().render()
从这里看,我们可以发现达尔优、雷蛇、CHERRY、赛睿、海盗船都在排行榜上出现了10次,华硕ROG、雷柏略差一些,只出现了五次。
# 获取每个品牌对应的排名总和
rank_list = []
for i in statistical[0]:
table = csv_read.loc[csv_read["厂家"] == i]
rank_list.append(sum(table["排名"])/5) # 排名计算总和都除五
可视化分析:
from cutecharts.charts import Line
def line_base() -> Line:
chart = Line("3-7月键盘品牌")
chart.set_options(labels=statistical[0], x_label="品牌名", y_label="总数")
chart.add_series("品牌频数", statistical[1])
chart.add_series("品牌排名", rank_list)
return chart
line_base().render()
首先我们要知道,第一次统计的品牌名出现次数,表示品牌旗下产品上榜的数量,可能是有多种产品上榜,也可能是部分产品多次上榜,第二次统计的产品排名数和(为了方便展示,我把数除五了),表示该品牌所有上榜产品的排名和,如果做对比的话,应该是在第一个条件(品牌出现次数)相同情况下做对比。
CHERRY
这个品牌出现次数多,而且排名靠前(因为排名数和低),其次是海盗船,第三可以算赛睿,雷蛇,达尔优,我们还可以看出雷柏和华硕ROG好像差不多。
接下来我们再看看品牌热度,我们直接看综合指数
,当然,如果你在做数据分析工作中,肯定不会这么选择,你应该选择和你目的最贴切的数据项进行分析,甚至进行一些进阶算法,给每个指数项一定权重然后分析。
index_list = []
# 选取三个比较热门的产品
model = ["MX8.0", "K70", "雷柏V500"]
for i in model:
print(i)
table = csv_read.loc[csv_read["型号"] == i]
print(table) # 显示查询数据
从网页上我们可以轻易看到,七月综合指数最高是的是CHERRY
旗下的MX8.0
,如果你感兴趣,可以像我什么一样,自己选3-5个热门产品,作出他们3-7月之间的综合指数或其他数据的变化图(一段时间内的变化,折线图会是一种比较好的显示方式)。
记住,本文主旨是给大家介绍cutecharts
这个新的py可视化库。
cutecharts 项目地址:https://github.com/chenjiandongx/cutecharts/
Part three : 总结 抒情
Q: 1. 目前 cutecharts 只支持部分图形,后续还会开发出其他图形支持吗? 比如词云图?
Q: 2. 你觉得 cutecharts 和 pyecharts 的关系是什么?
Python、Notebook+JS
实现数据的可视化,不过 pyecharts 目前有着更丰富的图形种类以及更多的配置项。
Q: 3. 你有没有什么想说的,对 cutecharts 和 pyecharts 的使用者?
------------------- End -------------------
往期精彩文章推荐:
/今日留言主题/
你知道的Python可视化库有哪些?