雲栖号: 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的可視化繪圖》,經出版方授權釋出。
原文釋出時間:2019-12-14
本文作者:作者:屈希峰
本文來自阿裡雲雲栖号合作夥伴“
大資料DT”,了解相關資訊可以關注“
”