Recent Posts
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Today
Total
관리 메뉴

코드민수

[Python] 빅데이터분석기사 실기 작업형1 모의고사 본문

[Python]/빅데이터분석기사

[Python] 빅데이터분석기사 실기 작업형1 모의고사

코드민수 2023. 4. 2. 12:23
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