[4일차] Do it! 쉽게 배우는 R 데이터 분석 / 180P~ 218P / 실제 데이터 분석하기 !
# 그래프만들기
산점도란. x축과 y축에 점으로 표현한 그래프를 산점도라고 합니다.
산점도는 나이와 소득처럼 연속 값으로 된 두 변수의 관계를 표현할 때 사용됩니다.
ggplot2 레이어 구조 이해
> ggplot2 문법은 레이어 구조로 되어 있습니다.
배경을 만들고, 그 위에 그래프 형태를 그리고, 마지막으로 축 범위, 색, 표식 등 설정을
추가하는 순서로 그래프를 만듭니다.
# 그래프 만들기
library(ggplot2)
# ggplot2 레이어 구조 이해
# 배경 설정
# x축은 displ, y축은 hwy로 지정해 배경 생성
ggplot(data =mpg, aes(x = displ, y= hwy))
# 배경에 산점도 추가
ggplot(data = mpg, aes(x = displ, y= hwy)) + geom_point()
xlim()과 ylim()를 활용해 축 범위 설정.
# 축 범위를 조정하는 설정 추가
ggplot(data = mpg, aes(x = displ, y= hwy)) +
geom_point()+
xlim(3, 6)+
ylim(10, 30)
# 막대그래프 - 집단 간 차이 표현
막대 그래프는 데이터의 크기를 막대의 길이로 표현한 그래프입니다.
성별 소득 차이처럼 집단 간 차이를 표현할 때 주로 사용.
#막대 그래프
library(dplyr)
data(mpg)
df_mpg <- mpg %>%
group_by(drv) %>%
summarise(mean_hwy = mean(hwy))
df_mpg
ggplot(data = df_mpg, aes(x = drv, y= mean_hwy)) + geom_col()
ggplot(data = df_mpg, aes(x = reorder(drv, -mean_hwy), y= mean_hwy)) + geom_col()
ggplot(data = mpg, aes(x = drv)) + geom_bar()
ggplot(data = mpg, aes(x = hwy)) + geom_bar()
## 평균막대그래프는 데이터를 요약한 평균표를 먼저 만든 후 이 평균표를 이용해 만듭니다.
반면 빈도 막대 그래프는 별도로 표를 만들지 않고 원자료를 이용해 바로 만듭니다.
요약표를 이용하는지 원자료를 이용하는지 따라 그래프를 만드는 절차와 함수가 다르다.
geom_col()은 요약표 / geom_bar()는 원자료를 사용해 막대 그래프를 만듭니다.
# 데이터를 선으로 표현한 그래프를 선 그래프라고 합니다.
시간에 따라 달라지는 데이터를 표현할 때는 주로 선 그래프를 이용.
ggplot(data = economics, aes(x=date,y=unemploy))+geom_line()
# 상자그림 - 집단 간 분포 차이 표현하기
상자그림은 데이터의 분포를 직사각형 상자 모양으로 표현한 그래프.
상자 그림을 보면 분포를 알 수 있기 때문에 평균만 볼 때보다 데이터의 특징을 더 자세히 이해 가능.
ggplot(data = mpg, aes(x=drv, y=hwy))+geom_boxplot()
# 문제 : class가 "compact", "subcompact", "suv"인 자동차의 cty가 어떻게 다른지 비교해보자.
mpg_newd <- mpg %>%
filter(class %in% c("compact", "subcompact","suv"))
ggplot(data= mpg_newd, aes(x = class, y= cty)) + geom_boxplot()
# 데이터 분석하기
# 패키지 설치 및 로드
library(foreign)
library(readxl)
raw_welfare <- read.spss(file = "Koweps_hpc10_2015_beta1.sav", to.data.frame =T)
welfare <- raw_welfare
head(welfare)
welfare <- rename(welfare,
sex = h10_g3,
birth = h10_g4,
marriage = h10_g10,
religion = h10_g11,
income = p1002_8aq1,
code_jon = h10_eco9,
code_region = h10_reg7)
class(welfare$sex)
table(welfare$sex)
# 이상치, 결측 처리
welfare$sex <- ifelse(welfare$sex ==9, NA, welfare$sex)
table(is.na(welfare$sex))
welfare$sex <- ifelse(welfare$sex == 1, "male", "female")
table(welfare$sex)
qplot(welfare$sex)
summary(welfare$income)
qplot(welfare$income) + xlim(0, 1000)
welfare$income <- ifelse(welfare$income %in% c(0, 9999), NA, welfare$income)
table(is.na(welfare$income))
sex_income <- welfare %>%
filter(!is.na(income)) %>%
group_by(sex) %>%
summarise(mean_income = mean(income))
sex_income
ggplot(data = sex_income, aes(x = sex, y= mean_income)) + geom_col()
## 나이와 월급의 관계 - "몇 살 때 월급을 가장 많이 받을까?"
summary(welfare$birth)
table(is.na(welfare$birth))
welfare$birth <- ifelse(welfare$birth == 9999, NA, welfare$birth)
table(is.na(welfare$birth))
welfare$age <- 2015 - welfare$birth + 1
summary(welfare$age)
qplot(welfare$age)
age_income <- welfare %>%
filter(!is.na(income)) %>%
group_by(age) %>%
summarise(mean_income = mean(income))
head(age_income)
ggplot(data = age_income, aes(x = age, y= mean_income)) + geom_line()
# 연령대에 따른 월급 차이
welfare <- welfare %>%
mutate(ageg = ifelse(age < 30, "young", ifelse(age <= 59, "middle", "old")))
table(welfare$ageg)
ageg_income <- welfare %>%
filter(!is.na(income)) %>%
group_by(ageg) %>%
summarise(mean_income = mean(income))
ageg_income
ggplot(data = ageg_income, aes(x = ageg, y = mean_income)) +
geom_col() +
scale_x_discrete(limits = c("young", "middle", "old"))
댓글