<데이터 변환>
1. 파생변수 생성
2. 표준화
3. 정규화
dic1={'first':['a','b','c'], 'second':['d','e','f']}
df1=pd.DataFrame(dic1)
df1
파생변수 생성
새로운 열을 만들어준다.
1. 각 열 원소의 합
df1["str_plus"]=df1['first']+df1['second']
print(df1)
>>
first second str_plus
0 a d ad
1 b e be
2 c f cf
2. []를 사용
3. insert() 사용
insert(삽일될 열 번호, 열 이름, 삽입될 값, 중복 열 삽입 허용)
중복 열 삽입 허용 기본값은 False
4. assign() 사용
5. loc[] 사용
print(df1)
x=[1,2,3]
#다 같은 기능
df1['number']=x
df1.insert(3,"number",x, True) #3번 째 열에 number라는 이름으로 x값 넣음. 중복 열 삽입 허용
df1=df1.assign(number = x) #inplace 안됨
df1.loc[:,'number']=x #전체 행, number라는 열에 x값 넣음
print(df1)
>>
first second str_plus
0 a d ad
1 b e be
2 c f cf
first second str_plus number
0 a d ad 1
1 b e be 2
2 c f cf 3
표준화와 정규화
표준화: 데이터가 평균을 기준으로 얼마나 떨어져 있는지를 표현하는 값으로 변환하여 평균은 0, 표준편차는 1로 만드는 과정. 데이터가 정규분포를 따를 때 유용하지만, 그렇지 않아도 사용 가능
모든 데이터들이 [0,1] 사이의 범위를 가짐
정규화: 데이터의 범위를 0과 1사이로 변환하여 데이터의 분포를 조정하는 것. 데이터의 분포가 정규분포를 따르지 않을 때 사용하는 것이 좋음
공식은 사이트 참고
(이기적 빅데이터분석기사의 데이터셋을 사용했습니다)
2. 표준화
-numpy
import numpy as np
mid_mean=np.mean(df['중간'])
mid_std=np.std(df['중간'])
print((df['중간']-mid_mean)/mid_std)
-scipy.stats의 zscore()
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.zscore.html
import scipy.stats as st
st.zscore(df['중간'])
-sklearn.preprocessing의 StandardScaler().fit_transform()
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kiakass&logNo=222085098701
from sklearn.preprocessing import StandardScaler
sk=StandardScaler()
print(sk.fit_transform(df[['중간']]))
>>
0 1.231167
1 0.436866
2 0.238290
3 0.039715
4 1.529030
5 -0.655299
6 -1.747463
7 -0.556011
8 -1.251025
9 0.734729
똑같은 결과 나온다.
3. 정규화
-numpy
mid_min=np.min(df['중간'])
mid_max=np.max(df['중간'])
print((df['중간']-mid_min)/(mid_max-mid_min))
-sklearn.preprocessing의 MinMaxScaler(). fit_transform()
import sklearn.preprocessing as sk
print(sk.MinMaxScaler().fit_transform(df[['중간']]))
>>
0 0.909091
1 0.666667
2 0.606061
3 0.545455
4 1.000000
5 0.333333
6 0.000000
7 0.363636
8 0.151515
9 0.757576
똑같은 결과가 나온다
<데이터 요약>
1. 집계함수 적용
2. 행 또는 열에 지정한 함수 적용
1. 집계함수 적용
groupby(dataframe['열이름'])
df1_group=df1.groupby('cls')
print(df1_group['중간'].mean())
print(df1.groupby('cls')['중간'].mean())
#둘이 결과 똑같음
>>
cls
1 82.666667
2 72.666667
3 82.500000
4 72.500000
Name: 중간, dtype: float64
새로운 데이터프레임 객체로 만들 수 있다
df2=pd.DataFrame(df1.groupby('cls')['중간'].count())
print(df2)
>>
중간
cls
1 3
2 3
3 2
4 2
<결측값 식별>
1. .info()
2. .describe()
3. .count()
4. .isnull()
5. .notnull()
NaN인 특정 행 추출
https://hyemin-kim.github.io/2020/06/12/S-Python-Pandas6/
<결측값 대치>
1. 결측값이 있는 행 삭제
.dropna(axis=0)
2. 결측값 대체
.fillna()
inplace 옵션 있음
- 평균으로 대치
.fillna(df['열'].mean(), inplace=True)
- 주변 값으로 대치
https://rfriend.tistory.com/262
앞의 값의로 대치
.fillna(method='ffill')
뒤의 값으로 대
.fillna(method='bfill')
- 확률 분포를 이용한 대치
아직
<이상값 식별>
사분위함수 사용
1사분위수: quantile(0.25)
2사분위수: quantile(0.5)
3사분위수: quantile(0.75)
4사분위수: quantile(1.0)
IQR=3사분위수-1사분위수
1사분위수-1.5*IQR 보다 작거나 3사분위수+1.5*IQR 보다 크면 이상값
'빅데이터 공부' 카테고리의 다른 글
데이터 클리닝 (0) | 2023.11.29 |
---|---|
판다스 기본 제공 메소드로 시각화하기 (2) | 2023.11.23 |
DataFrame 다루기 (1) | 2023.10.26 |
판다스(Pandas) (0) | 2023.06.17 |
넘파이(Numpy) (0) | 2023.06.03 |