KT 에이블스쿨 6일차(1)

박기범·2023년 2월 7일
0

에이블스쿨

목록 보기
9/95

데이터프레임 변환하는 방법에 대해 학습했습니다.


환경준비

	import pandas as pd
    import numpy as py

판다스와 넘파이를 import하여 실습환경을 만들어줍니다.


전처리

데이터 전처리에는 두 가지 과정이 있습니다.
1) 데이터 구조 만들기
2) 모델링을 위한 전처리

데이터를 분석하기 위해서는 우리가 row data를 깔끔하게 분석하기 좋게 가공해야 합니다. 데이터 구조를 만들거나 모델링이 가능한 데이터 셋으로 만드는 것을 전처리라고 합니다. 모델링 가능한 데이터 셋이란 모든 셀은 을 가지고 있어야하며 모든 값은 숫자여야 합니다. 필요시 숫자의 범위를 맞춰줘야 합니다.


데이터분석

데이터 분석을 하기 위해서는 요인(특징)에 따라 어떤 결과가 어떻게 나오는지 가설을 세우고 분석을 하는 분석력을 키우는 연습이 중요합니다.


데이터 프레임의 변경

▶컬럼(열)을 변경하는 방법
columns를 사용하면 모든 열 이름을 변경할 수 있습니다.
rename( )함수를 사용하면 지정한 열 이름을 변경할 수 있습니다.
inplace라는 옵션이 있는데 만약 inplace=False 라는 값을 주게 되면 원래 rename( )함수의 특성상 열 이름을 바꾸어 조회만 하기 때문에 원본 데이터의 수정은 없습니다. 하지만 값을 inplace=True로 주게 되면 원본 데이터도 수정이 됩니다.


▶컬럼(열)을 추가하는 방법
새로 칼럼(열)을 만들면 원본 뒤에 붙습니다. 기존 데이터 값과 계산해서 추가도 가능합니다.

위 두 방법을 아래 예제로 보겠습니다.

	#컬럼 이름 변경
	데이터프레임명.columns = ['바꿀 컬럼명1', '모든 컬럼에 대해 다 써줘야함']
    #컬럼명의 갯수에 맞춰 바꿔줄 컬럼명을 모두 작성하면 됩니다.
    
    #컬럼을 추가하는 법
	데이터프레임명['추가할 컬럼명'] = 데이터프레임명['기존 컬럼명1'] * 데이터프레임명['기존 컬럼명2']
    #위와 같이 작성하면 추가할 컬럼명의 컬럼 값들이 기존 컬럼명1 * 기존컬럼명2로 생성되어 추가됨

▶컬럼(열)을 삭제하는 방법
삭제를 할 때 무엇이든 조심해서 삭제해야 합니다.

삭제 예시를 보겠습니다

	복제데이터프레임명(이하데이터프레임) = 원본데이터프레임명.copy()
    #컬럼하나 삭제
    데이터프레임.drop('삭제할 컬럼명', axis = 1, inplace=True)
    #컬럼두개 삭제
    데이터프레임.drop(['삭제할 컬럼명', '삭제할 컬럼명'], axis = 1, inplace=True)

위 코드를 살펴보면 axis=1이라고 값을 준 것을 볼 수 있습니다. 만약 axis=0이라고 값을 주면 행 삭제이고 axis=1일 경우에는 열 삭제입니다.(default값으로는 행 삭제가 디폴트 값입니다.)


▶컬럼(열)을 전체 값 변경

	데이터프레임.['컬럼명'] = 0
    #그럼 해당 컬럼명의 모든 값들이 0으로 바뀌는 것을 확인할 수 있습니다.

▶기타 컬럼(열)을 변경
기타 컬럼을 변경하는 방법에는 map( )함수가 있습니다. map( )함수는 범주형 값을 다른 값으로 수정할 때 사용합니다. 딕셔너리 형태로 사용합니다.

	데이터프레임명.['컬럼명'].map({변수명1:1, 변수명2:2})
    

해당 컬러 명의 변수명 1을 숫자 1 값으로 바꾸고 변수명 2를 숫자 2로 바꾸어서 조회해 줍니다. 만약 변수가 3개면 3개의 값을 모두 지정해야 합니다. 변수의 개수를 맞춰줘야 합니다.

다른 함수로는 cut( )함수가 있습니다. cut( )함수는 숫자형 변수를 범주형 변수로 변경해줍니다.

	pd.cut(데이터프레임명['컬럼명'], 3, labels=['A','B','C'])

위 작성한 코드를 살펴보면 컬럼명에 대해서 3등분을 한 후에 A B C로 값으로 변환해서 조회해줍니다. cut( )함수는 데이터 건수와 상관없이 3등분을 해서 뒤에 labels들 값들을 부여해줍니다.

※(32, 43]의 의미는 열린구간, 닫힌구간으로 32< , <=43을 의미합니다.

만약 나누고 싶은 범위가 따로 있다면 bins = [] 옵션을 사용해줍니다.

	pd.cut(데이터프레임명['컬럼명'], bins = [0, 40, 50, 100], labels=['A','B','C'])

위 코드를 해석하자면 구간을 총 3구간으로 나눠줍니다. (0, 40], (40, 50], (50, 100] 구간으로 나누고 해당 범위에 속한 값들을 각각 A B C로 값을 바꿔줍니다.


데이터프레임 결합

pd.comcat( ) => 매핑기준 : 인덱스(행), 칼럼이름(열)
pd.merge( ) => 매핑기준 : 특정칼럼(key)의 값을 기준으로 결합합니다.

merge의 같은 경우 데이터베이스 테이블 join(조인)과 같습니다.
두 개의 함수 사용 용도가 다릅니다.

▶CONCAT
방향을 선택해줍니다. axis = 0 으로 설정하면 위 아래로 즉, 세로 방향으로 합치게 됩니다. 세로로 합치기 위해서는 컬럼이 같아야 합니다. 만약 axis = 1 로 설정해주면 옆으로 즉, 가로 방향으로 합칩니다. 가로방향으로 합치기 위해서는 행 정보들이 같아야 합니다. 즉, 위아래로 합치던 옆으로 합치던 테이블 구조가 같아야 됩니다.

concat에 결합 방법에는 join이 있습니다. join = 'outer'은 모든 행과 열을 합치게 되는 옵션이고
join = 'inner'은 매핑되는 행과 열만 합쳐집니다. 여기서 join의 디폴트 값은 outer입니다.
예시는 아래와 같습니다.

	pd.concat(['데이터프레임1', '데이터프레임2'], join='outer', axis=1 )

위 작성된 코드를 해석하자면 데이터프레임1과 데이터프레임2를 결합하는데 concat의 방식으로 결합합니다. join옵션으로는 outer라는 옵션을 주었으므로 한꺼번에 합쳐 결합하기에 많은 Nan이 발생합니다. 따라서 concat보다는 아래 설명할 merge 결합을 더 많이 사용합니다.

▶MERGE
merge( )함수를 사용하면 방향 상관없이 무조건 가로 병합 즉 옆으로 결합이 발생합니다. 데이터프레임을 지정한 키 값을 기준(컬렴,변수) 으로 병합할 수 있습니다. merge는 데이터프레임을 2개 받습니다.
merge의 결합 옵션으로는 left, right, outer, inner 방식들이 있습니다.

inner의 경우 컬럼의 값이 같은걸 기준으로 해당 행들을 결합합니다. outer는 concat과 같이 모든 행열을 결합합니다. left의 경우에는 왼쪽을 기준으로 잡고 왼쪽 기준 데이터프레임의 값들은 모두 보여주고 오른쪽 데이터프레임은 기준에 맞는 행과 열만 결합합니다. right의 경우는 반대로 오른쪽을 기준으로 잡고 왼쪽의 데이터프레임 중에 기준에 맞는 행과 열을 결합합니다.

※e+7 => 10의 7제곱, e-7 => 10의 -7제곱


시계열 데이터

시계열 데이터란 행과 행에 시간의 순서가 있고 시간 간격이 동일한 데이터입니다. (시간 간격이 동일해야 된다는 점이 매우 중요합니다.) 즉, 시계열 데이터에서는 행과 행에 관계가 있습니다.

▶날짜타입 변환
날짜가 문자형으로 사용된 데이터프레임이 있습니다. 이 경우 데이터프레임.info()를 사용하게 되면 해당 날짜 컬럼이 Date타입이 아니라 object타입을 조회되는 경우가 있습니다.
이 경우 아래의 코드를 작성해주어 타입을 변환해줍니다.

	데이터프레임['Date컬럼명'] = pd.to_datetime(데이터프레임['Date컬럼명'])

위 코드를 작성해주면 datetime64[ns] 타입으로 변환이 됨을 확인할 수 있습니다. 이렇게 데이터 타입으로 변경이 되면 다양한 날짜 format을 사용할 수 있습니다.







6일차에는 데이터프레임의 변경과 결합에 대해 배운 하루였습니다. 복습문제가 많아 복습문제를 풀어보면서 익숙해져야겠습니다.




※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.

profile
개발자가 되기 위한 한걸음

0개의 댓글