iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0
AI & Data

語言學與NLP系列 第 8

Day 8 一起來把資料以美美的樣子呈現吧!

  • 分享至 

  • xImage
  •  

看到今天的標題應該知道要做什麼了吧?是的~就是將資料整理,並以圖表呈現的「資料視覺化」(data visualization)。資料視覺化是資料呈現的一種非常重要的手段,有時候,直接看數字不夠直觀,可能還會造成混亂。為了清晰有效地傳遞資訊,資料視覺化使用統計圖形、圖表、資訊圖表和其他工具。可以使用點、線或條在視覺上傳達定量資訊。當然,這一切都是建立在是「有效」的視覺化,因為有效的視覺化才能夠幫助使用者分析和推理資料和證據,使複雜的資料更容易理解和使用。該怎麼達成有效的視覺化呢?這就考驗到製作者的能力了!製作者可以根據特定的分析任務(如進行比較或理解因果關係),以及該任務要遵循的圖形為設計原則。表格通常用於尋找特定的度量,而各種類型的圖表用於顯示一個或多個變數的資料中的模式或關係。

由於 R 語言是適合處理統計資料的語言,所以它將資料以圖片呈現的能力也不差,圖表的種類也非常的多。那麼~接下來,廢話不多說,我們直接來看看 R 呈現圖表資料的能力吧!

plot()

首先從 R 裡面最基本的繪圖 package 講起。


library(learningr) # 匯入 dataset
head(obama_vs_mccain) # 查看前 6 筆資料

plot(obama_vs_mccain$Income, obama_vs_mccain$Turnout) # 直接用 plot() 畫出來,'$' 代表鎖定 Income 和 Turnout 這兩欄的資料來畫圖

執行結果為:

dataset

plot_1

以上圖表也可以用 with() 來完成


with(obama_vs_mccain, plot(Income, Turnout)) # with() 左邊放資料集,右邊放要畫進去的欄位

執行結果為:

plot_2

有沒有發現和第一種畫法不一樣的地方啊?沒錯,第二種的 x, y 軸會「乾淨」的呈現欄位名稱喔!另外 plot() 裡面左邊是 x 軸,右邊放 y 軸~ 另外,我們還可以幫上面的點點換個顏色、把點點換成其他符號、加上主標題、x, y 軸級距、單位等等。


with(obama_vs_mccain, plot(Income, Turnout, col='#ffb6c1')) # col 放顏色,可以用 16 進位代碼,也可以直接打上顏色的英文,有些有支援,例如 pink, purple 之類的

執行結果為:

p3


with(obama_vs_mccain, plot(Income, Turnout, col='#ffb6c1', pch=8)) # pch 是資料點的圖案,=之後放編號

執行結果為:

p4

plot() 預設會使用圓圈來標示資料點,我們可以透過 pch 參數來使用不同的資料點符號,可用的符號如下:

pch


with(obama_vs_mccain, plot(Income, Turnout, col='#ffb6c1', pch=8, main='Income & Turnout', xlab = 'Income ($US)', ylab='Turnout (%)', xlim=c(15000,45000), ylim=c(0,100)))

# main 是放主標題,xlab 和 ylab 放各自標題,lim 則是設定級距

執行結果為:

p5

ggplot()

除了非常簡易的 plot(),R 有另一個強大的繪圖工具,就是 ggplot2,我們繼續使用剛剛的資料集來看看兩者的差異吧!


library(ggplot2)
ggplot(obama_vs_mccain, aes(Income, Turnout)) +
  geom_point()

ggplot(obama_vs_mccain) +
  geom_point(aes(Income, Turnout)) # 與上面結果相同,只是把 aes 放後面

執行結果為:

p6

是不是看起來精細許多呢?它一樣能換顏色、圖案......


ggplot(obama_vs_mccain, aes(Income, Turnout)) +
  geom_point(color='#ffb6c1', shape=8) # shape 概念和 pch 一樣

執行結果為:

plus

我們還能用 facet_wrap() 來分割圖表,進行不同 variables 之間的比較。例如以下的 code 就是比較不同 Region 的 Income 和 Turnout 分佈情況。


ggplot(obama_vs_mccain, aes(Income, Turnout)) +
  geom_point() +
  facet_wrap(~ Region, ncol = 5)
 

執行結果為:

p7

再來,我們用不同的資料集來畫更多的圖吧!首先使用 mpg 這個資料集,內容是個廠牌汽車各項特點的比較。


ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = manufacturer)) 
  # color 代表以哪個欄位作為上色依據,會形成圖例在右側


ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, alpha = manufacturer, shape = manufacturer)) # alpha 為漸層,shape 可以不像 pch 那麼單調,放入欄位後可以此欄位為依據
  
  
ggplot(data = mpg) + 
  geom_smooth(mapping = aes(x = displ, y = hwy)) # 用 geom_smooth 換成線條
  
  
ggplot(data = mpg) + 
  geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv)) # 同時畫多條線
  
ggplot(data = mpg) + 
  geom_smooth(mapping = aes(x = displ, y = hwy, color = drv)) # 換個顏色
  
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = class))+
  geom_smooth(mapping = aes(x = displ, y = hwy)) # 同時用 point 和 smooth 表現

執行結果為:

p8

p8

p9

p10

p11

p12

換個資料集畫不同的圖吧!這次用的是鑽石的資料集~


ggplot(data=diamonds) + 
  geom_bar(aes(cut, price), stat='identity') # geom_bar 是長條圖
  
ggplot(data=diamonds) + 
  geom_bar(aes(cut, price), stat='identity') +
  coord_flip() # 換邊
  
ggplot(data=diamonds) + 
  geom_bar(aes(cut, price, fill=clarity), width=0.5, stat='identity') # fill 是填滿
  
ggplot(data=diamonds) + 
  geom_bar(aes(cut, price, fill=clarity), width=0.5, stat='identity', position='dodge') # 使用 dodge 排列

執行結果為:

13

14

15

16


bar <- ggplot(data = diamonds) + 
  geom_bar(
    mapping = aes(x = cut, fill = cut), 
    show.legend = FALSE,
    width = 1
  ) + 
  theme(aspect.ratio = 1) +
  labs(x = NULL, y = NULL) #x, y name

bar + coord_flip()

bar + coord_polar() # 雞冠圖


ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + 
  geom_boxplot() # 盒狀圖

執行結果為:

17

18

19

畫個地圖吧~


library(maps)

nz = map_data('nz')

ggplot(nz, aes(long, lat, group = group)) +
  geom_polygon(fill = "white", colour = "black")

執行結果為:

20

今天就先到這邊,R 還有許多圖表畫法等但大家發掘喔~可以參考這邊?(https://r-graph-gallery.com/)

明天要和大家介紹文字雲喔~~


上一篇
Day 7 把文字裝成一袋?Bag of Word (BoW) & TF-IDF 在 NLP 中的應用
下一篇
Day 9 來自製簡單的文字雲
系列文
語言學與NLP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言