데이터 분석 과정 요약
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
'Python > Data Visualization' 카테고리의 다른 글
[Kaggle 데이터 활용] 여러 개의 그래프 한번에 그리기(2) 기초 (0) | 2023.08.10 |
---|---|
[Plotly] Kaggle Survey Data 시각화 기초 (0) | 2023.08.10 |
[Plotly] 그래프 수정가능한 옵션 보기 (0) | 2023.08.10 |
[Plotly] 시작하기 : 막대그래프 예제 (0) | 2023.08.10 |
[API 다루기] XML > JSON > dataframe 변환하기 (0) | 2023.08.07 |