빅데이터분석기사/작업형1

[작업형1] 결측치 대체 / 사분위수 / 표준편차 구하기

seo0seok 2023. 6. 17. 21:26

// 퇴근후딴짓 님의 강의를 참고하였습니다. //

 

Dataset :

members.csv
0.01MB

 

문제4)

  • 주어진 데이터에서 자료형(type)이 object인 컬럼은 삭제하고, 결측치는 0으로 대체한다.
  • 행 단위로 합한 다음 그 값이 3000보다 큰 값의 데이터 수를 구하시오 ('age', 'f1', 'f2', 'f5', 'views'의 각 행별 합)
import pandas as pd
df = pd.read_csv("members.csv")
cols = df.select_dtypes(include='object').columns
cols
df = df.drop(cols, axis=1)
df.head()

→ select_dtypes(include)를 통해 object인 컬럼명을 뽑아온 후 drop을 통해 제거가 가능하다.

 

cols = df.select_dtypes(exclude='object').columns
cols
df = df[cols]
df.head()

 

→ select_dtypes(exclude)를 통해 object가 아닌 컬럼명을 뽑아온 후 df[] 안에 넣어주면 마찬가지로 같은 결과가 나온다.

 

df = df.fillna(0)
df = df.T
df.head()
print(sum(df.sum() > 3000))

실행 결과 : 
73

→ sum을 사용하면 기본이 열 단위 합이기 때문에 df.T를 사용해 열과 행을 바꾸어 준다.

→ 열과 행을 바꾼 후 3000보다 큰 행들의 합을 구한 후 다시 한번 sum을 통해 개수를 구하면 73개가 나온다.

 

문제5)

  • 데이터에서 IQR을 활용해 views 컬럼의 이상치를 찾고, 이상치 데이터의 수를 구하시오.
import pandas as pd
df = pd.read_csv("members.csv")
q3 = df['views'].quantile(.75)
q1 = df['views'].quantile(.25)

IQR = q3 - q1
print(IQR)

실행 결과 : 
5113.5

→ IQR은 q3 - q1으로 구한다. (q3 : 75분위수, q1 : 25분위수)

 

line1 = q1 - 1.5 * IQR
line2 = q3 + 1.5 * IQR

print(sum(df['views'] < line1) + sum(df['views'] > line2))

실행 결과 : 4

→ 이상치는 line1보다 작거나, line2보다 큰 값이다. 두 개를 더하며 4개가 나오게 된다.

 

문제6)

  • 'age' 컬럼의 이상치(소수점 나이와 음수나이, 0포함)를 제거하고
  • 제거 전.후의 views 컬럼 표준편차를 더하시오. (최종 결과 값은 소수 둘째자리까지 출력, 셋째자리에서 반올림)
import pandas as pd
df = pd.read_csv("members.csv")
r1 = df['views'].std()

cond = df['age'] <= 0
print(df.shape)
df = df[~cond]
print(df.shape)

실행 결과 :
4170.860768106485
(100, 10)
(96, 10)

→ 이상치 제거 전 views 표준편차 : 4170.860768106485

→ age가 0 이하인 조건을 cond에 담아둔다. 그 후 ~cond를 하여 0 초과인 행들을 구한다.

→ 100개 행에서 96개 행으로 줄어든 것을 알 수 있다.

 

print(df.shape)
cond = df['age'] == round(df['age'],0)
df = df[cond]
print(df.shape)

r2 = df['views'].std()
print(r2)

실행 결과 : 
(96, 10)
(90, 10)
4249.83323306832

→ 소수점 나이가 아닌 값을 구하는 방법은 소수점을 반올림 했을때와 하기 전의 값이 같은 값들이다.

→ 96개의 행에서 90개로 줄어든 것을 알 수 있다.

→ 이상치 제거 후 views 표준편차 : 4249.83323306832

 

print(round(r1 + r2, 2))

실행 결과 : 8420.69

→ 이상치 제거 전.후 표준편차를 소수점 둘째짜리까지 출력하면 8420.69가 나온다.