第一章
数据可视化是为了从数据中寻找三个方面的信息:模式、关系和异常
模式:指数据中的规律。
关系:指数据之间的相关性。
异常:指有问题的数据。
第二章
视觉感知:
指客观事物通过人的视觉器官在人脑中形成的直接反映,人类只有通过“视觉感知”才能达到“视觉认知”
接近原则:
人在进行视觉感知时会把距离上相互靠近的元素视作一个整体
常见数据挖掘分析方法:
1、分类与预测:
分类算法:
从数据中选出已经分好类的训练集,在此训练集上运用数据挖掘分类技术,构造一个分类模型,然后再根据此分类模型对数据集中未分类的数据进行分类。其中,类的个数是确定的,预先定义好的。
分类的应用:
医疗诊断、信用卡的信用分级。
分类器的构造方法:
决策树、贝叶斯方法、神经网络和遗传算法。
2、聚类分析:
聚类:
指将数据集聚集成几个簇(聚类),使得同一个聚类中的数据集之间的相似程度高,而不同聚类中的数据集之间的相似程度低,利用分布规律从数据集中发现有用的规律。
应用:
1)商业聚类分析被用来发现不同的客户群,并且通过购买模式刻画不同的客户群的特征
2)生物聚类分析被用来对动植物和基因进行分类,获取对种群固有结构的认识
3)电子商务聚类分析分组聚类出具有相似浏览行为的客户,并分析客户的共同特征,更好地帮助电子商务的用户了解自己的客户,向客户提供更合适的服务。
聚类方法:
划分方法、层次方法、基于密度方法、基于网格方法和基于模型方法。
3、关联分析:
发现存在于大量数据集中的关联性或相关性,从而描述了一个事物中某些属性同时出现的规律和模式。
关联分析的例子:
购物篮分析。该过程通过发现顾客放入购物篮中的不同商品之间的联系,分析顾客的购买习惯。
4、异常分析:
在海量数据中,有少量数据与通常数据的行为特征不一样,在数据的某些属性方面有很大的差异。它们是数据集中的异常子集,或称离群点。通常,它们被认为是噪声,常规的数据处理试图将它们的影响最小化,或者删除这些数据。然而,这些异常数据可能是重要信息,包含潜在的知识。
例子:
1)在信用卡欺诈探测中发现的异常数据可能隐藏欺诈行为
2)临床上异常的病理反应可能是重大的医学发现。
柱状图:采用长方形的形状和颜色编码数据的属性。适用于二维数据集,但只有一个维度需要比较。利用柱子的高度反应数据的差异。只适用于中小规模的数据集。
堆叠柱状图:柱状图的每根直柱内部也可以用像素图方式编码。
条形图:柱形图向右旋转了90°的呈现方式。
直方图:数据集中的某个数据属性的频率统计。对于单变量数据,其取值范围映射到横轴,并分割为多个子区间。每个子区间用一个直立的长方块表示,高度正比于该属性值子区间内数据点的个数。直方图可以呈现数据的分布、离群值和数据分布的状态。直方图的各个部分之和等于单位整体,而柱状图的各个部分之和则没有限制,这是两者的主要区别。
饼图:采用环状方式呈现各分量在整体中的比例。
第三章
时间的应用:
股票行势;气温变化;大学生就业率的变化;物联网实时数据
连续型数据:
指任意两个数据点之间可以细分出无限多个数值,它表现的是不断变化的现象。
阶梯图:
曲线保持在同一个值,直到发生变化,直接跳跃到下一个值。它的形状就类似于平时楼道里面的楼梯。
折线图:
用直线段将各数据点连接起来而组成的图形,以折线方式显示数据的变化趋势。比较适用于趋势类的需求。
离散数据:
又称不连续数据,这类数据在任何两个数据点之间的个数是有限的。例子,奥运会奖牌的总数。
例子:
引入:option
set_global_opts:设置标题、x、y
render:渲染
例子
一、柱状图
月份 | 苹果 | 华为 | Vivo | Oppo | 三星 |
1月 | 56 | 78 | 89 | 72 | 69 |
2月 | 46 | 72 | 26 | 75 | 70 |
3月 | 78 | 68 | 93 | 92 | 96 |
4月 | 90 | 75 | 78 | 67 | 70 |
5月 | 23 | 84 | 79 | 59 | 23 |
6月 | 19 | 89 | 66 | 87 | 97 |
7月 | 47 | 55 | 66 | 35 | 60 |
8月 | 49 | 51 | 62 | 73 | 84 |
1.1、自己插入图片当作背景
from pyecharts.charts import Bar
#Chart 类:除复合图表之外所有常用图表类的基类,它的父类为 Base 类。
from pyecharts.options import global_options as opts
from pyecharts.commons.utils import JsCode
from pyecharts import options as opt
import webbrowser #自动跳转到网页
x = ['苹果','华为','vivo','oppo','三星'] #定义x轴的数据
y1 = [56,78,89,72,69] #定义y轴的数据
y2 = [46,72,26,75,70]
y3 = [78,68,93,92,96]
y4 = [90,75,78,67,70]
y5 = [23,84,79,59,23]
y6 = [19,89,66,87,97]
y7 = [47,55,66,35,60]
y8 = [49,51,62,73,84]
bar = ( #定义,链式调用
Bar(
init_opts=opt.InitOpts(
bg_color={
'image':JsCode('img')
}
)
)
.add_xaxis(x)
.add_yaxis('1月',y1)
.add_yaxis('2月',y2)
.add_yaxis('3月',y3)
.add_yaxis('4月',y4)
.add_yaxis('5月',y5)
.add_yaxis('6月',y6)
.add_yaxis('7月',y7)
.add_yaxis('8月',y8)
.set_global_opts(
title_opts=opts.TitleOpts(title='柱形图'
,subtitle='图片背景'
)
)
)
bar.add_js_funcs(
'''
var img= new Image();img.src ='https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic1.win4000.com%2Fwallpaper%2F5%2F5476e32631957.jpg&refer=http%3A%2F%2Fpic1.win4000.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1670483845&t=29c88cc3506ab6a9d434e2d18da4b1e8'
'''
)
bar.render()#渲染
webbrowser.open_new('render.html')
1.2、自动生成背景—主题
from pyecharts.charts import Bar
#Chart 类:除复合图表之外所有常用图表类的基类,它的父类为 Base 类。
from pyecharts.options import global_options as opts
from pyecharts.globals import ThemeType
from pyecharts import options as opt
import webbrowser #自动跳转到网页
x = ['苹果','华为','vivo','oppo','三星'] #定义x轴的数据
y1 = [56,78,89,72,69] #定义y轴的数据
y2 = [46,72,26,75,70]
y3 = [78,68,93,92,96]
y4 = [90,75,78,67,70]
y5 = [23,84,79,59,23]
y6 = [19,89,66,87,97]
y7 = [47,55,66,35,60]
y8 = [49,51,62,73,84]
bar = ( #定义,链式调用
Bar(
{'theme':ThemeType.LIGHT}
)
.add_xaxis(x)
.add_yaxis('1月',y1)
.add_yaxis('2月',y2)
.add_yaxis('3月',y3)
.add_yaxis('4月',y4)
.add_yaxis('5月',y5)
.add_yaxis('6月',y6)
.add_yaxis('7月',y7)
.add_yaxis('8月',y8)
.set_global_opts(
title_opts=opts.TitleOpts(title='柱形图'
,subtitle='图片背景'
)
)
)
bar.render()#渲染
webbrowser.open_new('render.html')
2、标签+颜色
from pyecharts.charts import Bar
#Chart 类:除复合图表之外所有常用图表类的基类,它的父类为 Base 类。
from pyecharts.options import global_options as opts
from pyecharts.globals import ThemeType
from pyecharts import options as opt
import webbrowser #自动跳转到网页
x = ['苹果','华为','vivo','oppo','三星'] #定义x轴的数据
y1 = [56,78,89,72,69] #定义y轴的数据
y2 = [46,72,26,75,70]
y3 = [78,68,93,92,96]
y4 = [90,75,78,67,70]
y5 = [23,84,79,59,23]
y6 = [19,89,66,87,97]
y7 = [47,55,66,35,60]
y8 = [49,51,62,73,84]
bar = ( #定义,链式调用
Bar(
{'theme':ThemeType.LIGHT}
)
.add_xaxis(x)
.add_yaxis('1月',y1)
.add_yaxis('2月',y2)
.add_yaxis('3月',y3)
.add_yaxis('4月',y4)
.add_yaxis('5月',y5)
.add_yaxis('6月',y6)
.add_yaxis('7月',y7)
.add_yaxis('8月',y8)
.set_global_opts(
title_opts=opts.TitleOpts(title='柱形图' #主标题
, subtitle='图片背景' #副标题
, title_textstyle_opts=opts.TextStyleOpts(color='blue') # 主标题颜色
, subtitle _textstyle_opts=opts.TextStyleOpts(color='green')#副标题
)
)
)
bar.render()#渲染
webbrowser.open_new('render.html')
3、 x,y轴倒置
from pyecharts.charts import Bar
#Chart 类:除复合图表之外所有常用图表类的基类,它的父类为 Base 类。
from pyecharts.options import global_options as opts
from pyecharts.globals import ThemeType
from pyecharts import options as opt
import webbrowser #自动跳转到网页
x = ['苹果','华为','vivo','oppo','三星'] #定义x轴的数据
y1 = [56,78,89,72,69] #定义y轴的数据
y2 = [46,72,26,75,70]
y3 = [78,68,93,92,96]
y4 = [90,75,78,67,70]
y5 = [23,84,79,59,23]
y6 = [19,89,66,87,97]
y7 = [47,55,66,35,60]
y8 = [49,51,62,73,84]
bar = ( #定义,链式调用
Bar(
{'theme':ThemeType.LIGHT}
)
.add_xaxis(x)
.reversal_axis()
.add_yaxis('1月',y1)
.add_yaxis('2月',y2)
.add_yaxis('3月',y3)
.add_yaxis('4月',y4)
.add_yaxis('5月',y5)
.add_yaxis('6月',y6)
.add_yaxis('7月',y7)
.add_yaxis('8月',y8)
.set_global_opts(
title_opts=opts.TitleOpts(title='柱形图'
, subtitle='图片背景'
, title_textstyle_opts=opts.TextStyleOpts(color='blue') # 主标题颜色
, subtitle_textstyle_opts=opts.TextStyleOpts(color='green')
)
)
)
bar.render()#渲染
webbrowser.open_new('render.html')
.add_xaxis(x):
1、不可以放在.add_xaxis(x)前面
2、可以放在bar.render()#渲染前面 (bar.reversal_axis())
4、堆叠
from pyecharts.charts import Bar
#Chart 类:除复合图表之外所有常用图表类的基类,它的父类为 Base 类。
from pyecharts.options import global_options as opts
from pyecharts.globals import ThemeType
from pyecharts import options as opt
import webbrowser #自动跳转到网页
x = ['苹果','华为','vivo','oppo','三星'] #定义x轴的数据
y1 = [56,78,89,72,69] #定义y轴的数据
y2 = [46,72,26,75,70]
y3 = [78,68,93,92,96]
y4 = [90,75,78,67,70]
y5 = [23,84,79,59,23]
y6 = [19,89,66,87,97]
y7 = [47,55,66,35,60]
y8 = [49,51,62,73,84]
bar = ( #定义,链式调用
Bar(
{'theme':ThemeType.LIGHT}
)
.add_xaxis(x)
.add_yaxis('1月',y1,stack='62' )
.add_yaxis('2月',y2,stack='62')
.add_yaxis('3月',y3,stack='62')
.add_yaxis('4月',y4,stack='62')
.add_yaxis('5月',y5,stack='62')
.add_yaxis('6月',y6,stack='62')
.add_yaxis('7月',y7,stack='62')
.add_yaxis('8月',y8,stack='62')
.set_global_opts(
title_opts=opts.TitleOpts(title='柱形图'
, subtitle='图片背景'
, title_textstyle_opts=opts.TextStyleOpts(color='blue') # 主标题颜色
, subtitle_textstyle_opts=opts.TextStyleOpts(color='green')
)
)
)
bar.render()#渲染
webbrowser.open_new('render.html')
堆叠;数字要一样;不支持空值
.add_yaxis('1月',y1,stack='56')
.add_yaxis('2月',y2,stack='56')
.add_yaxis('3月',y3,stack='56')
.add_yaxis('4月',y4,stack='56')
.add_yaxis('5月',y5,stack='56')
.add_yaxis('6月',y6,stack='56')
.add_yaxis('7月',y7,stack='56')
.add_yaxis('8月',y8,stack='84')
独立,不参与堆叠
5、隐藏标签
from pyecharts.charts import Bar
#Chart 类:除复合图表之外所有常用图表类的基类,它的父类为 Base 类。
from pyecharts.options import global_options as opts
from pyecharts.globals import ThemeType
from pyecharts import options as opt
import webbrowser #自动跳转到网页
x = ['苹果','华为','vivo','oppo','三星'] #定义x轴的数据
y1 = [56,78,89,72,69] #定义y轴的数据
y2 = [46,72,26,75,70]
y3 = [78,68,93,92,96]
y4 = [90,75,78,67,70]
y5 = [23,84,79,59,23]
y6 = [19,89,66,87,97]
y7 = [47,55,66,35,60]
y8 = [49,51,62,73,84]
bar = ( #定义,链式调用
Bar(
{'theme':ThemeType.LIGHT}
)
.add_xaxis(x)
.add_yaxis('1月',y1,is_selected=False )
.add_yaxis('2月',y2,)
.add_yaxis('3月',y3,)
.add_yaxis('4月',y4,)
.add_yaxis('5月',y5,)
.add_yaxis('6月',y6,)
.add_yaxis('7月',y7,)
.add_yaxis('8月',y8,)
.set_global_opts(
title_opts=opts.TitleOpts(title='柱形图'
, subtitle='图片背景'
, title_textstyle_opts=opts.TextStyleOpts(color='blue') # 主标题颜色
, subtitle_textstyle_opts=opts.TextStyleOpts(color='green')
)
)
)
bar.render()#渲染
webbrowser.open_new('render.html')
is_selected=False:隐藏标签
例如:现在隐藏的是1月
6 、 x y轴标签旋转、添加x y轴名称
from pyecharts.charts import Bar
#Chart 类:除复合图表之外所有常用图表类的基类,它的父类为 Base 类。
from pyecharts.options import global_options as opts
from pyecharts.globals import ThemeType
from pyecharts import options as opt
import webbrowser #自动跳转到网页
x = ['苹果','华为','vivo','oppo','三星'] #定义x轴的数据
y1 = [56,78,89,72,69] #定义y轴的数据
y2 = [46,72,26,75,70]
y3 = [78,68,93,92,96]
y4 = [90,75,78,67,70]
y5 = [23,84,79,59,23]
y6 = [19,89,66,87,97]
y7 = [47,55,66,35,60]
y8 = [49,51,62,73,84]
bar = ( #定义,链式调用
Bar(
{'theme':ThemeType.LIGHT}
)
.add_xaxis(x)
.add_yaxis('1月',y1)
.add_yaxis('2月',y2)
.add_yaxis('3月',y3)
.add_yaxis('4月',y4)
.add_yaxis('5月',y5)
.add_yaxis('6月',y6)
.add_yaxis('7月',y7)
.add_yaxis('8月',y8)
.set_global_opts(
title_opts=opts.TitleOpts(title='柱形图'
, subtitle='图片背景'
, title_textstyle_opts=opts.TextStyleOpts(color='blue') # 主标题颜色
, subtitle_textstyle_opts=opts.TextStyleOpts(color='green')
),
toolbox_opts=opts.ToolboxOpts(is_show='False'),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=25 ),name='手机品牌' )
)
)
bar.render()#渲染
webbrowser.open_new('render.html')
toolbox_opts=opts.ToolboxOpts(is_show='False'):工具箱:出现可以转化堆叠图之类
rotate=25:X轴标签旋转,25:角度
name='手机品牌':添加名称
from pyecharts.charts import Bar
#Chart 类:除复合图表之外所有常用图表类的基类,它的父类为 Base 类。
from pyecharts.options import global_options as opts
from pyecharts.globals import ThemeType
from pyecharts import options as opt
import webbrowser #自动跳转到网页
x = ['苹果','华为','vivo','oppo','三星'] #定义x轴的数据
y1 = [56,78,89,72,69] #定义y轴的数据
y2 = [46,72,26,75,70]
y3 = [78,68,93,92,96]
y4 = [90,75,78,67,70]
y5 = [23,84,79,59,23]
y6 = [19,89,66,87,97]
y7 = [47,55,66,35,60]
y8 = [49,51,62,73,84]
bar = ( #定义,链式调用
Bar(
{'theme':ThemeType.LIGHT}
)
.add_xaxis(x)
.add_yaxis('1月',y1)
.add_yaxis('2月',y2)
.add_yaxis('3月',y3)
.add_yaxis('4月',y4)
.add_yaxis('5月',y5)
.add_yaxis('6月',y6)
.add_yaxis('7月',y7)
.add_yaxis('8月',y8)
.set_global_opts(
title_opts=opts.TitleOpts(title='柱形图'
, subtitle='图片背景'
, title_textstyle_opts=opts.TextStyleOpts(color='blue') # 主标题颜色
, subtitle_textstyle_opts=opts.TextStyleOpts(color='green')
),
toolbox_opts=opts.ToolboxOpts(),
yaxis_opts =opts.AxisOpts(
axislabel_opts=opts.LabelOpts(rotate=25,formatter ='{value}\台'),name='月份')
)
)
bar.render()#渲染
webbrowser.open_new('render.html')
yaxis_opts:Y轴
7、滑动
from pyecharts.charts import Bar
#Chart 类:除复合图表之外所有常用图表类的基类,它的父类为 Base 类。
from pyecharts.options import global_options as opts
from pyecharts.globals import ThemeType
from pyecharts import options as opt
import webbrowser #自动跳转到网页
x = ['苹果','华为','vivo','oppo','三星'] #定义x轴的数据
y1 = [56,78,89,72,69] #定义y轴的数据
y2 = [46,72,26,75,70]
y3 = [78,68,93,92,96]
y4 = [90,75,78,67,70]
y5 = [23,84,79,59,23]
y6 = [19,89,66,87,97]
y7 = [47,55,66,35,60]
y8 = [49,51,62,73,84]
bar = ( #定义,链式调用
Bar(
{'theme':ThemeType.LIGHT}
)
.add_xaxis(x)
.add_yaxis('1月',y1)
.add_yaxis('2月',y2)
.add_yaxis('3月',y3)
.add_yaxis('4月',y4)
.add_yaxis('5月',y5)
.add_yaxis('6月',y6)
.add_yaxis('7月',y7)
.add_yaxis('8月',y8)
.set_global_opts(
title_opts=opts.TitleOpts(title='柱形图'
, subtitle='图片背景'
, title_textstyle_opts=opts.TextStyleOpts(color='blue') # 主标题颜色
, subtitle_textstyle_opts=opts.TextStyleOpts(color='green')
),
toolbox_opts=opts.ToolboxOpts(),
yaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(rotate=25,formatter='{value}\台'),name='月份')
,datazoom_opts=opts.DataZoomOpts(type_='inside')# 滑动
,datazoom_opts=opts.DataZoomOpts()# 滑动
)
)
bar.render()#渲染
webbrowser.open_new('render.html')
datazoom_opts=opts.DataZoomOpts(type_='inside':滑动 ;X轴拉
datazoom_opts=opts.DataZoomOpts():滑动 ;注意位置—鼠标滑
鼠标滑动
自动滑动
8.
from pyecharts.charts import Bar
#Chart 类:除复合图表之外所有常用图表类的基类,它的父类为 Base 类。
from pyecharts.options import global_options as opts
from pyecharts.globals import ThemeType
from pyecharts import options as opt
import webbrowser #自动跳转到网页
x = ['苹果','华为','vivo','oppo','三星'] #定义x轴的数据
y1 = [56,78,89,72,69] #定义y轴的数据
y2 = [46,72,26,75,70]
y3 = [78,68,93,92,96]
y4 = [90,75,78,67,70]
y5 = [23,84,79,59,23]
y6 = [19,89,66,87,97]
y7 = [47,55,66,35,60]
y8 = [49,51,62,73,84]
bar = ( #定义,链式调用
Bar(
{'theme':ThemeType.LIGHT}
)
.add_xaxis(x)
.add_yaxis('1月',y1)
.add_yaxis('2月',y2)
.add_yaxis('3月',y3)
.add_yaxis('4月',y4)
.add_yaxis('5月',y5)
.add_yaxis('6月',y6)
.add_yaxis('7月',y7)
.add_yaxis('8月',y8)
.set_global_opts(
title_opts=opts.TitleOpts(title='柱形图'
, subtitle='图片背景'
, title_textstyle_opts=opts.TextStyleOpts(color='blue') # 主标题颜色
, subtitle_textstyle_opts=opts.TextStyleOpts(color='green')
),
toolbox_opts=opts.ToolboxOpts(),
yaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(rotate=25,formatter='{value}\台'),name='月份')
,datazoom_opts=opts.DataZoomOpts(type_='inside')# 滑动
)
.set_series_opts(
label_opts=opt .LabelOpts(is_show=False),
markline_opts=opt.MarkLineOpts(
data=[
opt.MarkLineItem(type_='max',name='最大值'),
opt.MarkLineItem(type_='min',name='最小值'),
opt.MarkLineItem(type_='average',name='平均值')
]
)
)
)
bar.render()#渲染
webbrowser.open_new('render.html')
opt:来自from pyecharts import options as opt
二、饼图
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
import webbrowser
vi = Faker.choose()
vt = Faker.values()
data_pair = [list(z) for z in zip(vi,vt)]
def pie_base():
c = (
Pie()
.add("", data_pair)
.set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-设置颜色"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
.render("pie_set_color.html")
)
return c
pie_base().encode('utf8')
webbrowser.open_new("pie_set_color.html")
from pyecharts import options as opts:饼图
三、词云图
三个以上用中括号
微信 | 产品 | 朋友圈 | 小程序 | 社交 | 游戏 | 公众号 | 小游戏 | 流量 | App |
122 | 86 | 47 | 45 | 42 | 36 | 21 | 21 | 18 | 18 |
from pyecharts.charts import WordCloud
data001 = ['微信','产品','朋友圈','小程序','社交','游戏','公众号','小游戏','流量','APP']
data002 = ['122','86','47','45','42','36','21','21','18','18']
data_pair = [list(z) for z in zip(data001,data002)]
def word_c_base():
c = (
WordCloud()
.add(series_name="",data_pair=data_pair, word_size_range=[6, 66])
)
return c
word_c_base().render('词云图.html')
饼图
姓名 | 成绩 |
欧阳锋 | 89 |
郭靖 | 95 |
李圣云 | 70 |
云朵多 | 65 |
香巴拉 | 88 |
霍震宁 | 92 |
from pyecharts.charts import Pie
data001 = ['欧阳锋','郭靖','李圣云','云朵多','香巴拉','霍震宁']
data002 = ['89','95','70','65','88','92']
data_pair = [list(z) for z in zip(data001,data002)]
def pie_base():
c = (
Pie()
.add("修炼成绩",data_pair)
)
return c
pie_base().render('饼图.html')