文章目录

  • 前言
  • 单图中多列数据并列
    • 图的布局
    • 图形的并列
    • 图形选项卡
    • 时间线轮播
  • 3d柱状图与热图
    • 3d柱状图
    • 热图
    • 店铺特征矩阵的构建
    • 散点图
    • 平行坐标系

前言

所谓多维,就是数据不仅仅有x,y两列,而是有多列数据特征需要展示。这里主要分为两类展示方法,一类是用多张图展示多个数据,一类是一张图上展示多列数据。

导包:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import json
from pandas.io.json import json_normalize
from collections import Counter

单图中多列数据并列

读入数据和数据预处理:

#导入男鞋数据
op1=open(r'D:\python学习\数据分析与可视化数据\shoes.json', 'r',encoding='utf-8')
li=[]
dict1={}
for i in op1:k=json.loads(i.encode("utf-8"))#把字符串转换为jsonli.append(k)
a=json_normalize(li)#把由json数据构成的列表转换成数据框a.groupby("nick").size().sort_values(ascending=False)#按店铺排序,nick是店铺的列名称


我们按店铺排序得到了上面的结果,现在计算上面排名前二的两个商家各个款式的对应的商品数量,并且组成矩阵,使得第一列是"意尔康皮鞋旗舰店"对应的商品数量,第二列是"米兰多格商场"的:

t1=a[a.nick=="意尔康皮鞋旗舰店"].groupby("info.款式").size()#=a[a.nick=="意尔康皮鞋旗舰店"]是导出该店铺的所有数据,groupby("info.款式")表示根据不同款式分组
t2=a[a.nick=="米兰多格商场"].groupby("info.款式").size()
p0=pd.concat([t1,t2],axis=1,sort=False).fillna(0)#拼成数据框,concat的好处是可以包容索引不对齐的情况,axis=1表示横向合并,fillna(0)表示不存在的变成0

结果如下:

利用上面的数据做出如下的柱图,注意这里包含了两个商家的数据

图的布局

导入作图的包:

from pyecharts.globals import ThemeType
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar

把两列数据放在一起:
只需要增加bar.add_yaxis()

bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION))
bar.add_xaxis(p0[0].index.tolist())
bar.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist())
bar.add_yaxis("米兰多格商场", p0[1].tolist())
bar.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"),toolbox_opts=opts.ToolboxOpts())
bar.render_notebook()

结果如下:

图形的并列

我们同样也可以让多图在一个界面中显示,做的逻辑就是先分别作图,然后利用一个函数把它们加在一起。

from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar, Grid, Line,Scatter#导入Grid#先做一个图
f1=Bar()
f1.add_xaxis(p0.index.tolist())
f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist())
f1.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"), legend_opts=opts.LegendOpts(pos_left="25%"))#做第二个图
f2=Bar()
f2.add_xaxis(p0.index.tolist())
f2.add_yaxis("米兰多格商场", p0[1].tolist())
f2.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"), legend_opts=opts.LegendOpts(pos_right="25%"))#把两个图合并
g1 = Grid()
g1.add(f1,grid_opts=opts.GridOpts(pos_left="55%"))
g1.add(f2,grid_opts=opts.GridOpts(pos_right="55%"))
g1.render_notebook()

结果如下:

图形选项卡

用选项卡的形式做两个图,点哪个选项就出现什么图。实现的逻辑就是先把每一个图做出来,然后用tab函数来运行。

from pyecharts.charts import Tab#导入Tab
from pyecharts.components import Tablef1=Bar()
f1.add_xaxis(p0.index.tolist())
f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist())
f1.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))f2=Bar()
f2.add_xaxis(p0.index.tolist())
f2.add_yaxis("米兰多格商场", p0[1].tolist())
f2.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))tab = Tab()
tab.add(f1, "意尔康皮鞋旗舰店")
tab.add(f2, "米兰多格商场")
tab.render_notebook()

结果如下:

时间线轮播

时间线轮播也是多图的形式,以滚动呈现。

from pyecharts.charts import Timelinef1=Bar()
f1.add_xaxis(p0.index.tolist())
f1.add_yaxis("意尔康皮鞋旗舰店", p0[0].tolist())
f1.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))f2=Bar()
f2.add_xaxis(p0.index.tolist())
f2.add_yaxis("米兰多格商场", p0[1].tolist())
f2.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))tl = Timeline()
tl.add(f1, "意尔康皮鞋旗舰店")
tl.add(f2, "米兰多格商场")
tl.render_notebook()

结果如下:

3d柱状图与热图

  • 对于多维数据,3d图是非常形象的表现方法,x,y轴通常表示两个条件限定,z轴(柱的高度)通常表示在这样限定下的数量
  • 注意pyecharts3d柱状图的数据格式,x,y分别对应有哪些类别,通常是一个列表,而data是一个三元列表,前两个为确定哪两个类别,通过序号指代,最后一个为数量
    导包:
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar3D
import random

3d柱状图

根据例子来理解3d柱状图,求出"info.鞋面材质","info.风格"这两个特征下商品的数量

#因为x、y有很多重复的,所有需要进行一定的处理
x=[]
y=[]
data=[]#data是放x、y 的索引的
n=0
for i in p0.items():if i[0][0] not in x:x.append(i[0][0])if i[0][1] not in y:y.append(i[0][1])data.append([x.index(i[0][0]),y.index(i[0][1]),i[1]])f3=Bar3D()
f3.add("",data,xaxis3d_opts=opts.Axis3DOpts(x, type_="category"),yaxis3d_opts=opts.Axis3DOpts(y, type_="category"),zaxis3d_opts=opts.Axis3DOpts(type_="value")).set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=20),title_opts=opts.TitleOpts(title="Bar3D-基本示例"),)
f3.render_notebook()

结果如下:

热图

import random
from pyecharts.faker import  Faker
from pyecharts import options as opts
from pyecharts.charts import HeatMapf4=HeatMap()
f4.add_xaxis(x)
f4.add_yaxis("series0", y, data)
f4.set_global_opts(title_opts=opts.TitleOpts(title="HeatMap-基本示例"),visualmap_opts=opts.VisualMapOpts(),)
f4.render_notebook()

结果如下:

店铺特征矩阵的构建

#把商品销量提取出来,并把对应列表的类型转化为数
a.sales=a.sales.str.split("人",expand=True)[0]
a.sales = a.sales.astype(np.int64)#转换列的类型为整数
a.price = a.price.astype(np.float)#求出各个商品的销售额并把它并入到原始数据框中去
z1=a.sales*a.price#算出商品的销售额
z1.name="xse"
a1=pd.concat([a,z1],axis=1)#给序列命名之后添加入数据框就会直接以序列名作为列标先做成字典,把各个特征放入字典中
te_zheng={"nick":[],"z_xse":[],"z_num":[],"p_sales":[],"p_bdj":[],"p_price":[]}
for i in a1.groupby("nick"):#循环i对应的是店铺的名称,分组里面每一组的商品都属于同一个店的te_zheng["nick"].append(i[0])te_zheng["z_xse"].append(i[1].xse.sum())te_zheng["z_num"].append(len(i[1]))te_zheng["p_sales"].append(round(i[1].sales.mean(),1))if i[1].sales.sum()==0:#存在除零的情况,所以做判断te_zheng["p_bdj"].append(0)else:te_zheng["p_bdj"].append(round(i[1].xse.sum()/i[1].sales.sum(),1))te_zheng["p_price"].append(round(i[1].price.mean(),1))# 把字典转化为数据框,并基于销售额排序
df_te_zheng=pd.DataFrame(te_zheng)
df_te_zheng.sort_values(by="z_xse",ascending=False,inplace=True)
df_te_zheng.head()

结果如下:

散点图

from pyecharts.charts import Scatter#导入散点图的包
f1=Scatter()
f1.add_xaxis(df_te_zheng[0:20].z_xse.tolist())
f1.add_yaxis("商家A",df_te_zheng[0:20].p_bdj.tolist())
f1.set_global_opts(xaxis_opts=opts.AxisOpts(type_='value'))#注意pyechart的x轴通常默认为类别轴,需要重新设定为数值轴
f1.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
f1.render_notebook()

平行坐标系

  • 平行坐标系是能够展示数据维度最自由的图形,但是最好对象不要太多
  • 注意平行坐标系的数据格式

利用商家的特征矩阵,做出排名前五的商家的平行坐标系,并基于适当的分析

from pyecharts import options as opts
from pyecharts.charts import Page, Parallel
z1=df_te_zheng.head(5)
z1
for i in z1.iterrows():print(i[1].tolist()[1:])data1=[]
for i in z1.iterrows():data1.append(i[1].tolist()[1:])
data1f2=Parallel().add_schema([{"dim": 0, "name": "z_xse"},#注意这里的序号对应于data1中列表的索引{"dim": 1, "name": "z_num"},{"dim": 2, "name": "p_sales"},{"dim": 3, "name": "p_bdj"},{"dim": 4, "name": "p_price"},])
f2.add("parallel", data1)
f2.set_global_opts(title_opts=opts.TitleOpts(title="Parallel-基本示例"))
f2.render_notebook()

结果如下:

pyecharts多维数据可视化相关推荐

  1. python数据可视化利用_利用pyecharts实现python数据可视化

    **python 利用pyecharts实现python数据可视化 **web pyecharts是一种交互式图表的表达方式. pyecharts是一款将python与echarts结合的强大的数据可 ...

  2. 从1维到6维,一文读懂多维数据可视化策略

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载 选自towardsdatascience 作者:Dipanjan Sarkar 参与:Jane W.乾树.黄小天 数 ...

  3. 【Python可视化展示】-多维数据可视化分析

    前言 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟! MATLAB-30天带你从入门到精通 MATLAB深入理解高级教程(附源码) tableau可视化数据 ...

  4. Tikz作图教程:pgfplots宏包二维数据可视化的数据导入方法

    pgfplots 绘图思想简介 下面一段介绍来自pgfplots说明文档的引言部分,它对pgfplots的绘图思想作了清晰地描述: 科研工作者在交流研究结果.论文时,将数据可视化往往是必要和方便的. ...

  5. 图像特征分析方法---- 多维数据可视化方法

    多维数据可视化方法 2017-09-21 17:12 来源:炼数成金订阅号 原标题:多维数据可视化方法,看这一篇就够了 多维数据可视化是指通过一些手段将高维的数据展示在二维的平面中. 在进行探索性数据 ...

  6. python 可视化界面_工具推荐 | 3维数据可视化

    高维数据是一种非常常见的数据类型,其中包含了多种属性.比如:数值模式输出结果通常包含多种物理参量及多个时次,还有一些空间位置信息.尽管高维数据非常常见,但是高维数据的分析一直是个挑战.那么如何才能有效 ...

  7. 棒棒的二维数据可视化分类模型

    文章目录 源码 优势 局限 代码 API 实现原理 预处理 创建标记和颜色生成器 确定坐标轴数据范围 基于数据范围创建网格坐标 获得预测结果的三维网格坐标 绘制 绘制等高线图 绘制样本分布散点图 高亮 ...

  8. 【Pyecharts】Python数据可视化:英雄联盟2020赛季数据全方位解读~

    文章目录 前言 LPL战队数据对比 春/夏季赛战绩对比 K/D/A对比 视野对比 经济对比 地图资源获取对比 LPL VS LCK 主要指标对比 战队对比 选手数据 选手数据概览 主要选手数据对比-T ...

  9. python利用itchat接口和pyecharts包进行数据可视化

    引言 本篇博文承接着上一篇web微信的内容进行叙述,在上一篇的结尾我提出了可以用微信接口,也就是itchat来获取我们的用户信息,这样相对而言比较安全,降低了频率过高导致的封号的风险,而且更有利于开发 ...

最新文章

  1. MySQL 账户管理
  2. Ant Design Vue select下拉列表设置默认值
  3. x86 CPU内存屏障保证有序性
  4. 列出文件夹下所有文件命令
  5. jdk 安装_Jdk 安装使用教程
  6. EXCEL表格超链接图片
  7. Android仿高德地图打车的三段式BottomSheet
  8. python新手快速入门教程-10 分钟快速入门 Python3的教程
  9. 准备入行java怎么才能更快学习
  10. 5.1 Runner构建优化
  11. Indexes: RDBMS vs Coherence vs Lucene
  12. Bootstrap的iCheck插件checkbox和radio
  13. Ubuntu安装电源管理工具TLP
  14. java计时器脚本_在倒数计时器脚本中跳过很多秒
  15. Channel 9视频整理【1】
  16. 袁氏报表用代码画一个饼图
  17. Everyone Piano v2.2.10.16 WiN 电脑键盘钢琴模拟软件
  18. Java实现分布式锁的三种方式
  19. wifi前导间隔GI
  20. 通过Windows版jigdo下载debian10.4dvd镜像

热门文章

  1. 【PS功能学习】01:我用双手实现你的梦想
  2. 基于java的企业门户网站
  3. 信息熵的定义及物理含义
  4. Educational Codeforces Round 101 A~D
  5. c语言查找不及格成绩,c语言知识(找出大于2门成绩不及格的学生)
  6. vc获取硬盘物理序列号
  7. 操作数控雕刻机需要掌握哪些知识
  8. 25 岁做什么,可在 5 年后受益匪浅?
  9. git禁止上传不想上传的文件
  10. 1.三维空间刚体的旋转