install.packages("dygraphs")
install.packages("plotly")
install.packages("rCharts")
install.packages("DT")
# 讀檔起手式
temp <- read.csv("歷年護理人員資料.csv") #請輸入正確的檔案路徑
# 若讀入的是亂碼,試試以下
temp <- read.csv("歷年護理人員資料.csv",fileEncoding = 'big5') #如果你是mac
# 或是
temp <- read.csv("歷年護理人員資料.csv",fileEncoding = 'utf-8') #如果你是windows
# 設定我們檔案存放的路徑
setwd("/media/hsusir/DATA/Rdata Practice/02DataEngineer/nurse-plotly")
temp <- read.csv("歷年護理人員資料表.csv",fileEncoding = 'utf-8') #如果你是windows/Linux
str(temp)
## 'data.frame': 25634 obs. of 7 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ 性別 : Factor w/ 2 levels "F","M": 1 1 1 1 1 1 1 1 1 1 ...
## $ 醫療層級: Factor w/ 4 levels "區域醫院","地區醫院",..: 4 4 4 4 4 4 4 4 4 4 ...
## $ 縣市 : Factor w/ 23 levels "","南投縣","台中市",..: 23 23 23 23 23 23 23 23 23 23 ...
## $ 年齡 : int 20 20 20 20 20 20 20 20 21 21 ...
## $ 年度 : int 2005 2006 2007 2008 2009 2010 2011 2012 2005 2006 ...
## $ 人數 : int 56 17 11 1 5 5 7 7 71 75 ...
summary(temp)
## X 性別 醫療層級 縣市 年齡
## Min. : 1 F:21468 區域醫院:7409 台北市 : 1865 Min. :18.00
## 1st Qu.: 6409 M: 4166 地區醫院:7774 台中市 : 1841 1st Qu.:28.00
## Median :12818 基層院所:7053 新北市 : 1735 Median :37.00
## Mean :12818 醫學中心:3398 高雄市 : 1685 Mean :38.13
## 3rd Qu.:19226 台南市 : 1606 3rd Qu.:47.00
## Max. :25634 彰化縣 : 1588 Max. :65.00
## (Other):15314
## 年度 人數
## Min. :2005 Min. : 1.00
## 1st Qu.:2007 1st Qu.: 2.00
## Median :2009 Median : 9.00
## Mean :2009 Mean : 30.37
## 3rd Qu.:2011 3rd Qu.: 31.00
## Max. :2012 Max. :729.00
##
X | 性別 | 醫療層級 | 縣市 | 年齡 | 年度 | 人數 | |
---|---|---|---|---|---|---|---|
5651 | 5651 | F | 區域醫院 | 台南市 | 36 | 2009 | 78 |
18192 | 18192 | F | 基層院所 | 台東縣 | 29 | 2005 | 9 |
5804 | 5804 | F | 區域醫院 | 台南市 | 56 | 2005 | 2 |
11072 | 11072 | F | 地區醫院 | 屏東縣 | 29 | 2011 | 63 |
1818 | 1818 | F | 醫學中心 | 桃園市 | 46 | 2009 | 70 |
20999 | 20999 | F | 基層院所 | 雲林縣 | 43 | 2012 | 9 |
9813 | 9813 | F | 地區醫院 | 嘉義縣 | 57 | 2008 | 2 |
geom_line
首先來看看2008年各個年齡層的護理師人數吧!
是不是發現護理師主要都集中在某個年齡層呢??
temp_age <- temp %>%
filter(年度 == "2008") %>% #挑出年度為2008年
group_by(年齡) %>% #根據年齡分群
summarise(護理師_人數 = sum(人數)) #計算總人數
# 資料整理可以直接複製貼上
thm <- function() theme(text=element_text(size = 15, family = "STHeiti")) # 控制字體與大小
# STHeiti是只有Mac才有的字體, 用來解決Mac系統中文顯示錯誤的問題
# Windows系統的使用者請忽略 `+ thm()` 指令
## Line chart
## 可以與第10頁做簡單的對照
ggplot(temp_age,aes(x = 年齡, y = 護理師_人數))+geom_line()+thm()
temp_year <- temp %>%
group_by(年度) %>% #根據年度分群
summarise(護理師_人數 = sum(人數)) #計算總人數
# 資料整理可以直接複製貼上
ggplot(temp_year,aes(x = 年度 , y = 護理師_人數)) +
geom_line(size = 2) + geom_point(size = 5) + # 控制點與線的大小粗細
thm() + labs(titles = "各年度護理人員數", x = "年度", y = "護理師人數") # lab用來幫圖形的標題、x軸與y軸做命名
temp_t <- read.csv("我是寬資料.csv",header=T)
temp_long <- temp_t %>% melt(id='year') #id是將保留的欄位名稱
colnames(temp_long) <- c('年度','地區','人數')
# gruop按照不同區域劃線
ggplot(temp_long, aes(x = 年度, y = 人數 , group = 地區, color = 地區)) +
geom_line() +
geom_point() + thm() +
labs(titles="歷年台南市、高雄市、台中市護理師人數差異",x="年度",y="護理師人數") +
theme(axis.text.x = element_text(angle = 30, hjust = 1)) # 控制x軸字體傾斜程度
## 資料整理
temp_t <- temp %>%
filter(性別=="M") %>% #挑出男性
group_by(年度) %>% #根據年度分群
summarise(護理師_人數 = sum(人數)) #計算總人數
## 繪圖
ggplot(temp_t,aes(x = 年度 , y = 護理師_人數)) +
geom_line(size = 0.5) + geom_point(size = 1)+ # 控制點與線的大小粗細
thm()+labs(titles = "各年度男性護理人員數" , x = "年度" , y = "護理師人數")
#資料整理
temp_hosp <- temp %>%
filter(年度 == "2008") %>% #選擇年度2008
group_by(年度,醫療層級) %>% #對年度與醫療層級分群
summarise(護理師_人數 = sum(人數))
#畫圖
ggplot(temp_hosp,aes(x = 醫療層級, y = 護理師_人數)) +
geom_bar(stat = 'identity') + thm()# stat='identity'以表格的值做為bar的高度
class(temp_hosp$醫療層級) #看看這個變數的屬性類型
## [1] "factor"
# 發現他是integer的屬性,所以我們要將其轉成factor來改變他的順序
temp_hosp$醫療層級 <- factor(temp_hosp$醫療層級,levels = c("醫學中心","區域醫院","地區醫院","基層院所"))
arrange
事先依照y軸對應的數值的大小來排序# 我們也可以在一開始先對資料排序完在畫圖
temp_hosp <- temp_hosp %>% arrange(護理師_人數)
# 此時在接上畫圖的code就會自動排序囉!
# 資料整理大挑戰~~~
temp_MF <- temp %>%
group_by(性別,醫療層級) %>%
summarise(護理師人數 = sum(人數)) %>%
mutate(百分比 = round(護理師人數/sum(護理師人數),2))
ggplot(temp_MF,aes(x = 性別, y = 百分比 , fill = 醫療層級)) +
geom_bar(stat = 'identity', position = 'stack') + thm()
ggplot(temp_MF,aes(x = 性別, y = 百分比 , fill = 醫療層級 )) +
geom_bar(stat = 'identity' , position = 'dodge') + thm()
Plotly
Python
、R
、Malab
、…等等
- 當然~ggplot2也能夠輕易地使用plotly轉換成互動式的圖表!!
CRAN
內下載就好囉!!# Plotly is now on CRAN!
install.packages("plotly")
# install the latest development version (on GitHub) via devtools
或是
從github
上下載,但前提是先
安裝devtools
# install.packages("devtools")
devtools::install_github("ropensci/plotly")
2012年各縣市的護理師人數呈現什麼趨勢呢?縣市之間差異很大嗎?
資料整理
temp_plot <- temp %>%
filter(年度 == "2012") %>%
group_by(縣市) %>%
summarise(total = sum(人數))
ggplot(temp_plot,aes(x = 縣市, y = total,fill = 縣市))+
geom_bar(stat = 'identity')+
thm()+
labs(titles = "2012年各縣市護理師數", x = "縣市",y = "護理師人數")+coord_flip()
a <- ggplot(temp_plot,aes(x = 縣市, y = total ,fill = 縣市))+
geom_bar(stat = 'identity')+
thm()+
labs(titles = "2012年各縣市護理師數",x = "縣市", y = "護理師人數")+coord_flip()
ggplotly(a)
##
temp_plot <- temp %>%
filter(縣市 == "台南市"|縣市 == "高雄市") %>%
group_by(年度,縣市) %>%
summarise(護理人員數=sum(人數))
a <- ggplot(temp_plot,aes(x = 年度,y = 護理人員數,group = 縣市,color = 縣市))+
geom_line() +
thm()+
labs(titles = "高雄市與台南市歷年護理師人數",x = "年度",y = "護理師人數")+
theme(axis.text.x = element_text(angle = 30, hjust = 1))# 控制x軸字體傾斜程度
a
ggplotly(a)