<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > Python的可視化工具概述

          Python的可視化工具概述

          作者: 時間:2018-07-25 來源:網(wǎng)絡(luò) 收藏

          介紹

          本文引用地址:http://www.ex-cimer.com/article/201807/383756.htm

          在Python世界中,有大量數(shù)據(jù)可視化的選項.因為各種各樣,要知道什么時候使用哪個是非常困難的.本文包含一些較為流行的樣例,并說明如果使用其創(chuàng)建簡單的條形圖.我會使用以下包/工具創(chuàng)建繪圖例子:

          Pandas

          Seaborn

          ggplot

          Bokeh

          pygal

          Plotly

          在例子用,我將使用pandas操作數(shù)據(jù),并啟動其可視化.在大多數(shù)情況下使用這些工具不需要pandas,但是我覺得pandas+可視化工具如此普遍,這是最好的起點。

          Matplotlib怎么樣?

          Matplotlib 是python可視化庫的祖父.它非常強大,但是太過復(fù)雜.你可以使用Matplotlib 做任何你需要做到的事情,但是并不容易弄明白.我不打算通過純Matplotlib 樣例講解,因為許多工具(尤其Pandas和Seaborn)是Matplotlib的thin wrappers.

          對Matplotlib最大的抱怨是需要大量工作的到期望的圖表.在處理這些例子時,我發(fā)現(xiàn)更容易獲得優(yōu)美的圖形,不需要大量大代碼.對于matplotlib冗余性的一個小例子,看一下這個ggplot后例子。

          方法

          我相信,只要人們開始閱讀這一點,他們會指出更好的方式來使用這些工具。我的目標不是建立在每個例子完全相同的圖形.我想在搜索解決方案大致相同的時間以大致相同的方式可視化數(shù)據(jù).

          按這個過程,最大的挑戰(zhàn)是格式化x和y軸,使得在給定一些大標簽時數(shù)據(jù)看起來合理.也許花一些時間弄清楚每個工具希望數(shù)據(jù)如何格式化.一旦弄明白這些部分,剩下的部分比較簡單的.

          另外一個需要考慮的電視,條形圖可能是制作圖標類型最簡單的一種.這些工具讓你能夠繪制更多類型的圖標.我的示例更注重于易格式化性而不是創(chuàng)新可視化例子,因為標簽,一些圖表占用了很大空間,所以我削減了,只是為了保證文章的長度管理.最后我調(diào)整了圖像,因此任何模糊是縮放問題,并且不是實際輸出質(zhì)量.

          最后,我接近使用其他工具替換Excel的心態(tài).我認為我的例子更能說明報告,演講,郵件或者靜態(tài)網(wǎng)頁中的展示.如果你評估實時數(shù)據(jù)可視化或者通過其他機制共享的工具,那么部分工具提供了很多我沒有提到的功能.

          數(shù)據(jù)集

          在上篇文章中介紹了我們將要處理的數(shù)據(jù).數(shù)據(jù)集中包含125行項目,但我選擇關(guān)注前10以保證簡單點.你可以在這找到完整的數(shù)據(jù).

          Pandas

          我使用pandas DataFrame作為所有各種圖標的出發(fā)點.幸運的是,pandas為我們提供了內(nèi)置的matplotlib層繪圖能力.將使用它作為基準.首先,導(dǎo)入模塊,并將數(shù)據(jù)讀入DataFrame.我們希望對數(shù)據(jù)進行排序,并限制為前10項.

          budget = pd.read_csv(mn-budget-detail-2014.csv)

          budget = budget.sort('amount',ascending=False)[:10]

          對所有例子我們使用同樣的budget.以下是前5項目樣子:

          現(xiàn)在,設(shè)置展示使用更好的默認值,并創(chuàng)建一個條形圖:

          pd.options.display.mpl_style = 'default'

          budget_plot = budget.plot(kind=bar,x=budget[detail],

          title=MN Capital Budget - 2014,

          legend=False)

          使用detail列創(chuàng)建圖標同時展示標題并區(qū)屬圖例.這是將圖片存為png的額外代碼.

          fig = budget_plot.get_figure()

          fig.savefig(2014-mn-capital-budget.png)

          這是圖片樣子(階段是為了文章長度管理).

          看起來基本不錯.理想情況下,我想多做一些y軸的格式化,但需要matplotlib 的處理.這是個完美有用的可視化,但是不能通過pandas做更多純粹的定制.

          Seaborn

          Seaborn是一個基于matplotlib的可視化庫.旨在讓默認的數(shù)據(jù)可視化更加悅目.同時讓復(fù)雜的圖表更簡單的創(chuàng)建.它和pandas集成.我的例子不允許Seaborn 顯著差異.我喜歡Seaborn 的一個原因是各種各樣的內(nèi)置樣式,讓你快速更改調(diào)色板以看起來更加漂亮.因此,關(guān)于簡單的圖表Seaborn沒有為我們做很多. 標準導(dǎo)入并讀入數(shù)據(jù):

          import pandas as pd

          import seaborn as sns

          import matplotlib.pyplot as plt

          budget = pd.read_csv(mn-budget-detail-2014.csv)

          budget = budget.sort('amount',ascending=False)[:>10]

          使用x_order對x軸項目排序.這部分代碼設(shè)置排序,圖表風格和條形圖顏色:

          sns.set_style(darkgrid)

          bar_plot = sns.barplot(x=budget[detail],y=budget[amount],

          palette=muted,

          x_order=budget[detail].tolist())

          plt.xticks(rotation=>90)

          plt.show()

          如你所見,為了閱讀我不得不使用matplotlib旋轉(zhuǎn)x軸標題.從外觀上來看,顯示非常不錯.理想情況下,我想格式化y軸刻度,但是在不引入matplotlib的plt.yticks的情況下,我不知道如果做到這一點.

          ggplot

          ggplot類似于Seaborn,構(gòu)建于matplotlib,并且旨在以簡單的方式提高matplotlib可視化的視覺吸引力.和Seaborn不同的是它是R中g(shù)gplot2的接口.鑒于這個目標,部分API不是python,但非常強大.我沒有用過R中的ggplot,所以有一個學(xué)習曲線.然后我可以開到ggplot的吸引力.此庫正在積極的發(fā)展,我希望它繼續(xù)發(fā)展并成熟起來,因為我認為這可能是一個非常強大的功能.為了弄清楚一些事情我也學(xué)習過幾次.在看代碼和做了一些google之后,我能明白大部分.來吧,導(dǎo)入模塊,讀取數(shù)據(jù):

          import pandas as pd

          from ggplot import *

          budget = pd.read_csv(mn-budget-detail-2014.csv)

          budget = budget.sort('amount',ascending=False)[:>10]

          現(xiàn)在我們通過串聯(lián)一些ggplot命令創(chuàng)建我們的圖表:

          p = ggplot(budget, aes(x=detail,y=amount)) +

          geom_bar(stat=bar, labels=budget[detail].tolist()) +

          ggtitle(MN Capital Budget - 2014) +

          xlab(Spending Detail) +

          ylab(Amount) + scale_y_continuous(labels='millions') +

          theme(axis_text_x=element_text(angle=>90))

          print p

          這似乎有些奇怪,尤其適用print p來展示圖表.然而,弄清楚這點比較簡單.在進一步深入后,了解如何旋轉(zhuǎn)文本90度以及如何排序x軸標簽.我發(fā)現(xiàn)最棒的功能是 scale_y_continous,使得標簽好看很多.如果你想保存圖片,使用ggsave :

          ggsave(p, mn-budget-capital-ggplot.png)

          這是最終圖像.我知道有很多灰階.我可以上色,但是沒有時間.

          Bokeh

          Bokeh和之前3個庫都不一樣,不依賴與matplotlib,并且面向現(xiàn)代網(wǎng)頁瀏覽器生成可視化.它的目的是讓交互式網(wǎng)頁可視化,所以我的例子非常簡單.導(dǎo)入模塊,讀取數(shù)據(jù):

          import pandas as pd

          from bokeh.charts import Bar

          budget = pd.read_csv(mn-budget-detail-2014.csv)

          budget = budget.sort('amount',ascending=False)[:>10]

          Bokeh一個不同的方面是,我需要明確列出我們想要繪制的值.

          details = budget[detail].values.tolist()

          amount = >list(budget[amount].astype(>float).values)

          現(xiàn)在我們可以繪制.這個代碼會讓瀏覽器展示包含圖表的HTML網(wǎng)頁.如果有其他用途,我可以保存為png副本.

          bar = Bar(amount, details, filename=bar.html)

          bar.title(MN Capital Budget - 2014).xlabel(Detail).ylabel(Amount)

          bar.show()

          這是png圖片:

          正如你所看到的,圖片非常干凈.我沒有找到更簡單的方法,更容易的格式化y軸.Bokeh有去許多功能但是我沒有在這個例子中深入.

          Pygal

          Pygal用于創(chuàng)建svg圖表.如果安裝了正確依賴,同樣可以保存為png文件.對于易制作交互式圖標svg文件是相當有用的.我同樣發(fā)現(xiàn)創(chuàng)建獨特外觀和視覺吸引力的圖標非常容易.和之前一樣,導(dǎo)入模塊,并讀取數(shù)據(jù):

          import pandas as pd

          import pygal

          from pygal.style import LightStyle

          budget = pd.read_csv(mn-budget-detail-2014.csv)

          budget = budget.sort('amount',ascending=False)[:>10]

          我們需要創(chuàng)建圖標類型和設(shè)置一些基本屬性:

          bar_chart = pygal.Bar(style=LightStyle, width=>800, height=>600,

          legend_at_bottom=True, human_readable=True,

          title='MN Capital Budget - 2014')

          值得注意的一點是human_readable,對于格式化數(shù)據(jù)做的非常好.現(xiàn)在我們需要加入數(shù)據(jù)到圖表中.這里和pandas整合不那么緊密,但是我發(fā)現(xiàn)直接處理這個小數(shù)據(jù)集.當有大量的行,性能可能是一個問題.

          for index, row >in budget.iterrows():

          bar_chart.add(row[detail], row[amount])、

          現(xiàn)在渲染文件為svg 和png文件:

          bar_chart.render_to_file('budget.svg')

          bar_chart.render_to_png('budget.png')

          我認為svg表現(xiàn)非常好,我喜歡結(jié)果圖具有獨特,賞心悅目的風格.我同樣發(fā)現(xiàn)很容易弄清楚可以做什么,不可以做什么.我鼓勵你下載svg文件,看看在你瀏覽器中圖片的互動性.

          Plot.ly

          Plot.ly以分析和可視化的在線工具來區(qū)分的.有強大的API并且包含python的.瀏覽網(wǎng)站,你可以發(fā)現(xiàn)有非常豐富,交互式的圖片.得益于優(yōu)秀的文檔,創(chuàng)建條形圖相當簡單.你需要遵循文檔,獲取你API 密鑰設(shè)置.一旦你這樣做,所有工作看上去相當完美.一個需要注意的是,你所做的一切都在網(wǎng)上發(fā)布,因此確保你對這點感到OK.有一個選項可以讓圖表私有,所以你需要設(shè)置.Plot.ly和pandas無縫整合.設(shè)置導(dǎo)入模塊,讀取數(shù)據(jù):

          import plotly.plotly as py

          import pandas as pd

          from plotly.graph_objs import *

          budget=pd.read_csv(“mn-budget-detail-2014.csv”)

          budget.sort(‘amount’,ascending=False,inplace=True)

          budget = budget[:>10]

          設(shè)置數(shù)據(jù)和圖表類型.

          data = Data([

          Bar(

          x=budget[detail],

          y=budget[amount]

          )

          ])

          我還決定添加一些額外布局信息.

          layout = Layout(

          title='2014 MN Capital Budget',

          font=Font(

          family='Raleway, sans-serif'

          ),

          showlegend=False,

          xaxis=XAxis(

          tickangle=->45

          ),

          bargap=>0.05

          )

          最后,繪制數(shù)據(jù).這將打開一個瀏覽器,帶有你完成的繪圖.你可以使用 py.image.save_as保存本例副本.這是個很cool的功能.你得到豐富的基于網(wǎng)絡(luò)報告的交互,和保存本地副本用于嵌入文件的能力.

          fig = Figure(data=data, layout=layout)

          plot_url = py.plot(data,filename='MN Capital Budget - 2014')

          py.image.save_as(fig, 'mn-14-budget.png')

          檢查全交互式版本.你可以看到很多很棒的例子.箱圖很吸引人并具有高度交互性.因為文檔和pythonAPI,運行非常簡單,我喜歡最終產(chǎn)品.

          總結(jié)

          在python生態(tài)環(huán)境中繪制數(shù)據(jù)有兩面性.好的方面是有很多選擇.壞的方面是有很多選擇.嘗試弄清楚那個適合你,取決于你需要完成什么.在某種程度上,你需要弄清楚用的工具能不能工作.我沒有看到明顯贏家和輸家.下面是我一些想法:

          pandas非常方便,但你必須愿意學(xué)習matplotlib定制。

          Seaborn可以支持一些更復(fù)雜的可視化的方法,但仍需要matplotlib知識來調(diào)整。顏色方案是不錯。

          ggplot有很多的承諾,但經(jīng)過陣痛仍在繼續(xù)。

          Bokeh 是一個強大的工具,如果你想建立自己的可視化服務(wù)器,但可能在簡單場景有些大材小用。

          pygal由于能夠產(chǎn)生互動的SVG圖形和PNG文件是獨一無二的。它并不像基于matplotlib方案靈活。

          Plotly產(chǎn)生互動性最強的圖形。您可以離線保存,并創(chuàng)建非常豐富的基于網(wǎng)絡(luò)的可視化效果。

          目前的情況是,我會繼續(xù)觀看ggplot圖像的進步和使用pygal,在需要交互性的時候使用plotly。隨意在評論中提供反饋。我相信,人們將有很多關(guān)于這一主題的問題和意見。如果我錯過了什么或者有其他的選擇了,讓我知道。



          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();