통계 이야기

[4일차] Do it! 쉽게 배우는 R 데이터 분석 / 180P~ 218P / 실제 데이터 분석하기 !

창이 2022. 5. 10.
728x90
반응형

# 그래프만들기

산점도란. 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()

# 실업자 수가 약 5년 주기로 등락을 반복하고, 2005년 이후 급격하게 증가했다가 2010년 이후 다시 감소하는 추세

# 상자그림 - 집단 간 분포 차이 표현하기 

상자그림은 데이터의 분포를 직사각형 상자 모양으로 표현한 그래프. 

상자 그림을 보면 분포를 알 수 있기 때문에 평균만 볼 때보다 데이터의 특징을 더 자세히 이해 가능. 

 

ggplot(data = mpg, aes(x=drv, y=hwy))+geom_boxplot()

출처 : do it r 데이터분석

 

# 문제 : 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()

20대 초반에 100만원 가량의 월급, 50대 무렵 300만 원 초반대로 가장 많은 월급, 그 이후로 지속적으로 감소하다가 70대 이후에는 20대보다 낮은 월급

# 연령대에 따른 월급 차이 

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"))

 

728x90
반응형

댓글

추천 글