這一篇文章的課題是:
當我們拿到一份外匯資料時
應該如何了解及處理這一份資料
這次主要完成的問題有:
(1)繪製走勢圖
(2)計算報酬率的平均數、中位數、標準差
(3)繪製報酬率的機率密度圖
先來看看這一份資料的樣貌
setwd('C:\\Users\\user1\\Desktop\\資料分析')
首先需要設定根目錄的位置
設置根目錄的目的是讓你匯入匯出資料都可以直接從這邊動作
可以免去每次都要宣告檔案位置的麻煩
而設置根目錄時有一個需要注意的地方
就是他並無法辨認windows系統常用的反斜線(\)
這在各個程式語言中都是轉義字元的意思
有興趣的同學可以另外去研究
所以必須以兩個反斜線(\\)或是改成斜線(/)才行
FX <- read.csv('FX.csv', header = T, encoding = 'UTF-8', stringsAsFactors = F)
col_name <- c('期間', '匯率(NT/US)')
names(FX) <- col_name
接著匯入資料就需要用到read.csv這個函數了
輸入的第一個參數是檔案名稱(記得加附檔名)
第二個是告訴R資料的第一行是不是欄位名稱(因此在某些函數是使用colname=T)
第三個參數則比較麻煩了
因為這一份資料的編碼方式R無法直接辨識(通常有中文比較會有這樣的情況)
因此需要加上這一個參數表示 讓R讀懂
最後一個參數則是不要讓R把變數當作因素向量來讀
以後若有機會再來聊聊資料結構吧!
另外兩行則是改變這份的資料的變數名稱囉
先來畫畫走勢圖吧!
因為資料的長相不佳(ex:1990M04)
所以必須先經過一定的處理
讓R能辨識他是時間
year <- c()
for (i in 1:length(FX$期間)) {
year[i] <- strsplit(FX[i, 1], 'M')[[1]][1]
}
month <- c()
for (i in 1:length(FX$期間)) {
month[i] <- strsplit(FX[i, 1], 'M')[[1]][2]
}
FX = cbind(FX, year, month)
FX$期間 <- paste0(FX$year, '/', FX$month, '/01')
FX$期間 <- as.Date(FX$期間)
上面利用strsplit來把1990M03等的東西切開
把M當作中間點取出在他之前跟在他之後的東西
因此這邊是先創造一個空的向量year, month
在讓年份依序存入year
月份依序存入month
最後獲得year跟month後把他們跟FX合起來
由於as.Date只能辨識有年月日的格式
因此在將獲得的年月利用paste0與"/01"黏起來
其中paste與paste0的差別只有黏起來的時候中間會不會有空格
藉著就能利用as.Date將資料轉為時間了~
library(ggplot2)
ggplot(FX, aes(x=FX$期間, y=FX$`匯率(NT/US)`))+
geom_line()
載入ggplot2套件
沒有的同學要先安裝喔
install.packages('ggplot2')
就可以輕鬆畫出走勢圖囉~
接著來計算報酬率的平均數、中位數、標準差吧
lret <- diff(log(FX$`匯率(NT/US)`))
lret <- c(NA, lret)
FX <- cbind(FX, lret)
計算這筆資料的log return(lret)
就是先取log再讓前後項相減
而使用log return的原因是因為
比起一般的報酬率計算方式(後期-前期/前期)
他在計算連續的報酬率時更精準
接著由於這樣做出來會少一項(n項東西中間共有n-1個空格)
而第一期沒有投資因此不會有報酬率
所以在最前面加入NA
最後把利用cbind(column bind)把lret放入資料FX中
ret_mean <- mean(FX$lret, na.rm = T)
ret_med <- median(FX$lret, na.rm = T)
ret_sd <- sd(FX$lret, na.rm = T)
FX_summary <- t(data.frame(ret_mean, ret_med, ret_sd))
接著就是用lret計算平均、中位、標準差啦
只要呼叫mean, median以及sd即可
相信這三個東西應該是不需要由我幫大家複習的啦~
其中資料中因為有NA
所以跑出來會是NA
必須呼叫na.rm來把NA值忽略才能跑出結果
最後我利用data.frame把東西整合到一個資料表格中
已經到了最後一步了
繪製報酬率的機率密度圖
hist(FX$lret, prob = T, ylim = c(0, 50))
lines(density(FX$lret, na.rm = T))
利用hist函數可以繪製直方圖
其中prob=T是繪製機率而不是頻率
所以想繪製頻率圖的可以不要放置這個參數喔
再利用lines在圖上加上線圖 就完成囉!
所以在這一次我們學習到了:
用了一些簡單的技巧處理資料
利用迴圈完成自動化的整理
用R內建的繪圖及ggplot2繪製圖片
之後也會陸續整理其他的資料分析實例給大家囉~
首推 沙發
回覆刪除我也來幫資料科學家小白推推了
回覆刪除太狂了
回覆刪除