#0313上課資料
#install.packages("readr")#第一次使用需安裝
library(readr)#用library呼叫套件
## Warning: 套件 'readr' 是用 R 版本 4.2.3 來建造的
#讀取資料,命名為"x"
x<- read.csv("favorite.csv", stringsAsFactors = TRUE)
#查看資料結構
summary(x)
## Favorite.Color Favorite.Music.Genre Favorite.Beverage
## Cool :37 Electronic : 8 Beer :13
## Neutral: 7 Folk/Traditional: 4 Doesn't drink:14
## Warm :22 Hip hop : 8 Other :11
## Jazz/Blues : 4 Vodka : 9
## Pop :17 Whiskey : 9
## R&B and soul : 6 Wine :10
## Rock :19
## Favorite.Soft.Drink Gender
## 7UP/Sprite :13 F:33
## Coca Cola/Pepsi:32 M:33
## Fanta :14
## Other : 7
##
##
##
#重新命名欄位名稱
colnames(x) #檢視欄位名稱
## [1] "Favorite.Color" "Favorite.Music.Genre" "Favorite.Beverage"
## [4] "Favorite.Soft.Drink" "Gender"
colnames(x) <- c("color", "music", "beverage", "drink", "gender")
###類別資料分析###
#問題:男女生各有多少人?
table(x$gender)#算次數
##
## F M
## 33 33
prop.table(table(x$gender))#算百分比
##
## F M
## 0.5 0.5
#問題:最喜歡的color、music、beverage、drink、gender?
table(x$color)
##
## Cool Neutral Warm
## 37 7 22
prop.table(table(x$color))
##
## Cool Neutral Warm
## 0.5606061 0.1060606 0.3333333
table(x$music)
##
## Electronic Folk/Traditional Hip hop Jazz/Blues
## 8 4 8 4
## Pop R&B and soul Rock
## 17 6 19
prop.table(table(x$music))
##
## Electronic Folk/Traditional Hip hop Jazz/Blues
## 0.12121212 0.06060606 0.12121212 0.06060606
## Pop R&B and soul Rock
## 0.25757576 0.09090909 0.28787879
#問題:男女對顏色的喜好的差異?
#次數分配表
t <- table(x$gender,x$color)
t
##
## Cool Neutral Warm
## F 17 3 13
## M 20 4 9
#百分比次數分配表
p.t <- prop.table(t,2)
p.t
##
## Cool Neutral Warm
## F 0.4594595 0.4285714 0.5909091
## M 0.5405405 0.5714286 0.4090909
#將次數變成百分比(乘以100)
p.t <- p.t*100
p.t
##
## Cool Neutral Warm
## F 45.94595 42.85714 59.09091
## M 54.05405 57.14286 40.90909
#四捨五入至小數2位
p.t <- round(p.t,2)
p.t
##
## Cool Neutral Warm
## F 45.95 42.86 59.09
## M 54.05 57.14 40.91
t <- table(x$gender,x$music)
p.t <- prop.table(t)
p.t
##
## Electronic Folk/Traditional Hip hop Jazz/Blues Pop R&B and soul
## F 0.03030303 0.03030303 0.01515152 0.04545455 0.19696970 0.03030303
## M 0.09090909 0.03030303 0.10606061 0.01515152 0.06060606 0.06060606
##
## Rock
## F 0.15151515
## M 0.13636364
p.t <- p.t*100
p.t
##
## Electronic Folk/Traditional Hip hop Jazz/Blues Pop R&B and soul
## F 3.030303 3.030303 1.515152 4.545455 19.696970 3.030303
## M 9.090909 3.030303 10.606061 1.515152 6.060606 6.060606
##
## Rock
## F 15.151515
## M 13.636364
p.t <- round(p.t,2)
p.t
##
## Electronic Folk/Traditional Hip hop Jazz/Blues Pop R&B and soul Rock
## F 3.03 3.03 1.52 4.55 19.70 3.03 15.15
## M 9.09 3.03 10.61 1.52 6.06 6.06 13.64
#畫長條圖
barplot(p.t)

#畫分組長條圖
barplot(p.t, beside =TRUE)

#加上圖例與上色
rownames(p.t)
## [1] "F" "M"
label <- rownames(p.t)
label
## [1] "F" "M"
barplot(p.t,
beside = TRUE,
legend.text = label,
col =c("green","white") )

#畫圓餅圖(畫兩個圖餅圖分別呈現男性與女性的某項喜好)
p.t
##
## Electronic Folk/Traditional Hip hop Jazz/Blues Pop R&B and soul Rock
## F 3.03 3.03 1.52 4.55 19.70 3.03 15.15
## M 9.09 3.03 10.61 1.52 6.06 6.06 13.64
f <- p.t[1,] # 取出女性資料
m <- p.t[2,] # 取出男性資料
f
## Electronic Folk/Traditional Hip hop Jazz/Blues
## 3.03 3.03 1.52 4.55
## Pop R&B and soul Rock
## 19.70 3.03 15.15
m
## Electronic Folk/Traditional Hip hop Jazz/Blues
## 9.09 3.03 10.61 1.52
## Pop R&B and soul Rock
## 6.06 6.06 13.64
# par()是圖形控制函數,mfrow = c(1,2)表示建立一個1x2的空間,用來呈現後續的圖
par(mfrow =c(1,2) )
pie(f, main = "女生" )
pie(m, main = "男生" )

dev.off() #離開par()
## null device
## 1
#畫圓餅圖並加上資料標籤
p.t
##
## Electronic Folk/Traditional Hip hop Jazz/Blues Pop R&B and soul Rock
## F 3.03 3.03 1.52 4.55 19.70 3.03 15.15
## M 9.09 3.03 10.61 1.52 6.06 6.06 13.64
pie_category <- colnames(p.t)
f_label <- paste(pie_category, f,"%", sep = "")
f_label
## [1] "Electronic3.03%" "Folk/Traditional3.03%" "Hip hop1.52%"
## [4] "Jazz/Blues4.55%" "Pop19.7%" "R&B and soul3.03%"
## [7] "Rock15.15%"
m_label <- paste(pie_category, m,"%", sep = "")
m_label
## [1] "Electronic9.09%" "Folk/Traditional3.03%" "Hip hop10.61%"
## [4] "Jazz/Blues1.52%" "Pop6.06%" "R&B and soul6.06%"
## [7] "Rock13.64%"
par(mfrow =c(1,2))# c(1,2),表示建立一個1x2的空間,用來呈現後續的圖
pie(f, labels =f_label, main = "Female")
pie(m, labels =m_label, main = "Male" )
dev.off() #離開par()
## null device
## 1