成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Jupyter 常見可視化框架選擇

YuboonaZhang / 2980人閱讀

摘要:可能對(duì)于社區(qū)而言,鼎鼎大名的是常見的可視化框架,而大家對(duì)于,以及為核心的交互式報(bào)告的可個(gè)視化方案就并沒有那么熟悉。是維護(hù)的比較具有潛力的開源交互可視化框架。示例是基于和組合發(fā)展的內(nèi)核交互式的可視化框架。

對(duì)于以Python作為技術(shù)棧的數(shù)據(jù)科學(xué)工作者,Jupyter是不得不提的數(shù)據(jù)報(bào)告工具。可能對(duì)于R社區(qū)而言,鼎鼎大名的ggplot2是常見的可視化框架,而大家對(duì)于Python,以及Jupyter為核心的交互式報(bào)告的可個(gè)視化方案就并沒有那么熟悉。本文試圖比較幾個(gè)常用的解決方案,方便大家選擇。

選擇標(biāo)準(zhǔn) 稱述式還是命令式

數(shù)據(jù)工作者使用的圖的類別,常見的就三類:GIS可視化、網(wǎng)絡(luò)可視化和統(tǒng)計(jì)圖。因此,大多數(shù)場(chǎng)景下,我們并不想接觸非常底層的基于點(diǎn)、線、面的命令,所以,選擇一個(gè)好的封裝的框架相當(dāng)重要。

當(dāng)然,公認(rèn)較好的封裝是基于《The Grammar of Graphics (Statistics and Computing)》一書,R中的ggplot2基本上就是一個(gè)很好的實(shí)現(xiàn)。我們基本上可以像用「自然語言」(Natural Language)一樣使用這些繪圖命令。我們姑且采用計(jì)算機(jī)科學(xué)領(lǐng)域的「陳述式」來表達(dá)這種繪圖方式。

相反,有時(shí)候,以下情形時(shí),我們可能對(duì)于這種繪圖命令可能并不在意:

出圖相當(dāng)簡單,要求繪制速度,一般大的框架較重(當(dāng)然只是相對(duì)而言);

想要對(duì)細(xì)節(jié)做非常詳盡的微調(diào),一般大框架在微調(diào)方面會(huì)相對(duì)復(fù)雜或者退縮成一句句命令;

是統(tǒng)計(jì)作圖可視化的創(chuàng)新者,想要嘗試做出新的可視化實(shí)踐。

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

是否交互

與傳統(tǒng)的交付靜態(tài)圖標(biāo)不同,基于Web端的Jupter的一大好處就是可以繪制交互的圖標(biāo)(最近的RNotebook也有實(shí)現(xiàn)),因此,是否選擇交互式,也是一個(gè)需要權(quán)衡的地方。

交互圖的優(yōu)勢(shì):

可以提供更多的數(shù)據(jù)維度和信息;

用戶端可以做更多諸如放大、選取、轉(zhuǎn)存的操作;

可以交付BI工程師相應(yīng)的JavaScript代碼用以工程化;

效果上比較炫酷,考慮到報(bào)告接受者的特征可以選擇。

非交互圖的優(yōu)勢(shì):

報(bào)告文件直接導(dǎo)出成靜態(tài)文件時(shí)相對(duì)問題,不會(huì)因?yàn)檗D(zhuǎn)換而損失信息;

圖片可以與報(bào)告分離,必要時(shí)作為其他工作的成果;

不需要在運(yùn)行Notebook時(shí)花很多世界載入各類前端框架。

是非內(nèi)核交互

Jupyter上大多數(shù)命令通過以下方式獲取數(shù)據(jù),而大多數(shù)繪圖方式事實(shí)上只是通過Notebook內(nèi)的代碼在Notebook與內(nèi)核交互后展示出輸出結(jié)果。但ipywidgets框架則可以實(shí)現(xiàn)Code Cell中的代碼與Notebook中的前端控件(比如按鈕等)綁定來進(jìn)行操作內(nèi)核,提供不同的繪圖結(jié)果,甚至某些繪圖框架的每個(gè)元素都可以直接和內(nèi)核進(jìn)行交互。

?

用這些框架,可以搭建更復(fù)雜的Notebook的可視化應(yīng)用,但缺點(diǎn)是因?yàn)榛趦?nèi)核,所以在呈遞、展示報(bào)告時(shí)如果使用離線文件時(shí),這些交互就會(huì)無效。

框架羅列 matplotlib

最家喻戶曉的繪圖框架是matplotlib,它提供了幾乎所有python內(nèi)靜態(tài)繪圖框架的底層命令。如果按照上面對(duì)可視化框架的分法,matplotlib屬于非交互式的的「命令式」作圖框架。

## matplotlib代碼示例
from pylab 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()

優(yōu)點(diǎn)是相對(duì)較快,底層操作較多。缺點(diǎn)是語言繁瑣,內(nèi)置默認(rèn)風(fēng)格不夠美觀。

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

ggplotplotnine

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

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

Seaborn

seaborn準(zhǔn)確上說屬于matplotlib的擴(kuò)展包,在其上做了許多非常有用的封裝,基本上可以滿足大部分統(tǒng)計(jì)作圖的需求,以matplotlib+seaborn基本可以滿足大部分業(yè)務(wù)場(chǎng)景,語法也更加「陳述式」。

缺點(diǎn)是封裝較高,基本上API不提供的圖就完全不可繪制,對(duì)于各類圖的拼合也不適合;此外配置語句語法又回歸「命令式」,相對(duì)復(fù)雜且不一致。

## seaborn示例
import seaborn as sns; sns.set(color_codes=True)
iris = sns.load_dataset("iris")
species = iris.pop("species")
g = sns.clustermap(iris)

plotly

plotly是跨平臺(tái)JavaScript交互式繪圖包,由于開發(fā)者的核心是javascript,所以整個(gè)語法類似于寫json配置,語法特質(zhì)也介于「陳述式」和「命令式」之間,無服務(wù)版本是免費(fèi)的。

有點(diǎn)是學(xué)習(xí)成本不高,可以很快將語句移植到j(luò)avascript版本;缺點(diǎn)是語言相對(duì)繁瑣。

##plotly示例
import plotly.plotly as py
import plotly.graph_objs as go

# Add data
month = ["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 traces
trace0 = 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 layout
layout = 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")

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

bokeh

bokehpydata維護(hù)的比較具有潛力的開源交互可視化框架。

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

## Bokeh示例
import numpy as np
import scipy.special

from bokeh.layouts import gridplot
from bokeh.plotting import figure, show, output_file

p1 = figure(title="Normal Distribution (μ=0, σ=0.5)",tools="save",
            background_fill_color="#E8DDCB")

mu, sigma = 0, 0.5

measured = np.random.normal(mu, sigma, 1000)
hist, edges = np.histogram(measured, density=True, bins=50)

x = np.linspace(-2, 2, 1000)
pdf = 1/(sigma * np.sqrt(2*np.pi)) * np.exp(-(x-mu)**2 / (2*sigma**2))
cdf = (1+scipy.special.erf((x-mu)/np.sqrt(2*sigma**2)))/2

p1.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:],
        fill_color="#036564", line_color="#033649")
p1.line(x, pdf, line_color="#D95B43", line_width=8, alpha=0.7, legend="PDF")
p1.line(x, cdf, line_color="white", line_width=2, alpha=0.7, legend="CDF")

p1.legend.location = "center_right"
p1.legend.background_fill_color = "darkgrey"
p1.xaxis.axis_label = "x"
p1.yaxis.axis_label = "Pr(x)"



p2 = figure(title="Log Normal Distribution (μ=0, σ=0.5)", tools="save",
            background_fill_color="#E8DDCB")

mu, sigma = 0, 0.5

measured = np.random.lognormal(mu, sigma, 1000)
hist, edges = np.histogram(measured, density=True, bins=50)

x = np.linspace(0.0001, 8.0, 1000)
pdf = 1/(x* sigma * np.sqrt(2*np.pi)) * np.exp(-(np.log(x)-mu)**2 / (2*sigma**2))
cdf = (1+scipy.special.erf((np.log(x)-mu)/(np.sqrt(2)*sigma)))/2

p2.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:],
        fill_color="#036564", line_color="#033649")
p2.line(x, pdf, line_color="#D95B43", line_width=8, alpha=0.7, legend="PDF")
p2.line(x, cdf, line_color="white", line_width=2, alpha=0.7, legend="CDF")

p2.legend.location = "center_right"
p2.legend.background_fill_color = "darkgrey"
p2.xaxis.axis_label = "x"
p2.yaxis.axis_label = "Pr(x)"



p3 = figure(title="Gamma Distribution (k=1, θ=2)", tools="save",
            background_fill_color="#E8DDCB")

k, theta = 1.0, 2.0

measured = np.random.gamma(k, theta, 1000)
hist, edges = np.histogram(measured, density=True, bins=50)

x = np.linspace(0.0001, 20.0, 1000)
pdf = x**(k-1) * np.exp(-x/theta) / (theta**k * scipy.special.gamma(k))
cdf = scipy.special.gammainc(k, x/theta) / scipy.special.gamma(k)

p3.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:],
        fill_color="#036564", line_color="#033649")
p3.line(x, pdf, line_color="#D95B43", line_width=8, alpha=0.7, legend="PDF")
p3.line(x, cdf, line_color="white", line_width=2, alpha=0.7, legend="CDF")

p3.legend.location = "center_right"
p3.legend.background_fill_color = "darkgrey"
p3.xaxis.axis_label = "x"
p3.yaxis.axis_label = "Pr(x)"



p4 = figure(title="Weibull Distribution (λ=1, k=1.25)", tools="save",
            background_fill_color="#E8DDCB")

lam, k = 1, 1.25

measured = lam*(-np.log(np.random.uniform(0, 1, 1000)))**(1/k)
hist, edges = np.histogram(measured, density=True, bins=50)

x = np.linspace(0.0001, 8, 1000)
pdf = (k/lam)*(x/lam)**(k-1) * np.exp(-(x/lam)**k)
cdf = 1 - np.exp(-(x/lam)**k)

p4.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:],
       fill_color="#036564", line_color="#033649")
p4.line(x, pdf, line_color="#D95B43", line_width=8, alpha=0.7, legend="PDF")
p4.line(x, cdf, line_color="white", line_width=2, alpha=0.7, legend="CDF")

p4.legend.location = "center_right"
p4.legend.background_fill_color = "darkgrey"
p4.xaxis.axis_label = "x"
p4.yaxis.axis_label = "Pr(x)"



output_file("histogram.html", title="histogram.py example")

show(gridplot(p1,p2,p3,p4, ncols=2, plot_width=400, plot_height=400, toolbar_location=None))

bqplot

bqplot是基于ipywidgetsd3.js組合發(fā)展的內(nèi)核交互式的可視化框架。語法上采用了和matplotlib大致一致的語法已經(jīng)相對(duì)封裝較高的「陳述式語法」。優(yōu)點(diǎn)是直接和內(nèi)核交互,可以使用大量控件來實(shí)現(xiàn)更多的圖像處理,缺點(diǎn)也是直接的,離線文檔則不會(huì)顯示任何圖案、控件也都失效。

## bqplot示例
import numpy as np
from IPython.display import display
from bqplot import (
    OrdinalScale, LinearScale, Bars, Lines, Axis, Figure
)

size = 20
np.random.seed(0)

x_data = np.arange(size)

x_ord = OrdinalScale()
y_sc = LinearScale()

bar = Bars(x=x_data, y=np.random.randn(2, size), scales={"x": x_ord, "y":
y_sc}, type="stacked")
line = Lines(x=x_data, y=np.random.randn(size), scales={"x": x_ord, "y": y_sc},
             stroke_width=3, colors=["red"], display_legend=True, labels=["Line chart"])

ax_x = Axis(scale=x_ord, grid_lines="solid", label="X")
ax_y = Axis(scale=y_sc, orientation="vertical", tick_format="0.2f",
            grid_lines="solid", label="Y")

Figure(marks=[bar, line], axes=[ax_x, ax_y], title="API Example",
       legend_location="bottom-right")

其他特殊需求的作圖

除了統(tǒng)計(jì)作圖,網(wǎng)絡(luò)可視化和GIS可視化也是很常用的,在此只做一個(gè)簡單的羅列:

GIS類:

gmap:交互,使用google maps接口

ipyleaflet:交互,使用leaflet接口

網(wǎng)絡(luò)類:

networkx:底層為matplotlib

plotly

總結(jié)
底層實(shí)現(xiàn) 交互方式 語法 語言結(jié)構(gòu) 備注 推薦程度
matplotlib - 命令式 底層語言 可以實(shí)現(xiàn)復(fù)雜底層操作 ★★★
gglot matplotlib 陳述式 ggplot2 建議選擇plotnine ★★
plotnine matplotlib 陳述式 ggplot2 完全移植ggplot2 ★★★★★
seaborn matplotlib 陳述式 高級(jí)語言 有很多有用的統(tǒng)計(jì)圖類的封裝;但不適合做圖拼裝 ★★★★★
plotly plotly.js 前端交互 介于命令式和陳述式之間 類似JavaScript 語法類似于json配置 ★★★★
bokeh - 前端交互 命令、陳述式 同時(shí)有底層語言和高級(jí)語言 社區(qū)具有潛力 ★★★
bqplot d3.js 內(nèi)核交互 命令、陳述式 有類似matplotlib底層語言,已經(jīng)封裝好的高級(jí)語言 內(nèi)核交互 ★★★★

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40992.html

相關(guān)文章

  • “大數(shù)據(jù)+”實(shí)踐:數(shù)據(jù)平臺(tái)的設(shè)計(jì)與搭建

    摘要:在近期舉辦的全球架構(gòu)師峰會(huì)上,個(gè)推首席數(shù)據(jù)架構(gòu)師袁凱,基于他在數(shù)據(jù)平臺(tái)的建設(shè)以及數(shù)據(jù)產(chǎn)品研發(fā)的多年經(jīng)驗(yàn),分享了面向機(jī)器學(xué)習(xí)數(shù)據(jù)平臺(tái)的設(shè)計(jì)與搭建。二具體開展機(jī)器學(xué)習(xí)的過程原始數(shù)據(jù)經(jīng)過數(shù)據(jù)的處理,入庫到數(shù)據(jù)倉里。 機(jī)器學(xué)習(xí)作為近幾年的一項(xiàng)熱門技術(shù),不僅憑借眾多人工智能產(chǎn)品而為人所熟知,更是從根本上增能了傳統(tǒng)的互聯(lián)網(wǎng)產(chǎn)品。在近期舉辦的2018 ArchSummit全球架構(gòu)師峰會(huì)上,個(gè)推首席數(shù)...

    BlackHole1 評(píng)論0 收藏0
  • Python數(shù)據(jù)科學(xué)環(huán)境:Anaconda 了解一下

    摘要:我自己印象最深的是在上安裝加密和科學(xué)計(jì)算模塊,折騰了很久。這個(gè)精裝是面向數(shù)據(jù)科學(xué)的,同時(shí)也保留了你自己進(jìn)一步改裝的空間。數(shù)據(jù)科學(xué)庫包環(huán)境管理工具,這幾樣就是的主要功能。 幾乎所有的 Python 學(xué)習(xí)者都遇到過 安裝 方面的問題。這些安裝問題包括 Python 自身環(huán)境的安裝、第三方模塊的安裝、不同版本的切換,以及不同平臺(tái)、版本間的兼容問題 等。當(dāng)你因?yàn)檫@些問題而卡殼,一行代碼沒寫就已...

    shaonbean 評(píng)論0 收藏0
  • 收藏 | 10個(gè)可以快速用Python進(jìn)行數(shù)據(jù)分析的小技巧

    摘要:函數(shù)將單元格內(nèi)容以形式呈現(xiàn)。自動(dòng)評(píng)論代碼自動(dòng)注釋單元格中的選定行,再次命中組合將取消注釋相同的代碼行。如果需要恢復(fù)整個(gè)已刪除的單元格,請(qǐng)按或撤消刪除單元格。 showImg(https://segmentfault.com/img/remote/1460000019599210); 編譯:小七、蔣寶尚 一些小提示和小技巧可能是非常有用的,特別是在編程領(lǐng)域。有時(shí)候使用一點(diǎn)點(diǎn)黑客技術(shù),既可...

    silvertheo 評(píng)論0 收藏0
  • 編程界的“頭牌”名媛:Python,14個(gè)與數(shù)據(jù)科學(xué)的“曖昧情事”

    摘要:安裝安裝用于數(shù)據(jù)科學(xué)的的最佳方法是使用發(fā)行版。但這只是展示了構(gòu)建數(shù)據(jù)科學(xué)問題的不同方式中的機(jī)器學(xué)習(xí)這是一個(gè)重要的主題,機(jī)器學(xué)習(xí)正在風(fēng)靡世界,是數(shù)據(jù)科學(xué)家工作的重要組成部分。 作為編程界的頭牌名媛,Python平易近人的態(tài)度和精明婉約的靈動(dòng)深得各個(gè)大佬歡心。比如:人工智能、web開發(fā)、爬蟲、系統(tǒng)運(yùn)維、數(shù)據(jù)分析與計(jì)算等等。這幾位風(fēng)流多金的行業(yè)精英隨便哪個(gè)都能逆轉(zhuǎn)未來。 本文為你精心準(zhǔn)備了一...

    Labradors 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<