羅德興老師的教學歷程檔案 - 109-2 資訊技術 - 主題B1:數據分析 (R語言) 教學資源
 

企業資訊與管理系
助理教授/日導
羅德興


歷程檔案 Portfolio

    主題B1:數據分析 (R語言) 教學資源

     



    數據分析 (R語言) 教學資源 請參考 教學歷程 <107-1 資訊科技大數據分析> 

    請參考 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="全球近五年人口成長率")
    全部共 0則留言
    登入帳號密碼代表遵守學術網路規範


    文章分類 Labels


    最新文章 Top10

    中華科技大學數位化學習歷程 - 意見反應