이전 분석 글
7. 사용자들의 연봉정보 전처리 및 시각화
Q29. What is your current yearly compesation?
show_plot_by_qno("Q29")
Q29는 kaggle 사용자의 현재 연봉에 대한 질문이다. 하지만 이를 이전에 작성한 show_plot_by_qno()함수를 이용해 그래프를 나타내면 우리가 원하는대로 정렬이 되지 않는다. 위의 그래프를 그릴 때 사용한 정렬방법, 즉 value_count()를 사용해 정렬하면 다음과 같다.
answer["Q29"].value_counts()
$0-999 1112
10,000-14,999 493
30,000-39,999 464
1,000-1,999 444
40,000-49,999 421
100,000-124,999 404
5,000-7,499 391
50,000-59,999 366
7,500-9,999 362
150,000-199,999 342
20,000-24,999 337
60,000-69,999 318
15,000-19,999 299
70,000-79,999 289
25,000-29,999 277
2,000-2,999 271
125,000-149,999 269
3,000-3,999 244
4,000-4,999 234
80,000-89,999 222
90,000-99,999 197
200,000-249,999 155
250,000-299,999 78
300,000-499,999 76
$500,000-999,999 48
>$1,000,000 23
Name: Q29, dtype: int64
위 결과를 재 정렬하기 위해 idex를 reset한 후 각각 range와 count로 컬럼명을 변경한다.
q29_count = answer["Q29"].value_counts().reset_index()
q29_count.columns = ["range", "counts"]
q29_count
# range를 기준으로 정렬
q29_count.sort_values("range")
이와 같은 문제가 발생하는 이유는 range의 값이 숫자가 아닌 텍스트이기 때문이다. 텍스트일 경우 문자 이후에 작은 숫자인 0부터 1, 2, 3.. 과 같은 순서로 되기 때문에 범위값이 작은 것부터 오름차순으로 정렬되지 않는다. 이와 같은 문제를 해결하기 위해서는 값의 변형이 필요하다.
q29_count["range"]
0 $0-999 1
10,000-14,999 2
30,000-39,999 3
1,000-1,999 4
40,000-49,999 5
100,000-124,999 6
5,000-7,499 7
50,000-59,999 8
7,500-9,999 9
150,000-199,999 10
20,000-24,999 11
60,000-69,999 12
15,000-19,999 13
70,000-79,999 14
25,000-29,999 15
2,000-2,999 16
125,000-149,999 17
3,000-3,999 18
4,000-4,999 19
80,000-89,999 20
90,000-99,999 21
200,000-249,999 22
250,000-299,999 23
300,000-499,999 24
$500,000-999,999 25
>$1,000,000
Name: range, dtype: object
range값은 범위를 나타내고 있어 0-999와 같이 이상-이하와 같은 형태로 나타내고 있으며 $, -와 같은 기호들이 포함되어있다. 이처럼 텍스트인 range를 숫자화 하기 위해 “-”를 기준으로 split하고 replace를 통해 특수 기호들을 제거한다.
# "-"를 기준으로 split
q29_count["range"].str.split("-")
0 [$0, 999]
3 [1,000, 1,999]
15 [2,000, 2,999]
17 [3,000, 3,999]
18 [4,000, 4,999]
6 [5,000, 7,499]
8 [7,500, 9,999]
1[10,000, 14,999]
12 [15,000, 19,999]
10 [20,000, 24,999]
14 [25,000, 29,999]
2 [30,000, 39,999]
4 [40,000, 49,999]
7 [50,000, 59,999]
11 [60,000, 69,999]
13 [70,000, 79,999]
19 [80,000, 89,999]
20 [90,000, 99,999]
5 [100,000, 124,999]
16 [125,000, 149,999]
9 [150,000, 199,999]
21 [200,000, 249,999]
22 [250,000, 299,999]
23 [300,000, 499,999]
24 [$500,000, 999,999]
25 [>$1,000,000]
Name: range, dtype: object
단순히 split할 경우 각각의 리스트만 만들어진다. 이 결과를 dataframe으로 보기 위해 expand 옵션을 True로 지정한다.
q29_count["range"].str.split("-", expand = True)
여기서 분리된 0번째 컬럼은 최솟값(min), 1번째 컬럼은 최댓값(max)로 지정하여 min 컬럼에 특수기호들을 제거한다.
q29_count["min"] = q29_count["range"].str.split("-", expand = True)[0]
q29_count["max"] = q29_count["range"].str.split("-", expand = True)[1]
# 특수기호 제거 및 int로 변환
q29_count["min"].str.replace(",|\$|>","").astype(int)
0 0
1 10000
2 30000
3 1000
4 40000
5 100000
6 5000
7 50000
8 7500
9 150000
10 20000
11 60000
12 15000
13 70000
14 25000
15 2000
16 125000
17 3000
18 4000
19 80000
20 90000
21 200000
22 250000
23 300000
24 500000
25 1000000
Name: min, dtype: int64
# 수정된 사핟을 q29_count에 반영한다.
q29_count["min"] = q29_count["min"].str.replace(",|\$|>","").astype(int)
q29_count
# min값을 기준으로 정렬하면 오름차순으로 정렬할 수 있다.
q29_count.sort_values("min")
kaggle 이용자의 연봉 그래프
sns.barplot(data = q29_count, x = "range", y = "count")
range를 x축에 그릴 경우 값을 알아보기가 힘들다. 이럴때에는 x축과 y축을 바꾸고 그래프의 크기를 조정한다.
plt.figure(figsize = (10, 6))
sns.barplot(data = q29_count, x = "count", y = "range")
kaggle 이용자 중 미국인들의 연봉 그래프
미국인, 즉 사용자의 현재 거주지가 미국인 사람들에 대해서만 연봉그래프를 그린다면 일단 사용자의 거주지에 대한 질문을 찾고, 그 중에서 거주지가 미국인 사람들의 데이터만을 가져와 그래프를 그릴 수 있다.
# 사용자의 현재 거주 국가를 묻는 질문은 Q4이다.
question
Duration (in seconds) Duration (in seconds)
Q2 What is your age (# years)?
Q3 What is your gender? - Selected Choice
Q4 In which country do you currently reside?
Q5 Are you currently a student? (high school, uni...
...
Q44_8 Who/what are your favorite media sources that ...
Q44_9 Who/what are your favorite media sources that ...
Q44_10 Who/what are your favorite media sources that ...
Q44_11 Who/what are your favorite media sources that ...
Q44_12 Who/what are your favorite media sources that ...
Name: 0, Length: 296, dtype: object
미국인에 대한 데이터를 가져오기 위해 Q4의 answer가 "United States of America”인 데이터 만을 가져온다. 이를 위해 데이터 프레임에서 일치하는 요소를 확인하는 isin()함수를 사용한다.
answer[answer["Q4"].isin(["United States of America"])]
이제 위의 데이터를 이용해 미국인들의 연봉에 대한 그래프를 그릴 수 있다.
q4_usa = answer[answer["Q4"].isin(["United States of America"])]
sns.countplot(data = q4_usa, y = "Q29")
위 그래프를 재 정렬하기 위해 오름차순으로 정렬했던 q29_count의 range를 리스트화 한 것을 위 그래프의 기준으로 지정한다.
q29_cols = q29_count.range.tolist()
sns.countplot(data = q4_usa, y = "Q29", order = q29_cols)
연봉이 0에서 999$인 소수의 학생 또는 취업 준비생들과 같은 사람들을 제외하고 대다수의 미국인 이용자가 10만달러에서 25만 달러정도의 연봉을 받고 있음을 알 수 있다.
한국인에 대한 연봉 그래프
한국인의 연봉 그래프는 위의 미국인에 대한 연봉 그래프를 그리는 과정과 같다.
q4_kor = answer[answer["Q4"].isin(["South Korea"])]
sns.countplot(data = q4_kor, y = "Q29", oreder = q29_cols)
한국은 표본의 수가 많지 않지만 대략 적게는 2천 달러에서 많게는 10만 달러의 연봉을 받는다는 것을 알 수 있다. 이는 다양한 분야의 사람들이 이용하기 때문에 연봉에서 큰 차이가 보이는 것이라 예상한다. 또한 미국과 비교해서 전체적으로 평균연봉이 낮음을 알 수 있다.
'Study > Python' 카테고리의 다른 글
[Python] OpenCV를 이용한 이미지/영상 처리 모아보기 (0) | 2023.07.15 |
---|---|
[python/pandas]pandas를 이용한 2022 Kaggle Survey 분석 시리즈 (0) | 2023.04.28 |
[Python]pandas를 이용한 2022 kaggle survey 분석 및 시각화 - 5 (1) | 2023.04.26 |
[Python]pandas를 이용한 2022 kaggle survey 분석 및 시각화 - 4 (1) | 2023.04.14 |
[Python]pandas를 이용한 2022 kaggle survey 분석 및 시각화 - 3 (0) | 2023.04.13 |