云栖号:https://www.aliyun.com/#module-yedOfott8
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!作者:屈希峰
来源:大数据DT(ID:bigdatadt)
01 概述
散点图(Scatter)又称散点分布图,是以一个变量为横坐标,另一个变量为纵坐标,利用散点(坐标点)的分布形态反映变量统计关系的一种图形。
特点是能直观表现出影响因素和预测对象之间的总体关系趋势。优点是能通过直观醒目的图形方式反映变量间关系的变化形态,以便决定用何种数学表达方式来模拟变量之间的关系。散点图不仅可传递变量间关系类型的信息,还能反映变量间关系的明确程度。
通过观察散点图数据点的分布情况,我们可以推断出变量间的相关性。如果变量之间不存在相互关系,那么在散点图上就会表现为随机分布的离散的点,如果存在某种相关性,那么大部分的数据点就会相对密集并以某种趋势呈现。
数据的相关关系大体上可以分为:正相关(两个变量值同时增长)、负相关(一个变量值增加,另一个变量值下降)、不相关、线性相关、指数相关等,表现在散点图上的大致分布如图1所示。那些离点集群较远的点我们称之为离群点或者异常点。
▲图1 散点数据的相关性
在Python体系中,可使用Scipy、Statsmodels或Sklearn等对离散点进行回归分析,归纳现有数据并进行预测分析。对于那些变量之间存在密切关系,但是这些关系又不像数学公式和物理公式那样能够精确表达的,散点图是一种很好的图形工具,可以进行直观展示,如图2所示。
▲图2 散点数据拟合(线性)
但是在分析过程中需要注意,变量之间的相关性并不等同于确定的因果关系,仍需要考虑其他影响因素。
02 实例
散点图代码示例如下所示。
代码示例①
运行结果如图3所示。
▲图3 代码示例①运行结果
代码示例①中第7行使用scatter方法进行散点图绘制;第11行采用circle方法进行散点图绘制(推荐)。关于这两个方法的参数说明如下。
p.circle(x, y, kwargs)参数说明。**
x (str or seq[float]) : 离散点的x坐标,列名或列表
y (str or seq[float]) : 离散点的y坐标
size (str or list[float]) : 离散点的大小,屏幕像素单位
marker (str, or list[str]) : 离散点标记类型名称或名称列表
color (color value, optional) : 填充及轮廓线的颜色
source (~bokeh.models.sources.ColumnDataSource
) : Bokeh专属数据格式
**kwargs: 其他自定义属性;其中标记点类型marker默认值为:“marker="circle"”,可以用“radius”定义圆的半径大小(单位为坐标轴单位)。这在Web数据化中非常有用,不同的方式,在不同的设备上的展示效果会有些许差异。
p.scatter(x, y, kwargs)参数说明。**
x (:class:~bokeh.core.properties.NumberSpec
) : x坐标
y (:class:~bokeh.core.properties.NumberSpec
) : y坐标
angle (:class:~bokeh.core.properties.AngleSpec
) : 旋转角度
angle_units (:class:~bokeh.core.enums.AngleUnits
) : (default: 'rad') 默认:弧度,也可以采用度('degree')
fill_alpha (:class:~bokeh.core.properties.NumberSpec
) : (default: 1.0) 填充透明度,默认:不透明
fill_color (:class:~bokeh.core.properties.ColorSpec
) : (default: 'gray') 填充颜色,默认:灰色
line_alpha (:class:~bokeh.core.properties.NumberSpec
) : (default: 1.0) 轮廓线透明度,默认:不透明
line_cap : (:class:~bokeh.core.enums.LineCap
) : (default: 'butt') 线端(帽)
line_color (:class:~bokeh.core.properties.ColorSpec
) : (default: 'black') 轮廓线颜色,默认:黑色
line_dash (:class:~bokeh.core.properties.DashPattern
) : (default: []) 虚线
line_dash_offset (:class:~bokeh.core.properties.Int
) : (default: 0) 虚线偏移
line_join (:class:~bokeh.core.enums.LineJoin
) : (default: 'bevel')
line_width (:class:~bokeh.core.properties.NumberSpec
) : (default: 1) 线宽,默认:1
另外,Bokeh中的一些属性,如~bokeh.core.properties.NumberSpec
、~bokeh.core.properties.ColorSpec
可以在Jupyter notebook中通过import bokeh.core.properties.NumberSpec
导入该属性,然后再查看其详细的使用说明。
代码示例②
运行结果如图4所示。
▲图4 代码示例②运行结果
代码示例②中第11行和第15行使用scatter方法进行散点图绘制。第7行工具条中的不同工具定义,第9行数据点的不同颜色定义,第20行和第21行采用网格显示图形,可以提前了解这些技巧,具体使用方法在下文中会专门进行介绍。
代码示例③
运行结果如图5所示。
代码示例③再次对前面提到的鸢尾花的数据集进行分析,图5中x轴为花瓣长度,y轴为花瓣宽度,据此可以将该散点数据聚类为3类。同时,该段代码展示了常规图形的绘制流程,含x、y轴的标签。
▲图5 代码示例③运行结果
代码示例④
Bokeh中的画布可通过多种布局方式进行显示:通过配置视图参数,在视图中进行交互可视化。运行结果如图6所示。
▲图6 代码示例④运行结果
代码示例④让读者感受一下Bokeh的交互效果,Div方法可以直接使用HTML标签,其作为一个独立的图层进行显示(第30行)。另外需要注意,可以通过nonselection_
,nonselection_alpha
或nonselection_fill_alpha
设套索置选取数据时的散点的颜色、透明度等。
代码示例⑤
运行结果如图7所示。
▲图7 代码示例⑤运行结果
代码示例⑤展示了短跑选手博尔特与116年来奥运会其他短跑选手成绩的对比情况。上述代码包含数据预处理、自定义绘图属性、数据标记、交互式显示等较为复杂的操作,不作为本文重点;读者仅需要知道通过哪些代码可以实现哪些可视化的效果即可。
本文通过5个代码示例展示了散点图的绘制技巧,绘制难度也逐渐增大,与此同时,展现的效果也越来越好。读者在学习过程中可以多思考,在这个示例中哪些数据需要交互式展示,采用哪种展示方式更好。
关于作者:屈希峰,资深Python工程师,Bokeh领域的实践者和布道者,对Bokeh有深入的研究。擅长Flask、MongoDB、Sklearn等技术,实践经验丰富。知乎多个专栏(Python中文社区、Python程序员、大数据分析挖掘)作者,专栏累计关注用户十余万人。
本文摘编自《Python数据可视化:基于Bokeh的可视化绘图》,经出版方授权发布。
云栖号:https://www.aliyun.com/#module-yedOfott8
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!
原文发布时间:2019-12-14
本文作者:作者:屈希峰
本文来自阿里云云栖号合作伙伴“大数据DT”,了解相关信息可以关注“大数据DT”