[파이썬] 숫자 데이터 가공하기
새로운 값 계산하기
기존 데이터 불러오기
허리둘레/엉덩이 둘레로 비만도를 계산한다.
round()
함수를 사용해 소수점 2번째 자리까지 표시되게 만든다.
새로운 컬럼을 만들어 저장해준다.
이런 새로운 데이터로 비만도와 당뇨(diabetes) 사이에 어떤 상관관계가 있는지도 알아볼 수 있겠다.
실습 1
import pandas as pd
patient_df = pd.read_csv('data/patient.csv')
# 여기에 코드를 작성하세요.
bmi = round(patient_df['weight'] / (patient_df['height'] * patient_df['height']), 1)
patient_df['bmi'] = bmi
patient_df
제곱을 **2라고 표현하는 방법을 몰랐다. 기억해둬야지.
# 모범답안
import pandas as pd
patient_df = pd.read_csv('data/patient.csv')
patient_df['bmi'] = round(patient_df['weight'] / patient_df['height']**2, 1)
patient_df
정규화
스케일링
스케일링 방법
1. 정규화
2. 표준화
정규화 방법
앞에 써있는대로 식을 작성해주다가 너무 길어서 엔터를 치니 오류가 난다
\
역슬래시를 써주니 에러가 사라진다.
정규화한 값을 저장해주고 확인해본다.
실습 1
import pandas as pd
patient_df = pd.read_csv('data/patient.csv')
# 여기에 코드를 작성하세요.
patient_df['weight'] = (patient_df['weight'] - patient_df['weight'].min()) / \
(patient_df['weight'].max() - patient_df['weight'].min())
patient_df
표준화
기본 데이터
평균값 / 표준편차
계산한 값을 저장해주고 확인
표준화가 제대로 되었다면, 평균은 0, 표준편차는 1이 된다.
https://www.codeit.kr/tutorials/143/scientific-notation-and-fixed-point-notation
과학적 표기법과 고정 소수점 표기법 | 코드잇
| pandas를 사용하다 보면 숫자가 `2.424625e-17`, `6.974262e-01`... 이런 식으로 출력될 때가 있습니다. 이건 '과학적 표기법(Scientific Notation)'이라는 방법으로 숫자를 표현한 겁니다. 과학적 표기법은 숫자
www.codeit.kr
정리
실습 1
import pandas as pd
patient_df = pd.read_csv('data/patient.csv')
# 여기에 코드를 작성하세요.
patient_df['weight'] = (patient_df['weight'] - patient_df['weight'].mean()) / \
patient_df['weight'].std()
patient_df
cut()함수로 데이터 구간화하기
기본 데이터
나이 구간을 지정하기 위해 최소값과 최대값을 확인한다.
pd.cut()
판다스의 cut 함수를 이용해 구간을 지정해준다.
그럼 20-30, 30-40 .. 이렇게 나누어진 걸 확인할 수 있다.
새로운 컬럼에 저장해준다.
결과를 확인해보면 NaN값이 있다.
(40.0, 50.0] 을 볼 때 괄호의 의미는 40은 포함하지 않고 50은 포함한다는 의미이다.
'(' 소괄호는 미만/초과, ']'대괄호는 이하/이상이라는 뜻이다.
그래서 20살인 환자의 나이 그룹이 NaN이 나오게 된 것이다.
right = False
right 파라미터의 기본값은 True고, 그 경우 위처럼 나온다. 이를 False로 바꿔주면 50이상 60미만으로 변경된다.
labels
labels 파라미터를 이용해서 보기 좋게 만들어줄 수도 있다.
실습 1
import pandas as pd
import numpy as np
patient_df = pd.read_csv('data/patient.csv')
patient_df['bmi'] = round(patient_df['weight'] / patient_df['height']**2, 1)
# 여기에 코드를 작성하세요.
bmi_max = patient_df['bmi'].max() + 1 #BMI 끝점
patient_df['obesity'] = pd.cut(patient_df['bmi'], bins=[0, 18.5, 25, 30, bmi_max], right=False, labels=['under','healthy','over','obese'])
patient_df
apply()
import pandas as pd
df = pd.DataFrame([[1, 9], [4, 16]], columns=['column1', 'column2'])
df
import numpy as np
np.sqrt(9) # 출력 내용 -> 3.0
df['column2'].apply(np.sqrt)
0 3.0
1 4.0
Name: column2, dtype: float64
실습
patient_df = pd.read_csv('data/patient.csv')
patient_df.head()
def group_age(x):
if x >= 10 and x < 20:
return '10s'
elif x >= 20 and x < 30:
return '20s'
elif x >= 30 and x < 40:
return '30s'
elif x >= 40 and x < 50:
return '40s'
elif x >= 50 and x < 60:
return '50s'
else:
return '60s'
patient_df['age_group'] = patient_df['age'].apply(group_age)
코드잇 16. 숫자데이터 가공하기