데이터 분석 라이브러리인 Pandas에 대해 설명한다.
Pandas를 사용하면 데이터의 총 계산량을 표시하거나, 그래프화 등에 데이터 분석이나 기계 학습에서 필요한 작업을 간단히 실행가능하다.
Python에서 데이터 분석을 할 때, 필수 라이브러리이기 때문에 기록을 참고하여 Pandas을 사용법을 알아두자.
<목차> 1. Pandas란? 2. Pandas를 이용하기 위해서는 3. Pandas 사용법 |
1. Pandas란?
Pandas란 Python 데이터 분석을 효율적으로 하기 위한 라이브러리이다. Pandas는 오픈소스(BSD라이센스)로 공개되어 있으며, 개인/상용 관계없이 누구라도 무료로 사용할 수 있다. Pandas를 사용하면 데이터를 읽어 들이거나 총계산량의 표시, 그래프화 등 데이터 분석에 관한 작업을 쉽게 할 수 있다. 그리고 주요한 코드는 Cython 또는 C로 작성되어 있으므로, Python만으로 데이터를 분석할 때와 비교하면 더욱 고속의 처리가 가능하다.
데이터 분석(데이터 사이언스)는 기계학습을 실행하기 위한 전처리(데이터 읽어들이기, 클리닝, 결측값의 보완, 정규화 등)이 작업 전체의 8~9할을 차지하고 있다고 알려져 있다.Pandas를 사용하면 이러한 처리가 효율적으로 가능하기 때문에, Python머신러닝을 하는 데에 Pandas가 필수 라이브러리이다.
공식사이트
http://pandas.pydata.org/pandas-docs/stable/
Pandas의 특징
1) 데이터 조작을 위한 빠르고 효율적인 데이터 프레임 객체
2) 메모리 내의 데이터 구성과 그 외의 포맷의 데이터간에 상호 읽고 쓰기가 가능하게 하는 툴의 모음
포맷의 예 :CSV, 텍스트 파일, Excel, SQL 데이터 베이스, HDF5 포맷 등
3) 똑똑한 데이터 구조 정렬을 포함한 통합된 결손치 처리
4) 데이터 세트의 유연한 변형을 포함한 피벗
5) 라벨을 기초로하는 슬라이스, fancy 인덱싱, 거대한 데이터 세트의 서브 세트 취득
6) 데이터 세트에 대해 split-apply-combine 조작을 가능하게 하는 엔진이 제공하는 powerful group을 사용한 데이터 집계 및 변환
7) 고성능 데이터세트의 머지와 결합
8) 시계열 데이터 : 날짜 범위 생성, 주파수변환, 이동창을 이용한 통계치나 선형회귀, 시프트와 지연 등
9) 고속 퍼포먼스을 위한 최적화. 중요한 코드는Cython이나 C로 구현되어 있다.
2. Pandas를 이용하기 위해서는
Pandas는 Anaconda등의 개발 환경 패키지를 사용하면 간단하게 사용할 수 있다. Anaconda는 데이터 분석이나 그래프 그리기 등 Python에서 잘 사용되는 라이브러리가 포함된 개발 환경이다.
Anaconda에 Pandas를 설치하기 위해서는 메뉴 화면의 Environments의 Not Installed를 선택하여, 검색창에 'Pandas'라고 입력한다. 일련의 Pandas가 표시되므로 체크박스를 선택하여, 화면 좌측 아래의 Apply버튼을 누르는 것만으로도 설치가 가능하다. 그리고 이번에는 설명용으로 scikit-learn의 샘플 데이터 셋을 사용한다. 그러므로 같은 방법으로 scikit-learn, numpy, matplotlib도 설치해두자.
3. Pandas 사용법
Pandas를 사용하기 위해서는 처음 Pandas라이브러리를 임포트해야한다.
아울러 샘플 데이터 셋도 이용가능하도록 해두자.
# Pandas、及び必要なライブラリのインポート
import pandas as pd
from pandas import DataFrame
import numpy as np
# サンプルデータセットを取得する
from sklearn import datasets
boston = datasets.load_boston()
실행결과는 따로 없다. 에러가 발생하지 않았으면 올바르게 임포트되어 있는 것이다.
다음으로 샘플 데이터셋을 Pandas의 DataFrame형으로 변환해둔다.
또한 이번에는 샘플 데이터셋을 사용하였으나. CSV데이터를 읽어 들이는 read_csv라는 명령도 사용되고 있다.
# PandasのDataFrame型に変換
df = DataFrame(boston.data, columns = boston.feature_names)
# 目的変数をDataFrameへ追加
df['MEDV'] = np.array(boston.target)
준비가 끝났다. 그럼 Pandas의 명령에 대해 몇 가지 살펴보자.
1) 데이터 개요 확인
위에서 부터 5행의 데이터가 표시된다.
df.head()
실행결과는 다음과 같다.
(1) 행렬수 확인
df.shape
실행결과는 다음과 같다.
(506, 14)
(2) 상세 정보 표시
dataset.info()
실행결과는 아래와 같다.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 21613 entries, 0 to 21612
Data columns (total 21 columns):
id 21613 non-null int64
date 21613 non-null object
...
sqft_living15 21613 non-null int64
sqft_lot15 21613 non-null int64
dtypes: float64(5), int64(15), object(1)
memory usage: 3.5+ MB
2) 데이터의 통계량 확인
(1) 데이터 통계량 표시
df.describe()
실행 결과는 아래와 같다.
count는 건수、mean은 평균치、std는 표준편차、min은 최소값、25%・50%・75%는 사분위점、max는 최대값이다.
(2) 그 외에 통계량을 표시하는 방법
print("平均値:", df.MEDV.mean())
print("中央値:", df.MEDV.median())
print("分散:", df.MEDV.var())
결과는 아래와 같다.
平均値: 22.5328063241
中央値: 21.2
分散: 84.5867235941
3) 그래프 표시
그래프는 내부에서 matplotlib을 사용한다.
(1) 히스토그램 표시
모든 데이터를 표시하기에는 시간이 걸리므로, 100건만 표시한다.
df.MEDV[:100].hist()
결과는 아래와 같다.
그 외에 산포도나 막대 그래프, 상수도 등 다양한 형태의 그래프를 그릴 수 있다.
4) 데이터 가공
(1) 형 변환
아래에서 float형으로 변환해보자.
df.MEDV.astype(float)
실행 결과는 아래와 같다.
0 24.0
1 21.6
2 34.7
3 33.4
4 36.2
5 28.7
(以下、略)
(2) 행렬을 지정하여 결과 출력
ix를 사용하는 것으로 표의 일부를 출력하는 것이 가능하다.
df.ix[:9][['AGE', 'MEDV']]
결과는 아래와 같다.
(3) 열에 대한 연산 실행
df['MEDV2'] = df['MEDV'] * 2
df.head()
실행 결과는 아래와 같다.
같은 열에 대해 계산을 간단하게 할 수 있다.
(4) 결손값 보완
결손값이란 데이터에 포함된 수가 없는 부분이다. 예를 들면, CSV파일을 Pandas을 이용하여 읽어 들였을 때, 요소의 값이 공백인 것이 결손값인 것이다.
결손값은 NaN(Not a Number)이라고 표시된다. 결손값에 대한 대응으로 행 또는 열을 삭제하기, 결손값을 0ㅇ로 치환하기와 같은 방법이 있다. 결손값을 0 등으로 치환하는 등의 대응을 결손값의 보완이라고 한다. 결손값을 보화하기 위해서는 fillna명령을 사용한다.
df.fillna(0, inplace=True)
실행결과는 없다. 데이터에 포함된 결손값이 0으로 변환된다.
Pandas에는 이러한 기능 이외에 피벗 테이블 작성, 크로스 집계, 행렬에의 함수 일괄 적용 등, 데이터 분석에 필요한 처리가 많이 포함되어 있다. 그와 관련된 내용은 공식 사이트를 확인하라.
참고자료
https://techacademy.jp/magazine/17697
https://qiita.com/ysdyt/items/9ccca82fc5b504e7913a
https://www.sejuku.net/blog/40241
'IT > 언어' 카테고리의 다른 글
[python] ArgumentParser(argpaser)의 사용법 간단 정리 (0) | 2020.05.20 |
---|---|
[python] 리스트의 요소 추가와 다른 리스트와의 결합 (0) | 2020.05.19 |
[python] Iterator와 Generator (4) | 2020.05.13 |
[python] scikit-learn이란 (0) | 2020.04.20 |
[python] Scikit-image 라이브러리란 (0) | 2020.04.20 |