R
[R] 기술통계 - 실전예제
빵으니
2020. 7. 8. 18:26
기술통계¶
실전예제¶
전국 연령별 평균 월급 조사(2013년)¶
In [1]:
# 데이터 로드
# 통계청 2013년 발표 연령, 남녀, 경력별 평균월급 데이터 셋
df <- read.csv('R-ggagi-data/example_salary.csv', stringsAsFactors = T, na='-')
# - 값은 NA 로 바꾸기
In [2]:
head(df)
In [3]:
# 한글 변수명 -> 영문으로 바꾸기
colnames(df)
colnames(df) <- c('age','salary', 'specialSalary', 'workingTime', 'numberOfWorker', 'career', 'sex')
In [4]:
colnames(df)
In [5]:
str(df)
In [6]:
# 평균 월급 구하기
Mean <- mean(df$salary, na.rm=T)
Mean
In [8]:
# 아웃라이어 영향이 있는지 확인. 월급 중앙값 계산
Median <- median(df$salary, na.rm=T)
Median
In [9]:
# 범위 구하기
Range <- range(df$salary, na.rm=T)
Range
In [10]:
# 4064286 월급 연령대, 성별, 경력 확인
w <- which(df$salary == 4064286)
w
In [11]:
df[w,]
In [12]:
# 월급 4분위 수
Quantile <- quantile(df$salary, na.rm=T)
Quantile
In [13]:
# 리스트에 데이터 담기
Salary <- list(평균=Mean, 중앙값=Median, 범위=Range, 사분위=Quantile)
Salary
그룹별 평균 구하기¶
In [14]:
# 데이터 확인
head(df)
In [15]:
# 성별 평균 월급 - tapply() : group by
temp <- tapply(df$salary, df$sex, mean, na.rm=T)
temp
In [18]:
# 그래프로 확인
library('reshape2')
library('ggplot2')
melt <- melt(temp)
melt
ggplot(melt, aes(x=Var1, y=value, fill=Var1)) + geom_bar(stat='identity')
In [19]:
# 표준편차 - 남, 월급도 높고 격차도 큼
tapply(df$salary, df$sex, sd, na.rm=T)
In [20]:
# 범위
tapply(df$salary, df$sex, range, na.rm=T)
In [22]:
# 경력별 평균월급
temp <- tapply(df$salary, df$career, mean, na.rm=T)
temp
In [23]:
# 그래프로 확인
melt <- melt(temp)
melt
ggplot(melt, aes(x=Var1, y=value, group=1)) +
geom_line(colour='skyblue2', size=2) +
coord_polar() +
ylim(0, max(melt$value))
In [24]:
# 표준편차
tapply(df$salary, df$career, sd, na.rm=T)
In [25]:
# 범위
tapply(df$salary, df$career, range, na.rm=T)
In [27]:
# 경력별 가장 월급이 적은 그룹 - 경력 1~3, 여, 나이 60 이상
a1 <- df[which(df$salary == '1172399'),]
a1
In [28]:
# 경력별 가장 월급이 적은 그룹 - 경력 10년 이상, 여 나이 20-24
a2 <- df[which(df$salary == '1685204'),]
a2
In [34]:
# 경력별 가장 월급이 적은 그룹 - 경력 1년 마만, 여, 나이 60 이상
a3 <- df[which(df$salary == '1117605'),]
a3
In [35]:
# 경력별 가장 월급이 작은 그룹 - 경력 3~5년미만, 여 나이 60이상
a4 <- df[which(df$salary == '1245540'),]
a4
In [36]:
# 경력별 가장 월급이 작은 그룹 - 경력 5~10년미만, 여 나이 60이상
a5 <- df[which(df$salary == '1548036'),]
a5
아웃라이어 찾기와 제거하기¶
In [43]:
# 데이터 로드 - 대장암 관련 데이터 셋
df <- read.csv('R-ggagi-data/example_cancer.csv', stringsAsFactors = F, na='기록없음')
# F - factor 형 아닌 문자열로 가져와
In [44]:
# 요약 확인
str(df)
In [45]:
# 대장암에 걸리는 평균 나이
mean(df$age)
In [46]:
# age 특징 확인
summary(df$age)
In [47]:
# 시각화
boxplot(df$age)
In [48]:
boxplot(df$age, range=1.5)
In [49]:
# 아웃라이어 위치 찾기 IQR * 1.5
# IQR 길이
dist_iqr <- IQR(df$age, na.rm=T)
dist_iqr
In [50]:
# IQR 위치
post_iqr <- quantile(df$age, probs=c(0.25, 0.75), na.rm=T)
post_iqr
In [51]:
down_whisker <- post_iqr[[1]] - dist_iqr * 1.5
up_whisker <- post_iqr[[2]] + dist_iqr * 1.5
In [52]:
down_whisker
up_whisker
In [54]:
outlier <- subset(df, subset=(df$age < down_whisker | df$age > up_whisker))
str(outlier)
In [55]:
head(outlier)
평균값을 표준화하여 그래프 한 눈에 보기¶
In [56]:
# 데이터 로드 - 통계청 월급 정보
df <- read.csv('R-ggagi-data/example_salary.csv', stringsAsFactors = F, na='-')
In [58]:
# 한글 변수명 -> 영문으로 바꾸기
colnames(df)
colnames(df) <- c('age','salary','specialSalary','workingTime','numberOfWorker','career','sex')
In [59]:
# 표준화 - scale()
# scale을 동일하게 맞춰야 각 데이터를 동일한 기준으로 분석할 수 있기 때문
# 표준화를 통해 평균 0, 표준편차 1인 정규분포로 맞춰주는 것
salary_scale <- scale(df$salary)
In [60]:
head(salary_scale)
In [61]:
# 표준화 값 추가하기
df_scale <- cbind(df, scale=salary_scale)
head(df_scale)
In [64]:
# 시각화
g1 <- ggplot(df_scale, aes(x=scale, y=age))
g2 <- geom_segment(aes(yend=age), xend=0)
g3 <- geom_point(size=7, aes(colour=sex, shape=career))
g1 + g2 + g3 + theme_minimal()
In [ ]: