본문 바로가기
IT,SW,Data,Cloud,코딩/Python

20230610 파이썬 공부 - 작업형1

by 착실하게 2023. 6. 10.
반응형
import pandas as pd 

# 작업형1 문제 
# 작업형1에서는 EDA가 거의 필요없음.
# 문제: 자동차 데이터셋에서 qsec컬럼을 Min-Max Scale로 변환 후 0.5보다 큰 값을 가지는 레코드(row) 수는?

################################################
#스케일링 방법(1) MinMaxScaler

mtcars = pd.read_csv('data/mtcars.csv')
print(mtcars['qsec'][:3])

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
mtcars['qsec'] = scaler.fit_transform(mtcars[['qsec']])
# MinMaxScaler로 스케일링 시, fit_transform 안에 넣어주는것은 DataFrame이어야 한다. 
# 대괄호가 하나면 Series 이고, 대괄호가 2개면 DataFrame이다. 그래서 scaler.fit_transform(mtcars[['qsec']]) 로 해야한다. scaler.fit_transform(mtcars['qsec'])로 하니까 에러가 났었음!! 

print(mtcars['qsec'][:3])

################################################
#스케일링 방법(2) minmax_scale 

mtcars = pd.read_csv('data/mtcars.csv')

from sklearn.preprocessing import minmax_scale 
mtcars['qsec']=minmax_scale(mtcars['qsec'])
# 동일한 결과가 나오지만 사용방법이 다르다 
# (1) fit_transform함수를 안 써도 된다. 
# (2) 파라메터로 데이터프레임이 아니라 시리즈를 넣는다. 

print(mtcars['qsec'][:3]) 

################################################
#스케일링 방법(3)

def my_minmax(data):
  data = (data - min(data)) / (max(data)-min(data))
  return data 

mtcars = pd.read_csv('data/mtcars.csv')
mtcars['qsec'] = my_minmax(mtcars['qsec'])
print(mtcars['qsec'][:3]) 

################################################
# 조건 (0.5보다 큰 값)

#풀이방법 (1) sum 
#조건문의 결과는 bool인데 True는 1이고 False는 0이라서 Sum하면 9가 나온다
cond = mtcars['qsec']>0.5
print(sum(cond))


#풀이방법 (2) len 
# len 안에 데이터프레임을 넣으면 행의 개수를 구해준다. 
cond = mtcars['qsec']>0.5
print(len(mtcars[cond]))

#풀이방법 (3) count
# len과 마찬가지로 데이터 수를 구하는데 Series 별 수를 구한다. 그래서 컬럼명 지정해주어야 정확한 결과를 얻을 수 있다.
cond = mtcars['qsec']>0.5
print(mtcars[cond]['qsec'].count())

################################################
# mtcars는 결측치 없는 데이터. 만약 결측치가 있다면 sum,len,count의 결과가 달라진다. 
# .count() 는 결측치를 제외한 결과를 준다.

# len: 행의 수 
# count: Nan이 아닌 (컬럼별) 행의 수 
# sum: 조건문의 결과에서 True(1) 값의 합. 즉, 조건문에 따라 다르다.
반응형

댓글