본문 바로가기

빅데이터 분석기사

[빅데이터 분석기사] 작업형 1유형(T3~5) - 결측치, 왜도와 첨도, 표준편차

#3. 주어진 데이터에서 결측치가 80%이상 되는 컬럼은(변수는) 삭제하고, 80% 미만인 결측치가 있는 컬럼은 'city'별 중앙값으로 값을 대체하고 'f1'컬럼의 평균값을 출력하시오.

# 라이브러리 및 데이터 불러오기
import pandas as pd
import numpy as np

df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
df.head()

# EDA - 결측값 확인
print(df.shape)
print(df.isnull().sum())
print(df.isnull().sum()/df.shape[0])

# f3 컬럼 삭제
print("삭제 전:", df.shape)
df = df.drop(['f3'], axis=1)    # df.drop(columns=['f3'])
print("삭제 후:", df.shape)

# 도시 확인
df['city'].unique()

# 도시별 중앙값 계산
s=df[df['city']=='서울']['f1'].median()
k=df[df['city']=='경기']['f1'].median()
b=df[df['city']=='부산']['f1'].median()
d=df[df['city']=='대구']['f1'].median()
s, k, b, d
# k, d, b, s = df.groupby('city')['f1'].median()

# 대체 전 데이터 샘플 출력
df[18:21]

# f1결측치 city별 중앙값으로 대체
df['f1'] = df['f1'].fillna(df['city'].map({'서울':s,'경기':k,'부산':b,'대구':d}))

# 만약 그냥 f1 중앙값으로 대체 한다면 
# df['f1'] = df['f1'].fillna(df['f1'].median())

# 대체 후 데이터 샘플 출력
df[18:21]

# 최종 결과 출력
print(df['f1'].mean())

1. pd.read_csv로 데이터를 불러옵니다.

2. isnull 함수와 shape 함수로 결측 비율을 확인합니다.

3. 결측치가 80% 이상인 f3 컬럼을 삭제합니다.

4. median 함수로 도시별 f1 컬럼의 중앙값을 계산합니다.

5. f1 결측치를 city별 중앙값으로 대체합니다.

6. f1 컬럼의 평균을 구합니다.

 

 

+) map 함수

Series.map(dict) 형식:

  • Series 객체의 map 메서드를 사용하여, 매핑할 값들이 담긴 사전(dict)을 전달합니다.
  • 이 경우에는 Series 객체의 각 요소가 dict의 키로 사용되며, 해당 키에 대응하는 값이 적용됩니다.
  • 예시: df['city'].map({'서울':s, '경기':k, '부산':b, '대구':d})

map(funciton, iterable, ...) 형식:

  • function: 각 요소에 적용할 함수.
  • iterable: 함수가 적용될 반복 가능한 객체. 여러 개의 이터러블을 입력으로 받을 수 있습니다.
  • 예시: map(lambda x: x**2, numbers)

 

 

 

#4. 주어진 데이터 중 train.csv에서 'SalePrice'컬럼의 왜도와 첨도를 구한 값과, 'SalePrice'컬럼을 스케일링(log1p)로 변환한 이후 왜도와 첨도를 구해 모두 더한 다음 소수점 2째자리까지 출력하시오.

# 라이브러리 불러오기
import pandas as pd
import numpy as np

# 데이터 불러오기
df = pd.read_csv("../input/house-prices-advanced-regression-techniques/train.csv")
df['SalePrice'].head()

# EDA (시험에서는 시각화 불가)
df['SalePrice'].hist()

# 'SalePrice'컬럼 왜도와 첨도계산
s1 = df['SalePrice'].skew()
k1 = df['SalePrice'].kurt()
print("왜도:" ,s1)
print("첨도:" ,k1)

# 'SalePrice'컬럼 로그변환
df['SalePrice'] = np.log1p(df['SalePrice'])

# EDA (시험에서는 시각화 불가)
df['SalePrice'].hist()

# EDA (시험에서는 시각화 불가)
df['SalePrice'].hist()

# 'SalePrice'컬럼 왜도와 첨도계산
s2 = df['SalePrice'].skew()
k2 = df['SalePrice'].kurt()
print("왜도:" ,s2)
print("첨도:" ,k2)

# 모두 더한 다음 출력
print(round(s1+s2+k1+k2,2))

- 로그 변환 전 'SalePrice'컬럼의 분포는 왜도 1.88, 첨도 6.54로 오른쪽으로 치우쳐져 있고, 극단값이 많은 분포였습니다.

- 로그 변환 후 'SalePrice'컬럼의 분포는 왜도 0.12 첨도 0.81로 대칭에 가까워지고 극단값이 거의 없습니다.

 

 

+) 왜도와 첨도

왜도 (Skewness)

  • 정의: 왜도는 데이터 분포의 비대칭성을 측정합니다.
  • 해석:
    • 왜도 = 0: 완전히 대칭인 분포 (예: 정규 분포)
    • 양의 왜도 (> 0): 오른쪽으로 꼬리가 길게 늘어진 분포 (오른쪽으로 비대칭)
    • 음의 왜도 (< 0): 왼쪽으로 꼬리가 길게 늘어진 분포 (왼쪽으로 비대칭)

첨도 (Kurtosis)

  • 정의: 첨도는 분포의 꼬리 두께와 극단값(outliers)의 빈도를 측정합니다.
  • 해석:
    • 첨도 = 3: 정규 분포와 동일한 형태 (기준: Fisher의 정의)
    • 첨도 > 3: 꼬리가 두껍고, 극단값이 많은 분포 (leptokurtic, 뾰족한 분포)
    • 첨도 < 3: 꼬리가 얇고, 극단값이 적은 분포 (platykurtic, 평평한 분포)

 

 

#5. 주어진 데이터에서 'f4'컬럼 값이 'ENFJ'와 'INFP'인 'f1'의 표준편차 차이를 절대값으로 구하시오

# 라이브러리 및 데이터 불러오기
import pandas as pd
import numpy as np

df = pd.read_csv('../input/bigdatacertificationkr/basic1.csv')
df.head()

# 조건에 맞는 데이터 (ENFJ, INFP)
df = df[(df['f4'] == 'ENFJ')|(df['f4'] == 'INFP')]

# 조건에 맞는 f1의 표준편차 (ENFJ, INFP)
std1 = df['f1'][df['f4'] == 'ENFJ'].std()
std2 = df['f1'][df['f4'] == 'INFP'].std()

std1, std2

# 두 표준편차 차이 절대값 출력
print(np.abs(std1-std2))

 

 

+) 사용된 통계함수 정리

왜도함수: df.skew()

첨도함수: df.kurt()

표준편차 함수: df.std()

중앙값 함수: df.median()  

절대값 함수: np.abs()

 

 


참고링크

https://www.kaggle.com/code/agileteam/py-t1-3-map-expected-questions

 

[py] T1-3. 결측치 처리(map 활용) Expected Questions

Explore and run machine learning code with Kaggle Notebooks | Using data from Big Data Certification KR

www.kaggle.com

https://www.kaggle.com/code/agileteam/py-t1-4-expected-questions

 

[py] T1-4. 왜도와 첨도 구하기 (로그스케일) Expected Questions

Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources

www.kaggle.com

https://www.kaggle.com/code/agileteam/py-t1-5-expected-questions

 

[py] T1-5. 조건에 맞는 데이터 표준편차 구하기 Expected Questions

Explore and run machine learning code with Kaggle Notebooks | Using data from Big Data Certification KR

www.kaggle.com

 

 

참고 링크에서 직접 문제를 풀어보실 수 있습니다.

 

감사합니다.