羅德興老師的教學歷程檔案 - 109-2 資訊技術 - 主題B1:數據分析 (R語言) 教學資源 |
|
|
主題B1:數據分析 (R語言) 教學資源
請參考 R語言 的基礎教學 以及 << ggplot 繪圖練習>> # ex-daimonds.r # https://blog.gtwang.org/r/ggplot2-tutorial-basic-concept-and-qplot/ # for R-3.5.1 # B3 setwd("d:/temp0922") getwd() # 安裝 ggplot2 套件 # 在使用 ggplot 繪圖之前,請先安裝 ggplot2 這個 R 套件, # 這個套件在 R 官方的套件庫中就有收錄,使用 install.packages 安裝即可: install.packages("ggplot2") # 接著載入 ggplot2 套件: library(ggplot2) # qplot 函數 # qplot 函數是 ggplot 系統中最基本的一個繪圖函數,它的設計類似傳統 plot 函數, # 方便讓初次使用 ggplot 的使用者快速上手,繪製一些基本的圖形。 # 這裡我們以一組 R 內建的 diamonds 資料集來示範 qplot 的用法, # 這組資料預設就內建在 ggplot2 套件中,在 ggplot2 套件安裝後即可使用。 # diamonds 資料集中包含了大約五萬多顆鑽石的資料, # 其中包含鑽石的 4C 品質指標,亦即顏色(color)、淨度(clarity)、切磨(Cut)與克拉(carat), # 另外還包含了幾個鑽石的尺寸資訊,詳細說明可參考 diamonds 的線上手冊。 # 首先我們用 head 稍微看一下 diamonds 資料集中的實際資料: head(diamonds) # 由於 diamonds 資料集的資料有五萬多筆,有些圖形會需要使用較少量的資料做示範, # 所以我們另外抽樣出 100 筆,儲存在 diamonds.subset 這個 data frame 中: set.seed(5) diamonds.subset <- diamonds[sample(nrow(diamonds), 100), ] # 基本用法 # qplot 的用法與傳統的 plot 類似,前兩個參數分別是 x 軸與 y 軸的座標資料: qplot(diamonds$carat, diamonds$price) # 散佈圖 # 另外也可以使用 data 參數指定資料來源的 data frame,這種方式會讓指令比較簡潔: qplot(carat, price, data = diamonds) # 散佈圖 # 這張圖顯示了鑽石的價格(price)與它的克拉數(carat)有明顯的關係, # 不過這個關係看起來不是線性的,我們可以將變數透過對數(log)轉換一下: qplot(log(carat), log(price), data = diamonds) # 散佈圖 # 經過對數轉換之後,看起來就呈現比較好的線性關係。 # 我們也可以使用多個變數進行運算之後,作為 x 軸或 y 軸的座標值: qplot(carat, x * y * z, data = diamonds) # 散佈圖 # 這裡我們拿 diamonds 的 x、y、z 三個變數相乘,當作 y 軸的座標,畫出與 carat 的關係圖, # 看起來大部分鑽石的體積都跟重量成正比,也就是密度都差不多,不過也有許多 outliers。 # 圖形樣式 # qplot 有提供一些參數可以讓使用者更改資料點的顏色、大小等樣式,而且在使用上會比傳統的 plot 函數更方便, # 在使用 plot 更改資料點的樣式時,使用者必須自行將類別型的資料轉換為 plot 可以接受的數值或名稱 # (例如 red、blue 等),而 qplot 則是可以自動處理這些繁瑣的動作,並且在圖形上加入圖示說明(legend)。 # 假設我們想要依據 diamonds 中的 color 變數來替資料點著色,區別不同顏色的鑽石,可以使用 color 參數: qplot(carat, price, data = diamonds.subset, color = color) # 散佈圖 # 若要以資料點的形狀區分資料,可使用 shape: qplot(carat, price, data = diamonds.subset, shape = cut) # 散佈圖 # 資料點的顏色與形狀都是屬於 ggplot 系統上的美學對應。 # 這裡的鑽石資料總共有五萬多筆,一次畫在同一張圖形上會造成大量的資料點重疊問題,看不出實際的資料分佈, # 我們將資料點加上透明度的參數,這樣可以比較容易辨識實際的資料分佈情況: qplot(carat, price, data = diamonds, alpha = I(1/10)) # 散佈圖 qplot(carat, price, data = diamonds, alpha = I(1/100)) # 散佈圖 # 隨著資料類型的不同,適合的資料呈現方式也不同,例如類別型的資料就適合使用顏色、形狀來區隔, # 而若是連續型的資料則可以使用資料點的大小來表示; # 至於資料量的多寡也會有影響, # 資料量多的時候,除了使用透明度的技巧,也可以考慮以繪圖面(facet)繪出多張圖形的方式, # 避免過多的資料擠在同一張圖上難以區分。 可另參閱: (1) http://rstudio-pubs-static.s3.amazonaws.com/480318_8fc11dea44ab47609319d4001f64c0c5.html (2) https://www.rpubs.com/chiahung_tsai/lecture05012018 (3) https://www.rpubs.com/chiahung_tsai/lecture05012018 (4) https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/ggplotvis.html (5) setwd("d:/temp0922") getwd() install.packages("ggplot2") install.packages("dplyr") # 載入 packages library(ggplot2) library(dplyr) # 值得一提的是它們都是同屬於 TidyVerse 的一員。 # TidyVerse 是 R 裡頭常被用來做資料科學的 packages 的集合, # 以 Python 來說大概就像是 Pandas + Matplotlib + Numpy 的感覺吧。 # 載入資料 + 簡單資料處理 # 如下註解所示,這邊將資料集讀入, # 做一些簡單的資料型態轉變後選擇一部分的資料集(subset)來做之後的視覺化: # 資料下載處 https://www.kaggle.com/residentmario/ramen-ratings # 將 CSV 檔案載入成資料框架(dataframe) # 列出繪圖的 8 種顏色,使用 pie() 函數,和 col 參數 # pie(rep(1,8), col = 1:8, main = "Colors") # 3D 繪圖函數 (from 原網頁 B4) setwd("d:/temp0922") f <- function(x,y){ exp(-2/3*(x^2-x*y+y^2))/pi/sqrt(3) } test <- function(){ x<-seq(-3,3,0.1); y<- x z <- outer(x,y,f) par(mfrow=c(2,2), mai=c(0.3, 0.2, 0.3, 0.2)) persp(x,y,z, main="透視圖") persp(x,y,z, theta=60, phi=30, box=T, main="調整角度 theta=60, phi=30, box=T") contour(x,y,z,main="等高線圖") image(x,y,z, main="色彩影像圖") } test() # (6) 地圖 + 資料視覺化 setwd("d:/temp0922") population_records <- readLines("API_SP.POP.TOTL_DS2_en_csv_v2_2106202.csv")[-(1:4)] population_data <- read.csv(text=population_records, header = TRUE) # Check the data. str(population_data) population_data$Growth.5.Year <- ((population_data$X2014 - population_data$X2009) / population_data$X2014) * 100 install.packages("rworldmap") library(rworldmap) mapped_data <- joinCountryData2Map(population_data, joinCode = "ISO3", nameJoinColumn = "Country.Code") par(mai=c(0,0,0.2,0),xaxs="i",yaxs="i") # 全球近五年人口成長率 mapCountryData(mapped_data, nameColumnToPlot = "Growth.5.Year", mapTitle="全球近五年人口成長率")
|
|
中華科技大學數位化學習歷程 - 意見反應 |