<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          數(shù)據(jù)可視化:Matplotlib vs ggplot2

          共 3720字,需瀏覽 8分鐘

           ·

          2020-11-04 03:52

          作者 | Dario Rade?i??

          編譯 | VK?

          來(lái)源 | Towards Datas Science

          轉(zhuǎn)自 | 磐創(chuàng)AI

          2020年即將結(jié)束(終于),數(shù)據(jù)可視化再重要不過(guò)了。呈現(xiàn)一個(gè)看起來(lái)像5歲小孩的東西已經(jīng)不再是一個(gè)選擇,所以數(shù)據(jù)科學(xué)家需要一個(gè)有吸引力和簡(jiǎn)單易用的數(shù)據(jù)可視化庫(kù)。

          今天我們將比較其中的兩個(gè)-Matplotlib和ggplot2。

          為什么是這兩個(gè)?Matplotlib是我學(xué)習(xí)的第一個(gè)可視化庫(kù)。但最近我越來(lái)越喜歡R語(yǔ)言的ggplot2了,但是今天我們將在這兩個(gè)庫(kù)中重新創(chuàng)建五個(gè)相同的圖,看看代碼和美學(xué)方面的進(jìn)展。

          數(shù)據(jù)呢?我們將使用兩個(gè)著名的數(shù)據(jù)集:mtcars和航空乘客。你可以通過(guò)導(dǎo)出CSV功能通過(guò)RStudio獲得第一個(gè),第二個(gè)在這里可用:https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv

          以下是R和Python的庫(kù)導(dǎo)入:

          R:?
          library(ggplot2)?

          Python:?
          import?pandas?as?pd?
          import?matplotlib.pyplot?as?plt?
          import?matplotlib.dates?as?mdates?
          mtcars?=?pd.read_csv('mtcars.csv')

          直方圖

          我們使用直方圖來(lái)可視化給定變量的分布。這正是我們對(duì)mtcars數(shù)據(jù)集所做的——可視化MPG屬性的分布。

          以下是R的代碼和結(jié)果:

          ggplot(mtcars,?aes(x=mpg))?+?
          ??geom_histogram(bins=15,?fill='#087E8B',?color='#02454d')?+
          ??ggtitle('Histogram?of?MPG')?+?xlab('MPG')?+?ylab('Count')

          Python也是這樣:

          plt.figure(figsize=(12,?7))?
          plt.hist(mtcars['mpg'],?bins=15,?color='#087E8B',?ec='#02454d')
          plt.title('Histogram?of?MPG')?
          plt.xlabel('MPG')?
          plt.ylabel('Count');

          默認(rèn)情況下兩者非常相似。即使我們需要編寫的代碼量也大致相同,所以很難在這里選擇最喜歡的代碼。我喜歡Python的x軸是從0開(kāi)始的,但在R中可以很容易地改變。另一方面,我喜歡R中沒(méi)有邊界,但這也是Python中易于實(shí)現(xiàn)的東西。

          平局

          條形圖

          條形圖由不同高度的矩形組成,其中高度表示給定屬性段的值。我們將使用它們來(lái)比較不同數(shù)量的圓柱體(屬性cyl)的計(jì)數(shù)。

          以下是R的代碼和結(jié)果:

          ggplot(mtcars,?aes(x=cyl))?+?
          ??geom_bar(fill='#087E8B',?color='#02454d')?+?
          ??scale_x_continuous(breaks=seq(min(mtcars$cyl),?max(mtcars$cyl),?by=2))?+?
          ??ggtitle('Bar?chart?of?CYL')?+?
          ??xlab('Number?of?cylinders')?+?ylab('Count')

          Python也是一樣:

          bar_x?=?mtcars['cyl'].value_counts().index?
          bar_height?=?mtcars['cyl'].value_counts().values?

          plt.figure(figsize=(12,?7))?
          plt.bar(x=bar_x,?height=bar_height,?color='#087E8B',?ec='#02454d')?
          plt.xticks([4,?6,?8])?
          plt.title('Bar?chart?of?CYL')?
          plt.xlabel('Number?of?cylinders')?
          plt.ylabel('Count');

          毫無(wú)疑問(wèn),R的代碼更整潔、更簡(jiǎn)單,因?yàn)镻ython需要手動(dòng)計(jì)算高度。從美學(xué)角度看,它們非常相似,但代碼我更喜歡R版。

          獲勝者:ggplot2

          散點(diǎn)圖

          散點(diǎn)圖用于可視化兩個(gè)變量之間的關(guān)系。這樣做的目的是觀察第二個(gè)變量隨著第一個(gè)變量的變化(上升或下降)會(huì)發(fā)生什么。我們還可以通過(guò)對(duì)其他屬性值的點(diǎn)著色來(lái)為二維圖添加另一個(gè)“維度”。

          我們將使用散點(diǎn)圖來(lái)可視化HP和MPG屬性之間的關(guān)系。

          以下是R的代碼和結(jié)果:

          ggplot(mtcars,?aes(x=hp,?y=mpg))?+?
          ??geom_point(aes(size=cyl,?color=cyl))?+?
          ??ggtitle('Scatter?plot?of?HP?vs?MPG')?+?
          ??xlab('Horse?power')?+?ylab('Miles?per?gallon')

          Python也是一樣:

          colors?=?[]?
          for?val?in?mtcars['cyl']:?
          ????if?val?==?4:?colors.append('#17314c')?
          ????elif?val?==?6:?colors.append('#326b99')?
          ????else:?colors.append('#54aef3')?
          plt.figure(figsize=(12,?7))?
          plt.scatter(x=mtcars['hp'],?y=mtcars['mpg'],?s=mtcars['cyl']?*?20,?c=colors)?
          plt.title('Scatter?plot?of?HP?vs?MPG')?
          plt.xlabel('Horse?power')?
          plt.ylabel('Miles?per?gallon');

          代碼方面,這是R和ggplot2的明顯勝利。Matplotlib不提供一種簡(jiǎn)單的方法,通過(guò)第三個(gè)屬性給數(shù)據(jù)點(diǎn)上色,因此我們必須手動(dòng)執(zhí)行該步驟。尺寸也有點(diǎn)怪。

          獲勝者:ggplot2

          箱線圖

          箱線圖用于通過(guò)四分位數(shù)可視化數(shù)據(jù)。它們通常會(huì)有線(胡須)從盒子里伸出來(lái),這些線在上下四分位數(shù)之外顯示出變化。中間的線是中值。頂部或底部顯示的點(diǎn)被視為異常值。

          我們將使用箱線圖,通過(guò)不同的CYL值來(lái)可視化MPG。

          以下是R的代碼和結(jié)果:

          ggplot(mtcars,?aes(x=as.factor(cyl),?y=mpg))?+?
          ??geom_boxplot(fill='#087E8B',?alpha=0.6)?+?
          ??ggtitle('Boxplot?of?CYL?vs?MPG')?+?
          ??xlab('Number?of?cylinders')?+?ylab('Miles?per?gallon')

          Python也是一樣:

          boxplot_data?=?[?
          ????mtcars[mtcars['cyl']?==?4]['mpg'].tolist(),?
          ????mtcars[mtcars['cyl']?==?6]['mpg'].tolist(),?
          ????mtcars[mtcars['cyl']?==?8]['mpg'].tolist()?
          ]?

          fig?=?plt.figure(1,?figsize=(12,?7))?
          ax?=?fig.add_subplot(111)?
          bp?=?ax.boxplot(boxplot_data,?patch_artist=True)?

          for?box?in?bp['boxes']:?
          ????box.set(facecolor='#087E8B',?alpha=0.6,?linewidth=2)?

          for?whisker?in?bp['whiskers']:?
          ????whisker.set(linewidth=2)?

          for?median?in?bp['medians']:?
          ????median.set(color='black',?linewidth=3)?

          ax.set_title('Boxplot?of?CYL?vs?MPG')?
          ax.set_xlabel('Number?of?cylinders')?
          ax.set_ylabel('Miles?per?galon')?
          ax.set_xticklabels([4,?6,?8]);

          有一件事是立即可見(jiàn)的-Matplotlib需要大量的代碼來(lái)生成一個(gè)外觀不錯(cuò)的boxplot。ggplot2不是這樣。到目前為止,R是這里明顯的贏家。

          獲勝者:ggplot2

          折線圖

          現(xiàn)在我們將從mtcars數(shù)據(jù)集轉(zhuǎn)移到airline passengers數(shù)據(jù)集。我們將使用它創(chuàng)建一個(gè)帶有日期格式的x軸的簡(jiǎn)單折線圖。這并不像聽(tīng)起來(lái)那么容易。

          以下是R的代碼和結(jié)果:

          ap?<-?read.csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv')?
          ap$Month?<-?as.Date(paste(ap$Month,?'-01',?sep=''))?

          ggplot(ap,?aes(x=Month,?y=Passengers))?+?
          ??geom_line(size=1.5,?color='#087E8B')?+?
          ??scale_x_date(date_breaks='1?year',?date_labels='%Y')?+?
          ??ggtitle('Line?chart?of?Airline?passengers')?+?
          ??xlab('Year')?+?ylab('Count')

          Python也是一樣:

          ap?=?pd.read_csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv')?
          ap['Month']?=?ap['Month'].apply(lambda?x:?pd.to_datetime(f'{x}-01'))?

          fig?=?plt.figure(1,?figsize=(12,?7))?
          ax?=?fig.add_subplot(111)?
          line?=?ax.plot(ap['Month'],?ap['Passengers'],?lw=2.5,?color='#087E8B')?

          formatter?=?mdates.DateFormatter('%Y')
          ax.xaxis.set_major_formatter(formatter)?
          locator?=?mdates.YearLocator()?
          ax.xaxis.set_major_locator(locator)?
          ax.set_title('Line?chart?of?Airline?passengers')?ax.set_xlabel('Year')?ax.set_ylabel('Count');

          從美學(xué)角度來(lái)看,這些圖表幾乎完全相同,但在代碼量方面,ggplot2再次擊敗Matplotlib。與Python相比,R在X軸顯示日期要容易得多。

          獲勝者:ggplot2

          結(jié)論

          在我看來(lái),ggplot2在簡(jiǎn)單性和數(shù)據(jù)可視化美觀方面是一個(gè)明顯的贏家。幾乎總是可以歸結(jié)為非常相似的3-5行代碼,而Python則不是這樣。

          原文鏈接:https://towardsdatascience.com/matplotlib-vs-ggplot2-which-to-choose-for-2020-and-beyond-ced5e294bfdc

          往期精彩:

          【原創(chuàng)首發(fā)】機(jī)器學(xué)習(xí)公式推導(dǎo)與代碼實(shí)現(xiàn)30講.pdf

          【原創(chuàng)首發(fā)】深度學(xué)習(xí)語(yǔ)義分割理論與實(shí)戰(zhàn)指南.pdf

          ?2020,從TF Boy 變成 Torch User

          求個(gè)在看!

          瀏覽 57
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月丁香久草 | 99热精品在线观看 | 四虎成人精品影院 | 色播在线观看 | 大香蕉超碰成人网 |