赞
踩
在对数据的掌握及分析变得愈加重要的当今时代,数据可视化作为提高用户对数据的理解程度,创新架构,增进体验的重要一环,一向富有表现力的Python语言应当可以发挥更大作用,优秀的pyecharts第三方库即在这样的背景下诞生。
Echarts是一个由百度开源的商业级数据图表,它是一个纯JavaScript的图表库,可以为用户提供直观生动,可交互,可高度个性化定制的数据可视化图表,赋予了用户对数据进行挖掘整合的能力。由于Python在数据分析领域的活跃,一个开发团队将echarts库移植到python中,命名为“pyecharts”。
相较于matplotlib而言,pyecharts库绘制的图形种类更多,样式更精美、丰富。
我们即可定义:pyecharts库是一个用于生成 Echarts 图表的类库。
Pyecharts团队提供了官网和社区。
其中官网有Pyecharts的使用文档,社区包含各种图形的项目案例代码和演示。
官网:pyecharts - A Python Echarts Plotting Library built with love.
社区:Document
pip install pyecharts
在Windows中打开Anaconda Prompt,输入安装口令,即可安装pyecharts库使用。
Bar(柱状图/条形图)
Bar3D(3D 柱状图)
Boxplot(箱形图)
EffectScatter(带有涟漪特效动画的散点图)
Funnel(漏斗图)
Gauge(仪表盘)
Geo(地理坐标系)
Graph(关系图)
HeatMap(热力图)
Kline(K线图)
Line(折线/面积图)
Line3D(3D 折线图)
Liquid(水球图)
Map(地图)
Parallel(平行坐标系)
Pie(饼图)
Polar(极坐标系)
Radar(雷达图)
Sankey(桑基图)
Scatter(散点图)
Scatter3D(3D 散点图)
ThemeRiver(主题河流图)
WordCloud(词云图)
使用 Jupyter Notebook 来展示图表,只需要调用自身实例即可,add() 为主要方法,用于添加图表的数据和设置各种配置项,render() 默认将会在根目录下生成一个 render.html 的文件,文件使用浏览器打开。
基本上所有的图表类型都是这样绘制的:
1.chart_name = Type() 初始化具体类型图表
2.add() 加数据及配置项
3.render() 生成 .html 文件。
- import pandas as pd
- from pyecharts.charts import Pie
- from pyecharts import options as opts
-
- #数据分析
- df = pd.read_excel('E:/zxt-Python数据分析与可视化/数据集/航空公司数据.xlsx')
- #分箱
- df['年龄段'] = pd.cut(
- df['年龄'],
- bins =[0,20,40,60,100],
- labels = ['少年','青年','中年','老年']
- )
- #分组求和
- result = df.groupby('年龄段').size()
- #数据准备
- #使用列表生成式和zip函数生成pyecharts画饼图需要的二维列表
- data = [[x,int(y)] for x,y in zip(result.index,result.values)]
- data
-
- pie =(
- Pie()
- .add(
- '',#表示系列名称,如果只有一个数据系列,填空字符串
- data,#输入数据(二维列表)
- radius = ['30%','70%'],#半径
- center = ['30%','50%'],#中心点位置
- )
- )
- pie.render_notebook()
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
运行结果图:
- from pyecharts.charts import Radar
- from pyecharts import options as opts
-
- #数据
- x1=[[1,2,3,4,5]]
- x2=[[5,4,3,2,1]]
- #维度名称
- dimensions = ['力量','速度','敏捷' ,'耐力','爆发力']
- #创建雷达图实例
- radar = Radar()
- #添加数据维度名称
- radar.add_schema(
- schema =[
- opts.RadarIndicatorItem(name=i,max_=5) for i in dimensions
- ]
- )
- #添加数据
- radar.add(series_name='甲',data=x1,
- linestyle_opts=opts.LineStyleOpts(color='#ff8080')
- )
- radar.add(series_name='乙',data=x2,
- linestyle_opts=opts.LineStyleOpts(color='skyblue')
- )
- radar.render_notebook()
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
运行结果图:
- import pandas as pd
- from pyecharts.charts import Bar
- import pyecharts.options as opts
-
- df=pd.read_csv('D:/数据/新用户表.csv',engine= 'python')
- result = df.groupby(['性别','城市']).size()
- x = result.index.levels[1].tolist()
- y1 = result['女'].tolist()
- y2 = result['男'].tolist()
-
- bar = (
- Bar()
- .add_xaxis(x)
- .add_yaxis("女",y1,color='#ff8080',stack=100)
- .add_yaxis("男",y2,color='skyblue',stack=100)
- .reversal_axis()
- .set_global_opts(
- title_opts = opts.TitleOpts(
- title = '不同性别在不同省份的人数'
- )
- )
- .render("柱形图demo.html")
- )
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
运行结果图:
- import pandas as pd
- from pyecharts.charts import Scatter
- from pyecharts import options as opts
-
- #数据分析
- df = pd.read_excel('../数据集/航空公司数据.xlsx')
- #数据准备
- x = df['年龄'].tolist()
- y = df['飞行次数'].tolist()
-
- #画图
- s= (
- Scatter()
- .add_xaxis(x)
- .add_yaxis('',
- y,
- label_opts=opts.LabelOpts(is_show=False)#不显示数字标签
- )
- .set_global_opts(
- xaxis_opts=opts.AxisOpts(type_='value')#设置x轴数据类型为数字型
- )
- )
- s.render_notebook()
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
运行结果图:
- import numpy as np
- x= [int(i) for i in np.random.randint(0,100,100)]
- y = [int(i) for i in np.random.randint(0,100,100)]
- z = [a+b for a,b in zip(x,y)]
- data = [[a,b,c] for a,b,c in zip(x,y,z)]
- print(data)
-
- #画图
- import pyecharts.options as opts
- from pyecharts.charts import Scatter3D
- s3d = (
- Scatter3D()
- .add(
- '',
- data = data,
- xaxis3d_opts=opts.Axis3DOpts(
- name ='x',
- type_="value",
- ),
- yaxis3d_opts=opts.Axis3DOpts(
- name = 'y',
- type_="value",
- ),
- zaxis3d_opts=opts.Axis3DOpts(
- name = 'z',
- type_="value",
- ),
- )
- )
- s3d.render('三维散点图.html')
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
运行结果图:
词云用来统计一段文本中各个词汇出现的频次,进而突显文本的内容。
生成wordcloud词云图需要安装第三类库:jieba、snownlp。
1.先通过jieba库将文本分词处理,并把结果列表以空格为分隔符拼接成文本。
2.实例化一个WordCloud对象,如wordcloud=WordCloud ()。 注意:需要指定中文字体,否则显示为乱码。
3.调用wordcloud.generate (text),对文本text进行分词,并生成词云图。
由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库
SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的。
snownlp主要可以进行中文分词(算法是Character-Based Generative Model)、词性标注、情感分析、文本分类(原理是朴素贝叶斯)、
转换拼音、繁体转简体、提取文本关键词(原理TextRank)、提取摘要(原理TextRank)、分割句子、文本相似(原理BM25)。官网还有更多关于该库的介绍。
1.中文分词(Character-Based Generative Model)
2.词性标注(TnT 3-gram 隐马)
3.情感分析(现在训练数据主要是买卖东西时的评价)
4.文本分类(Naive Bayes)
5.转换成拼音(Trie树实现的最大匹配)
6.繁体转简体(Trie树实现的最大匹配)
7.提取文本关键词(TextRank算法)
8.提取文本摘要(TextRank算法)
9.Tokenization(分割成句子)
10.文本相似(BM25)
jieba库安装命令
pip install jieba
snownlp库安装命令
pip install snownlp
以披荆斩棘的哥哥豆瓣影评为例:
- import pandas as pd
- import jieba
- from snownlp import SnowNLP
- import pyecharts.options as opts
- from pyecharts.charts import WordCloud
-
- data = pd.read_excel(r'披荆斩棘的哥哥 短评.xlsx')
- data_name = pd.read_excel(r'披荆斩棘的哥哥 名字.xlsx')
- data
-
- #哥哥的热度词云
- # 分词
- data['分词'] = data['评论'].agg(lambda x:jieba.lcut(x))
- data
-
- # 哥哥热度统计函数
- def heat_count(name,series):
- count = 0
- for i in series:
- for j in i:
- if j==name:
- count+=1
- return count
-
- data_name['热度'] = data_name['名字'].agg(heat_count,series=data['分词'])
- data_name
-
- # 重组成pyecharts的数据结构
- data_wordcloud_name = [(i,str(j)) for i,j in zip(data_name['名字'],data_name['热度'])]
- data_wordcloud_name
-
- c = (
- WordCloud()
- .add(series_name="",
- data_pair=data_wordcloud_name,
- word_size_range=[20, 80]
- )
- .set_global_opts(
- title_opts=opts.TitleOpts(
- title="哥哥的热度", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
- ),
- tooltip_opts=opts.TooltipOpts(is_show=True),
- )
- )
- c.render_notebook()
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
哥哥的热度词云图
- #形容词词云
- data['词性标注'] = data['评论'].agg(lambda x:list(SnowNLP(x).tags))
- data
-
- # 把词性一列中所有列表的数据对拼接到一个列表中,方便后续分析
- list_tags = []
- for i in data['词性标注']:
- for j in i:
- list_tags.append(j)
- list_tags
-
- # 转换成表格对象
- data_tags = pd.DataFrame(list_tags,columns=['词语','词性'])
- data_tags
- data_tags['词性']
- # 统计每一个词性出现的次数
- data_tags['词性'].value_counts()
- # 统计形容词的出现频次
- result = data_tags[data_tags['词性']=='a'].groupby(by='词语')['词语'].count().sort_values(ascending=False)#[:20]
- result
-
- # 将形容词一列和出现频次一列转换成二维列表
- # 注意:频次的数字需要转换成字符
- data_wordcloud_tags = [(i,str(j)) for i,j in zip(result.index,result.values)]
- data_wordcloud_tags
-
-
- c = (
- WordCloud()
- .add(series_name="",
- data_pair=data_wordcloud_tags,
- word_size_range=[30, 100]
- )
- .set_global_opts(
- title_opts=opts.TitleOpts(
- title="哥哥的评论", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
- ),
- tooltip_opts=opts.TooltipOpts(is_show=True),
- )
- )
- c.render_notebook()
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
哥哥的评论词云图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。