본문 바로가기

Hello python!/Python_DA

파이썬 데이터분석 _전처리_표준화

20221101

18일차

 


뽑아온 데이터를 내 입맛대로

수정하는 작업을 데이터 전처리라고 한다.

 

 


첫 번째로 날짜 형식을 바꿔보자.

우선 Seriesstr인 여러 종류의 날짜들을 바꿔준다.

 


우선 기본적으로

문자열 str로 되어있는 날짜를 datetime 타입으로 변환 후 pandas에 저장하는 방식이 있다.

 

pd.to_datetime()

to_datetime()을 써도 되고

 

series.astype() 을 이용해 데이터타입을 datetime64로 바꿔줄 수도 있다.

 


 

timestamp는 기준 시각 (1970. 01. 01 00:00:00 UTC)로 부터 몇 초가 경과했는지 UNIX시간으로 표기한다.기본 unit으로 ㎱(nano seconds)를 쓰고 있다.

 

* unit =

㎱(default) : 나노 초 ;10억분의 1초

D(days) : 하루 ; 86400초

s(seconds) : 초 ; 1초

㎳(milli seconds) : 밀리 초 ; 1000분의 1초

㎲(micro seconds) : 마이크로 초 ; 100만분의 1초

 


 

map함수를 이용해 딕셔너리 타입으로 남자0 여자1DataFrame을 생성해 준다.


 

df변수를 이용해 컬럼명을 인덱싱하여 데이터들을 원하는 값으로 바꿀 수 있다.

 


 

map함수 대신에 .replace를 사용해도된다.

 


 

문자 형식을 통일하기위해 DataFrame을 생성해 준다.

 


 

column명소문자로 바꾸는 방법은 여러가지가 있다.

 

우선 for반복문을 이용해서

column명소문자로 바꿔줄 수 있다.


또한 df.columns.str에 바로 upper()등을 걸 수 있다.

 

* .str을 꼭 붙여줘야한다.

 


'NAME' 컬럼의 모든 자료를 소문자로 통일하고 싶을때

함수를 선언하여 바꿔줄 수 있다.

 

선언한 함수를 실행시키기 위해 .apply()를 쓴다.

 


 

원하는 데이터 값을 도출하기 위해 불필요한 데이터를 처리해야할 경우가 있다.

불필요한 데이터는 위 사진과 같은 종류가 있으며

 

하나의 DataFrame을 이용해 처리해보자.

 

 


csv파일DataFrame화 해줬다.

 


데이터를 수집하다보면 사이즈에 따라 NaN(결측치)이 나오는 경우가 있다.

결측치를 처리하는 법을 알아보자.


위의 sample 데이터 프레임을 보면 column명 별로

결측치가 한 개있는 경우 두 개있는 경우 세 개 있는 경우가 있다.

 

결측치를 제거하는 방법으로

df.dropna(how ='',inplace='') 방식이 있다.

기본 설정값은 how = 'any', inplace=True로 적용된다.

 

이 방식을 위 sample DataFrame에 대입하면결측치가 존재하는 모든 row가 삭제된것을 알 수 있다.


 

sample 데이터프레임의 2번째 row는 모든 값이 결측치이다.이때 how="all"을 주면한 row가 삭제되는것을 알 수 있다.


만약 결측치가 하나라도 존재하는 데이터를 선택하고 싶다면

조건 색인을 이용하여 식별할 수 있다.

 

위의 코드는

sample 데이터 프레임에서 인덱싱을 활용하여

결측치가 존재하는 row방향의 값 = sample.isnull().any(axis=1)

을 인덱싱해 결과를 출력한것을 알 수 있다.

 

* .isnull()은 모든 셀을 구분해서 NaN가 있는 셀은 True, 아닌 셀은 False를 출력합니다.

 

* any는 해당 컬럼에 isnull()의 결과값이 True인 셀이 존재하는지 체크해줍니다.

 


만약 결측치의 개수를 세고 싶다면

df.isnull().sum()을 실행하면 column명 로 결측치의 개수를 알려준다.

 

 


 

결측치를 삭제할 수도 있지만 연산을 위해서 대체값을 넣어 처리할 수도 있다.

 


위의 사진과 같이

df.fillna()를 이용해 결측치가 숫자 0으로 대체된것을 알 수 있다.

 


평균을 구하는 방법은 여러가지가 있는데

데이터프레임에 평균을 구하는 방법은 결측치를 없애고 구해야한다.

 

array 타입의 평균을 구할때 NaN이 하나라도 있으면 결과가 NaN이기 때문에DataFrame타입의 평균을 구할때도 NaN이 존재하면 원하는 평균값이 나오지 않는다.

 

그래서 데이터프레임결측치를 채워주고(fillna()) 그 value값평균을 구해주면원하는 평균을 얻을 수 있다.

 

위 사진에서 결측치 자리에 sample 데이터프레임의 평균값을 넣어준 이유는

평균만 있는 데이터중에 모르는 값은 구할 수 있는 값의 평균이 가장 적합하기 때문이다.

 

 


각 컬럼명에 존재하는 value값에 대한 평균을 구할 수 있는데

만약 컬럼에 결측치가 존재한다면

우선 존재하는 값으로 평균을 구하고 그 평균값을 결측치 자리에 넣어줄 수 있다.

 


 

중위값 또한 마찬가지로 실행시켜주면 된다.

 

 


 

최빈값이란. 최고로 빈도수가 많은 값 같은 개념이다.

df.describe()를 이용하여 내용물의 간단한 정보를 알 수 있다. 

 


 

만약 df.describe().loc['로우명']으로 조회하면 원하는 데이터 값으로 나온다.

 


Counter를 임포트 해주면문자열 또한 갯수순으로 나열해준다.


데이터프레임에도 Counter를 쓸 수 있다.

 


 

만약 값의 크기가 다르지만 같은 범위내에서 뭐가 더 중요한지

뭐가 더 힘이 있는지 알아보고 싶을때

데이터 단위 통일을 한다.

 

예를들어 몸무게와 키가 있는데

몸무게가 몇일때는 상위 %라고 가정해보자

또한 몇 일때 상위 %라고 가정할 수 있다.

 

키와 몸무게는 같은 비교 대상이 아니지만 1개의 기준에서 값들을 적용시켜주면

우리는 두 가지를 동시에 비교할 수 있다.

 

이러한 1개의 기준을 표준화라고 하는데

데이터들을 표준화 시켜주는 방식을 알아보자.

 


0~8까지의 수를 배열로 가지는 x를 생성해주고

이걸 reshape() 9*1 배열로 만들어 준다.

 


위와 같이 x는 내가 알아보고 싶은 수의 나열

scale(x)는 전체 자료를 평균 0 표준편차 1스케일링 한것이고minmax_scale(x)최대 최소값이 1, 0 이 되도록 스케일링 한것이다.