1. 데이터 요약 및 시각화 in python
목차
- Step 0. 개요
- Step 1. pandas를 활용한 데이터 관리
- Step 2. seaborn을 이용한 데이터 탐색
- Step 3. 그룹화와 예측, 분류
Step 0. 개요
학교 전공 시간에 배우는 파이썬을 이용한 데이터마이닝 수업을 복습 겸 추가적 공부를 하기 위해 블로그로 정리를 하려한다.
우선 python을 사용하기 위해서는 아래 사항이 필요하다.
- 파이썬 공식 홈페이지에서의 다운로드
- 아나콘다 설치
- 파이썬 및 주로 사용되는 1400개의 library와 data set들이 포함되어 있어 여러 패키지들을 설치하는 수고를 덜어줌
- https://www.anaconda.com/download/
- 파이썬 interpreter 설치
- 컴파일 없이 코드를 바로 실행할 수 있는 interpreter 언어의 실행 도구라고 이해하면 되겠다.
- interpreter의 종류는 다양하지만, 해당 수업에서는 anaconda를 설치하면 제공되는 spyder 를 이용한다
- 그리고 보통 pycharm이라는 interpreter를 사용한다
Step 1. pandas를 활용한 데이터 관리
위 과정을 모두 수행했다면 데이터 분석 라이브러리로, 행과 열로 이루어진 dataframe, series 데이터 객체를 제공하여 안정적으로 대용량의 데이터들을 처리하는데 매우 편리한 도구인 pandas를 이용해보자. 사용 데이터는 Iris 데이터이다. 사전에 데이터를 다운받아 working directory에 넣어놨다.
1 |
|
1) 데이터 상태 확인
이제 해당 데이터가 어떤 형태로 이뤄져 있는지 확인을 한다.
1 |
|
1 |
|
1 |
|
1 |
|
2) 데이터 attribute 확인
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
특정 열만 호출하여 확인하기 - df[‘columns names’]
1 |
|
1 |
|
3) slicing and selecting
slicing : 원하는 부분만 잘라서 값을 가져오기
df([0:50:1]) # 0~49 까지 1씩 증가하는 행 호출
selecting 함수인 iloc 활용
- iloc[: , : ] : 특정 행과 열을 지정하여 호출 가능
1
2df.iloc[:, 1:3] # 첫번째 열부터 세번째 열 직전까지 모든 행 가져오기 df.iloc[0:50, :] # 모든 열의 0~49번째 행까지 가져오기
4) 데이터 요약치
1 |
|
5) pandas를 이용한 시각화
1 |
|
데이터의 분포는 확인이 가능하나 모두 같은 색으로 표현이되어 범주별 확인이 어렵다. 그래서 데이터 시각화에 특화된 library인 seaborn을 이용한다.
step 2. seaborn을 이용한 데이터 탐색
1 |
|
데이터의 분포가 어떻게 퍼져있는지 직관적으로 파악하기가 어렵다. 그래서 violinplot을 이용한다
1 |
|
setosa는 정규분포 모양을 띄지만, vericolor와 virginica는 한쪽으로 분포가 치우쳐짐을 확인할 수 있다.
seaborn을 이용하여 산점도 그래프도 그릴 수 있다.
1 |
|
이번엔 히스토그램과 산점도 그래프를 동시에 그려보자
1 |
|
위에서 pandas를 이용하여 그렸던 그래프와 똑같지만 색깔과 표현을 구분해줌으로써 각 범주별 산포와 유사성을 확인할 수 있다.
Step 3. 데이터 정규화 및 요약
데이터 분석을 할 경우에 feature 간의 데이터 범위가 매우 상이할 경우 분석에 어려움이 있다. 자세한 내용은 앞선 포스팅인 아래 링크에서 확인하자 (https://kite-mo.github.io/machine%20learning/2020/03/10/bGradient/)
1) normalization
직접 정규화 함수를 만들어 feature scaling을 실행해보자. 정규화 공식은 (X - Mean) / std 이다.
1 |
|
1 |
|
기존 데이터 range에서 축소됐음을 확인할 수 있다.
차원축소를 통한 데이터 요약
벡터의 차원, 변수의 개수가 많아지게 되면 생기는 문제점들이 존재한다.
- 모델링에 필요한 학습 집합의 크기가 커짐
- 노이즈들이 포함되므로 예측, 분류에 안좋은 영향을 끼침
- 모델의 학습 속도가 느리며, 성능 저하
그래서 차원 축소를 통해 특징 변수들을 효과적으로 다루며, 높은 차원이 가지는 문제점들을 해결할 수 있다. 여기서 데이터 차원을 낮춘다는 것은 현재 데이터가 존재하는 차원에서 그보다 낮은 차원으로 데이터들을 맵핑 시킨다는 의미이다. e.g. 10개의 변수를 3개의 변수로 축소
대표적인 두 가지 방법을 소개한다.
1) PCA(주성분 분석)
고차원의 정보를 유지하면서 저차원으로 차원을 비지도적 방식(종속변수 X)으로 축소하는 다변량 데이터 처리방법이다. 데이터를 분산이 가장 커지는 새로운 첫 번째 축으로 맵핑시키고 두번째로 커지는 축으로 맵핑시키는 등 원하는 차수만큼의 새로운 축으로 만들어 새로운 좌표계로 데이터를 선형 변환한다.
python library인 sklearn을 이용하면 쉽게 구현이 가능하다.
1 |
|
1 |
|
concat 함수를 이용하여 기존의 species 열과 합칠 수 있다.
1 |
|
1 |
|
2) LDA(판별 분석)
지도적 방식인 차원 축소법으로 분류돼 있는 데이터를 가장 잘 분별 할 수있는 새로운 축에 맵핑하는 방법이다. PCA와 다른 점은 데이터가 분류되어 있어야 한다는 점이다.
마찬가지로 sklearn을 이용하여 구현이 가능하다.
1 |
|
1 |
|