2023年1月24日 星期二
RWEPA | shiny企業實務應用 第1集-白話shiny
2022年10月22日 星期六
shiny for Python (Python 使用 shiny 模組教學)
Python 程式使用 shiny 模組執行結果:
R語言的 shiny 套件可以建立跨平台的互動式網頁,今年(2022)RStudio 研討會宣佈 shiny for Python, 表示在 Python 環境亦可執行 shiny 建立互動式網頁。
PyPI shiny: https://pypi.org/project/shiny/
Youtube 說明:
【謝謝各位大大幫忙按 訂閱、開啟小鈴鐺】
PDF講義大綱:
- RWEPA 簡介
- 資料分析架構 --> APC方法
- 資料分析與視覺化應用
- shiny 簡介
- shiny for Python 實作篇1 - my_app
- shiny for Python 實作篇2 – 01_hello
- 結論
https://github.com/rwepa/shiny_python/blob/main/shiny_python_tutorial.pdf
Python 程式:
https://github.com/rwepa/shiny_python/blob/main/pyshiny_01_hello.py
檔案架構:
- shiny 一般以資料夾方式儲存, 本例為 pyshiny_01_hello 資料夾
- Python 主程式: pyshiny_01_hello.py, 程式名稱不一定是 app.py
- Python 主程式路徑: D:\shinydemo\pyshiny_01_hello\pyshiny_01_hello.py
執行方式:
Windows 開啟命令提示字元,輸入以下內容:
- d:
- cd shinydemo
- shiny run --reload pyshiny_01_hello/pyshiny_01_hello.py
- 瀏覽器輸入 http://localhost:8000/
參考資料:
- RWEPA: http://rwepa.blogspot.com/
- RWEPA shiny: http://rwepa.blogspot.com/search?q=shiny
- Shiny for R: https://shiny.rstudio.com/
- Shiny for Python: https://shiny.rstudio.com/py/
- shiny for Python 實作篇2 – 01_hello 程式碼: https://github.com/rwepa/shiny_python
# end
2022年7月2日 星期六
Python Orange-Associate Tutorial
主題: Python Orange - 關聯規則教學
本篇說明 Python 的 Orange 模組中, 外掛 Associate 的使用, 包括建立頻繁項目集與關聯規則.
感謝 Chen-Yao 提供此問題.
- R: arules package - 提供資料探勘中關聯規則apriori algorithm
- R: arules package -北風資料庫操作篇
- 第 9 章 關聯規則應用, Python 程式設計-李明昌 免費電子書
- RWEPA
2022年5月29日 星期日
iPAS - Big Data Analyst - Free Course
iPAS - 巨量資料分析師認證 - 免費線上參考課程
講師:李明昌
考試網址:https://www.ipas.org.tw/bda/
巨量資料分析師-資料導向程式設計(一)
網址:https://collegeplus.itri.org.tw/course/1161
單元一:資料類型與物件
單元二:資料庫概念(含NoSQL)
單元三:資料匯入與匯出
巨量資料分析師-資料導向程式設計(二)
網址:https://collegeplus.itri.org.tw/course/1162
單元一:程式設計類型
單元二:自訂函數與控制敘述
單元三:程式除錯與效能提升方法
巨量資料分析師-資料處理與分析概論(一)
網址:https://collegeplus.itri.org.tw/course/1165
單元一:資料組織與清理(1)
單元二:資料組織與清理(2)
單元三:資料摘要與彙總(1)
單元四:資料摘要與彙總(2)
單元五:屬性轉換與萃取(1)
單元六 : 屬性轉換與萃取(2)
單元七 : 巨量資料處理概念(1)
單元八 : 巨量資料處理概念(2)
巨量資料分析師-資料處理與分析概論(二)
網址:https://collegeplus.itri.org.tw/course/1166
單元一:統計分析基礎(1)
單元二:統計分析基礎(2)
單元三:統計分析基礎(3)
單元四:探索式資料分析與非監督式學習(1)
單元五:探索式資料分析與非監督式學習(2)
單元六:線性模型與監督式學習(1)
單元七 : 線性模型與監督式學習(2)
# end
2021年7月17日 星期六
R data analysis, visualization, machine learning course
近日公佈二門課程,歡迎各位R友參考。
課程1:R入門資料分析與視覺化應用
時間:7小時28分鐘,附中文字幕
網址:https://mastertalks.tw/products/r?ref=MCLEE

課程2:R 商業預測應用
時間:8小時53分鐘,附中文字幕
網址:https://mastertalks.tw/products/r-2?ref=MCLEE
R語言入門及應用組合包
二門合購優惠價77折:4,728元 (價格以網站公告為主)
#R
#tutorial
#visualization
#bigdata
#machine learning
#prediction
#programming
2021年6月6日 星期日
R與實驗設計應用 (Design Of Experiments with R)
主題
R與實驗設計應用
大綱
- 實驗設計簡介
- R, RStudio簡介
- 一因子實驗-變異數分析
- 隨機化完全區集設計
- 因子設計
- 2^3 因子設計
- 反應曲面法
執行成果
- 第1章 實驗設計簡介, 第2章 R, RStudio簡介-11分27秒
- 第3章.一因子實驗-變異數分析-23分10秒
- 4.隨機化完全區集設計-10分53秒
- 5.因子設計-14分22秒
- 6.2^3因子設計-10分37秒
- 7.反應曲面法-10分12秒
程式碼,講義下載
Github: https://github.com/rwepa/DataDemo/blob/master/R_Design_Of_Experiments.R
PDF: https://github.com/rwepa/DataDemo/blob/master/R_Design_Of_Experiments.pdf
參考資料
- R基礎篇 - 國立台北商業技術學院上課教材(238頁,2011.7.4), http://rwepa.blogspot.com/2013/01/r-201174.html
- R入門資料分析與視覺化應用(中文,字幕), https://courses.mastertalks.tw/courses/R-teacher
- R商業預測與應用(中文,字幕), https://courses.mastertalks.tw/courses/R-2-teacher
- 圖例中顯示點線混合符號legend, http://rwepa.blogspot.com/2017/08/legend.html
- 5.Douglas C. Montgomery, Design and Analysis of Experiments, 10th Edition, Wiley, 2020. https://www.amazon.com/Design-Analysis-Experiments-Douglas-Montgomery-ebook/dp/B07ZN7SRT5
# end
2020年6月9日 星期二
2020 R語言資料物件操作與線性模型應用 直播課程+ 線上Q&A
課程網址
課程日期
正式直播課程:2020/06/23 (二) 14:00-15:30 (13:30系統開放入場)課前測試設備:2020/06/22 (一) 14:00-15:00 (學員可自由參加)
課程目標
1.理解企業在進行資料分析時,如何善用R語言出關鍵資料,分析成果。2.完成課程後,能夠將所學案例實際應用在職場中,達到立即成效。
3.擺脫熟背R函數的困境,直覺式使用R語言進行資料科學運算。
課程對象
1.使用R語言進行資料科學的部門主管、資訊人員、行政人員2.想提升R語言資料科學應用能力者(無需程式設計能力)
2020年2月13日 星期四
2020新型冠狀病毒視覺化
# COVID-19
# 新型冠狀病毒
# 視覺化
# visualization
# get 函數
# leaflet 套件
本篇文章說明新型冠狀病毒全球分佈視覺化分析
參考資料: https://systems.jhu.edu/research/public-health/ncov/
資料集: https://github.com/CSSEGISandData/COVID-19
- 使用 leaflet套件, 使用者可以與視覺化地圖建立互動式操作.
- get {base} 函數可將字串轉換為欄位名稱
- aggregate {stats} 可計算每個國家群組之小計
2019年11月22日 星期五
R入門資料分析與視覺化應用, R商業預測與應用-線上課程
面對大數據時代的來臨,如何善用免費R語進行資料分析與資料視覺化技術,建置企業智慧服務應用,從大數據之中找出潛在樣式或偵測出異常特性,以做為企業組織策略發展、尋求突破與企業創新服務,將是企業衝量經營績效與提升競爭力的重要基礎。本線上課程讓您學會分析商業資料與企業營運預測模型,建置R商業運算思維能力。
1. R入門資料分析與視覺化應用
https://mastertalks.thinkific.com/courses/R-teacher
2. R商業預測與應用
https://mastertalks.thinkific.com/courses/R-2-teacher
#MasterTalks-R線上課程
#資料分析關鍵八步
#資料視覺化應用
#商業預測應用
2019年11月4日 星期一
2019人工智慧與商業應用研討會
人工智慧(Artificial Intelligence,AI)不但是現今國際的趨勢,更隨著演算法的精進以及電腦設備的完備,成為現今人人不可不認識的議題。在各國積極投入於發展人工智慧技術與應用時,臺灣也不例外,行政院在2018年提出了「臺灣AI行動計畫」,希望透過臺灣既有優勢朝尖端智慧國家邁進。而AI從巨量資料、機器學習甚至深度學習等層面被廣泛的認識,不同領域關注的角度亦有所不同。
在商業環境中,企業更將著手透過人工智慧改善流程,且透過新穎思維提供更高品質的服務與產品,進而改變既有的經營文化。因此本屆「2019年人工智慧與商業應用研討會」,將邀請各方學者專家,將創新思維融入人工智慧技術,並結合於商業管理、學習與教育、智慧製造、實務案例分享等專業議題,探討更多未來發展,期待對與會者有所啟發。
研討會日期:
2019年11月15日(五) 上午9點
研討會地點:
國立臺北商業大學 承曦樓十樓國際會議廳
台北市中正區濟南路一段321號
主辦單位:國立臺北商業大學管理學院
合辦單位:東吳大學巨量資料管理學院
網站: http://ms.ntub.edu.tw/~AI_conference/index.html
# end
2019年10月13日 星期日
R語言大數據營運煉金術課程-開課日期12/6,12/13
R語言大數據營運煉金術課程公告
課程名稱: R語言大數據營運煉金術上課地址:工研院產業學院 台北學習中心 (實際地點以上課通知為準!)
上課時數:2天合計12小時
起迄日期:2019-12-06, 2019-12-13
聯絡資訊:工研院產業學院 顏嘉瑩 02-2370-1111分機319, 提供結訓證書
課程特色/目標:
- 熟悉R語言/RStudio軟體操作
- 理解資料處理技能
- 視覺化技術與預測技術運用
課程網址:
https://college.itri.org.tw/course/all-events/D3AF2CE8-8098-4BF1-B32D-2E9174A4375E.html
2019年9月13日 星期五
資料集與使用範例
內容包括 使用R進行 gfc.csv 視覺化範例
資料下載: https://github.com/rwepa/DataDemo
Open Data 下載:
# 政府資料開放平台 https://data.gov.tw/
# UCI Machine Learning Repository https://archive.ics.uci.edu/datasets
# Google Dataset Search https://datasetsearch.research.google.com/
# Kaggle Dataset https://www.kaggle.com/datasets
主題:各鄉(鎮、市、區)行政區域界線圖資, 資料顆粒度較細.
https://data.gov.tw/dataset/7441
# 直轄市、縣市界線(TWD97經緯度)
主題:各直轄市以及縣(市)行政區域界線圖資, 資料顆粒度較大.
https://data.gov.tw/dataset/7442
2018年10月27日 星期六
主題式地圖(Thematic map) - 政府開放資料為例
# 主題式地圖
# Thematic map
# 開放式資料
# open data
# 地圖資料與社會經濟資料合併
# rgdal 套件
# tmap 套件
2022.7.28 更新R程式碼
主題
步驟1:下載社會經濟開放資料
步驟2:下載地圖資料
步驟3:匯入地圖資料至R
步驟4:匯入臺北市住宅竊盜點位資訊資料
步驟5:將臺北市住宅竊盜點位資訊整合至twn.taipei@data
步驟6:臺北市住宅竊盜分佈圖
步驟1:下載社會經濟開放資料
本例以臺北市住宅竊盜點位資訊為例,資料筆數;1945,欄位個數:5,欄位名稱:編號,案類,發生(現)日期,發生時段,發生(現)地點。下載檔案:「臺北市10401-10709住宅竊盜點位資訊.csv」 。下載網址:https://data.gov.tw/dataset/73886,參考圖-1,圖-2說明。
圖1-開放資料-臺北市住宅竊盜點位資訊
步驟2:下載地圖資料
- .shp:圖形格式,用於儲存地圖元素的幾何資料。
- .shx:— 圖形索引格式,即幾何資料索引。記錄每一個幾何資料shp檔案之中的位置,能夠加快向前或向後搜尋幾何資料的效率。
- .dbf:屬性資料格式,以dBase IV的資料表格式儲存每個幾何形狀的屬性資料。
- .prj:圖形格式.shp檔案中幾何資料所使用的經緯度座標系統。
步驟3:匯入地圖資料至R
library(rgdal)
library(tmap)
# 匯入地理資料 readOGR {rgdal}
twn <- readOGR(dsn="C:/rdata/mapdata201805311056", layer="TOWN_MOI_1070516", encoding="UTF-8")
head(twn@data) # 中文亂碼
# 中文亂碼轉換 iconv {base}
twn@data$COUNTYNAME <- iconv(twn@data$COUNTYNAME, from = "UTF-8", to="UTF-8")
twn@data$TOWNNAME <- iconv(twn@data$TOWNNAME, from = "UTF-8", to="UTF-8")
head(twn@data) # 中文正常顯示
names(attributes(twn)) # 7個屬性
summary(twn) # 資料摘要
names(twn) # 7個欄位
class(twn) # SpatialPolygonsDataFrame
str(twn@data) # 368*7
# 篩選臺北市地理資料
twn.taipei <- twn[which(twn@data$COUNTYNAME == "臺北市"), ]
twn.taipei@data
str(twn.taipei@polygons[1])
str(twn.taipei@polygons[5])
步驟4:匯入臺北市住宅竊盜點位資訊資料
theft <- read.table("臺北市10401-10709住宅竊盜點位資訊.csv", header=TRUE, sep=",", stringsAsFactors=FALSE) # 2054*5# 將發生.現.日期由民國年轉為西元年
theft$發生.現.日期 <- as.Date(unlist(lapply(theft$發生.現.日期, function(x) {
if (nchar(x) == 6) return(paste0(as.numeric(substr(x,1,2))+1911, "-", substr(x,3,4), "-", substr(x,5,6)))
if (nchar(x) == 7) return(paste0(as.numeric(substr(x,1,3))+1911, "-", substr(x,4,5), "-", substr(x,6,7)))
})))
# 新增行政區欄位
# substr 函數與 Excel =MID函數 類似, 取出部分字串
theft$行政區 <- substr(theft$發生.現.地點,4,6)
# 篩選2018年&台北市資料
theft.2018 <- theft[theft$發生.現.日期 >= as.Date("2018-01-01") & substr(theft$發生.現.地點,1,3) == "台北市" ,] # 247*6
# 樞紐分析各行政區住宅竊盜次數小計
theaft.area <- aggregate(案類~行政區, data=theft.2018[c(2,6)], length)
names(theaft.area) <- c("行政區", "住宅竊盜發生數")
summary(theaft.area)
步驟5:將臺北市住宅竊盜點位資訊整合至twn.taipei@data
# merge函數中,sort參數須設定為FALSE,否則繪圖位置會有錯誤twn.taipei@data <- merge(twn.taipei@data, theaft.area, by.x = "TOWNNAME", by.y = "行政區", sort=FALSE)
twn.taipei@data
步驟6:臺北市住宅竊盜分佈圖
# method 1 採用 plot{graphics}住宅竊盜發生數.color <- cut(twn.taipei@data$住宅竊盜發生數,
breaks=c(0,10,15,20,30,Inf),
labels=c("10以下", "11~15", "16~20", "21~30", "31以上"))
# 建立彩色調色盤(color palette)
# 內建調色盤 rainbow, heat.colors, terrain.colors, topo.colors, cm.colors, 本例以heat.colors為主
twn.taipei@data$Col <- heat.colors(5)[as.numeric(住宅竊盜發生數.color)]
plot(twn.taipei, col=twn.taipei@data$Col, main="2018年臺北市住宅竊盜分佈圖")
text(coordinates(twn.taipei)[,1], coordinates(twn.taipei)[,2], twn.taipei$TOWNNAME, cex=0.7)
legend("topright", legend=levels(住宅竊盜發生數.color), fill=twn.taipei@data$Col, col= heat.colors(5), title="住宅竊盜發生數")
# method 2 採用 qtm{tmap}
qtm(shp=twn.taipei, fill="住宅竊盜發生數", text="TOWNNAME", fill.title="住宅竊盜發生數", title="2018年臺北市住宅竊盜分佈圖")
qtm(shp=twn.taipei, fill="住宅竊盜發生數", text="TOWNNAME", fill.title="住宅竊盜發生數", title="2018年臺北市住宅竊盜分佈圖", fill.palette="Blues")
qtm(shp=twn.taipei, fill="住宅竊盜發生數", text="TOWNNAME", fill.title="住宅竊盜發生數", title="2018年臺北市住宅竊盜分佈圖", fill.palette="Greens")
# title: 主題式地圖(Thematic map)-以政府開放資料為例
# date: 2018.10.28
# 本例說明考量社會經濟等開放式資料,輔以主題式繪圖方式,提升資料視覺化品質,使於資料呈現與溝通。
# 步驟1:
# 下載社會經濟等開放式資料,本例以臺北市住宅竊盜點位資訊為例,資料筆數;1945,欄位個數:5,欄位名稱:編號,案類,發生(現)日期,發生時段,發生(現)地點。
# 下載網址:https://data.gov.tw/dataset/73886
# 步驟2:下載地圖資料
# 本例考量分析台北市各區資料,因此下載第一項「 鄉鎮市區界線(TWD97經緯度)」,下載檔案為「 mapdata201805311056.zip」,解壓縮為「C:\rdata\mapdata201805311056」資料夾
# 下載世界地圖
# http://www.diva-gis.org/gdata
# 步驟3:匯入地圖資料至R
# 使用 rgdal 套件的 readOGR函數 以匯入地圖資料,使用 tmap 套件以製作主題式地圖
library(rgdal)
library(tmap)
# 匯入地理資料
twn <- readOGR(dsn="C:/rdata/mapdata201805311056", layer="TOWN_MOI_1070516", encoding="UTF-8")
head(twn@data) # 中文亂碼
# twn <- readOGR(dsn="C:/rdata/TWN_adm", layer="TWN_adm1", encoding="UTF-8")
head(twn@data) # 中文亂碼
names(twn@data)
# 中文亂碼轉換 iconv
twn@data$COUNTYNAME <- iconv(twn@data$COUNTYNAME, from = "UTF-8", to="UTF-8")
twn@data$TOWNNAME <- iconv(twn@data$TOWNNAME, from = "UTF-8", to="UTF-8")
head(twn@data) # 中文正常顯示
names(attributes(twn)) # 7個屬性
summary(twn) # 資料摘要
names(twn) # 7個欄位
class(twn) # SpatialPolygonsDataFrame
str(twn@data) # 368*7
# 篩選臺北市地理資料
twn.taipei <- twn[which(twn@data$COUNTYNAME == "臺北市"), ]
twn.taipei@data
str(twn.taipei@polygons[1])
str(twn.taipei@polygons[5])
# 步驟4:匯入臺北市住宅竊盜點位資訊資料
theft <- read.table("臺北市10401-10709住宅竊盜點位資訊.csv", header=TRUE, sep=",", stringsAsFactors=FALSE) # 2054*5
# 將發生.現.日期由民國年轉為西元年
theft$發生.現.日期 <- as.Date(unlist(lapply(theft$發生.現.日期, function(x) {
if (nchar(x) == 6) return(paste0(as.numeric(substr(x,1,2))+1911, "-", substr(x,3,4), "-", substr(x,5,6)))
if (nchar(x) == 7) return(paste0(as.numeric(substr(x,1,3))+1911, "-", substr(x,4,5), "-", substr(x,6,7)))
})))
# 新增行政區欄位
theft$行政區 <- substr(theft$發生.現.地點,4,6)
# 篩選2018年&台北市資料
theft.2018 <- theft[theft$發生.現.日期 >= as.Date("2018-01-01") & substr(theft$發生.現.地點,1,3) == "台北市" ,] # 247*6
# 樞紐分析各行政區住宅竊盜次數小計
theaft.area <- aggregate(案類~行政區, data=theft.2018[c(2,6)], length)
names(theaft.area) <- c("行政區", "住宅竊盜發生數")
summary(theaft.area)
# 步驟5:將臺北市住宅竊盜點位資訊資料整合至 twn.taipei@data
# merge函數中,sort參數須設定為FALSE,否則繪圖位置會有錯誤
twn.taipei@data <- merge(twn.taipei@data, theaft.area, by.x = "TOWNNAME", by.y = "行政區", sort=FALSE)
twn.taipei@data
# 步驟6:臺北市住宅竊盜分佈圖
# method 1 採用 plot{graphics}
住宅竊盜發生數.color <- cut(twn.taipei@data$住宅竊盜發生數,
breaks=c(0,10,15,20,30,Inf),
labels=c("10以下", "11~15", "16~20", "21~30", "31以上"))
# 建立彩色調色盤(color palette)
# 內建調色盤 rainbow, heat.colors, terrain.colors, topo.colors, cm.colors, 本例以heat.colors為主
twn.taipei@data$Col <- heat.colors(5)[as.numeric(住宅竊盜發生數.color)]
plot(twn.taipei, col=twn.taipei@data$Col, main="2018年臺北市住宅竊盜分佈圖")
text(coordinates(twn.taipei)[,1], coordinates(twn.taipei)[,2], twn.taipei$TOWNNAME, cex=0.7)
legend("topright", legend=levels(住宅竊盜發生數.color), fill=twn.taipei@data$Col, col= heat.colors(5), title="住宅竊盜發生數")
# method 2 採用 qtm{tmap}
qtm(shp=twn.taipei, fill="住宅竊盜發生數", text="TOWNNAME", fill.title="住宅竊盜發生數", title="2018年臺北市住宅竊盜分佈圖")
qtm(shp=twn.taipei, fill="住宅竊盜發生數", text="TOWNNAME", fill.title="住宅竊盜發生數", title="2018年臺北市住宅竊盜分佈圖", fill.palette="Blues")
qtm(shp=twn.taipei, fill="住宅竊盜發生數", text="TOWNNAME", fill.title="住宅竊盜發生數", title="2018年臺北市住宅竊盜分佈圖", fill.palette="Greens")
# end
2018年9月26日 星期三
R軟體教學影片
參考R教學-基礎篇影片說明
http://web.ydu.edu.tw/~alan9956//R/R_20110704/R_demo.htm
注意: 限育達校內IP, 整理中...
# end
2018年9月23日 星期日
2018人工智慧與資料科學應用研討會
2018人工智慧與資料科學應用研討會
2018年4月7日 星期六
R資料匯入與匯出
R資料匯入與匯出
# read.table# read.csv
# read.fwf
# 檔首無BOM
# readxl 套件
# RODBC 套件
# lapply
# do.call
本篇說明資料匯入與匯出。首先介紹ETL概念,其次介紹常用的資料檔案,包括文字檔案、Excel檔案、資料庫資料、JSON檔案。資料庫的匯入將以Microsoft SQL Server說明為主。最後以單一檔案較大者的「大型資料」匯入與檔案數目較多者的「大量資料」匯入等議題做為本篇的結束。
1. ETL簡介
隨著科技的進步,企業經常面對資料處理、轉換或整合等應用。「ETL (Extract-Transform-Load)擷取轉換載入」是資料分析中的基礎的應用,最早興起於1970年資料倉儲中資料庫的處理程序。ETL表示資料由資料來源端擷取 (Extract) 出來,經過轉換 (Transform),再載入 (Load)到目的端的資料傳輸整體過程。進行ETL程序時,常用串流方式方法避免資料讀取時記憶體耗盡,參考圖1所示。
擷取:從各種不同的資料來源中,將資料擷取出來。資料來源包括交易型資料庫,同質資料與異質資料來源,資料擷取具有以下特性:
- 可能有各式各樣的資料來源和不同的資料格式,在利用程式語言開發或使用現有工具時,必須將來源資料轉換成共同資料格式。
- 擷取出來的資料,比對其格式和結構是否符合所需,例如:是固定欄位長度內容的資料、還是用區隔符號定義的資料。
- 擷取出來的資料若不符合所需,則依照相對應的規則以決定該採取何種反應,如:另外紀錄錯誤問題並發出警告,但整個ETL流程仍繼續執行。
- ETL作業能擷取一個檔案或同時進行多個來源端的資料擷取。
轉換:對資料進行適當的轉換,如型態轉換、字串相連、彙總運算等,本階段會將資料儲存成適當的格式,以利事後查詢與分析。這個步驟在 ETL 中不一定需要執行。
資料轉換具有以下特性:
- 可針對Excel、HTTP Web Page、XML、PDF與 Binary data 資料格式等檔案格式進行資料轉換。
- 基於商業邏輯上的需求,必須依照應用程式資料的特性來分類、匯總、轉換資料型態;或是把經年累月所聚集的歷史資料來作合併、統計、分折及計算。
- 本階段的轉換元件與功能通常是最多元、最豐富的,往往也是決定ETL產品的重要考量之一。
- 資料轉換就是將所擷取出之資料,交付予資料轉換元件(例:log資料轉換元件),逐一並循序地依照所設計好的規則進行轉換。
- 載入:將資料載入目的端,目的端通常是為了報表產製及商業智慧分析而最佳化的資料倉儲。
2. 文字檔案
常用的文字檔案包括以逗號分隔值檔案(Comma-Separated Values File,簡稱CSV File),其檔案以純文字形式儲存數字和文字資料。CSV檔案亦稱為字元分隔值檔案(Character-Separated Values File),因為分隔字元也可以不是逗號,例:分號(;)、Tab符號(–>)、bar符號(|)與空白字元。CSV檔案具有以下特性:- 採用純文字,使用某個字元集,例:ASCII、Unicode、UTF-8或GB2312(簡體中文環境)等儲存。
- 每一橫列為一筆記錄組成。
- 每一筆記錄以分隔符號區分欄位。
- 每一筆記錄都具有相同的欄位順序。
- 在Windows環境中使用 Microsft Office Excel 等軟體執行 檔案\另存新檔\存檔類型\ 選取「CSV(逗號分隔)()*.csv」 \ 按儲存 即可儲存為CSV檔案。
- 開啟CSV檔案時,最後一列為空白列,該空白列須保留不可刪除,否則匯入至R/Python會有問題。參考圖2,其中第12列為空白列。
範例1:匯入production.csv檔案。
CSV檔案匯入與資料分析工作包括以下五大步驟:
步驟1 設定工作目錄:
setwd("C:/rdata")
getwd()
## [1] "C:/rdata"
步驟2 準備資料檔案:
本步驟為準備好即將匯入至R的資料檔案,一般初步使用建議將資料轉換為CSV檔案較方便於後續資料匯入。下載production.csv並儲存至C:\rdata。
資料來源:production.csv。
步驟3 匯入資料:
常用匯入資料為read.table函數,使用彈性較大,read.csv函數為限用CSV檔案。本例使用read.table函數以匯入CSV檔案。“production.csv”表示檔案名稱,header=TRUE表示第一列為資料欄名稱,sep=“,”表示資料以逗號區隔欄位,stringsAsFactors=FALSE表示不會將字串自動轉換為因子(Factor),而保持原字串資料型態。匯入至R之資料物件名稱為production,資料顯示為10筆,5個欄位。如果匯入資料產生亂碼情形,則可考慮以下三種解決方式:
- 使用記事本等軟體,將資料另存新檔且編碼設定為ANSI。
- 在read.table函數中加入 fileEncoding=“UTF-8”或適當編碼。
- 在read.table函數中加入 encoding=“UTF-8”或適當編碼。
production <- read.table("production.csv", header=TRUE, sep=",", stringsAsFactors=FALSE)
production
## 工號 生產日期 機台 生產量 目標量
## 1 1 2017/4/1 A 50 60
## 2 2 2017/4/1 A 60 60
## 3 2 2017/4/1 A 40 60
## 4 2 2017/4/2 B 70 100
## 5 3 2017/4/2 B 120 100
## 6 3 2017/4/3 B 80 100
## 7 4 2017/4/3 C 30 50
## 8 1 2017/4/4 C 35 50
## 9 4 2017/4/4 C 60 50
## 10 2 2017/4/4 C 80 50
步驟4 資料分析:
資料匯入完成後,首要步驟是分別使用str函數與summary函數進行資料結構理解與統計摘要分析。int表示整數(Integer),chr表示字串(String)或稱為字元(Chacter)。summary函數會輸出以下6個統計量:
- Min :最小值(Minimum)
- 1st Qu :25百分位數,符號 Q1
- Median :中位數,符號 Q2
- Mean :平均數
- 3rd Qu :75百分數位,符號 Q3
- Max :最大值(Maximum)
str(production)
## 'data.frame': 10 obs. of 5 variables:
## $ 工號 : int 1 2 2 2 3 3 4 1 4 2
## $ 生產日期: chr "2017/4/1" "2017/4/1" "2017/4/1" "2017/4/2" ...
## $ 機台 : chr "A" "A" "A" "B" ...
## $ 生產量 : int 50 60 40 70 120 80 30 35 60 80
## $ 目標量 : int 60 60 60 100 100 100 50 50 50 50
summary(production)
## 工號 生產日期 機台 生產量
## Min. :1.0 Length:10 Length:10 Min. : 30.0
## 1st Qu.:2.0 Class :character Class :character 1st Qu.: 42.5
## Median :2.0 Mode :character Mode :character Median : 60.0
## Mean :2.4 Mean : 62.5
## 3rd Qu.:3.0 3rd Qu.: 77.5
## Max. :4.0 Max. :120.0
## 目標量
## Min. : 50
## 1st Qu.: 50
## Median : 60
## Mean : 68
## 3rd Qu.: 90
## Max. :100
# 新增達成率欄位,計算方式為生產量/目標量
production$達成率 <- round((production$生產量/production$目標量)*100)
production
## 工號 生產日期 機台 生產量 目標量 達成率
## 1 1 2017/4/1 A 50 60 83
## 2 2 2017/4/1 A 60 60 100
## 3 2 2017/4/1 A 40 60 67
## 4 2 2017/4/2 B 70 100 70
## 5 3 2017/4/2 B 120 100 120
## 6 3 2017/4/3 B 80 100 80
## 7 4 2017/4/3 C 30 50 60
## 8 1 2017/4/4 C 35 50 70
## 9 4 2017/4/4 C 60 50 120
## 10 2 2017/4/4 C 80 50 160
# 繪製達成率統計圖
plot(production$達成率, xlab="人次", ylab="達成率(%)", main="2018年達成率統計圖", type="b", sub="製表:RWEPA, March 12, 2018")
步驟5 匯出分析結果:
最後步驟是將分析的結果,包括文字與圖檔等進行資料匯出,常用的文字資料匯出函數是write.table與R專用資料格式(RData)save函數。本例使用write.table函數 匯出成production.output.csv檔案,使用save函數匯出成production.output.RData。
write.table(production, file="production.output.csv", sep=",", row.names=TRUE)
save(production, file="production.output.RData")
如果文字檔案是採用固定寬定方式儲存,則匯入資料時可採用 read.fwf 函數匯入。例:固定寬度檔案名稱是 myfix.txt,資料寬度分別為1, 2, 3個空白字元, 4個字元,則匯入方法如下,其中 -3 表示跳過3行不讀取:
read.fwf("myfix.txt", widths = c(1, 2, -3, 4))
3. Excel檔案
Excel檔案是常用辦公室資料檔案格式,除了以Microsoft Office Excel軟體進行操作,另外可使用readxl套件匯入Excel檔案並進行資料操作處理。範例2:匯入 production.xlsx 檔案。
首先將範例1的 production.csv 另儲存成 production.xlsx。使用 excel_sheets函數理解工作表個數,使用 read_excel讀取工作表,其中mydf1,mydf2,mydf3結果皆相同。
library(readxl)
# 顯示工作表名稱
datasets <- "production.xlsx"
excel_sheets(datasets)
## [1] "production"
# 讀取Excel檔案
mydf1 <- read_excel(datasets) # 預設讀取第1個工作表
mydf2 <- read_excel(datasets, 1) # 指定第1個工作表
mydf3 <- read_excel(datasets, "production") # 指定工作表名稱
mydf1
## # A tibble: 10 x 5
## 工號 生產日期 機台 生產量 目標量
## <dbl> <dttm> <chr> <dbl> <dbl>
## 1 1.00 2017-04-01 00:00:00 A 50.0 60.0
## 2 2.00 2017-04-01 00:00:00 A 60.0 60.0
## 3 2.00 2017-04-01 00:00:00 A 40.0 60.0
## 4 2.00 2017-04-02 00:00:00 B 70.0 100
## 5 3.00 2017-04-02 00:00:00 B 120 100
## 6 3.00 2017-04-03 00:00:00 B 80.0 100
## 7 4.00 2017-04-03 00:00:00 C 30.0 50.0
## 8 1.00 2017-04-04 00:00:00 C 35.0 50.0
## 9 4.00 2017-04-04 00:00:00 C 60.0 50.0
## 10 2.00 2017-04-04 00:00:00 C 80.0 50.0
mydf2
## # A tibble: 10 x 5
## 工號 生產日期 機台 生產量 目標量
## <dbl> <dttm> <chr> <dbl> <dbl>
## 1 1.00 2017-04-01 00:00:00 A 50.0 60.0
## 2 2.00 2017-04-01 00:00:00 A 60.0 60.0
## 3 2.00 2017-04-01 00:00:00 A 40.0 60.0
## 4 2.00 2017-04-02 00:00:00 B 70.0 100
## 5 3.00 2017-04-02 00:00:00 B 120 100
## 6 3.00 2017-04-03 00:00:00 B 80.0 100
## 7 4.00 2017-04-03 00:00:00 C 30.0 50.0
## 8 1.00 2017-04-04 00:00:00 C 35.0 50.0
## 9 4.00 2017-04-04 00:00:00 C 60.0 50.0
## 10 2.00 2017-04-04 00:00:00 C 80.0 50.0
mydf3
## # A tibble: 10 x 5
## 工號 生產日期 機台 生產量 目標量
## <dbl> <dttm> <chr> <dbl> <dbl>
## 1 1.00 2017-04-01 00:00:00 A 50.0 60.0
## 2 2.00 2017-04-01 00:00:00 A 60.0 60.0
## 3 2.00 2017-04-01 00:00:00 A 40.0 60.0
## 4 2.00 2017-04-02 00:00:00 B 70.0 100
## 5 3.00 2017-04-02 00:00:00 B 120 100
## 6 3.00 2017-04-03 00:00:00 B 80.0 100
## 7 4.00 2017-04-03 00:00:00 C 30.0 50.0
## 8 1.00 2017-04-04 00:00:00 C 35.0 50.0
## 9 4.00 2017-04-04 00:00:00 C 60.0 50.0
## 10 2.00 2017-04-04 00:00:00 C 80.0 50.0
範例3:參考圖3,使用Excel開啟CSV檔案會有亂碼情形。
改善方式之一是考慮使用文字編輯軟體,修改編碼方式,本例使用免費軟體Notepad++,將編碼由原先的「編譯成UTF-8碼(檔首無BOM)」修改為「編譯成 UTF-8 碼」,再儲存檔案後使用Excel開啟即沒有亂碼,詳細參考圖4之設定。
4. 資料庫資料
關於微軟(Microsoft)大量結構性資料匯入與匯出,Microsoft SQL Server提供以下工具:
- bcp公用程式 (bulk copy program): 提供大量資料匯入與匯出功能,可以由使用者指定格式,在 Microsoft SQL Server 執行個體與資料檔案之間大量複製資料。
- BULK INSERT 陳述式:可將資料直接從資料檔案匯入至資料庫資料表或非資料分割的檢視,不提供匯出資料功能。
- BULK INSERT 陳述式與 INSERT…SELECT * FROM OPENROWSET(BULK…) 陳述式 :將大量資料檔案匯入到 SQL Server 資料表中,不提供匯出資料功能。
- SQL Server Data Tools (SSDT) 來執行 SQL Server 匯入和匯出精靈。
資料來源:https://docs.microsoft.com/zh-tw/sql/relational-databases/import-export/bulk-import-and-export-of-data-sql-server
R可採用 RODBC 套件與Microsoft SQL Server資料庫連結,其中 sqlQuery 函數可執行資料匯入至R/R物件寫入SQL資料庫,部分執行畫面參考圖5,詳細參考 RODBC 與 SQL Server 資料匯入與寫入。
5. JSON檔案
JSON(JavaScript Object Notation)是一種由Douglas Crockford 構想和設計、輕量級的資料交換語言,該語言以易於讓人閱讀的文字為基礎,用來傳輸由屬性值或者序列性的值組成的資料物件。儘管JSON是Javascript的一個子集,但JSON是獨立於語言的文字格式,並且採用了類似於C語言家族的一些習慣,詳細參考官方網站[http://www.json.org/]
資料來源:https://en.wikipedia.org/wiki/JSON。
JSON資料物件包括:
- 物件 object : {name:value}
- 陣列 array : [x1, x2, …]
JSON資料型態包括:
- 空值(null)。
- 邏輯值(true, false)暨布林值。
- 數值(number),沒有區分整數與具有小數點數。
- 字串(string)。
RJSONIO 套件提供以下二大函數,詳細參考函數線上說明:
- toJSON() : 轉換 R 物件為 JSON 字串。
- fromJSON() : 轉換 JSON物件為 R 物件, 資料來源包括 URL, File, R物件。
JSON資料參考圖1.4.6 JSON-錄影節目影片範例。
資料來源:http://vida.moc.gov.tw/VIDA411.ASP?ISSUEYM=10306
6. 大型資料
大型資料指的是單一檔案較大,使用傳統read.table或read.csv函數可能匯入時間教長,此時可使用data.table套件的fread函數以提升匯入效能,詳細參考以下圖7 大型資料範例。
上述大型資料亦可使用 bigmemory套件匯入資料,參考圖8 大型資料-bigmemory範例。
7. 大量資料
大量資料指的是檔案較多時,使用傳統 read.table或 read.csv函數逐一匯入較不方便,此時可使用 lapply函數,詳細參考以下大量資料範例,考慮將三個檔案,每個檔案是10列5行,合併為單一資料物件30列5行。
lapply 函數主要包括2個參數 lapply(資料物件, 函數),其回傳結果是串列(list):
- 第一個參數是須要處理的資料物件,一般是向量資料,本例 files 表示三個檔案路徑。
- 第二個參數是函數,本例是 read.table,後續 「header=TRUE, sep="," 」是配合 raed.table使用。
do.call 函數是將三個串列合併為一個資料框(data.frame)。
# 大量資料範例
working_path <- "C:/rdata"
setwd(working_path)
getwd()
## [1] "C:/rdata"
sample1 <- iris[sample(1:nrow(iris),10),]
sample2 <- iris[sample(1:nrow(iris),10),]
sample3 <- iris[sample(1:nrow(iris),10),]
write.table(sample1, file="sample1.csv", sep=",", row.names=FALSE)
write.table(sample2, file="sample2.csv", sep=",", row.names=FALSE)
write.table(sample3, file="sample3.csv", sep=",", row.names=FALSE)
files <- dir(getwd(), pattern="sample.*.csv", recursive=TRUE, full.names=TRUE)
files
## [1] "C:/rdata/sample1.csv" "C:/rdata/sample2.csv" "C:/rdata/sample3.csv"
tables <- lapply(files, read.table, header=TRUE, sep=",") # list
sample.all <- do.call(rbind, tables) # data.frame
str(sample.all)
## 'data.frame': 30 obs. of 5 variables:
## $ Sepal.Length: num 5.4 4.7 5.7 6.3 6.6 7 5 4.4 5.4 6.3 ...
## $ Sepal.Width : num 3.9 3.2 2.8 2.5 3 3.2 3.6 3 3 2.5 ...
## $ Petal.Length: num 1.7 1.3 4.1 5 4.4 4.7 1.4 1.3 4.5 4.9 ...
## $ Petal.Width : num 0.4 0.2 1.3 1.9 1.4 1.4 0.2 0.2 1.5 1.5 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 2 3 2 2 1 1 2 2 ...
# end