728x90
Pandas 연습 문제 풀기 -6 🐼
필요한 라이브러리 임포트¶
In [1]:
import pandas as pd
import numpy as np
[데이터] 확인¶
- user_id 유저 아이디
- age 나이
- gender 성별
- occupation 직업
- zip_code 우편번호
파일 불러오기¶
read_csv를 통해 './data/users.csv'파일을 올바른 형태로 불러온 뒤 users에 저장해주세요.
user_id를 인덱스로 설정해주세요. 열을 구분하는 구분자는 '|'임
In [2]:
users = pd.read_csv("./data/users.csv", sep="|", index_col="user_id")
users
Out[2]:
age | gender | occupation | zip_code | |
---|---|---|---|---|
user_id | ||||
1 | 24 | M | technician | 85711 |
2 | 53 | F | other | 94043 |
3 | 23 | M | writer | 32067 |
4 | 24 | M | technician | 43537 |
5 | 33 | F | other | 15213 |
... | ... | ... | ... | ... |
939 | 26 | F | student | 33319 |
940 | 32 | M | administrator | 02215 |
941 | 20 | M | student | 97229 |
942 | 48 | F | librarian | 78209 |
943 | 22 | M | student | 77841 |
943 rows × 4 columns
직업별 평균 연령을 구해서 occupatin_age_mean 변수에 대입해주세요.ㅣ¶
In [3]:
occupatin_age_mean = users.groupby("occupation").age.mean()
occupatin_age_mean
Out[3]:
occupation
administrator 38.746835
artist 31.392857
doctor 43.571429
educator 42.010526
engineer 36.388060
entertainment 29.222222
executive 38.718750
healthcare 41.562500
homemaker 32.571429
lawyer 36.750000
librarian 40.000000
marketing 37.615385
none 26.555556
other 34.523810
programmer 33.121212
retired 63.071429
salesman 35.666667
scientist 35.548387
student 22.081633
technician 33.148148
writer 36.311111
Name: age, dtype: float64
occupatin_age_mean을 reset_index로 데이터프레임으로 만들어주세요¶
In [4]:
occupatin_age_mean = occupatin_age_mean.reset_index()
occupatin_age_mean
Out[4]:
occupation | age | |
---|---|---|
0 | administrator | 38.746835 |
1 | artist | 31.392857 |
2 | doctor | 43.571429 |
3 | educator | 42.010526 |
4 | engineer | 36.388060 |
5 | entertainment | 29.222222 |
6 | executive | 38.718750 |
7 | healthcare | 41.562500 |
8 | homemaker | 32.571429 |
9 | lawyer | 36.750000 |
10 | librarian | 40.000000 |
11 | marketing | 37.615385 |
12 | none | 26.555556 |
13 | other | 34.523810 |
14 | programmer | 33.121212 |
15 | retired | 63.071429 |
16 | salesman | 35.666667 |
17 | scientist | 35.548387 |
18 | student | 22.081633 |
19 | technician | 33.148148 |
20 | writer | 36.311111 |
매개변수로 행을 받아서 메시지를 구성하는 함수를 정의하세요.¶
- 직업 administrator의 평균 나이는 38.74683544303797살 입니다.
In [5]:
def message(x):
return "직업 administrator의 평균 나이는 {}입니다.".format(x)
occupation_age_mean데이터프레임에 위에서 정의한 함수를 적용하세요.¶
- 리턴된 결과값을 새로운 열인 'messge'를 만들어 대입하세요.
- 'message'열이 추가된 occupation_age_mean데이터프레임 내용을 확인해보세요.
In [6]:
occupatin_age_mean["message"] = occupatin_age_mean["age"].apply(message)
In [7]:
occupatin_age_mean
Out[7]:
occupation | age | message | |
---|---|---|---|
0 | administrator | 38.746835 | 직업 administrator의 평균 나이는 38.74683544303797입니다. |
1 | artist | 31.392857 | 직업 administrator의 평균 나이는 31.392857142857142입니다. |
2 | doctor | 43.571429 | 직업 administrator의 평균 나이는 43.57142857142857입니다. |
3 | educator | 42.010526 | 직업 administrator의 평균 나이는 42.01052631578948입니다. |
4 | engineer | 36.388060 | 직업 administrator의 평균 나이는 36.38805970149254입니다. |
5 | entertainment | 29.222222 | 직업 administrator의 평균 나이는 29.22222222222222입니다. |
6 | executive | 38.718750 | 직업 administrator의 평균 나이는 38.71875입니다. |
7 | healthcare | 41.562500 | 직업 administrator의 평균 나이는 41.5625입니다. |
8 | homemaker | 32.571429 | 직업 administrator의 평균 나이는 32.57142857142857입니다. |
9 | lawyer | 36.750000 | 직업 administrator의 평균 나이는 36.75입니다. |
10 | librarian | 40.000000 | 직업 administrator의 평균 나이는 40.0입니다. |
11 | marketing | 37.615385 | 직업 administrator의 평균 나이는 37.61538461538461입니다. |
12 | none | 26.555556 | 직업 administrator의 평균 나이는 26.555555555555557입니다. |
13 | other | 34.523810 | 직업 administrator의 평균 나이는 34.523809523809526입니다. |
14 | programmer | 33.121212 | 직업 administrator의 평균 나이는 33.121212121212125입니다. |
15 | retired | 63.071429 | 직업 administrator의 평균 나이는 63.07142857142857입니다. |
16 | salesman | 35.666667 | 직업 administrator의 평균 나이는 35.666666666666664입니다. |
17 | scientist | 35.548387 | 직업 administrator의 평균 나이는 35.54838709677419입니다. |
18 | student | 22.081633 | 직업 administrator의 평균 나이는 22.081632653061224입니다. |
19 | technician | 33.148148 | 직업 administrator의 평균 나이는 33.148148148148145입니다. |
20 | writer | 36.311111 | 직업 administrator의 평균 나이는 36.31111111111111입니다. |
시리즈의 각 항목을 매개변수로 받아서 'M'->1, 'F'->0을 반환하는 함수를 적용하세요.¶
In [8]:
def sex(x):
if x=="M": return 1
elif x=="F": return 0
users의 'gender'열에 위에서 정의한 함수를 적용하세요.¶
- 리턴된 결과값을 새로운 열인 'gender_n'를 만들어 대입하세요.
- 'gender_n'열이 추가된 users데이터프레임 내용을 확인해보세요.
In [9]:
users["gender"].apply(sex)
Out[9]:
user_id
1 1
2 0
3 1
4 1
5 0
..
939 0
940 1
941 1
942 0
943 1
Name: gender, Length: 943, dtype: int64
In [10]:
users["gender_n"]=users["gender"].apply(sex)
In [11]:
users
Out[11]:
age | gender | occupation | zip_code | gender_n | |
---|---|---|---|---|---|
user_id | |||||
1 | 24 | M | technician | 85711 | 1 |
2 | 53 | F | other | 94043 | 0 |
3 | 23 | M | writer | 32067 | 1 |
4 | 24 | M | technician | 43537 | 1 |
5 | 33 | F | other | 15213 | 0 |
... | ... | ... | ... | ... | ... |
939 | 26 | F | student | 33319 | 0 |
940 | 32 | M | administrator | 02215 | 1 |
941 | 20 | M | student | 97229 | 1 |
942 | 48 | F | librarian | 78209 | 0 |
943 | 22 | M | student | 77841 | 1 |
943 rows × 5 columns
직업별 남성의 수를 구하세요.¶
- 'gender_n'에 남성일 경우 숫자 1이 있습니다. 이 데이터를 이용해서 구하세요.
- 구해진 결과는 occupation_man_count변수에 대입하세요.
In [12]:
occupation_man_count = users.groupby("gender_n").get_group(1).occupation.value_counts()
In [13]:
occupation_man_count
Out[13]:
student 136
other 69
educator 69
engineer 65
programmer 60
administrator 43
executive 29
scientist 28
technician 26
writer 26
librarian 22
entertainment 16
marketing 16
artist 15
retired 13
lawyer 10
salesman 9
doctor 7
none 5
healthcare 5
homemaker 1
Name: occupation, dtype: int64
In [14]:
# 동일식 ---> 정답에 있는 것 참고
# sum()의 경우에는 True가 1만 집계된것! 그래서 남자만 나올수 있었음!
occupation_man_count2 = users.groupby('occupation')['gender_n'].sum().sort_values(ascending=False)
In [15]:
occupation_man_count2
Out[15]:
occupation
student 136
other 69
educator 69
engineer 65
programmer 60
administrator 43
executive 29
scientist 28
technician 26
writer 26
librarian 22
marketing 16
entertainment 16
artist 15
retired 13
lawyer 10
salesman 9
doctor 7
none 5
healthcare 5
homemaker 1
Name: gender_n, dtype: int64
직업별 사람수를 구하세요¶
- 직업별 고유 데이터수와 같습니다.
- 결과를 occupation_total_count에 대입하세요.
In [16]:
occupation_total_count = users.occupation.value_counts()
occupation_total_count
Out[16]:
student 196
other 105
educator 95
administrator 79
engineer 67
programmer 66
librarian 51
writer 45
executive 32
scientist 31
artist 28
technician 27
marketing 26
entertainment 18
healthcare 16
retired 14
lawyer 12
salesman 12
none 9
homemaker 7
doctor 7
Name: occupation, dtype: int64
직업별 남성 비율을 구한 뒤 내림차순으로 정렬해주세요¶
- 직업별 남성의 비율 : 직업별 남성의 수 / 직업별 총 사람의 수 * 100
In [21]:
(occupation_man_count/occupation_total_count *100).sort_values(ascending=False)
Out[21]:
doctor 100.000000
engineer 97.014925
technician 96.296296
retired 92.857143
programmer 90.909091
executive 90.625000
scientist 90.322581
entertainment 88.888889
lawyer 83.333333
salesman 75.000000
educator 72.631579
student 69.387755
other 65.714286
marketing 61.538462
writer 57.777778
none 55.555556
administrator 54.430380
artist 53.571429
librarian 43.137255
healthcare 31.250000
homemaker 14.285714
Name: occupation, dtype: float64
직업별로 나이의 최소값과 최대값을 구해주세요¶
In [22]:
users.groupby("occupation").age.agg([min,max])
Out[22]:
min | max | |
---|---|---|
occupation | ||
administrator | 21 | 70 |
artist | 19 | 48 |
doctor | 28 | 64 |
educator | 23 | 63 |
engineer | 22 | 70 |
entertainment | 15 | 50 |
executive | 22 | 69 |
healthcare | 22 | 62 |
homemaker | 20 | 50 |
lawyer | 21 | 53 |
librarian | 23 | 69 |
marketing | 24 | 55 |
none | 11 | 55 |
other | 13 | 64 |
programmer | 20 | 63 |
retired | 51 | 73 |
salesman | 18 | 66 |
scientist | 23 | 55 |
student | 7 | 42 |
technician | 21 | 55 |
writer | 18 | 60 |
직업과 성별로 나이의 최대값, 최소값을 구해주세요¶
In [23]:
users.groupby(["occupation","gender"]).age.agg([max,min])
Out[23]:
max | min | ||
---|---|---|---|
occupation | gender | ||
administrator | F | 62 | 22 |
M | 70 | 21 | |
artist | F | 48 | 19 |
M | 45 | 20 | |
doctor | M | 64 | 28 |
educator | F | 51 | 23 |
M | 63 | 25 | |
engineer | F | 36 | 23 |
M | 70 | 22 | |
entertainment | F | 38 | 24 |
M | 50 | 15 | |
executive | F | 49 | 39 |
M | 69 | 22 | |
healthcare | F | 53 | 22 |
M | 62 | 28 | |
homemaker | F | 50 | 20 |
M | 23 | 23 | |
lawyer | F | 51 | 28 |
M | 53 | 21 | |
librarian | F | 59 | 26 |
M | 69 | 23 | |
marketing | F | 50 | 24 |
M | 55 | 24 | |
none | F | 55 | 26 |
M | 33 | 11 | |
other | F | 55 | 18 |
M | 64 | 13 | |
programmer | F | 38 | 26 |
M | 63 | 20 | |
retired | F | 70 | 70 |
M | 73 | 51 | |
salesman | F | 33 | 18 |
M | 66 | 21 | |
scientist | F | 31 | 26 |
M | 55 | 23 | |
student | F | 38 | 13 |
M | 42 | 7 | |
technician | F | 38 | 38 |
M | 55 | 21 | |
writer | F | 56 | 18 |
M | 60 | 21 |
In [ ]:
🐼깃허브 코드 저장소는 👉: https://github.com/LIMSONA/KDT/blob/main/pandas/Day_3/%EC%97%B0%EC%8A%B506.ipynb
728x90
'😁 빅데이터 문제 풀기 & Study > - 이외 사이트 문제' 카테고리의 다른 글
[Pandas] Pandas 연습 문제 풀기 -8 🐼 (결측치, datetime, groupby 등) (0) | 2022.02.24 |
---|---|
[Pandas] Pandas 연습 문제 풀기 -7 🐼 (0) | 2022.02.24 |
[Pandas] Pandas 연습 문제 풀기 -5 🐼 (0) | 2022.02.23 |
[Pandas] Pandas 연습 문제 풀기 -4 🐼 (0) | 2022.02.22 |
[Pandas] Pandas 연습 문제 풀기 -3 🐼 (0) | 2022.02.22 |