본문 바로가기
Python/Data Visualization

[Kaggle 활용] 인도/미국 연봉 비율 비교 EDA 총정리 예제

by ISLA! 2023. 8. 10.

데이터 분석 과정 요약

 

1. 시각화 대충 그려보기(간단히 plotly.express 이용) 👉 특이점 발견 (인도, 미국이 높네)

2. 분석 기획 하기 👉 두 나라의 연봉을 비교해볼까?

3. 연봉 값이 너무 다양하니, 연봉을 구간으로 나눠야겠다 👉 구간 기준을 세워  4-5개 정도로 나누자

4. 구간화 코드 작성

5. 인도, 미국 각각 groupby 연산을 통해 연봉 구간별로 분포 파악

6. 각 연봉 구간 별로 비율 파악

7. 그래프를 그려 비교 (상세한 시각화는 plotly.graph_objects 사용)


1. pd.read_csv() 로 데이터 다운

import pandas as pd

df = pd.read_csv('./data/kaggle/kaggle_survey_2021/kaggle_survey_2021_responses.csv')
df.head()

 

2. 데이터 가공

  • 질문지만 따로 빼서 questions에 저장(Series)

  • 0번째 인덱스 행 제거 후 df에 저장
#질문지:0번 인덱스의 행
questions = df.iloc[0, :].T

#0번째 인덱스 행 제거
df = df.iloc[1:, :].reset_index(drop=True)
df.head()

 

3. 궁금한 데이터 확인하기

❓어느 나라 사람이 조사에 가장 많이 참여했을까?
- 나라 관련 질문 : 3번 질문
- 나라 관련 컬럼 : df 의 Q3 컬럼
questions.Q3

>>>결과>>>
'In which country do you currently reside?'
  • df에서 Q3 컬럼 값이 각각 몇 개 인지 확인 : value_counts()
  • plotly 를 활용하여 시각화
#나라별 분포 시각화
q3_df = df['Q3'].value_counts()
fig = go.Figure()
fig.add_trace(go.Bar(x = q3_df.index, y = q3_df.values))
fig.show()

▶ 결과 : 인도와 미국이 가장 많다!

 

❓ 두 나라 사람들의 연봉은 어떨까?
- 전체 데이터 중 인도와 미국의 연봉 데이터만 뽑아보자
  • 나라와 연봉 관련 컬럼만 뽑아 해당 데이터 프레임을 복사(copy)
  • 연봉(Q25) 값이 얼마나 다양한지 unique() 로 확인
q3_q25 = df[['Q3', 'Q25']].copy()
q3_q25['Q25'].unique()

 

  • 이 모든 값을 한눈에 비교하기는 어려울 거 같으니 4~5개 구간으로 구분을 해보자.
    • 4개 구간 설정: $0-1,999 / $2,000-3,999 / $4,000-7,499 / $7,500+ 
    • 나눈 구간을 기준으로 value 값 변경하기 : replace 함수 사용
value_mapping = {'$0-999': '$0-1,999','1,000-1,999': '$0-1,999',
    '2,000-2,999': '$2,000-3,999','3,000-3,999': '$2,000-3,999',
    '4,000-4,999': '$4,000-7,499','5,000-7,499': '$4,000-7,499',
    '25,000-29,999': '$7,500+','60,000-69,999': '$7,500+',
    '30,000-39,999': '$7,500+','15,000-19,999': '$7,500+',
    '70,000-79,999': '$7,500+','10,000-14,999': '$7,500+',
    '20,000-24,999': '$7,500+','7,500-9,999': '$7,500+',
    '100,000-124,999': '$7,500+','40,000-49,999': '$7,500+',
    '50,000-59,999': '$7,500+',
    '300,000-499,999': '$7,500+',
    '200,000-249,999': '$7,500+',
    '125,000-149,999': '$7,500+',
    '250,000-299,999': '$7,500+',
    '80,000-89,999': '$7,500+',
    '90,000-99,999': '$7,500+',
    '150,000-199,999': '$7,500+',
    '>$1,000,000': '$7,500+',
    '$500,000-999,999': '$7,500+'}
    
q3_q25['Q25'] = q3_q25['Q25'].replace(value_mapping)
q3_q25

 

  • 각 연봉 구간별로 얼마나 많은 사람이 속하는지 groupby() & size() 함수로 확인
  • reset_index로 인덱스 값을 재정렬해주고, 새로 생성되는 컬럼의 이름을 count로 정해준다
temp_df = q3_q25.groupby(['Q3', 'Q25']).size().reset_index().rename(columns={0:'Count'})
  • 이제 인도와 미국 각각의 데이터를 다루어보자
    • 전체 데이터에서 인도/미국 데이터에 해당하는 데이터를 분리해내고,
    • percentage라는 컬럼을 만들어, 비율을 계산
#india
india_df = temp_df[temp_df['Q3'] == 'India'].reset_index(drop=True)
india_df['percentage'] = india_df['Count'] / india_df['Count'].sum()

#usa
usa_df = temp_df[temp_df['Q3'] == 'United States of America'].reset_index(drop=True)
usa_df['percentage'] = usa_df['Count'] / usa_df['Count'].sum()

미국 결과 예시 :

 

  • 인도와 미국 각각의 데이터 프레임을 concat 함수로 함치기
  • percentage 값이 한눈에 들어오지 않으니 깔끔한 숫자로 변경
india_usa_df = pd.concat([india_df, usa_df]).reset_index(drop=True)
india_usa_df['%'] = round(india_usa_df['percentage']*100, 1)

india_usa_df

 

  • 두 나라 각각의 연봉 구간별 분포를 보는 막대그래프 그려보기
    • 반복문 : 각 그룹은 country 변수(고윳값)에, 시각화할 데이터는 percentage변수(데이터프레임)에 할당
fig = go.Figure()

for country, percentage in india_usa_df.groupby('Q3'):
    fig.add_trace(go.Bar(x = percentage['Q25'], y = percentage['%'], name = country, 
                         text=percentage['%'], texttemplate='%{text}%', textposition='inside'))

fig.update_layout(barmode = 'group', title='india & usa', height = 500, plot_bgcolor = 'white')
fig.show()

728x90