当前位置:   article > 正文

Python数据可视化—pyecharts库数据可视化_基于python 的开源可视化图表库

基于python 的开源可视化图表库

pyecharts库

在对数据的掌握及分析变得愈加重要的当今时代,数据可视化作为提高用户对数据的理解程度,创新架构,增进体验的重要一环,一向富有表现力的Python语言应当可以发挥更大作用,优秀的pyecharts第三方库即在这样的背景下诞生。

Echarts是一个由百度开源的商业级数据图表,它是一个纯JavaScript的图表库,可以为用户提供直观生动,可交互,可高度个性化定制的数据可视化图表,赋予了用户对数据进行挖掘整合的能力。由于Python在数据分析领域的活跃,一个开发团队将echarts库移植到python中,命名为“pyecharts”。

相较于matplotlib而言,pyecharts库绘制的图形种类更多,样式更精美、丰富。

我们即可定义:pyecharts库是一个用于生成 Echarts 图表的类库。

Pyecharts团队提供了官网和社区。

其中官网有Pyecharts的使用文档,社区包含各种图形的项目案例代码和演示。

 官网:pyecharts - A Python Echarts Plotting Library built with love.

社区:Document

pyecharts库的安装口令

pip install pyecharts

在Windows中打开Anaconda Prompt,输入安装口令,即可安装pyecharts库使用。

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(词云图)

pyecharts库相关函数、参数使用

使用 Jupyter Notebook 来展示图表,只需要调用自身实例即可,add() 为主要方法,用于添加图表的数据和设置各种配置项,render() 默认将会在根目录下生成一个 render.html 的文件,文件使用浏览器打开。

基本上所有的图表类型都是这样绘制的:

1.chart_name = Type() 初始化具体类型图表
2.add() 加数据及配置项
3.render() 生成 .html 文件。

pyecharts图表使用实例:

Pie(饼图)

  1. import pandas as pd
  2. from pyecharts.charts import Pie
  3. from pyecharts import options as opts
  4. #数据分析
  5. df = pd.read_excel('E:/zxt-Python数据分析与可视化/数据集/航空公司数据.xlsx')
  6. #分箱
  7. df['年龄段'] = pd.cut(
  8. df['年龄'],
  9. bins =[0,20,40,60,100],
  10. labels = ['少年','青年','中年','老年']
  11. )
  12. #分组求和
  13. result = df.groupby('年龄段').size()
  14. #数据准备
  15. #使用列表生成式和zip函数生成pyecharts画饼图需要的二维列表
  16. data = [[x,int(y)] for x,y in zip(result.index,result.values)]
  17. data
  18. pie =(
  19. Pie()
  20. .add(
  21. '',#表示系列名称,如果只有一个数据系列,填空字符串
  22. data,#输入数据(二维列表)
  23. radius = ['30%','70%'],#半径
  24. center = ['30%','50%'],#中心点位置
  25. )
  26. )
  27. pie.render_notebook()

运行结果图:

Radar(雷达图) 

  1. from pyecharts.charts import Radar
  2. from pyecharts import options as opts
  3. #数据
  4. x1=[[1,2,3,4,5]]
  5. x2=[[5,4,3,2,1]]
  6. #维度名称
  7. dimensions = ['力量','速度','敏捷' ,'耐力','爆发力']
  8. #创建雷达图实例
  9. radar = Radar()
  10. #添加数据维度名称
  11. radar.add_schema(
  12. schema =[
  13. opts.RadarIndicatorItem(name=i,max_=5) for i in dimensions
  14. ]
  15. )
  16. #添加数据
  17. radar.add(series_name='甲',data=x1,
  18. linestyle_opts=opts.LineStyleOpts(color='#ff8080')
  19. )
  20. radar.add(series_name='乙',data=x2,
  21. linestyle_opts=opts.LineStyleOpts(color='skyblue')
  22. )
  23. radar.render_notebook()

运行结果图:

Bar(柱状图/条形图)

  1. import pandas as pd
  2. from pyecharts.charts import Bar
  3. import pyecharts.options as opts
  4. df=pd.read_csv('D:/数据/新用户表.csv',engine= 'python')
  5. result = df.groupby(['性别','城市']).size()
  6. x = result.index.levels[1].tolist()
  7. y1 = result['女'].tolist()
  8. y2 = result['男'].tolist()
  9. bar = (
  10. Bar()
  11. .add_xaxis(x)
  12. .add_yaxis("女",y1,color='#ff8080',stack=100)
  13. .add_yaxis("男",y2,color='skyblue',stack=100)
  14. .reversal_axis()
  15. .set_global_opts(
  16. title_opts = opts.TitleOpts(
  17. title = '不同性别在不同省份的人数'
  18. )
  19. )
  20. .render("柱形图demo.html")
  21. )

运行结果图:

Scatter(散点图)

  1. import pandas as pd
  2. from pyecharts.charts import Scatter
  3. from pyecharts import options as opts
  4. #数据分析
  5. df = pd.read_excel('../数据集/航空公司数据.xlsx')
  6. #数据准备
  7. x = df['年龄'].tolist()
  8. y = df['飞行次数'].tolist()
  9. #画图
  10. s= (
  11. Scatter()
  12. .add_xaxis(x)
  13. .add_yaxis('',
  14. y,
  15. label_opts=opts.LabelOpts(is_show=False)#不显示数字标签
  16. )
  17. .set_global_opts(
  18. xaxis_opts=opts.AxisOpts(type_='value')#设置x轴数据类型为数字型
  19. )
  20. )
  21. s.render_notebook()

运行结果图:

Scatter3D(3D 散点图)

  1. import numpy as np
  2. x= [int(i) for i in np.random.randint(0,100,100)]
  3. y = [int(i) for i in np.random.randint(0,100,100)]
  4. z = [a+b for a,b in zip(x,y)]
  5. data = [[a,b,c] for a,b,c in zip(x,y,z)]
  6. print(data)
  7. #画图
  8. import pyecharts.options as opts
  9. from pyecharts.charts import Scatter3D
  10. s3d = (
  11. Scatter3D()
  12. .add(
  13. '',
  14. data = data,
  15. xaxis3d_opts=opts.Axis3DOpts(
  16. name ='x',
  17. type_="value",
  18. ),
  19. yaxis3d_opts=opts.Axis3DOpts(
  20. name = 'y',
  21. type_="value",
  22. ),
  23. zaxis3d_opts=opts.Axis3DOpts(
  24. name = 'z',
  25. type_="value",
  26. ),
  27. )
  28. )
  29. s3d.render('三维散点图.html')

运行结果图:

wordcloud词云图 

jieba、snownlp库中文文本制作词云图

 词云用来统计一段文本中各个词汇出现的频次,进而突显文本的内容。

生成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


 

词云图示例

以披荆斩棘的哥哥豆瓣影评为例:

  1. import pandas as pd
  2. import jieba
  3. from snownlp import SnowNLP
  4. import pyecharts.options as opts
  5. from pyecharts.charts import WordCloud
  6. data = pd.read_excel(r'披荆斩棘的哥哥 短评.xlsx')
  7. data_name = pd.read_excel(r'披荆斩棘的哥哥 名字.xlsx')
  8. data
  9. #哥哥的热度词云
  10. # 分词
  11. data['分词'] = data['评论'].agg(lambda x:jieba.lcut(x))
  12. data
  13. # 哥哥热度统计函数
  14. def heat_count(name,series):
  15. count = 0
  16. for i in series:
  17. for j in i:
  18. if j==name:
  19. count+=1
  20. return count
  21. data_name['热度'] = data_name['名字'].agg(heat_count,series=data['分词'])
  22. data_name
  23. # 重组成pyecharts的数据结构
  24. data_wordcloud_name = [(i,str(j)) for i,j in zip(data_name['名字'],data_name['热度'])]
  25. data_wordcloud_name
  26. c = (
  27. WordCloud()
  28. .add(series_name="",
  29. data_pair=data_wordcloud_name,
  30. word_size_range=[20, 80]
  31. )
  32. .set_global_opts(
  33. title_opts=opts.TitleOpts(
  34. title="哥哥的热度", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
  35. ),
  36. tooltip_opts=opts.TooltipOpts(is_show=True),
  37. )
  38. )
  39. c.render_notebook()

哥哥的热度词云图

  1. #形容词词云
  2. data['词性标注'] = data['评论'].agg(lambda x:list(SnowNLP(x).tags))
  3. data
  4. # 把词性一列中所有列表的数据对拼接到一个列表中,方便后续分析
  5. list_tags = []
  6. for i in data['词性标注']:
  7. for j in i:
  8. list_tags.append(j)
  9. list_tags
  10. # 转换成表格对象
  11. data_tags = pd.DataFrame(list_tags,columns=['词语','词性'])
  12. data_tags
  13. data_tags['词性']
  14. # 统计每一个词性出现的次数
  15. data_tags['词性'].value_counts()
  16. # 统计形容词的出现频次
  17. result = data_tags[data_tags['词性']=='a'].groupby(by='词语')['词语'].count().sort_values(ascending=False)#[:20]
  18. result
  19. # 将形容词一列和出现频次一列转换成二维列表
  20. # 注意:频次的数字需要转换成字符
  21. data_wordcloud_tags = [(i,str(j)) for i,j in zip(result.index,result.values)]
  22. data_wordcloud_tags
  23. c = (
  24. WordCloud()
  25. .add(series_name="",
  26. data_pair=data_wordcloud_tags,
  27. word_size_range=[30, 100]
  28. )
  29. .set_global_opts(
  30. title_opts=opts.TitleOpts(
  31. title="哥哥的评论", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
  32. ),
  33. tooltip_opts=opts.TooltipOpts(is_show=True),
  34. )
  35. )
  36. c.render_notebook()

 哥哥的评论词云图

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号