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

[작업형1] 레코드(row) 수 구하기

seo0seok 2023. 6. 15. 10:30

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

 

Dataset :

mtcars.csv
0.00MB

 

문제) 자동차 데이터셋에서 qsec컬럼을 Min-Max Scale로 변환 후 0.5보다 큰 값을 가지는 레코드(row) 수를 구하시오.

 

1. 데이터 불러오기

import pandas as pd

def load_data():
    return pd.read_csv("mtcars.csv")
    
data = load_data()
data.head()

 

2. 스케일링 / MinMaxScaler, minmax_scale, 사용자 정의 함수 3가지 활용

# MinMaxScaler
from sklearn.preprocessing import MinMaxScaler

data = load_data()
scaler = MinMaxScaler()
print('MinMax Scale 변환 전: \n', data['qsec'].head())
data['qsec'] = scaler.fit_transform(data[['qsec']])
print('MinMax Scale 변환 후: \n', data['qsec'].head())

# minmax_scale
from sklearn.preprocessing import minmax_scale

data = load.data()
print('MinMax Scale 변환 전: \n', data['qsec'].head())
data['qsec'] = minmax_scale(data['qsec'])
print('MinMax Scale 변환 후: \n', data['qsec'].head())

# min-max 함수
def my_minmax(data):
    data = (data - min(data)) / (max(data) - min(data))
    return data
    
print('MinMax Scale 변환 전: \n', data['qsec'].head())
data['qsec'] = my_minmax(data['qsec'])
print('MinMax Scale 변환 후: \n', data['qsec'].head())

→ 스케일링 3가지 방법 모두 결과가 같다.

 

3. 조건 (0.5보다 큰 값) / sum, len, count 3가지 활용

data['qsec'] > 0.5 

실행 결과 : 
0     False
1     False
2     False
3      True
4     False
5      True
6     False
7      True
8      True
9     False
10     True
11    False
12    False
13    False
14    False
15    False
16    False
17     True
18    False
19     True
20     True
21    False
22    False
23    False
24    False
25     True
26    False
27    False
28    False
29    False
30    False
31    False
Name: qsec, dtype: bool
# sum 
cond = data['qsec'] > 0.5
print(sum(cond))

실행 결과 : 9

→  sum : True(1) 값을 더함

# len
cond = data['qsec'] > 0.5
print(len(data[cond]))

실행 결과 : 9

→  len : 행의 수

# count
cond = data['qsec'] > 0.5

print(data[cond].count())

실행 결과 : 
model    9
mpg      9
cyl      9
disp     9
hp       9
drat     9
wt       9
qsec     9
vs       9
am       9
gear     9
carb     9
dtype: int64

print(data[cond]['qsec'].count())

실행 결과 : 9

→  count : NaN이 아닌 (컬럼별) 행의 수

  count의 경우 컬럼명을 지정해 줘야한다.