1. 程式人生 > >Jupyter 常見視覺化框架選擇

Jupyter 常見視覺化框架選擇

對於以Python作為技術棧的資料科學工作者,Jupyter是不得不提的資料報告工具。可能對於R社群而言,鼎鼎大名的ggplot2是常見的視覺化框架,而大家對於Python,以及Jupyter為核心的互動式報告的可個視化方案就並沒有那麼熟悉。本文試圖比較幾個常用的解決方案,方便大家選擇。

選擇標準

稱述式還是命令式

資料工作者使用的圖的類別,常見的就三類:GIS視覺化、網路視覺化和統計圖。因此,大多數場景下,我們並不想接觸非常底層的基於點、線、面的命令,所以,選擇一個好的封裝的框架相當重要。

當然,公認較好的封裝是基於《The Grammar of Graphics (Statistics and Computing)》

一書,R中的ggplot2基本上就是一個很好的實現。我們基本上可以像用「自然語言」(Natural Language)一樣使用這些繪圖命令。我們姑且採用電腦科學領域的「陳述式」來表達這種繪圖方式。

相反,有時候,以下情形時,我們可能對於這種繪圖命令可能並不在意:

  1. 出圖相當簡單,要求繪製速度,一般大的框架較重(當然只是相對而言);
  2. 想要對細節做非常詳盡的微調,一般大框架在微調方面會相對複雜或者退縮成一句句命令;
  3. 是統計作圖視覺化的創新者,想要嘗試做出新的視覺化實踐。

這些情況下,顯然,簡單操作式並提供底層繪製命令的框架更讓人愉快,與上面類似,我們借用「命令式」描述這類框架。

是否互動

與傳統的交付靜態圖示不同,基於Web端的Jupter

的一大好處就是可以繪製互動的圖示(最近的RNotebook也有實現),因此,是否選擇互動式,也是一個需要權衡的地方。

互動圖的優勢:

  1. 可以提供更多的資料維度和資訊;
  2. 使用者端可以做更多諸如放大、選取、轉存的操作;
  3. 可以交付BI工程師相應的JavaScript程式碼用以工程化;
  4. 效果上比較炫酷,考慮到報告接受者的特徵可以選擇。

非互動圖的優勢:

  1. 報告檔案直接匯出成靜態檔案時相對問題,不會因為轉換而損失資訊;
  2. 圖片可以與報告分離,必要時作為其他工作的成果;
  3. 不需要在執行Notebook時花很多世界載入各類前端框架。

是非核心互動

Jupyter上大多數命令通過以下方式獲取資料,而大多數繪圖方式事實上只是通過Notebook內的程式碼在Notebook與核心互動後展示出輸出結果。但ipywidgets

框架則可以實現Code Cell中的程式碼與Notebook中的前端控制元件(比如按鈕等)繫結來進行操作核心,提供不同的繪圖結果,甚至某些繪圖框架的每個元素都可以直接和核心進行互動。

3262887070-59fae2a6967b6_articlex

用這些框架,可以搭建更復雜的Notebook的視覺化應用,但缺點是因為基於核心,所以在呈遞、展示報告時如果使用離線檔案時,這些互動就會無效。

框架羅列

matplotlib

最家喻戶曉的繪圖框架是matplotlib,它提供了幾乎所有python內靜態繪圖框架的底層命令。如果按照上面對視覺化框架的分法,matplotlib屬於非互動式的的「命令式」作圖框架。

Python
12345678910 ## matplotlib程式碼示例frompylab import*X=np.linspace(-np.pi,np.pi,256,endpoint=True)C,S=np.cos(X),np.sin(X)plot(X,C)plot(X,S)show()

3262887070-59fae2a6967b6_articlex

優點是相對較快,底層操作較多。缺點是語言繁瑣,內建預設風格不夠美觀。

matplotlib在jupyter中需要一些配置,可以展現更好的效果,詳情參見這篇文章.

ggplot和plotnine

值得一說,對於R遷移過來的人來說,ggplotplotnine簡直是福音,基本克隆了ggplot2所有語法。橫向比較的話,plotnine的效果更好。這兩個繪圖包的底層依舊是matplotlib,因此,在引用時別忘了使用%matplotlib inline語句。值得一說的是plotnine也移植了ggplot2中良好的配置語法和邏輯。

Python
12345 ## plotnine示例(ggplot(mtcars,aes('wt','mpg',color='factor(gear)'))+geom_point()+stat_smooth(method='lm')+facet_wrap('~gear'))

3262887070-59fae2a6967b6_articlex

Seaborn

seaborn準確上說屬於matplotlib的擴充套件包,在其上做了許多非常有用的封裝,基本上可以滿足大部分統計作圖的需求,以matplotlib+seaborn基本可以滿足大部分業務場景,語法也更加「陳述式」。

缺點是封裝較高,基本上API不提供的圖就完全不可繪製,對於各類圖的拼合也不適合;此外配置語句語法又迴歸「命令式」,相對複雜且不一致。

Python
12345 ## seaborn示例importseaborn assns;sns.set(color_codes=True)iris=sns.load_dataset("iris")species=iris.pop("species")g=sns.clustermap(iris)

3262887070-59fae2a6967b6_articlex

plotly

plotly是跨平臺JavaScript互動式繪圖包,由於開發者的核心是javascript,所以整個語法類似於寫json配置,語法特質也介於「陳述式」和「命令式」之間,無服務版本是免費的。

有點是學習成本不高,可以很快將語句移植到javascript版本;缺點是語言相對繁瑣。

Python
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 ##plotly示例importplotly.plotly aspyimportplotly.graph_objs asgo# Add datamonth=['January','February','March','April','May','June','July','August','September','October','November','December']high_2000=[32.5,37.6,49.9,53.0,69.1,75.4,76.5,76.6,70.7,60.6,45.1,29.3]low_2000=[13.8,22.3,32.5,37.2,49.9,56.1,57.7,58.3,51.2,42.8,31.6,15.9]high_2007=[36.5,26.6,43.6,52.3,71.5,81.4,80.5,82.2,76.0,67.3,46.1,35.0]low_2007=[23.6,14.0,27.0,36.8,47.6,57.7,58.9,61.2,53.3,48.5,31.0,23.6]high_2014=[28.8,28.5,37.0,56.8,69.7,79.7,78.5,77.8,74.1,62.6,45.3,39.9]low_2014=[12.7,14.3,18.6,35.5,49.9,58.0,60.0,58.6,51.7,45.2,32.2,29.1]# Create and style tracestrace0=go.Scatter(x=month,y=high_2014,name='High 2014',line=dict(color=('rgb(205, 12, 24)'),width=4))trace1=go.Scatter(x=month,y=low_2014,name='Low 2014',line=dict(color=('rgb(22, 96, 167)'),width=4,))trace2=go.Scatter(x=month,y=high_2007,name='High 2007',line=dict(color=('rgb(205, 12, 24)'),width=4,dash='dash')# dash options include 'dash', 'dot', and 'dashdot')trace3=go.Scatter(x=month,y=low_2007,name='Low 2007',line=dict(color=('rgb(22, 96, 167)'),width=4,dash='dash'))trace4=go.Scatter(x=month,y=high_2000,name='High 2000',line=dict(color=('rgb(205, 12, 24)'),width=4,dash='dot'))trace5=go.Scatter(x=month,y=low_2000,name='Low 2000',line=dict(color=('rgb(22, 96, 167)'),width=4,dash='dot'))data=[trace0,trace1,trace2,trace3,trace4,trace5]# Edit the layoutlayout=dict(title='Average High and Low Temperatures in New York',xaxis=dict(title='Month'),yaxis=dict(title='Temperature (degrees F)'),)fig=dict(data=data,layout=layout)py.iplot(fig,filename='styled-line')

3262887070-59fae2a6967b6_articlex

注意:此框架在jupyter中使用需要使用init_notebook_mode()載入JavaScript框架。

bokeh

bokehpydata維護的比較具有潛力的開源互動視覺化框架。

值得一說的是,該框架同時提供底層語句和「陳述式」繪圖命令。相對來說語法也比較清楚,但其配置語句依舊有很多視覺化框架的問題,就是與「陳述式」命令不符,沒有合理的結構。此外,一些常見的互動效果都是以底層命令的方式使用的,因此如果要快速實現Dashboard或者作圖時就顯得較為不便了。

Python
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697

相關推薦

Jupyter 常見視覺框架選擇

對於以Python作為技術棧的資料科學工作者,Jupyter是不得不提的資料報告工具。可能對於R社群而言,鼎鼎大名的ggplot2是常見的視覺化框架,而大家對於Python,以及Jupyter為核心的互動式報告的可個視化方案就並沒有那麼熟悉。本文試圖比較幾個常用的解決方案,方便

「開源」TensorSpace.js -- 神經網路3D視覺框架,在瀏覽器端構建可互動模型

TensorSpace是一套用於構建神經網路3D視覺化應用的框架。 開發者可以使用類 Keras 風格的 TensorSpace API,輕鬆建立視覺化網路、載入神經網路模型並在瀏覽器中基於已載入的模型進行3D可互動呈現。 TensorSpace 可以使您更直觀地觀察神經網路模型,並瞭解該模型是如何通過

Ebay開源基於大資料的視覺框架:Pulsar Reporting

作者:汪明明,王巧玲 ebay又新添了一個開源專案PulsarReporting – 基於大資料的視覺化框架 Pulsar作為一個實時和近實時大資料分析處理系統,包含了Pulsar Pipeline和Pulsar Reporting. 在今年三月, eBay Puls

幾種資料視覺框架分析

根據下面各個框架本身的特性,以及各自的優缺點,推薦使用D3或者ECharts作為資料視覺化的首選框架,某些小特性可以輔用其他小框架實現。具體每個框架的說明和分析如下: D3.js D3是指資料驅動文件(Data-Driven Documents)。D3.js是一個Jav

地圖視覺框架新進展(1)

1. Uber視覺化框架 Uber目前有一整套地圖視覺化框架,有: deck.gl :高效能WebGL地理圖層和資訊視覺化用例 react-map-gl:用於Mapbox GL的React元件(與deckgl無縫整合) react-vis:一套基於Rea

ubuntu搭建caffe視覺框架digits

有顯示卡可以安裝caffe的GPU版本,若沒有也可安裝cpu版本,CPU訓練速度慢 沒有GPU 直接跳過cuda和cudnn的安裝。剛裝好的ubuntu系統,直接開始安裝依賴項,終端輸入:sudo apt-get install build-essentialsudo apt

【 D3.js 入門系列 --- 9 】 常見視覺圖形

    轉載請註明出處,謝謝。     Layout ,直譯為“佈局,安排”。但在 D3 中不是這個意思。     D3 中有很多 Layout 函式,它們不是為了在畫面中佈局什麼,在 D3 中是對輸入的資料進行轉換,轉換成比較容易進行視覺化的資料。實際進行視覺化時,

【16-20】視覺jupyter notebook做視覺

由於使用的是jupyter notebook,這裡不做展示,詳細內容可參考github。 net = caffe.Net(caffe_root + 'examples/cifar10/cifar10_full.prototxt', caffe_root + 'ex

TensorSpace:一套用於構建神經網路3D視覺應用的框架

作者 | syt123450、Chenhua Zhu、Yaoxing Liu (本文經原作者授權轉載) 今天要為大家推薦一套超酷炫的,用於構建神經網路 3D 視覺化應用的框架——TensorSpace。 有什麼用途? 大家可以使用類 Keras

搜尋框架搭建1:elasticsearch安裝和視覺工具kibana、分詞外掛jieba安裝

elasticsearch安裝和視覺化工具kibana、分詞外掛jieba安裝 1 Windosw環境 1.1 java環境安裝 1.2 elasticsearch安裝 1.3 視覺化介面kibana安裝 1.

matlab-視覺影象閾值選擇GUI工具

話不多說,先看圖,這是匯入一張圖後執行的效果。 在此函式中,左圖是灰度圖加上colorBar後的彩色效果圖,右圖是二值化後的圖,下面是可調節閾值的灰度直方圖。 左上角的按鈕是迴歸初始狀態,右上角的按鈕是結束閾值調整並記錄該閾值和所得的二值化影象。 該函式先計算一個自適應閾值,若你不滿意可以拉動灰度直

使用JFileChooser視覺選擇檔案

這段程式碼是一段功能性的程式碼 功能是使用檔案選擇的視覺化UI,選擇特定檔案 ,並且返回檔案物件File package Judge; import java.io.File; import java.io.FileWriter; import javax.

java選擇排序視覺

工具類 import java.awt.*; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; import java.lang.InterruptedException;

深度學習框架tensorflow學習與應用9(tensorboard視覺

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data from tensorflow.contrib.tensorboard.plugins import projector # In

深度學習框架Caffe-權值視覺[重啟]

配置 ubuntu16.04 Matlab2018b gcc6.3 (安裝教程): 安裝ubuntu16.04所遇到的問題 https://blog.csdn.net/baidu_40840693/article/details/85061079 安裝方面和下面的部落格一樣:

應用Tableau、Vertica的視覺大資料分析框架

作者:張璽大資料分析、企業BI、資料視覺化等話題在罈子裡日趨火熱,新的技術,架構也層出不窮,今天藉此文跟大家分享一款大資料下的聯機分析(ROLAP)解決方案,它應用了當前主流的資料視覺化工具Tableau及列儲存資料庫Vertica, 採用了IBM Platfo

SVM分類器的實現(包括交叉驗證選擇引數,Dlib,視覺

慣例先放結果圖,左側為訓練樣本,右側為訓練完後的分類演示圖 Dlib的支援向量機用起來比Opencv的爽多了, 支援交叉驗證, 降低支援向量的個數 以及兩種方式判別類別(正負以及可能性兩種) 然後就是簡單粗暴的程式碼了: //需要配置Opencv以及Dlib的環境

pytorch 其他深度框架使用tensorflow的tensorboard 視覺

程式碼來源 首先你需要安裝 tensorflow pytorch 定義一個logger.py檔案: import tensorflow as tf import numpy as np import scipy.misc try: fro

TensorFlow學習筆記(11)--【Ubuntu】slim框架下的inception_v4模型的執行、視覺、匯出和使用

模型:slim框架下的Inception_v4模型 Inception_v4的Checkpoint:http://download.tensorflow.org/models/inception_v4_2016_09_09.tar.gz 資料集:google的f

深度學習框架Caffe學習筆記(4)-MNIST資料集轉換成視覺圖片

MNIST圖片檔案格式 train-images-idx3-ubyte 檔案偏移量 資料型別 值 描述 0000 32位整型 2051 魔數(大端儲存) 0004 32位整型 60000 檔案包