#train , test
csv파일을 읽어서 data에 저장
data = read.csv("train.csv")
패키지 설치
install.packages("dplyr",”bindrcpp”)
라이브러리 실행
library(dplyr)
dplyr
dplyr → ‘%>%’ 많이쓰는 기호
data %>% str → dataframe의 구조를 알수 있는 함수
head(data) → dataframe의 첫 5개 행
summary(data) → dataframe의 통계지표( min, max, 25% , 75%, mid)
nrow(data) → data의 행의수
ncol(data) → data의 열의수
csv 파일을 읽은 뒤 이 데이터셋에 대해서 하나하나 파악을 해야함 (속성, 데이터의 양, 클래스 개수 등)
data$PassengerId %>% as.factor() 891개의 행이 존재하는 데 팩터로 변환했는데 변환된 범주개 891개. 모두 각기 다른 정보이므로 유용하게 사용할 수 없는 속성이다.
data$Pclass %>% as.factor()
data$Pclass %>% unique()
벡터 -- 1차원
v[index]
v[c(index1,index2)]
data[row index, col index]
data[3,2] = data[3, ‘Survived’]
data[row index, col name]
data[c(5:15), c(‘Survived’,’Pclass’)] 5번째행부터 15번째 행까지 두 컬럼만 출력
#select 따옴표를 작성하지 않아도 된다.
data %>% select(Survived,Pclass)
1.Ticket, Fare 컬럼을 출력하세요 data %>% select(Ticket,Fare) data[,c('Ticket','Fare')] 2. Passenger id를 출력해라 data$PassengerId data[,"PassengerId"] data %>% select(PassengerId) |
# filter
# 성별이 여자인 데이터만 출력해라
data %>% filter(Sex=='female') %>%head()
data[data$Sex=='female',]%>%head()
문제 1 . 요금이 $40 이상이면서 나이가 20인 고객이름을 출력하시오 data %>% filter(Fare>=40) %>% filter(Age%/%10==2) %>% select(Name) data %>% filter(Fare>=40 & Age%/%10==2) %>% select(Name) data[data$Fare >= 40 & data$Age%/%10==2 , ‘Name’ ] 결측치 존재!! data[data$Fare >= 40 & data$Age%/%10==2 & is.na(data$Age)==F, 'Name'] 문제 2. 부모 자녀의 수가 3명 이상인 고객의 나이와 부모 자녀수를 출력하세요 data %>% filter(data$Parch>=3) %>% select(Age, Parch) |
# in.na()
NA 결측치. 측정되지 않은 값. 즉 null에 해당 Age에 NA값이 존재해서 어떤 사칙연산도 적용되지 않음. 이 결측치를 모두 제외하고 진행할치 다른 전처리를 처리하고 진행할지도 결정해서 데이터 분석을 진행해야 한다.
필터로 data %>% filter(is.na(data$Age) == F) 조건을 추가해 줘야한다
# group by + summarise
생존자와 사망자수 출력
data %>% group_by(Survived) %>% summarise(cnt=n(), max_fare=max(Fare))
생존비율, 사망비율로 변환
data %>% group_by(Survived) %>% summarise(cnt=n()/nrow(data), max_fare=max(Fare))
성별에따른 생존여부 출력
data %>% group_by(Survived,Sex) %>% summarise(cnt=n())
₩문제 3 . 성별 생존 여부별 평균 요금을 구하세요 data %>% group_by(Survived,Sex) %>% summarise(cnt=n(),mean_fare=mean(Fare)) 문제 4. 클래스가 1등급인 사람들 중 생존여부에 따라 최소, 최대요금, 평균나이를 출력 data %>% filter(is.na(data$Age)==F & Pclass==1) %>% group_by(Survived) %>% summarise(cnt=n(), max_fare=max(Fare), min_fare=min(Fare), mean_age=mean(Age)) mean에서 제공하는 함수 이용 ( 동일 결과를 도출함!!) data %>% filter(Pclass==1) %>% group_by(Survived) %>% summarise(cnt=n(), max_fare=max(Fare), min_fare=min(Fare), mean_age=mean(Age, na.rm=T)) 문제 5. 형제자매가 함께 여행을 온 식구들의 생존율을 구하시오 data %>% filter(SibSp>0) %>% group_by(Survived) %>% summarise(cnt=n()/nrow(data%>% filter(SibSp>0))) 문제 6. 성별 생존 확률을 구하세요(mutate 이용) #mutate 컬럼을 정제하거나 새로운 컬럼을 추가할 때 사용한다. #성별기준 생존비율 data %>% group_by(Sex,Survived) %>% summarise(cnt=n()) %>% mutate(pct=cnt/sum(cnt)) #생존기준 남녀비율 data %>% group_by(Survived,Sex) %>% summarise(cnt=n()) %>% mutate(pct=cnt/sum(cnt)) |
요금에 대한 summary를 확인하니 중앙값은 14.45 평균값은 32.20으로 gap이 몹시 큰 걸 알 수 있다. 이 데이터의 분포 자체가 너무 넓게 퍼져있어 유효한 정보를 뽑아낼수 없겠다는 것을 캐치하면서 분석을 진행해야 함.
아무것도 없는 관측치를 결측치라고 했었음
#Embarked
data %>% mutate(Embarked==ifelse(Embarked=="",'U',Embarked))%>% filter(Embarked=="U")
성별이 여성이면 1 남성이면 0으로 Sex2 column을 생성하세요
data %>% mutate (Sex2 =ifelse(Sex==female,1,0)) %>% select(Sex,Sex2) %>% head()
선박별 좌석등급의 비율을 구하세요 data %>% mutate(Embarked=ifelse(Embarked=="",'U',Embarked))%>% group_by(Embarked,Pclass)%>% summarise(cnt=n()) %>% mutate(pct=cnt/sum(pct)) 선박별 좌석등급의 평균요금, 평균 동반자 수를 구하세요 data %>% group_by(Embarked,Pclass) %>% summarise(mean_f = mean(Fare),mean_p = mean(Parch+SibSp)) 선박별 생존률 비율을 구하세요 data %>% group_by(Embarked,Survived) %>% summarise(cnt=n())%>% mutate(pct=cnt/sum(pct)) 혼자 여행온 사람의 나이, 좌석등급에 대한 summary를 구하세요 data %>% filter(Parch+SibSp ==0) %>% select (Age, Pclass) %>% summary 혼자 여행온 사람의 성비를 구하세요 data %>% filter(Parch+SibSp==0) %>% group_by(Sex) %>% summarise(pct=n() / nrow(data%>%filter(Parch+SibSp==0))) 혼자 여행온 여성과 그렇지 않은 여성의 생존율을 비교해 보세요 data %>% filter(Sex=="female") %>% mutate(solo=ifelse(Parch+SibSp==0,'s','ns')) %>% group_by(Survived,solo) %>% summarise(cnt=n()) %>% mutate(pct=cnt/sum(cnt)) |
'Big Data > R' 카테고리의 다른 글
기본적인 R의 지식과 문법 (0) | 2019.02.16 |
---|