Python 中的可視化工具介紹

幾周前午乓,R語言社區(qū)經(jīng)歷了一場關(guān)于畫圖工具的討論喧半。對于我們這種外人來說食店,具體的細(xì)節(jié)并不重要,但是我們可以將一些有用的觀點運(yùn)用到 Python 中颖对。討論的重點是 R 語言自帶的繪圖工具 base R 和 Hadley Wickham 開發(fā)的繪圖工具 ggplot2 之間的優(yōu)劣情況捻撑。如果你想了解更多細(xì)節(jié)內(nèi)容,請閱讀以下幾篇文章:

其中最重要的兩個內(nèi)容是:

  1. 其中一個工具能夠?qū)崿F(xiàn)的功能另一個工具也同樣能實現(xiàn)缤底。
  2. ggplot2 非常適合用于探索性分析顾患。

不是所有人都認(rèn)同第二個觀點,ggplot2確實無法繪制出所有的圖表類型个唧,但是我會利用它來做分析江解。

綜述

以下是 2016 年 4 月寫的關(guān)于繪圖工具的概述。出于多方面的原因徙歼,繪圖工具的選取更多地取決于個人偏好犁河,因此本文介紹的 Python 繪圖工具也僅代表我的個人使用偏好。

Matplotlib

Matplotlib 是一個強(qiáng)大的工具魄梯,它是 Pandas' builtin-plottingSeaborn 的基礎(chǔ)桨螺。Matplotlib 能夠繪制許多不同的圖形,還能調(diào)用多個級別的許多 API酿秸。我發(fā)現(xiàn)pyplot api非常好用灭翔,你可能用不上Transforms 或者 artists,但是如果你有需求的話可以查閱幫助文檔辣苏。我將從 pandasseaborn 圖開始介紹缠局,然后介紹如何調(diào)用 pyplotAPI

Pandas' builtin-plotting

DataFrameSeries 擁有 .plot 的命名空間考润,其中有許多圖形類別可供選擇(line, hist, scatter, 等等)。 Pandas 對象還提供了額外的用于增強(qiáng)圖形展現(xiàn)效果的數(shù)據(jù)读处,如索引變量糊治。
由于 pandas 具有更少的向后兼容的限制,所以它具有更好的美學(xué)特性罚舱。從這方面來說井辜,我認(rèn)為 pandas 中的 DataFrame.plot 是一個非常實用的快速探索性分析的工具。

Seaborn

Michael Waskom 所開發(fā)的 Seaborn 提供了一個高層次的界面來繪制更吸引人統(tǒng)計圖形管闷。Seaborn 提供了一個可以快速探索分析數(shù)據(jù)不同特征的 API 接口粥脚,接下來我們將重點介紹它。

Bokeh

Bokeh 是一款針對瀏覽器開發(fā)的可視化工具包个。
matplotlib 一樣刷允,**Bokeh
** 擁有一系列 API 接口冤留。比如 glpyhs 接口,該接口和 matplotllib 中的 Artists 接口非常相似树灶,它主要用于繪制環(huán)形圖纤怒、方形圖和多邊形圖等。最近 Bokeh 又開放了一個新的圖形接口天通,該接口主要用于處理詞典數(shù)據(jù)或 DataFrame 數(shù)據(jù)泊窘,并用于繪制罐頭圖。

其他工具:

以下是一些本文沒有提到的可視化工具:

  • Lightning
  • HoloViews
  • Glueviz
  • vispy
  • bqplot

案例介紹

我們將利用 ggplot2 中的 diamonds 數(shù)據(jù)集像寒,你可以在 Vincent Arelbundock's RDatasets 中找到它(pd.read_csv('http://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv'))烘豹,此外我們還需要檢測是否已經(jīng)安裝feather

925
926
927

[站外圖片上傳中……(4)]

Bokeh 提供了兩個 API诺祸,一個是低級的 glyph API携悯,另一個是高級的 Charts API。

[站外圖片上傳中……(5)]

還不是很清楚我們應(yīng)該在啥時候利用 Bokeh 來進(jìn)行探索性分析序臂,不過它的交互式功能可以激發(fā)我的興趣蚌卤。就個人而言,由于習(xí)慣問題我平時仍然一直使用 matplotlib 來繪圖奥秆,我還無法完全切換到 Bokeh 中逊彭。

我非常喜歡 Bokeh 的儀表盤功能和 bokeh server 的 webapps。

[站外圖片上傳中……(6)]

Matplotlib

[站外圖片上傳中……(7)]

[站外圖片上傳中……(8)]

matplotlib 并不局限于處理 DataFrame 數(shù)據(jù)构订,它支持所有使用 getitem 作為鍵值的數(shù)據(jù)類型侮叮。

[站外圖片上傳中……(9)]

[站外圖片上傳中……(10)]

我們從列變量的名字中提取出軸標(biāo)簽,利用 Pandas 可以更加便捷地繪制一系列共享 x 軸數(shù)據(jù)的圖形悼瘾。

[站外圖片上傳中……(11)]

[站外圖片上傳中……(12)]

Seaborn

本文中的剩余部分將重點介紹 seaborn和為什么我認(rèn)為它是探索性分析的強(qiáng)大工具囊榜。

我強(qiáng)烈建議你閱讀 Seaborn 的 introductory notes,這上面介紹了 seaborn 的設(shè)計邏輯和應(yīng)用領(lǐng)域亥宿。

Seaborn 主要目的是將探索和理解數(shù)據(jù)核心部分的過程進(jìn)行可視化處理卸勺。

我們可以通過一個穩(wěn)定的且易懂的 API 接口來調(diào)用 Seaborn。

繪圖函數(shù)通過調(diào)用盡量少的參數(shù)來實現(xiàn)可視化的過程烫扼,此外還可以通過修改附加參數(shù)的形式來自定義選項曙求。

事實上,seaborn 是基于 matplotlib 開發(fā)的映企,這意味著如果你熟悉 pyplot API的話悟狱,那么你可以很容易地掌握 seaborn。

大多數(shù) seaborn 繪圖函數(shù)的參數(shù)都由 x, y, hue, 和 data 構(gòu)成(并不是所有的參數(shù)都是必須的)堰氓。如果你處理的對象是 DataFrame挤渐,那么你可以直接將列變量的名稱和數(shù)據(jù)集的名稱一同傳遞到繪圖函數(shù)中。

[站外圖片上傳中……(13)]

[站外圖片上傳中……(14)]

[站外圖片上傳中……(15)]

[站外圖片上傳中……(16)]

我們可以很輕易地探究兩個變量之間的關(guān)系:

[站外圖片上傳中……(17)]

[站外圖片上傳中……(18)]

或者一次探究多個變量之間的關(guān)系:

[站外圖片上傳中……(19)]

[站外圖片上傳中……(20)]

pariplot 是 PairGrid 的一個包裝函數(shù)双絮,它提供了 seaborn 一個重要的抽象功能——Grid浴麻。Seaborn 的 Grid 將 matplotlib 中Figure 和數(shù)據(jù)集中的變量聯(lián)系起來了得问。

我們有兩種方式可以和 grids 進(jìn)行交互操作。其一白胀,seaborn 提供了類似于 pairplot 的包裝函數(shù)椭赋,它提前設(shè)置了許多常見任務(wù)的參數(shù);其二或杠,如果你需要更多的自定義選項哪怔,那么你可以直接利用 Grid 方法。

[站外圖片上傳中……(21)]
[站外圖片上傳中……(22)]

[站外圖片上傳中……(23)]
34312 rows × 7 columns

[站外圖片上傳中……(24)]
[站外圖片上傳中……(25)]

FaceGrid 可以通過控制分面變量來生成 Grid圖形向抢,其中PairGrid是它的一個特例认境。接下來的案例中,我們將以數(shù)據(jù)集中的 cut 變量為分面變量來繪制圖像:
[站外圖片上傳中……(26)]

[站外圖片上傳中……(27)]
最后一個案例展示了如何將 seaborn 和 matplotlib 結(jié)合起來挟鸠。g.axes是matplotlib.Axes的一個數(shù)組叉信,g.fig是matplotlib.Figure的一個特例。這是使用 seaborn 時常見的一個模式:利用 seaborn 的方法來繪制圖像艘希,然后再利用 matplotlib 來調(diào)整細(xì)節(jié)部分硼身。

我認(rèn)為 seaborn 之所以吸引人是因為它的繪圖語法具有很強(qiáng)的靈活性。你不會被作者所設(shè)定的圖表類型所局限住覆享,你可以根據(jù)自己的需要創(chuàng)建新的圖表佳遂。
[站外圖片上傳中……(28)]

[站外圖片上傳中……(29)]

[站外圖片上傳中……(30)]

[站外圖片上傳中……(31)]

本來,我打算準(zhǔn)備更多的例子來介紹 seaborn撒顿,但是我會將相關(guān)鏈接分享給大家丑罪。Seaborn 的說明文檔寫的非常詳細(xì)。

最后凤壁,我們將結(jié)合 scikit-learn 來介紹如何利用 GridSearch 來尋找最佳參數(shù)吩屹。
[站外圖片上傳中……(32)]

[站外圖片上傳中……(33)]


[站外圖片上傳中……(34)]

原文鏈接:http://tomaugspurger.github.io/modern-6-visualization.html

原文作者:Tom Augspurger

譯者:Fibears

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拧抖,隨后出現(xiàn)的幾起案子煤搜,更是在濱河造成了極大的恐慌,老刑警劉巖唧席,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擦盾,死亡現(xiàn)場離奇詭異,居然都是意外死亡袱吆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門距淫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绞绒,“玉大人,你說我怎么就攤上這事榕暇∨詈猓” “怎么了喻杈?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長狰晚。 經(jīng)常有香客問我筒饰,道長,這世上最難降的妖魔是什么壁晒? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任瓷们,我火速辦了婚禮,結(jié)果婚禮上秒咐,老公的妹妹穿的比我還像新娘谬晕。我一直安慰自己,他們只是感情好携取,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布攒钳。 她就那樣靜靜地躺著,像睡著了一般雷滋。 火紅的嫁衣襯著肌膚如雪不撑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天晤斩,我揣著相機(jī)與錄音焕檬,去河邊找鬼。 笑死尸昧,一個胖子當(dāng)著我的面吹牛揩页,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烹俗,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼爆侣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了幢妄?” 一聲冷哼從身側(cè)響起兔仰,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蕉鸳,沒想到半個月后乎赴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潮尝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年榕吼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勉失。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡羹蚣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乱凿,到底是詐尸還是另有隱情顽素,我是刑警寧澤咽弦,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站胁出,受9級特大地震影響型型,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜全蝶,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一闹蒜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裸诽,春花似錦嫂用、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至埂蕊,卻和暖如春往弓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蓄氧。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工函似, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喉童。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓撇寞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親堂氯。 傳聞我的和親對象是個殘疾皇子蔑担,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容