pandas 내에 있는 메소드 stack과 unstack은 R에서 reshape2 패키지의 함수 melt, dcast와 동일한 기능을 가지고 있습니다. 두 함수를 다루기 전에 Wide data와 long data를 알아야 하는데 이 둘에 대한 간단한 설명은 아래 접기 버튼에 수록해놓았습니다. 관련 글마다 이 둘을 지칭하는 용어가 약간씩 다르지만 다루는 개념에는 차이가 없고 구글링을 할 때 지장 있을 정도의 변화가 없습니다. 내용 숙지 후 바로 메소드 사용으로 넘어가봅시다.
Wide data & long data
1. Wide data
- 교차 테이블
- 행별, 컬럼별 그룹연산 수행가능하고 조인 연산이 불가능합니다.
2. Long data
- DB, 모델 분석에서 선호하는 방식
- 새로운 데이터(관찰대상)에 대한 추가가 비교적 용이
- group by, JOIN 연산 가능
1. 언스택(unstack)
unstack은 long data를 wide data 로 바꿔줍니다. 즉, 멀티 인덱스를 멀티 컬럼으로 바꾸는 메소드입니다. 옵션에서의 계층(level) 기본값이 -1이기 때문에 레벨을 지정해주지 않으면 가장 하위 레벨의 index를 컬럼화합니다.
2. 스택(stack)
stack은 wide data를 long data로 바꿔줍니다. 즉, 멀티 컬럼을 멀티 인덱스로 바꾸는 메소디입니다. unstack처럼 옵션 level의 기본값이 -1이기 때문에 레벨을 지정하지 않으면 가장 하위 레벨의 index를 컬럼화합니다.
2. rank
rank 메소드는 변수 내에 있는 value들을 크기에 따라 순위를 부여하는 메소드입니다. 간단한 문법으로 구성되어 있고 순위 부여시 value의 크기가 같아 순위가 같아지는 값들에 대한 순위 부여 방법(method)을 바꾸는 옵션만 업무에 따라 바꿔주시면 됩니다.
크게 어려운 내용이 없으니 가벼운 예제들을 보고 습득합시다.
시리즈에 rank 메소드 적용
데이터 프레임에 rank 메소드 적용 (순위 축 방향)
3. 병합(merge)
merge 메소드는 SQL에서의 JOIN과 비슷한 기능을 하는 메소드입니다. JOIN이 특정 속성에 대해서 두 테이블을 붙이는 것처럼 merge는 두 데이터 프레임을 특정 속성에 대해서 붙여줍니다. 비슷한 기능이라는 것은 merge 메소드는 JOIN에 비해 기능이 약하기 때문입니다. JOIN과 달리 merge는 NON EQUI JOIN이 불가능합니다. 또, JOIN이 여러 개의 테이블을 묶을 수 있는 데 반면 merge는 두 개의 데이터 프레임만 붙일 수 있습니다. 그래도 다행히 INNER JOIN, OUTER JOIN은 모두 가능합니다.
JOIN
merge
EQUI JOIN
가능
가능
NON EQUI JOIN
가능
불가능
붙이는 자료 수
제한 없음
2개
INNER JOIN
가능
가능
OUTER JOIN
가능
가능
같은 인덱스에 대해 결합
미지원(변수 추가 필요)
가능
간단히 문법을 살펴본 후 예제를 보도록 하겠습니다. JOIN에 대한 개념이 부족하신 분은 코드를 보아도 이해하기 어려우니 SQL에서 JOIN 다루는 글을 봐주시면 도움이 될 것입니다.
문법
예제
4. 피벗 테이블(pivot)
피벗 테이블 기능은 엑셀(MS Excel)에서도 제공하는 강력한 기능입니다. 데이터에 있는 정보들을 보기 좋게 요약해주는 기능인데 값들에 대하여 그룹함수도 사용할 수 있습니다. 피벗 테이블 메소드는 pivot과 pivot_table이 있는데 요약기능 여부의 차이가 있습니다. 그래서 교육받을 당시에는 요약기능이 있는 pivot_table 메소드를 많이 썼던 기억이 나네요.
이제 예제를 통해 피벗 테이블 기능을 사용해봅시다. 파일은 저번 글에 첨부한 subway2.csv로 하겠습니다. 전처리는 되어 있다는 가정하에 진행하겠습니다.
예제) 인덱스에 전체를, 컬럼에 구분(승차/하차)을, 그리고 값에는 9시 시간대로 설정하여 피벗 테이블을 만드시오.
이런 식으로 하면 됩니다.
5.str 모듈
pandas 내부의 str 모듈은 문자열 처리 메소드를 가지고 있는데 벡터연산이 가능하여 원소마다 적용이 가능합니다.
1) split : 구분자를 기준으로 각 원소의 문자열을 나눕니다.
1-1) 특정 위치 색인
str.split으로 나눈 후 특정 위치의 원소를 색인하는 기능으로 두 가지 메소드가 있습니다.(기능은 동일)
2) replace : 각 원소 내의 문자중 첫 번째 인자를 두 번째 인자로 바꿉니다.
3) 대소치환 : 대/소문자 치환 메소드입니다.
4) 패턴여부 : 입력한 문자가 존재하는지 여부
5) 개수 및 길이
6) 제거함수 : 괄호 안 인자와 일치하는 문자 제거. 제거 방식은 replace 방식이 아니라 SQL의 TRIM과 같습니다. 기본 인자는 공백' '입니다.
6. 중복 처리 메소드(duplicate)
1) duplicated
중복이면 True, 중복값이 없으면 False를 출력하는 메소드입니다.
2) drop_duplicates
이전 key들중에서 중복된 값이 있는 경우 제외시키고 출력합니다. 데이터프레임에 사용시 옵션에 중복 제거를 실행할 컬럼을 지정할 수 있습니다.
python으로 할 수 있는 전처리는 거의 다 끝나갑니다. 다음 글에서는 구간 분할, 날짜 모듈과 그에 관련된 내용, groupby 등 이번 글에서 다루지 않은 내용이나 보다 심화된 내용을 다룰 예정입니다. R에 대한 내용까지 다룬 이후에는 모듈을 이용한 ML, DL 사용법, 글의 맞춤법 교정 및 난이도 조정이 계획되어 있습니다.