자기계발/Python

[빅데이터분석기사] 실기 작업형 1유형

호등 2022. 6. 26. 18:27
반응형

제2회 실기 작업형 제1유형

문제 1-1

① crim 변수의 상위 10번째 값으로 crim 변수의 상위 10개의 값을 변환하고

② age가 80이상인 값에 대하여 crim의 평균 출력하기

#1. 데이터 불러오기
import pandas as pd
data = pd.read_csv('boston_housing.csv')

#2. 데이터 형태 확인(생략 가능)
print(data.head())

#3. 'crim' 변수 기준 내림차순으로 데이터 정렬
print(data.sort_values(by='crim', acsending = False)) #정렬이 제대로 되었는지 print로 중간 확인
data_sort = data.sort_values(by='crim', acsending = False

data_sort.head(12) #crim 변수의 상위 10번째 값을 확인

#4. 데이터 변환 함수 만들기
def recode(series):
	if series >= 25.9406:
    	return 25.9406
    else:
    	return series

#5. 변환된 crim변수 데이터셋에 추가
data_sort['re_crim'] = data_sort['crim'].apply(recode)
print(data_sort.head(20)) #re_crim 변수에 데이터 변환이 제대로 되었는지 확인

#6. age>=80이상인 데이터
data_80 = data_sort[data_sort['age'>=80]]
print(data_80.head(50)) #age>=80인 데이터만 걸러졌는지 확인

#7. 평균 구하기
data_80['re_crim'].mean()

문제 1-2

 

① 주어진 데이터의 첫 번째 행부터 순서대로 80%까지의 데이터를 훈련 데이터로 추출 후

② 'total_bedrooms' 변수의 결측값(NA)을 'total-bedrooms' 변수의 중앙값으로 대체하고

③ 대체 전의 'total_bedrooms' 변수 표준편차 값의 차이의 절댓값을 구하시오.

import pandas as pd
data = pd.read_csv('california_housing.csv')

data.info()
print(20640*0.8) #16512

data_80 = data[:16512]

pre_std = data_80['total_bedrooms'].std()
data_80_fill = data_80.fillna(data_80['total_bedrooms'].median())

post_std = data_80_fill['total_bedrooms'].std()

print(abs(pre_std-post_std))

문제 1-3

 

insurance 데이터셋의 charges 항목의 이상값의 합을 구하시오. (이상값은 평균에서 1.5표준편차 이상인 값)

import pandas as pd
data = pd.read_csv('insurance.csv')

mean = data['charges'].mean()
std = data['charges'].std()
multi_std = 1.5 * std

data_outer = data[ (data['charges']<=mean-multi_std) | (data['charges'] >= mean+multi_std) ]
print(data_outer['charges'].sum())

제3회 실기 작업형 제1유형

문제 1-1

① 데이터 중 컬럼들의 결측값을 전부 제거 후 

② 데이터를 처음부터 순서대로 70%를 추출하여

③ 변수 중 'tax'의 사분위수 Q1값을 구하시오.

<내가 쓴 답>

import pandas as pd
data = pd.read_csv('3rd_boston_housing.csv')

data_fill = data.dropna(axis=1)
#data_fill.info()
#print(506*0.7) #506행의 70%는 354.XXX
data_fill_70 = data_fill[:354]

print(data_fill_70['tax'].describe()['25%'])

<교재에 있는 답>

import pandas as pd
a=pd.read_csv('3rd_boston_housing.csv')
#print(a.info())

b=a.dropna() #디폴트값이 axis=1인가봄
b=b.iloc[:int(len(a)*0.7)]
answer=b['tax'].describe()['25%']

print(answer)

사분위수 Q1값을 .describe()['25%']로 불러올 수 있다는 점

데이터 결측값 삭제 코드는 dropna()인데 axis=1이 디폴드 값

순서대로 70% 추출하는건 교재에서 더 간지나게 입력했음

 

문제 1-2

2000년도 전체 입국자 평균보다 국내에 많이 입국한 국가의 수를 산출하시오.

import pandas as pd
data = pd.read_csv('3rd_tour.csv', index_col='year', encoding='euc-kr')
#data.head()

mean = data.loc[2000].mean()

print(sum(data.loc[2000,:]>mean))

csv파일 불러올 때 index_col로 인덱스 지정해주고, 변수명에 한글이 있어서 encoding='euc-kr' 옵션 넣어주었다.

변수명에 한글 있는데 encoding='euc-kr' 안넣어주면 에러뜸

 

.loc : location의 약자인 loc함수로 특정 인덱스를 갖고 올 수 있다.

 

나라 수를 구할땐 sum()함수를 사용했고, 안에 data.loc[2000, :]>mean이라는 조건을 넣어주었다.

data.loc[2000, :]의 뜻은 인덱스가 2000인 모든 열~

 

문제 1-3

① 데이터셋의 컬럼 중 빈값 또는 결측치를 확인하여

② 결측치의 비율이 높은 변수명을 출력하시오.

import pandas as pd 
data = pd.read_csv('3rd_titanic.csv')
#data.info() #눈대중으로 결측값이 많은 변수 확인

print(data.isnull().sum().sort_values(ascending=False).index[0])

정렬

 '변수' 기준으로 내림차순 .sort_values(by='변수', ascending = False)

 

결측치

결측값 개수 확인 .isnull.sum() #숫자 1을 넣으면 행별 결측값 개수 확인 가능

결측값 제거 .dropna(axis=0) #axis=0은 행, axis=1은 열

결측값 대체 .fillna() #ffill, bfill 각각 바로 앞, 뒤 값으로 채우는 옵션

➡ fillna(data.mean()['변수']) 이런식으로 다른 변수 평균으로 대체할 수도 있다.

 

 

반응형