코드민수
[Python] 빅데이터분석기사 실기 작업형1 모의고사 본문
BIG
문제 출처 : https://www.kaggle.com/datasets/agileteam/bigdatacertificationkr
Big Data Certification KR
빅데이터 분석기사 실기 (Python, R tutorial code)
www.kaggle.com
Q1)
첫번째 데이터부터 순서대로 50:50으로 데이터를 나누고,
앞에서부터 50%의 데이터(이하, A그룹)는 'f1'컬럼을 A그룹의 중앙값으로 채우고,
뒤에서부터 50% 데이터(이하, B그룹)는 'f1'컬럼을 B그룹의 최대값으로 채운 후,
A그룹과 B그룹의 표준편차 합을 구하시오
단, 소수점 첫째자리까지 구하시오 (둘째자리에서 반올림)
import pandas as pd
df = pd.read_csv('data/basic1.csv')
print(df.head())
id age city f1 f2 f3 f4 f5
0 id01 2.0 서울 NaN 0 NaN ENFJ 91.297791
1 id02 9.0 서울 70.0 1 NaN ENFJ 60.339826
2 id03 27.0 서울 61.0 1 NaN ISTJ 17.252986
3 id04 75.0 서울 NaN 2 NaN INFP 52.667078
4 id05 24.0 서울 85.0 2 NaN ISFJ 29.269869
# split
print(df.shape)
dfA, dfB = df[:50], df[50:]
print(dfA.shape, dfB.shape)
print(dfA)
print('--------------------------------------------------------')
print(dfB)
(100, 8)
(50, 8) (50, 8)
id age city f1 f2 f3 f4 f5
0 id01 2.0 서울 NaN 0 NaN ENFJ 91.297791
1 id02 9.0 서울 70.0 1 NaN ENFJ 60.339826
2 id03 27.0 서울 61.0 1 NaN ISTJ 17.252986
3 id04 75.0 서울 NaN 2 NaN INFP 52.667078
4 id05 24.0 서울 85.0 2 NaN ISFJ 29.269869
5 id06 22.0 서울 57.0 0 vip INTP 20.129444
6 id07 36.3 서울 60.0 1 NaN ISFJ 9.796378
7 id08 38.0 서울 101.0 1 NaN INFJ 83.685380
8 id09 3.3 서울 35.0 2 NaN ESFJ 17.252986
9 id10 95.0 서울 74.0 1 NaN ISFP 98.429899
10 id11 40.0 서울 68.0 0 NaN ENFP 98.429899
11 id12 20.0 서울 NaN 0 NaN ESTP 91.297791
12 id13 15.0 서울 68.0 0 NaN ESFJ 83.685380
13 id14 77.0 서울 50.0 1 NaN ENTJ 67.886373
14 id15 22.0 서울 67.0 1 NaN ENTP 9.796378
15 id16 68.0 서울 85.0 0 NaN ESFP 16.283854
16 id17 74.0 서울 NaN 1 NaN ISTP 67.886373
17 id18 41.0 서울 87.0 2 NaN ISFJ 80.138280
18 id19 53.0 서울 NaN 0 NaN ISFP 83.685380
19 id20 11.0 서울 51.0 1 NaN INTJ 91.297791
20 id21 90.0 부산 NaN 1 NaN ISFP 29.269869
21 id22 -6.3 부산 72.0 1 NaN ENFP 52.667078
22 id23 34.0 부산 75.0 1 NaN ISTP 69.730313
23 id24 80.0 부산 44.0 0 NaN INFJ 73.586397
24 id25 34.0 부산 NaN 0 NaN ESTP 60.339826
25 id26 55.0 부산 57.0 1 NaN ENFP 83.685380
26 id27 37.0 부산 60.0 0 NaN ESTP 73.586397
27 id28 38.0 부산 34.0 1 NaN ENTP 80.138280
28 id29 -13.5 부산 47.0 2 NaN ENTP 67.886373
29 id30 16.0 부산 NaN 0 NaN ESTJ 17.252986
30 id31 86.0 부산 77.0 0 NaN ESFJ 73.586397
31 id32 25.0 부산 64.0 0 vip ISFJ 13.049921
32 id33 47.0 부산 94.0 0 NaN ENFJ 17.252986
33 id34 65.0 부산 NaN 1 NaN INFP 48.431184
34 id35 30.0 부산 NaN 2 NaN ESTJ 33.308999
35 id36 68.0 부산 77.0 1 NaN INTP 13.049921
36 id37 100.0 부산 NaN 0 NaN ESTP 33.308999
37 id38 87.0 부산 NaN 1 NaN ESTP 83.685380
38 id39 56.0 부산 50.0 0 NaN INFJ 33.308999
39 id40 56.0 대구 75.0 0 NaN ENFP 17.252986
40 id41 81.0 대구 55.0 0 NaN ENFJ 37.113739
41 id42 65.0 대구 48.0 2 NaN ESTP 33.308999
42 id43 23.0 대구 60.0 0 NaN ISTP 29.269869
43 id44 44.0 대구 NaN 0 NaN INTP 16.283854
44 id45 97.0 대구 88.0 0 NaN ENFJ 13.049921
45 id46 93.0 대구 NaN 0 NaN ESTJ 67.886373
46 id47 34.6 대구 75.0 1 NaN ESTJ 90.496999
47 id48 18.0 대구 NaN 0 NaN ENFP 20.129444
48 id49 75.0 대구 88.0 0 NaN INTP 37.113739
49 id50 86.0 대구 78.0 1 NaN ENFP 60.339826
--------------------------------------------------------
id age city f1 f2 f3 f4 f5
50 id51 36.0 대구 NaN 0 NaN ISTJ 83.685380
51 id52 97.0 대구 82.0 1 NaN ISFJ 90.496999
52 id53 52.0 대구 50.0 0 NaN ESTP 20.129444
53 id54 53.0 대구 NaN 1 NaN ENFJ 69.730313
54 id55 75.0 대구 63.0 2 NaN ENTP 13.049921
55 id56 59.0 대구 NaN 1 vip ESTJ 73.586397
56 id57 3.0 대구 111.0 0 NaN ISFJ 29.269869
57 id58 0.0 대구 100.0 2 NaN ESTP 33.308999
58 id59 64.0 대구 NaN 1 NaN ESFJ 20.129444
59 id60 56.0 경기 NaN 0 NaN ESFP 52.667078
60 id61 87.0 경기 62.0 2 NaN INTP 69.730313
61 id62 52.0 경기 NaN 0 NaN INTP 60.339826
62 id63 88.0 경기 86.0 1 NaN ISFJ 73.586397
63 id64 43.0 경기 62.0 2 NaN ESFP 73.586397
64 id65 26.5 경기 NaN 0 NaN ISFP 91.297791
65 id66 87.0 경기 NaN 1 NaN ISFP 17.252986
66 id67 66.0 경기 52.0 1 NaN ISFJ 73.586397
67 id68 35.0 경기 45.0 2 NaN ISFP 67.886373
68 id69 75.0 경기 85.0 0 NaN ESTJ 69.730313
69 id70 -9.0 경기 96.0 1 NaN ISTP 48.431184
70 id71 35.0 경기 84.0 2 NaN ISFP 52.667078
71 id72 8.0 경기 97.0 0 NaN ESTJ 97.381034
72 id73 90.0 경기 NaN 1 NaN ISFJ 73.586397
73 id74 45.0 경기 98.0 0 NaN ESTP 52.667078
74 id75 63.0 경기 47.0 0 NaN ESTP 20.129444
75 id76 71.0 경기 12.0 0 NaN ENTJ 83.685380
76 id77 77.0 경기 31.0 0 NaN INFP 98.429899
77 id78 92.0 경기 96.0 1 NaN INTJ 69.730313
78 id79 30.0 경기 NaN 0 NaN INTJ 80.138280
79 id80 67.0 경기 60.0 0 NaN ISFP 83.685380
80 id81 86.0 경기 50.0 1 NaN ISFJ 37.113739
81 id82 48.0 경기 NaN 0 NaN ENTJ 37.113739
82 id83 73.0 경기 50.0 1 vip ENTP 80.138280
83 id84 66.0 경기 44.0 0 NaN INTP 83.685380
84 id85 83.6 경기 55.0 0 NaN INFJ 80.138280
85 id86 2.0 경기 NaN 0 NaN ESTP 29.269869
86 id87 19.0 경기 NaN 1 NaN ISFP 97.381034
87 id88 89.0 경기 75.0 0 NaN ESTJ 60.339826
88 id89 34.0 경기 66.0 1 NaN ENTJ 33.308999
89 id90 54.0 경기 NaN 0 NaN ENTP 29.269869
90 id91 6.0 경기 72.0 0 NaN INTP 9.796378
91 id92 97.0 경기 78.0 1 NaN INFP 97.381034
92 id93 21.8 경기 57.0 0 NaN ISFP 73.586397
93 id94 84.0 경기 NaN 1 NaN ESTJ 90.496999
94 id95 77.0 경기 43.0 1 NaN INTJ 91.297791
95 id96 92.0 경기 53.0 1 NaN ENTJ 52.667078
96 id97 100.0 경기 NaN 0 NaN INFP 67.886373
97 id98 39.0 경기 58.0 2 NaN INFP 98.429899
98 id99 1.0 경기 47.0 0 NaN ESFJ 97.381034
99 id100 47.0 경기 53.0 0 vip ESFP 33.308999
# fillna
dfA['f1'] = dfA['f1'].fillna(dfA['f1'].median())
dfB['f1'] = dfB['f1'].fillna(dfB['f1'].max())
print(dfA.head())
print(dfB.head())
id age city f1 f2 f3 f4 f5
0 id01 2.0 서울 68.0 0 NaN ENFJ 91.297791
1 id02 9.0 서울 70.0 1 NaN ENFJ 60.339826
2 id03 27.0 서울 61.0 1 NaN ISTJ 17.252986
3 id04 75.0 서울 68.0 2 NaN INFP 52.667078
4 id05 24.0 서울 85.0 2 NaN ISFJ 29.269869
id age city f1 f2 f3 f4 f5
50 id51 36.0 대구 111.0 0 NaN ISTJ 83.685380
51 id52 97.0 대구 82.0 1 NaN ISFJ 90.496999
52 id53 52.0 대구 50.0 0 NaN ESTP 20.129444
53 id54 53.0 대구 111.0 1 NaN ENFJ 69.730313
54 id55 75.0 대구 63.0 2 NaN ENTP 13.049921
# A그룹과 B그룹의 표준편차 합 출력 (소수 첫째자리까지)
stdA = dfA['f1'].std()
stdB = dfB['f1'].std()
print(round((stdA+stdB),1))
42.0
Q2)
'f4'컬럼을 기준으로 내림차순 정렬과 'f5'컬럼 기준 오름차순 정렬을 순서대로 다중 조건 정렬 하고나서
앞에서부터 10개의 데이터 중 'f5'컬럼의 최소값을 찾고,
이 최소값으로 앞에서부터 10개의 'f5'컬럼 데이터를 변경함
그리고 'f5'컬럼의 평균값을 계산함
단 소수점 둘째자리까지 출력(셋째자리에서 반올림)
import pandas as pd
df = pd.read_csv('data/basic1.csv')
print(df.head())
id age city f1 f2 f3 f4 f5
0 id01 2.0 서울 NaN 0 NaN ENFJ 91.297791
1 id02 9.0 서울 70.0 1 NaN ENFJ 60.339826
2 id03 27.0 서울 61.0 1 NaN ISTJ 17.252986
3 id04 75.0 서울 NaN 2 NaN INFP 52.667078
4 id05 24.0 서울 85.0 2 NaN ISFJ 29.269869
# 정렬
df = df.sort_values(['f4', 'f5'], ascending=[False, True])
print(df)
id age city f1 f2 f3 f4 f5
42 id43 23.0 대구 60.0 0 NaN ISTP 29.269869
69 id70 -9.0 경기 96.0 1 NaN ISTP 48.431184
16 id17 74.0 서울 NaN 1 NaN ISTP 67.886373
22 id23 34.0 부산 75.0 1 NaN ISTP 69.730313
2 id03 27.0 서울 61.0 1 NaN ISTJ 17.252986
.. ... ... ... ... .. ... ... ...
32 id33 47.0 부산 94.0 0 NaN ENFJ 17.252986
40 id41 81.0 대구 55.0 0 NaN ENFJ 37.113739
1 id02 9.0 서울 70.0 1 NaN ENFJ 60.339826
53 id54 53.0 대구 NaN 1 NaN ENFJ 69.730313
0 id01 2.0 서울 NaN 0 NaN ENFJ 91.297791
[100 rows x 8 columns]
# 앞에서 10개의 데이터를 최소값으로 변경
df[:10]['f5'] = df[:10]['f5'].min()
print(df)
id age city f1 f2 f3 f4 f5
42 id43 23.0 대구 60.0 0 NaN ISTP 17.252986
69 id70 -9.0 경기 96.0 1 NaN ISTP 17.252986
16 id17 74.0 서울 NaN 1 NaN ISTP 17.252986
22 id23 34.0 부산 75.0 1 NaN ISTP 17.252986
2 id03 27.0 서울 61.0 1 NaN ISTJ 17.252986
.. ... ... ... ... .. ... ... ...
32 id33 47.0 부산 94.0 0 NaN ENFJ 17.252986
40 id41 81.0 대구 55.0 0 NaN ENFJ 37.113739
1 id02 9.0 서울 70.0 1 NaN ENFJ 60.339826
53 id54 53.0 대구 NaN 1 NaN ENFJ 69.730313
0 id01 2.0 서울 NaN 0 NaN ENFJ 91.297791
[100 rows x 8 columns]
# f5 칼럼의 평균값 (소수 둘째자리까지)
print(round(df['f5'].mean(), 2))
53.63
Q3)
'age' 컬럼의 IQR방식을 이용한 이상치 수와
표준편차*1.5방식을 이용한 이상치 수 합을 구하시오
- IQR방식 : Q1 - 1.5 IQR, Q3 + 1.5 IQR에서 벗어나는 영역을 이상치라고 판단함 (Q1은 데이터의 25%, Q3는 데이터의 75% 지점임)
- 표준편차1.5방식: 평균으로부터 '표준편차1.5'를 벗어나는 영역을 이상치라고 판단함
import pandas as pd
df = pd.read_csv('data/basic1.csv')
print(df.head())
id age city f1 f2 f3 f4 f5
0 id01 2.0 서울 NaN 0 NaN ENFJ 91.297791
1 id02 9.0 서울 70.0 1 NaN ENFJ 60.339826
2 id03 27.0 서울 61.0 1 NaN ISTJ 17.252986
3 id04 75.0 서울 NaN 2 NaN INFP 52.667078
4 id05 24.0 서울 85.0 2 NaN ISFJ 29.269869
# age 칼럼의 IQR 방식을 이용한 이상치 기준
Q1 = df['age'].quantile(0.25)
Q3 = df['age'].quantile(0.75)
IQR = Q3 - Q1
print('Q1 = %f, Q3 = %f, IQR = %f' % (Q1, Q3, IQR))
min_iqr = Q1 - 1.5 * IQR
max_iqr = Q3 + 1.5 * IQR
print(min_iqr, max_iqr)
Q1 = 26.875000, Q3 = 77.000000, IQR = 50.125000
-48.3125 152.1875
# 표준편차를 이용한 이상치 기준
avg = df['age'].mean()
std = df['age'].std()
print('avg = %f, std = %f' % (avg, std))
min_std = avg - 1.5 * std
max_std = avg + 1.5 * std
print(min_std, max_std)
avg = 50.963000, std = 30.442759
5.298862216116952 96.62713778388306
# 두 방법의 이상치 합
# IQR
out1 = sum((df['age'] < min_iqr) | (df['age'] > max_iqr))
print(out1)
# std
out2 = sum((df['age'] < min_std) | (df['age'] > max_std))
print(out2)
print(out1 + out2)
0
14
14
LIST
'[Python] > 빅데이터분석기사' 카테고리의 다른 글
[Python] 빅데이터분석기사 실기 자주 사용하는 코드 모음 (0) | 2023.04.01 |
---|