R 데이터분석
- 직업별 월급 최대 찾기 문제



문제 요약

1. welfare.csv 불러와 df만들기
*사용변수명 수정하고 나이 파생변수 추가하기
2.직업코드 목록 들어가있는 list_job.csv불러오기
3.작업코드 기준 welfare 직업변수결합.
직업코드, 직업명 변수 결합 확인
4.직업빈도 상위 10개 추출, 최대찾기
5.우러급 가장 많은 상위 10개 직업 알기
*분석결과 저장
6.위 표 막대그래프 표현
*막대 오름차순 정렬, 오른쪽으로 90도 회전
7.20대 대상 최대 월급 상위 10개 직업 막대그래프 표현
*막대 오름차순 정렬, 오른쪽 90도 회전

문제풀이코드

데이터불러오기


library(dplyr)
df=read.csv("welfare.csv")
#데이터구조확인
str(welfare)
#변수명 변경
welfare=rename(df, birth=생년월일항목,
    income=월급항목,
     code_job=직업코드항목)
#파생변수만들기 - 나이
welfare=welfare %>%
    mutate(age=2023-birth +1)

항목 결합 - 직업코드결합하기

llist_job=read.csv("list_job.csv")
welfare=left_join(welfare,list_job,
    by="code_job")
welfare %>%
    select(code_job, job)
    %>%>head()

상위10개추출하기

-job별로 분류후 개수세기

welfare %>%
    group_by(job) %>%
    summarise(n=n()) %>% #빈도수세기
    arrange(desc(n)) %>% #정렬
    head(10) #상위10개

막대그래프그리기

- 내림차순 정렬

library("ggplot2")
ggplot(data=job_income,
    aes(x=reorder(job, mean_income),    
             y=mean_income))+
    geom_col()+ #막대그래프
    coord_flip()  #회전

필터링

- 20대이상 상위 10개직업구하기
#데이터확인 - 최소 20살로 10대에 대한 필터링 불필요
summary(welfare$age)
#필터링
job_20 = welfare%>%
    filter(age<=29) %>%
    group_by(job) %>% summarise(mean_income=mean(income))%>%
    arrange(desc(mean_income)) %>%
    head(10)

그래프그리기

ggplot(job_20,        
                aes(x=reorder(job,mean_inomce),    
                 mean_income)+
    geom_col()+
    coord_flip()
    


여러 데이터 결합하기

#열결합 = 가로결합

df= left_join(df1, df2, by="열기준")



#행결합 = 세로결합 #rbind유사

group_alll=bind_row(group_a,group_b)


응용문제

mpg=ggplot2::mpg #데이터셋활용

fuel=data.frame(fl=c("c","d","e","p","r"),
    price_fl=c(2.35, 2.36, 2.11, 2.5,2.22))

mpg=left_join(mpg, fuel, by="fl")



그룹별 요약하기

요약통계량은 summarise () 안에서 처리하며,
주로 group_by와 같이 쓰임

df=ggplot2::mpg #데이터셋사용

R함수 사용방법


df %>% group_by(manufacturer) %>%
    summarise(mean_cty=mean(cty),
    sum_hwy=sum(hwy),
    median_cty=median(cty),
    n_n()) #개수=빈도

#각 집단별로 다시 집단나누기
mpg %>% group_by(manufacturer, drv)%>%
    summarise(mean_cty=mean(cty))

#정렬해주기
mpg  %>% group_by(class) %>% #알파벳순
    summarise(mean=mean(cty)) %>%
    arrange(desc(mean)) %>% #정렬해주기
    head()

응용문제

문제. compact클래스중 제조사별로 차종수, 상위 6?

mpg %>% filter(class=="compact") %>%
    group_by(manufacturer) %>%
    summarise(count=n()) %>% #빈도구하기#행수
    arrange(desc(count)) %>%
    head()


파생변수 추가하기 : mutate()

R함수 사용법

df %>% mutate(변수명=값처리)

df=iris #데이터셋이용
df %>% mutate(total=Sepal.Length+Sepal.Width,
mean=(Sepal.Length+Sepal.Width)/2)

%>% : 파이프 이용의 장점


#동시에 여러개 추가 가능

#추가한 변수 바로 이용가능
df %>% mutate(total=Sepal.Length+Sepal.Width) %>%
    arrange(total)  %>% head()

#$을 매번 붙여주지 않아도됨

#ifelse조건 사용가능
df %>% mutate( is_setosa=ifelse(Species=="setosa",1,0)
#ifelse(조건, 맞으면 나오는값, 아닐경우 값)

응용예시

df = ggplot2::mpg  #데이터셋 이용

df_ans = df %>% mutate(sum=cty+hwy,
     mean=sum/2) %>%
    arrange(desc(mean)) %>% head(3)

변수명 변경하기 : rename()


df=rename(df, 새변수명=기존변수명)

응용예시

df=iris #데이터셋이용

df=rename(df, sl=Sepal.Length)
df %>% group_by(Species) %>%
    summarise(mean=mean(sl))










데이터 정렬하기 : arrange()


오름차순과 내림차순 개념

오름차순 : 숫자가 점점 커진다, 올라간다
1 -> 2 -> 3...
df$a열에 대해 오름차순 정렬시
가장 위에 오는것은 최소값이된다.

내림차순 : 숫자가 점점 작아진다, 내려간다
3->2->1...
df$a열에 대해 내림차순 정렬시
가장 위에 오는 것은 최대값이 된다.

(참고) 기본함수의 order() #기본 오름차순
df[order(df$열), ] #오름차순
df[order(df$열, decreasing = T), ] #내림차순


R함수 사용법


arrange(변수명) #기본 오름 차순

arrange(desc(변수명)) #내림차순


응용예시

ggplot2::mpg #데이터셋이용

문제. audi제조사의 hwy 5순위까지 추출
mpg %>% filter(manufacturer =="audi") %>%
arrange(desc(hwy)) %>%head(%5)

#(참고) %>% : 데이터프레임 mpg에 대한 데이터처리를 일괄로 처리해주도록 이어주는 역할






필요 변수만 추출하기 : select()

filter와 차이점 :
filter()는 #행추출, select()는 #열추출

사용법

df %>% select(변수명)  #해당변수만 추출
#여러개
df %>% select(변수명,변수명,..)  #해당변수만 추출
df %>% select(-변수명,-변수명) #해당변수만 제외


R코드
df=iris ; head(df)

응용예시1

df  %>% select(-Species) %>% head()
#Species 변수 제외

df %>% filter(Species=="setosa") %>%
select(Petal.Length) %>% head( )


응용예시2

#다룰변수만 열 추출하기
mpg = ggplot::mpg #데이터셋이용
df= mpg %>% select(class, cty)
head(df,2)

#조건넣어서 추출하기
#각 조건별 cty평균구해서 비교하기
df_suv = df %>%filter(class=="suv")
df_compact = df %>%filter(class=="compact")
mean(df_sub$cty)
mean(df_compact$cty)











dplyr 패키지

- 데이터 전처리에 유용하게 쓰이는 패키지
-주로쓰이는 함수들
%>%  #파이프 (단축키 : ctrl shift m)
filter #행추출
select #열추출
mutate #변수추가
arrange #정렬
summarise #통계치
group_by #집단별나누기
left_join #열합치기
bind_rows #행합치기

이중
filter 함수에 대해 알아보겠습니다.

조건에 맞는 데이터 추출하기 : filter()


library(dplyr)
df=iris ; head(df)

df %>% filter( Species=="setosa")

#여러조건 추출 원할때
df %>%
filter( Species %in% c("versicolor","setosa")) %>% head()
#Species열의 값이 versicolor혹은 setosa인 행들만 걸러서 상위 6개만 표시하기
#참고 : %>% 는 df내 데이터 처리를 연결해주는 역할



문제1. a조건과 b조건의 hwp 평균비교
tip : a조건, b조건 따로 저장후 각각 계산
ggplot2::mpg 데이터셋 이용


mpg_a=mpg %>%filter(displ <=4)
mean(mpg_a$hwy)
mpb_b=mpg %>%filter(displ >=5)
mean(mpg_b$hwy)



문제2. 원하는 조건들의 hwy 평균구하기

mpg_new = mpg %>% filter(manufacturer %in% c("ford","honda"))
mean(mpg_new$hwy)







+ Recent posts