EDA๋?
ํ์์ ๋ฐ์ดํฐ ๋ถ์(Exploratory Data Analysis)
์์ง ๋ฐ์ดํฐ๋ฅผ ๋ค์ํ ๊ฐ๋์์ ๊ด์ฐฐํ๊ณ ์ดํดํ๋ ๊ณผ์
๊ทธ๋ํ๋ ํต๊ณ์ ๋ฐฉ๋ฒ์ผ๋ก ์๋ฃ๋ฅผ ์ง๊ด์ ์ผ๋ก ํ์ ํ๋ ๊ณผ์
EDA ๊ณผ์
1) ๋ถ์์ ๋ชฉ์ ๊ณผ ๋ณ์ ํน์ง ํ์ธ
์ ์ ์๋ ๋ณ์(Categorical), ์ ์ ์๋ ๋ณ์(Numerical)
2) ๋ฐ์ดํฐ ์ ํ์ธ ๋ฐ ์ ์ฒ๋ฆฌ
๊ฒฐ์ธก์น, ์ด์์น ํ์ธ ๋ฐ ์ ์
3) ๋ฐ์ดํฐ ๊ฐ๋ณ ๋ณ์ ๊ฐ ๊ด์ฐฐ
ํต๊ณ, ์ผ๋ฐ ์๊ฐํ
4) ๋ณ์ ๊ฐ์ ๊ด๊ณ์ ์ด์ ์ ๋ง์ถฐ ๋ณ์ ํจํด ๋ฐ๊ฒฌ
์๊ด๊ด๊ณ, ๊ณ ๊ธ ์๊ฐํ
๋ฐ์ดํฐ์ ์ดํด๋ณด๊ธฐ
dataset # ๋ฐ์ดํฐ ์ ์ ์ฒด ๋ณด๊ธฐ
View(dataset) # ๋ณ๋์ ๋ฐ์ดํฐ ๋ทฐ์ด์ฐฝ์์ ์ถ๋ ฅ๋จ
head(dataset) # ์๋ถ๋ถ ๋ฐ์ดํฐ ์ 6๊ฐ
tail(dataset) # ๋๋ถ๋ถ ๋ฐ์ดํฐ ์ 6๊ฐ
head(dataset, 10) # ์๋ถ๋ถ 10๊ฐ
names(dataset) # ๋ณ์๋ช (์ปฌ๋ผ)
attributes(dataset) # names(์ด์ด๋ฆ), class, row.names(ํ์ด๋ฆ)
str(dataset) # ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ณด๊ธฐ
์ฒ๋(Scale)
๋ณ์์ ๊ฐ์ ๋ถ์ฌํ๋ ๋ฐฉ๋ฒ
๋ณ์ ์ธก์ ๋จ์(์๋ต์๊ฐ ์ ํํ ์ ์๋ ์ง๋ฌธ ํญ๋ชฉ)
์ ์ฑ์ -์ง์ ์ฒ๋(๋ฒ์ฃผํ ๋ณ์) | ์ ๋์ -์์ ์ฒ๋(์ฐ์ํ ๋ณ์) | ||
๋ช ๋ชฉ์ฒ๋ | ์ด๋ฆ์ด๋ ๋ฒ์ฃผ๋ฅผ ๋ํํ๋ ์๋ฏธ ์๋ ์ซ์ ex) ๋จ์/์ฌ์ |
๋ฑ๊ฐ์ฒ๋ | ์์ฑ์ ๋ํ ๊ฐ ์์ค ๊ฐ์ ๊ฐ๊ฒฉ์ด ๋์ผ ํ ์ซ์(๊ฐ๊ฐ์ฐ ์ฐ์ฐ) ex) ์ฐ์๋์ด ์ด๋์ ํด๋น๋๋์ง |
์์ด์ฒ๋ | ์ธก์ ๋์ ๊ฐ์ ๋๊ณ ๋ฎ์(์์ด), ์์์ ๋ํ ์๋ฏธ ์๋ ์ซ์ ex) ์ข์ํ๋ ์์ |
๋น์จ์ฒ๋ | ๋ฑ๊ฐ์ฒ๋์ ํน์ฑ์ ์ ๋์์ (0)์ด ์กด์ฌ ํ๊ณ , ๋น์จ๊ณ์ฐ์ด ๊ฐ๋ฅํ ์ซ์(์ฌ์น์ฐ์ฐ) ex) ๋์ด๊ฐ ๋ช ์ธ ์ธ์ง |
์ฒ๋์ ์์ธํ ์ ์ : https://blog.naver.com/tlrror9496/222048149959
์์ง ๋ฐ์ดํฐ ์ดํด
1. ํ์์ ๋ฐ์ดํฐ ์กฐํ
์ค์ต ๋ฐ์ดํฐ ์ฝ์ด์ค๊ธฐ
setwd("C:/ITWILL/2_Rwork/data")
dataset <- read.csv("dataset.csv", header=TRUE) # ํค๋๊ฐ ์๋ ๊ฒฝ์ฐ
#dataset.csv - ์นผ๋ผ๊ณผ ์ฒ๋ ๊ด๊ณ
1) ๋ฐ์ดํฐ ์กฐํ
ํ์์ ๋ฐ์ดํฐ ๋ถ์์ ์ํ ๋ฐ์ดํฐ ์กฐํ
(1) ๋ฐ์ดํฐ ์
๊ตฌ์กฐ
names(dataset) #๋ณ์๋ช
(์ปฌ๋ผ)
attributes(dataset) #์์ฑ์ ๋ณด : names(), ๊ฐ์ฒด์ ์ถ์ฒ(class), ํ์ ์ด๋ฆ (row.names)
str(dataset) #๋ฐ์ดํฐ ๊ตฌ์กฐ๋ณด๊ธฐ
dim(dataset) #์ฐจ์๋ณด๊ธฐ : 300(ํ. ๊ด์ธก์น) 7(์ด)
nrow(dataset) #๊ด์ธก์น ์ : 300
ncol(dataset) #์นผ๋ผ์ : 7
length(dataset) #์นผ๋ผ์ : 7
length(dataset$resident) #300
(2) ๋ฐ์ดํฐ ์
์กฐํ
์ ์ฒด ๋ฐ์ดํฐ ๋ณด๊ธฐ
dataset #=print(dataset), ์ฝ์ ์ฐฝ์์ ์ต๋๋ก ๋ณด์ฌ์ค ์ ์๋ ๊ธธ์ด๊ฐ ์ ํ๋์ด ์์ผ๋ฏ๋ก ์ผ๋ถ๋ถ๋ง ์ถ๋ ฅ๋จ
View(dataset) #์์
์ํธํ์ ๋ทฐ์ด์ฐฝ ์ถ๋ ฅ
์นผ๋ผ๋ช
ํฌํจ ๊ฐ๋จ ๋ณด๊ธฐ
head(dataset) #์์์ 6๊ฐ ๊ด์ธก์น
tail(dataset) #๋ค์์ 6๊ฐ ๊ด์ธก์ง
(3) ์นผ๋ผ ์กฐํ
ํ์) dataframe$์นผ๋ผ๋ช
-> vector(1์ฐจ์)๋ฐํ
dataset$age
dataset$resident
length(dataset$age) # data ์-300๊ฐ
ํ์) dataframe["์นผ๋ผ๋ช
"] -> data.frame(2์ฐจ์)๋ฐํ
dataset['age'] #๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ์ถ๋ ฅ
dataset["gender"]
dataset["price"]
dataset[c("age", "gender", 'price')] #์ฌ๋ฌ ๊ฐ์ ๋ณ์ ์ง์ ์ถ๋ ฅ
ํ์) dataframe[์์ธ] : ์์ธ(index)์ผ๋ก ์์ ์์น ์ง์
dataset[2] #๋๋ฒ์งธ ์ปฌ๋ผ gender
dataset[6] #์ฌ์ฏ๋ฒ์งธ ์ปฌ๋ผ price
dataset[3,] #3๋ฒ์งธ ๊ด์ฐฐ์น(ํ) ์ ์ฒด
dataset[,3] #3๋ฒ์งธ ๋ณ์(์ด) ์ ์ฒด (1์ฐจ์ ๋ฐํ = dataset$job)
dataset[3] #3๋ฒ์งธ ๋ณ์(์ด) ์ ์ฒด (2์ฐจ์ ๋ฐํ = dataset['job']
dataset์์ 2๊ฐ ์ด์ ์นผ๋ผ ์กฐํ
names(dataset)
dataset['resident':'job'] #error. ์นผ๋ผ๋ช
์ผ๋ก๋ ์ฐ์ํ ์ถ๋ ฅ ๋ถ๊ฐ
dataset[1:3] #์์ธ ์ด์ฉํ์ฌ ์ฐ์ํ ์ถ๋ ฅ ๊ฐ๋ฅ
dataset[c("job","price")]
dataset[c(2,6)]
dataset[c(1,2,3)]
dataset[c(1:3)] # = dataset[1:3]
dataset[c(2,4:6,3,1)] #2๋ฒ, 4~6๋ฒ, 3๋ฒ, 1๋ฒ ์นผ๋ผ ์์๋๋ก ์ถ๋ ฅ
๊ฒฐ์ธก์น(NA) ๋ฐ๊ฒฌ๊ณผ ์ฒ๋ฆฌ
1) ๊ฒฐ์ธก์น ๋ฐ๊ฒฌ(ํ์ธ)
summary(dataset) #์์ฝํต๊ณ ์กฐํ. Na'sํญ๋ชฉ์ด ๊ฒฐ์ธก์น ๊ฐ์
summary(dataset$price) #ํน์ ๋ณ์ ๋์์ผ๋ก ์์ฝํต๊ณ ์กฐํ
(2) ํน์ ๋ณ์
table(is.na(dataset$price)) #๋น๋ ์กฐํ. is.na:TURE๊ฐ์ด ๊ฒฐ์ธก์น ๊ฐ์
(3) ๊ทธ๋ํ ์ด์ฉ : ๋ณ์๊ฐ ๋ง์ ๊ฒฝ์ฐ
install.packages('VIM')
library(VIM) #aggr()ํจ์ ์ ๊ณต
aggr(dataset, prop=FALSE, numbers=TRUE)
* ์ผ์ชฝ ๊ทธ๋ํ : ๊ฐ ๋ณ์์ NA์ ๊ฐ์
* ์ค๋ฅธ์ชฝ ๊ทธ๋ํ : ๋ณ์ ์กฐํฉ์ ์ํ NA์ ๊ฐ์
2)๊ฒฐ์ธก์น ์ฒ๋ฆฌ - ์ ๊ฑฐ
(1)ํน์ ์นผ๋ผ ๋์ ๊ฒฐ์ธก์น ์ ๊ฑฐ
length(dataset$resident) #300๊ฐ์ ๋ณ์๋ช
resident = na.omit(dataset$resident)
length(resident) #279๊ฐ์ ๋ณ์๋ช
(21๊ฐ์ ๊ฒฐ์ธก์น ์ ๊ฑฐ)
(2)์ ์ฒด ์นผ๋ผ ๋์ ๊ฒฐ์ธก์น ์ ๊ฑฐ : ์๋ฃ ์์ค ๋ฐ์
dim(dataset) #300(๊ด์ธก์น) 7(๋ณ์)
dataset2=na.omit(dataset)
dim(dataset2) #209๊ฐ์ ๊ด์ธก์น (21๊ฐ์ ๊ฒฐ์ธก์น ์ ๊ฑฐ)
3) ๊ฒฐ์ธก์น ์ฒ๋ฆฌ - ์์(0)๋ก ๋์ฒด
ํ์) dataset$price = ifelse(์กฐ๊ฑด, ์ฐธ์ผ ๋ ๊ฒฐ์ธก์น ๋์ฒดํ ๊ฐ, ๊ฑฐ์ง์ผ ๋)
x = (dataset$price) #๋ฒกํฐํ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒดx
summary(dataset$price) #NA's = 30๊ฐ
dataset$price2 = ifelse(is.na(x), 0, x)
summary(dataset$price2) #NA's ๊ฐ ์์
4) ๊ฒฐ์ธก์น ์ฒ๋ฆฌ : ํต๊ณ(ํ๊ท , ์ค์์, ์ต๋น์)๋ก ๋์ฒด
dataset$price3 = ifelse(is.na(x), median(x, na.rm=TRUE), x) #๊ฒฐ์ธก์น๋ฅผ ์ค์์๋ก ๋์ฒด
summary(dataset$price3) #NA's ๊ฐ ์์
dataset[c('price','price2','price3')] #๊ฒฐ์ธก์น์์, ๊ฒฐ์ธก์น=0, ๊ฒฐ์ธก์น=์ค์๊ฐ
5) ๊ธฐ๊ณํ์ต ๋์ฒด : ํ์ต์ ํตํด ๊ตฌํ ์์ธก์น๋ก ๊ฒฐ์ธก์น ๋์ฒด
์ ์ฉ๋์ : ์๋ฒฝํ ๋ฐ์ดํฐ์
(๋ณ์๋ผ๋ฆฌ ๊ด๋ จ์ด ์๋ ex.iris)
install.packages('mice')
library(mice)
30๊ฐ ๋ณ์๋ง ์ถ์ถํ ์๋ก์ด DF์์ฑ
iris_df=head(iris, 30)
๊ฒฐ์ธก์น ์ถ๊ฐ
iris_df
dim(iris_df) #ํ30 ์ด5
iris_df[1,1] = NA #1ํ 1์ด๊ฐ 5.1์ NA๋ก ๋ณ๊ฒฝ
iris_df[3,3] = NA #3ํ 3์ด๊ฐ 1.3 -> NA
help(mice) #mice(๋ฐ์ดํฐ์
, ๋ฐ๋ณตํ์ต ํ์)
model = mice(iris_df, m=5) #๋ฐ๋ณตํ์ต 5ํ ์ํด
iris_df2 = complete(model) #model์ ์์ธก์น ๊ตฌํ๊ธฐ
iris_df2 #[1,1]->5.0 [3,3]->1.9๋ก ๋์ฒด๋จ.
* ์์คํ ํ๊ฒฝ์ ๋ฐ๋ผ ์์ธก ๊ฒฐ๊ณผ๋ ๋ฌ๋ผ์ง ์ ์์.
๊ฒฐ์ธก์น๋ฅผ ์์์ ๊ฐ์ผ๋ก ๋์ฒดํ๋ ์ด์ ?
- ์ ์ ๊ฒฐ์ธก์น๋ ์ญ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด๋ ๋๊ฒ ์ผ๋, ์ค์ ๋ฐ์ดํฐ์์๋ ์๋ง์ ๊ฒฐ์ธก์น๊ฐ ์กด์ฌํ๋ค.
์๋ง์ ๊ฒฐ์ธก์น๋ฅผ ์ญ์ ํ๋ฉด ์๋ฃ ์์ค์ด ๋ฐ์ํ๊ณ , ํด๋น ๋ณ์๊ฐ ๊ผญ ํ์ํ๊ฑฐ๋ ์ค์ํ ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ๊ฐ ๋ค์์ด๋ค.
- ๋ฐ์ดํฐ ๋ถ์์ ์ ๋ต์ ์์! ์ฌ๋ฌ ๋ฐฉ๋ฒ ์ค ์ต์ ์ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์ด ๋ง๋ค.
3. ์ด์์น ๋ฐ๊ฒฌ๊ณผ ์ ์
์ด์์น : ์ ์ ๋ฒ์ฃผ์์ ํฌ๊ฒ ๋ฒ์ด๋ ๊ฐ
์ด์์น๊ฐ ๋ฏธ์น๋ ์ํฅ : ํ๊ท๋ถ์ ์ ์ด ์๋ชป ์ถ๋ ฅ, ๋ถ์ ๊ฒฐ๊ณผ ์๊ณก
1) ๋ฒ์ฃผํ(๋ช
๋ชฉ/์์ด) ๋ณ์
names(dataset)
์ด์์น ๋ฐ๊ฒฌ
table(dataset$gender) #0๊ณผ 5๊ฐ ์ด์์น. 1:๋จ์ 2:์ฌ์
pie(table(dataset$gender))
์ ์ :์ด์์น ์ ๊ฑฐ
dataset = subset(dataset, gender==1 | gender==2) #์ฑ๋ณ์ด ๋จ์ฑ ๋๋ ์ฌ์ฑ์ธ ์๋ก์ด ๋ฐ์ดํฐ ์
์์ฑ
pie(table(dataset$gender))
subset vs ifelse
subset : data.frame(2์ฐจ์)
ifelse : vector(1์ฐจ์)
2) ์ฐ์์ํ(๋ฑ๊ฐ/๋น์จ) ๋ณ์
dataset$price #๋น์จ์ฒ๋
(1) ์ ์๋ฒ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์ด์์น ์ฒ๋ฆฌ
์ด์์น ๋ฐ๊ฒฌ
plot(dataset$price) #์ฐ์ ๋
summary(dataset$price) #์์ฝํต๊ณ
์ด์์น ์ ๊ฑฐ (์ ์๋ฒ์ฃผ๋ฅผ ์๊ณ ์์ ๋. ์ ์๋ฒ์ฃผ : 2~8)
dataset2 = subset(dataset, price>=2 & price<=8)
plot(dataset2$price)
dim(dataset2) #251ํ 7์ด. 52๊ฐ์ ์ด์์น ์ ๊ฑฐ๋์์.
(2) ์ฌ๋ถ๋ฒ์(IQR)์ด์ฉ ์ด์์น ๋ฐ๊ฒฌ
* IQR : Inter Quartile Range = ์ 3์ฌ๋ถ์์(Q3) - ์ 1์ฌ๋ถ์์(Q1)
* ํต๊ณ์ ์ผ๋ก ์โคํ์ 0.3% ๋๋ ์ฌ๋ถ๋ฒ์(IQR) * 1.5๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ
์ด์์น ๋ฐ๊ฒฌ
boxplot(dataset$price)
boxplot(dataset$price)$stats #์ ์๋ฒ์ฃผ ๊ฐ ํ์ธ. 2.1~7.9
์ด์์น ๋์ฒด : ํํ๊ฐ/์ํ๊ฐ ๋์ฒด
dataset3 = na.omit(dataset) #๊ฒฐ์ธก์น ์ ๊ฑฐ
dim(dataset3) #206ํ 7์ด
(1) ์ต์๊ฐ, ์ต๋๊ฐ ์ด์ฉ
dataset3$price = ifelse(dataset3$price<2.1, 2.1, dataset3$price) #ํํ๊ฐ ๋์ฒด
dataset3$price = ifelse(dataset3$price>7.9, 7.9, dataset3$price) #์ํ๊ฐ ๋์ฒด
boxplot(dataset3$price)
์ด์์น ์ ๊ฑฐ
dataset2 = subset(dataset, price>=2.1 & price<=7.9)
(2) ํ๊ท ๊ณผ ํ์คํธ์ฐจ ์ด์ฉ : ํํ๊ฐ/์ํ๊ฐ ๋์ฒด
dataset4 = na.omit(dataset)
avg = mean(dataset4$price) #5.27
std = sd(dataset4$price) #53.15
n = 3 #์๊ณ๊ฐ
dataset4$price = ifelse(dataset4$price<2.1, minVal, dataset4$price) #ํํ๊ฐ ๋์ฒด
dataset4$price = ifelse(dataset4$price>7.9, maxVal, dataset4$price) #์ํ๊ฐ ๋์ฒด
boxplot(dataset4$price) #์ด์์น ํ์ธ
4. ์ฝ๋ฉ๋ณ๊ฒฝ
๋ฐ์ดํฐ์ ๊ฐ๋
์ฑ, ์ฒ๋ ๋ณ๊ฒฝ, ์ต์ด๋ก ์ฝ๋ฉ๋ ๋ด์ฉ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด
1) ๊ฐ๋
์ฑ์ ์ํ ์ฝ๋ฉ๋ณ๊ฒฝ
ํ์) dataframe$์ ์นผ๋ผ๋ช
[๋ถ์ธ๋ฆฐboolean์ธ์] <- ๋ณ๊ฒฝ๊ฐ
* boolean : ์ฐธ๊ณผ ๊ฑฐ์ง์ ๋ํ๋ด๋ ์ซ์ 1/0์ ์ด์ฉํ๋ ๋ฐฉ์
dataset2$resident2[dataset2$resident == 1] <-'1.์์ธํน๋ณ์'
dataset2$resident2[dataset2$resident == 2] <-'2.์ธ์ฒ๊ด์ญ์'
dataset2$resident2[dataset2$resident == 3] <-'3.๋์ ๊ด์ญ์'
dataset2$resident2[dataset2$resident == 4] <-'4.๋๊ตฌ๊ด์ญ์'
dataset2$resident2[dataset2$resident == 5] <-'5.์๊ตฌ๊ตฐ'
* ์กฐ๊ฑด์ ๋ง๋ ๊ฐ๋ง ์ถ์ถํด์ ์๋ก์ด ํ์ ๋ณ์๋ก ์์ฑ
dataset2[c("resident","resident2")] # 2๊ฐ๋ง ์ง์
table(dataset2$job) #1,2,3์ ๋ฒ์ฃผ(์นดํ
๊ณ ๋ฆฌ), 61, 87, 88(ํด๋น ์นดํ
๊ณ ๋ฆฌ์ ๋น๋์)
dataset2$job2[dataset2$job == 1] <- '๊ณต๋ฌด์'
dataset2$job2[dataset2$job == 2] <- 'ํ์ฌ์'
dataset2$job2[dataset2$job == 3] <- '๊ฐ์ธ์ฌ์
'
table(dataset2$job2) #๊ฐ์ธ์ฌ์
, ๊ณต๋ฌด์, ํ์ฌ์ (๋ด๋ฆผ์ฐจ์ ์๋์ ๋ ฌ)
2) ์ฒ๋ ๋ณ๊ฒฝ : ๋น์จ์ฒ๋(ํ๊ท, ์๊ด) -> ๋ช
๋ชฉ์ฒ๋(์นด์ด์ ๊ณฑ(๊ต์ฐจ)๊ฒ์ )
ํ์) dataframe$์์นผ๋ผ๋ช
[๋ถ์ธ๋ฆฐ์ธ์] = ๋ณ๊ฒฝ๊ฐ
dataset2$age #age๋ ๋น์จ์ฒ๋. ์ฐ์์ฑ์ด ์๊ณ , ์ฌ์น์ฐ์ฐ์ด ๊ฐ๋ฅํจ
dataset2$age2[dataset2$age <= 30] = '์ฒญ๋
์ธต'
dataset2$age2[dataset2$age > 30 & dataset2$age <= 55] = '์ค๋
์ธต'
dataset2$age2[dataset2$age > 55] = '์ฅ๋
์ธต'
table(dataset2$age2) #์ฅ๋
์ธต 56, ์ค๋
์ธต 110, ์ฒญ๋
์ธต 69
3) ์ญ์ฝ๋ฉ : ์์ ๋ณ๊ฒฝ (1->5, 5->1)
survey = dataset2$survey
length(survey) #251
survey[1:5] #1,2,4,2,1
csurvey = 6-survey #vector=์์(scala)-1์ฐจ์๋ฐฐ์ด(vector)
length(csurvey)
csurvey[1:5] #5,4,2,4,5
์ญ์ฝ๋ฉ ๋ฐ์
dataset2$survey = csurvey
5. ์ ์ ๋ฐ์ดํฐ ์ ์ฅ
getwd()
setwd("C:/ITWILL/2_Rwork/data")
(1) ๋ฐ์ดํฐ ์ ์ฅ
write.csv(dataset2, 'cleanData.csv', row.names=FALSE, quote=F) #ํ์ ์ด๋ฆ ์ ์ฅํ์ง ์์, ๋ฌธ์ ์ ์ฅํ์ง ์์
(2) ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
new_data = read.csv('cleanData.csv')
head(new_data)
6. ํ์์ ๋ถ์์ ์ํ ์๊ฐํ
์๊ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ ๋ณ์ ๊ฐ ์๊ด๊ด๊ณ ํ์
new_data <- read.csv("new_data.csv", header=TRUE)
new_data
dim(new_data) # 231 15
str(new_data)
1) ๋ช
๋ชฉ์ฒ๋(๋ฒ์ฃผ/์์ด) vs ๋ช
๋ชฉ์ฒ๋(๋ฒ์ฃผ/์์ด)
๊ฑฐ์ฃผ์ง์ญ๊ณผ ์ฑ๋ณ ์นผ๋ผ ์๊ฐํ (์ง๋จ๋ณ์+์ง๋จ๋ณ์=๊ต์ฐจํ ์์ฑ)
resident_gender = table(new_data$resident2, new_data$gender2)
resident_gender
gender_resident = table(new_data$gender2, new_data$resident2)
gender_resident
์ฑ๋ณ์ ๋ฐ๋ฅธ ๊ฑฐ์ฃผ์ง์ญ ๋ถํฌ ํํฉ
barplot(resident_gender, beside=T, horiz=T,
col = rainbow(5),
legend = row.names(resident_gender),
main = '์ฑ๋ณ์ ๋ฐ๋ฅธ ๊ฑฐ์ฃผ์ง์ญ ๋ถํฌ ํํฉ')
row.names(resident_gender) # ํ ์ด๋ฆ
๊ฑฐ์ฃผ์ง์ญ์ ๋ฐ๋ฅธ ์ฑ๋ณ ๋ถํฌ ํํฉ
barplot(gender_resident, beside=T,
col=rep(c(2, 4),5), horiz=T,
legend=c("๋จ์","์ฌ์"),
main = '๊ฑฐ์ฃผ์ง์ญ๋ณ ์ฑ๋ณ ๋ถํฌ ํํฉ')
2) ๋น์จ์ฒ๋(์ฐ์) vs ๋ช
๋ชฉ์ฒ๋(๋ฒ์ฃผ/์์ด)
๋์ด์ ์ง์
์ ํ์ ๋ฐ๋ฅธ ์๊ฐํ
install.packages("lattice") # chap08
library(lattice)
densityplot(~x, data=dataset) #๋ฐ๋๋ถํฌ๊ณก์
์ง์
์ ํ์ ๋ฐ๋ฅธ ๋์ด ๋ถํฌ ํํฉ
densityplot( ~ age, data=new_data, groups = job2, #์ฐ์ํ ๋ณ์(age)๋ฅผ ์ง๋จ๋ณ์(job2)์ ๊ทธ๋ฃนํ
plot.points=T, auto.key = T)
plot.points=T : ํ๋จ์ ๋ฐ๋ ํ์ ์ฌ๋ถ, auto.key = T : ๋ฒ๋ก ํ์ ์ฌ๋ถ
3) ๋น์จ(์ฐ์) vs ๋ช
๋ชฉ(๋ฒ์ฃผ/์์ด) vs ๋ช
๋ชฉ(๋ฒ์ฃผ/์์ด)
* ๊ตฌ๋งค๋น์ฉ(์ฐ์):x์นผ๋ผ , ์ฑ๋ณ(๋ช
๋ชฉ):์กฐ๊ฑด, ์ง๊ธ(์์ด):๊ทธ๋ฃน
(1) ์ฑ๋ณ์ ๋ฐ๋ฅธ ์ง๊ธ๋ณ ๊ตฌ๋งค๋น์ฉ ๋ถ์
densityplot(~ price | factor(gender2), data=new_data, #factor(gender2):์ง๋จ๋ณ(์ฌ์/๋จ์) ๊ฒฉ์ ์์ฑ
groups = position2, plot.points=T, auto.key = T) #ํ ๊ฒฉ์ ์์ 5๊ฐ์ ์ง๊ธ์ ๋ํ ๊ทธ๋ฃนํ
* ์กฐ๊ฑด(๊ฒฉ์) : ์ฑ๋ณ, ๊ทธ๋ฃน : ์ง๊ธ
(2) ์ง๊ธ์ ๋ฐ๋ฅธ ์ฑ๋ณ ๊ตฌ๋งค๋น์ฉ ๋ถ์
densityplot(~ price | factor(position2), data=new_data,
groups = gender2, plot.points=T, auto.key = T)
* ์กฐ๊ฑด : ์ง๊ธ(๊ฒฉ์), ๊ทธ๋ฃน : ์ฑ๋ณ
ํ์๋ณ์๋?
๊ธฐ์กด ๋ณ์๋ก ์๋ก์ด ๋ณ์๋ฅผ ์์ฑํ ๊ฒ
ํ์๋ณ์ ์์ฑ
(1) ์ฌ์น์ฐ์ฐ
(2) 1:1๋ก ๋ง๋ค๊ธฐ : ๊ธฐ์กด๋ณ์(1) -> ์๋ก์ด ํ์๋ณ์(1)
(3) 1:N๋ก ๋ง๋ค๊ธฐ : ๊ธฐ์กด๋ณ์(1) -> ์๋ก์ด ํ์๋ณ์(N)
setwd('C:/ITWILL/2_Rwork/data')
user_data <- read.csv('user_data.csv', header = T)
head(user_data) # user_id age house_type resident job
1) 1:1 ํ์๋ณ์ ์์ฑ : ๊ธฐ์กด ์นผ๋ผ 1๊ฐ -> ์๋ก์ด ์นผ๋ผ 1๊ฐ
์ฃผํ ์ ํ : 0, ์ํํธ ์ ํ : 1(๋๋ฏธ๋ณ์ ์์ฑ) : ์ฃผํ ์ ํ ํ์
๊ฐ๋ฅ
summary(user_data$house_type) # NAํ์ธ - ์์
table(user_data$house_type)
dummy ์์ฑ
house_type2 <- ifelse(user_data$house_type == 1 | user_data$house_type == 2, 0, 1)
๊ฒฐ๊ณผ ํ์ธ
house_type2[1:10]
ํ์๋ณ์ ์ถ๊ฐ
user_data$์ฃผ๊ฑฐํ๊ฒฝ <- house_type2
head(user_data)
2) 1:N ํ์๋ณ์ ์์ฑ : ๊ฐ id(๊ณ ๊ฐ)์ ๋ํ ๊ตฌ๋งค์ํ, ์ง๋ถ๋ฐฉ๋ฒ ๋์ด
pay_data <- read.csv('pay_data.csv', header = T)
head(pay_data,10) # user_id product_type pay_method price
table(pay_data$product_type)
install.packages('reshape2')
library(reshape2) # dcast() ํจ์ ์ ๊ณต
(1) ๊ณ ๊ฐ๋ณ ์ํ ์ ํ์ ๋ฐ๋ฅธ ๊ตฌ๋งค๊ธ์ก ํฉ๊ณ ํ์๋ณ์ ์์ฑ
product_price <- dcast(pay_data, user_id ~ product_type, sum, na.rm=T)
head(product_price, 3) # ํ(๊ณ ๊ฐ id) ์ด(์ํ ํ์
), sum(price)
names(product_price) <- c('user_id','์๋ฃํ(1)','์ํํ(2)','์๋ฅ(3)','์กํ(4)','๊ธฐํ(5)')
head(product_price, 3) # ์นผ๋ผ๋ช
์์ ํ์ธ
โ
(2) ํ์๋ณ์ ์ถ๊ฐ(data.frame ํฉ์น๊ธฐ) : joinโ
install.packages('plyr')
library(plyr) # ํจํค์ง ๋ก๋ฉ
user_pay_data <- join(user_data, product_price, by='user_id') #by='๊ณตํต๋ณ์'
head(user_pay_data,10)
(3) ์ด ๊ตฌ๋งค๊ธ์ก ํ์๋ณ์ ์์ฑ(์ฌ์น์ฐ์ฐ : ์ง๊ธ๋ฐฉ๋ฒ ์ด์ฉ)
user_pay_data$์ด๊ตฌ๋งค๊ธ์ก <- user_pay_data$`์๋ฃํ(1)` +user_pay_data$`์ํํ(2)`+user_pay_data$`์๋ฅ(3)` +
user_pay_data$`์กํ(4)` + user_pay_data$`๊ธฐํ(5)`
head(user_pay_data)
โ
dcast ํจ์ ์โ
ํ์) dcast(data, formula=y~x, funct)
1) vector์์ฑ
a = rep(1:2, 4) #1~2๋ฅผ 4๋ฒ ๋ฐ๋ณต (์์์ ๊ธธ์ด 8)
b = rep(1:4, 2) #1~4๋ฅผ 2๋ฒ ๋ฐ๋ณต (์์์ ๊ธธ์ด 8)
c = seq(10,80,10) #10~80๊น์ง 10์ฉ ์ฆ๊ฐ
d = seq(100,800,100)
2) DF์์ฑ
df = data.frame(a,b,c,d) #d๋ณ์ ์ด์ฉ
df
# a b c d
# 1 1 1 10 100
# 2 2 2 20 200
# 3 1 3 30 300
# 4 2 4 40 400
# 5 1 1 50 500
# 6 2 2 60 600
# 7 1 3 70 700
# 8 2 4 80 800
3) dcast ์ ์ฉ
dcast(df, a~b, sum)
# a 1 2 3 4
# 1 1 600 0 1000 0
# 2 2 0 800 0 1200
#1๊ฐ์ ๋ณ์ -> 4๊ฐ์ ๋ณ์
dcast(df[1:3], a~b, sum) #c๋ณ์ ์ด์ฉ
'๋ฐ์ดํฐ๋ถ์๊ฐ ๊ณผ์ > R' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DAY16. R ๋น์ ํ๋ฐ์ดํฐ (ํ ํฝ/์ฐ๊ด์ด/๊ฐ์ฑ๋ถ์) (0) | 2021.10.06 |
---|---|
DAY15. R ์ ํ๋ฐ์ดํฐ (0) | 2021.10.05 |
DAY13. R Basic (๋ฐ์ดํฐ ์๊ฐํ) (0) | 2021.09.30 |
DAY12. R Basic (์ ์ด๋ฌธ๊ณผ ํจ์) (0) | 2021.09.29 |
DAY11. R Basic (๋ฐ์ดํฐ ์ ์ถ๋ ฅ) (0) | 2021.09.28 |