顯示具有 學習筆記 標籤的文章。 顯示所有文章
顯示具有 學習筆記 標籤的文章。 顯示所有文章

2016年9月7日 星期三

R學習筆記_資料處理(簡易的網路爬蟲 )

會使用到網路爬蟲,完全是因為驗證專案功能而想到的腳本。
因為WEB上的資料是非結構化資料又看到有人在網路上玩網路爬蟲,小弟就Google一下,發現rvest這個套件,使用起來真是簡單易懂呀,
對我而言它可以讀取HTML Tag與CSS,而且搜尋DOM物件的方式跟JQuery一模一樣,實在是神兵利器呀!於是小弟就手癢做了以下的測試。

下圖是小弟的資料來源網頁


使用rvest擷取網頁新聞的報導日期與標題
library(rvest)
news_url <- "http://news.ltn.com.tw/search?keyword=ubike&conditions=and&SYear=2016&SMonth=9&SDay=1&EYear=2016&EMonth=9&EDay=7"
dsTitle <- html(news_url) %>% html_nodes("#newslistul li a") %>% html_text()
dsDate <- html(news_url) %>% html_nodes("#newslistul li span") %>% html_text()
my_news <- data.frame(date = dsDate,title = dsTitle)
View(my_news)


執行結果如下圖,搞定收工



感想:R的rvest真是好物一枚呀,同時也見證了R套件的強大,當然小弟做這個測試除了擷取網路上的資料之外,還會利用工具串聯資料,讓資料會說話,阿~只能說資料好好玩喔!

2016年9月2日 星期五

R學習筆記_資料處理(如何將資料讀取與寫入資料庫_以SQL SERVER為例)

應用案例:承接上一個學習筆記,我們讀取U-Bike的Open Data到R,然而實務上在進行資料視覺化(就是報表或儀表板)我們會累積一定時間的資料量,此種情境建議將資料存入到資料庫。所以我就模擬了一個情境,將從網路上讀取U-Bike資料後,再將資料匯入到SQL SERVER。
首先將從台北市政府的OpenData讀取到R
#安裝packages:jsonlite與curl
install.packages("jsonlite", repos="http://cran.r-project.org")
install.packages('curl')
#匯入library:jsonlite
library(jsonlite)
#讀取UBike並轉回DataFream格式
dataUBike <- fromJSON("http://data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=ddb80380-f1b3-4f8e-8016-7ed9cba571d5")
在資料庫建立TABLE
USE [OpenDataDB]
GO
DROP TABLE [dbo].[tabUbike]
GO
CREATE TABLE [dbo].[tabUbike](
 [sno] [int] NULL,
 [sna] [varchar](30) NULL,
 [tot] [int] NULL,
 [sbi] [int] NULL,
 [sarea] [varchar](10) NULL,
 [mday] [varchar](20) NULL,
 [lat] [decimal](13, 10) NULL,
 [lng] [decimal](13, 10) NULL,
 [ar] [varchar](100) NULL,
 [sareaen] [varchar](20) NULL,
 [snaen] [varchar](100) NULL,
 [aren] [varchar](100) NULL,
 [bemp] [int] NULL,
 [act] [bit] NULL
) ON [PRIMARY]
GO
將讀取的資料寫入SQL SERVER
#將讀取的資料寫入SQL SERVER
library(RODBC)
conn <- odbcDriverConnect('driver={SQL Server};server=.;database=OpenDataDB;trusted_connection=true')
df <- dataUBike$result$results[c("sno","sna","tot","sbi","sarea","mday","lat","lng","ar","sareaen","snaen","aren","bemp","act")]
sqlSave(conn, df, tablename = "tabUbike", rownames=FALSE, append=TRUE)
close(conn);
查詢資料庫驗證資料庫寫入成功
另外也可以透過R從資料庫讀取資料。
#將讀取的資料寫入SQL SERVER
conn <- odbcDriverConnect('driver={SQL Server};server=.;database=OpenDataDB;trusted_connection=true')
data <- sqlQuery(conn, "SELECT * FROM tabUbike");
close(conn);

2016年8月26日 星期五

R學習筆記_資料處理(如何存取OpenData)

最近公司的案子剛好需要進行POC,於是小弟想了想認為使用U-Bike這個案例比較貼近大眾的生活,大家比較有共鳴。 小弟是這樣想的,我想要使用視覺化工具POWER BI(PS:小弟其實蠻喜歡與習慣使用T牌的BI工具)將U-Bike的資料進行視覺化。 要將資料視覺化第一步就是要把資料塞到視覺化工具,但U-Bike可是OpenData耶~那怎麼半呢? 實不相瞞小弟很想寫.NET Code,但想想居然下定要學R了,只好硬著頭皮Google方法,結果居然讓我找到了,而且方法還很簡單。 首先就是下載jsonlite這個套件,然後使用fromJSON將OpenData轉成data frame,接著這些資料你用怎麼使用就怎麼使用,小弟我是把它寫入到CSV檔。
#安裝packages:jsonlite與curl
install.packages("jsonlite", repos="http://cran.r-project.org")
install.packages('curl')
#匯入library:jsonlite
library(jsonlite)
#下載UBike的JSON檔案
dataUBike <- fromJSON("http://data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=ddb80380-f1b3-4f8e-8016-7ed9cba571d5")
#檢視資料欄位與內容
names(dataUBike$result$results)
head(dataUBike$result$results,10)
#將資料匯出成CSV
write.csv(dataUBike$result$results, file = "dataUBike.csv")
程式碼內容~有圖有真相
執行結果
使用POWER BI呈現 參考網址

2016年7月22日 星期五

R學習筆記_線性回歸(Linear Regression)

1.      EXCEL輸入資料

2.      使用EXCEL功能進行線性回歸(Linear Regression)

3.      顯示線性回歸的公式,並用公式預測六月銷售量與回推七月的廣告支出費

4.      將上述操作以R語言表示,可看出y=ax+bE xcel的結果相同。

5.      列印出詳細訊息

6.      使用R語言的predict函數進行預測分析,結果與EXCEL相同。

7.      使用R語言畫散佈圖,結果與EXCEL相同。



感想:可以用EXCEL來印證R語言程式撰寫的預測結果與圖形是否正確。

2016年5月7日 星期六

R學習筆記_資料分析(關聯性分析_correlation coefficient)

如果有兩組數值,其中一組數值的變化會影響另一個數值時,則可稱這兩組數值有相關聯,例如:身高與體重,人的體重會與身高成正比,當一個人長高體重也會隨之增加,這類的關聯關係稱為正相關。反之,如果當一個變數增加而另一變數下降則稱為負相關,例如:貨車載貨物越多,則每公升汽油可行駛的距離就會越少。
兩組數值變數向量之間的關聯性稱之為相關係數,相關係數的值介於1與-1之間,越靠近1代表正相關程度越高,反之越靠近-1則代表負相關程度越高。而越靠近0則代表兩數值之間的關係越微弱。
我們使用系統內建的iris物件進行關聯性分析,首先檢視iris物件的內容。
names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
假設我們想瞭解Sepal.Length(花萼長度)與Sepal.Width(花萼寬度)之關聯性,可使用cor()函數進行分析
cor(iris$Sepal.Length,iris$Sepal.Width)

上述結果可得知花萼長度與花萼寬度之間是負相關的關係。
分析Petal.Length(花瓣長度)與Petal.Width(花瓣寬度)之關聯性
cor(iris$Petal.Length,iris$Petal.Width)

上述結果可得知花瓣長度與花瓣寬度之間是高度正相關的關係
列出iris相關係數矩陣
cor(iris[-5])

由上可知每個變數之間之關聯係數。
此外兩兩變數之間的關聯性可用圖形來表示,我們可以使用pairs()函數畫出散點圖已顯示變數之間的關聯姓。
pairs(iris[-5])

R學習筆記_資料視覺化(直方圖_Histograms)

直方圖是將有順序性數值(例如:年齡)分為幾個群組,以年齡舉例,我們可以將年齡整理成一個21-25歲為一個群組,並計算該群組出現的頻率。
直方圖與Bar Chart(長條圖最大的區別是)長條圖的群組通常是無順序的內容(例如:顏色)。 所以Histograms的群組內容總是相連的,而Bar Chart是分開的,也因為Histograms是有連續性的,所以可以用來觀測所蒐集的數值資料的分佈情況,適用於判斷資料分佈的集中與分散趨勢。
我們使用hist函數來繪製Histograms。
age <-  c(21,32,22,22,24,23,19,41,20,19,19,25,26,31) # 建立圖形資料
hist(age,xlab = "age",col = "yellow",border = "blue") # 繪製histogram
此外我們可以透過參數xlim與ylim調整X軸與Y軸的間距。
age <-  c(21,32,22,22,24,23,19,41,20,19,19,25,26,31) # 建立圖形資料
hist(age,xlab = " age ",col = "green",border = "red", xlim = c(15,45), ylim = c(0,10), breaks = 5) # 繪製histogram

2016年5月1日 星期日

R學習筆記_資料處理(存取DataFrame)

新增欄位(Add Column)
prodinfor #檢視新增前的DataFrame
prodinfor$count <- c(2,7,3,10,33) #新增count 欄位
prodinfor #檢視新增後的DataFrame
新增資料(Insert Record)
Months <- c("August")
ProductRevenue <- c(700)
count <- c(50)
Prodinfor2 <- data.frame(Months, ProductRevenue, count) 
prodinforAll <- rbind(prodinfor, Prodinfor2)
prodinforAll
修改資料(Update Record)
prodinfor$ProductRevenue[1] <- 50
prodinfor
DataFrame合併(類似SQL的Join)
Months <- c("Mar","Apr","May","Jun","Jul","August")
IntMonths <- c("3","4","5","6","7","8")
dfMonth <- data.frame(Months, IntMonths)
prodinforMerge <- merge(prodinfor, dfMonth, by = "Months")
prodinforMerge
刪除Column(Drop Column)
prodinforMerge$IntMonths = NULL
prodinforMerge
刪除Record(Delete Record)
prodinforMerge <- prodinforMerge[-1, , ]
prodinforMerge

2016年4月30日 星期六

R學習筆記_資料處理(讀取DATAFRAME)

問題一:如何讀取DATAFRAME ANS:
prodinfor
問題二:如何讀取DATAFRAME欄位資料 ANS:
prodinfor[-1] #讀取除了第一個欄位之外的資料
prodinfor[,2] #讀取第二個欄位
prodinfor[,"ProdRev"] #讀取欄位ProdRev之內容
prodinfor$ProdRev #讀取欄位ProdRev之內容
問題三:如何讀取第N筆資料 ANS:
prodinfor[1,] #讀取第一筆資料
prodinfor[5,] #讀取第五筆資料
prodinfor[2:5,] #讀取第二到五筆資料
prodinfor[c(1,3,5),] #讀取第一、三、五筆資料
prodinfor[2:5, "ProdRev"] #讀取欄位ProdRev的第二到五筆資料
問題四:如何使用條件進行Filter ANS:
pro <- subset(prodinfor,prodinfor$ProductRevenue > 80 ) #讀取ProductRevenue大於80之資料
pro #檢視資料內容
prodinfor[prodinfor$ProductRevenue < 50 ,] #讀取ProductRevenue小於50之資料

R學習筆記(維護DATAFRAME)

1. 建立DATAFRAME
ProductRevenue <- c(70,120,280,30,410) 
Months <- c("Mar","Apr","May","Jun","Jul")
prodinfor <- data.frame(Months,ProductRevenue)
prodinfor
2. 檢視columnName
colnames(prodinfor)
3. 檢視RowName
row.names(prodinfor)
4. 修改一個欄位
colnames(prodinfor)[1] <- "M"
colnames(prodinfor)
5. 修改兩個欄位
colnames(prodinfor) <- c("Month" , "ProdRev")
colnames(prodinfor)

2016年4月25日 星期一

R學習筆記_資料視覺化(繪製bar chart)

R使用barplot()繪製bar chartbarplot()也可以設定繪製水平與垂直圖形。


有關barplot使用說明如下圖:

常使用之參數說明
Height:數字(numeric)類型的向量(vector)或矩陣(matrix)
xlab:X軸之標籤。
ylab: Y軸之標籤
main: bar charttitle
names.arg: bar chart中每個bar顯示名稱。
Col: bar chart中每個bar顯示顏色。


範例程式碼

# 建立資料內容
ProductRevenue <- c(70,120,280,30,410) 
Months <- c("Mar","Apr","May","Jun","Jul")
# 繪製bar chart.
barplot(ProductRevenue , names.arg = Months , xlab = "Month",ylab = "Revenue",col = "blue",main = "Revenue chart",border = "red")

程式碼執行結果:

2016年4月24日 星期日

R學習筆記_資料結構(DataFrame)

什麼是data frame?

由於VectorArray所儲存的資料類型都是一致的,如果要儲存不同資料類型的資料則使用data frame可以達成目的。可以把data Frame想成資料庫中的Table或是Excel,其欄位(Column)可以儲存不同變數類型的資料。

此外當R讀取檔案(CSVExcel)或資料庫等內容時,通常使用data frame存取這類的外部資料

如何建立data frame?

使用data.frame這個函數。

1. 以下為範例程式碼:
age <- c(19, 24, 20, 25, 20)
name <- c("Ryo", "William", "Amy", "Terry", "Lisa")
gender <- c("M", "M", "F", "M", "F")
country <- c("Taiwan", "America", "Japan", "Japan", "Taiwan")
people <- data.frame(age, name, gender, country)
View(people)

2. 執行結果如下: