OO하는 데이터분석가

[파이썬]으로 데이터 분석하기, 판다스(pandas) 기초

흔흔 2020. 12. 16. 00:27

확장성이 높은 파이썬은 통계데이터 분석 및 통계처리에도 유용하게 사용할 수 있다. 이 중 가장 널리 이용되는 패키지가 바로 판다스(pandas)이다. 데이터 분석을 진행할때 SAS, SQL이나 R을 많이 사용하고 이를 정리하고 리포팅할때는 엑셀을 많이 사용한다. 엑셀의 함수, 매크로, 시각화 등은 사용하기 쉽고 장점이 명확하지만 조금 아쉬운 부분 또한 존재한다. 

 

 

대충살자 글자 그림판으로 지우는 나처럼

엑셀 단점

1. 대용량 데이터 분석이 어렵다.

100mb가 넘어가면 파일을 열고 편집하는데 버벅이기 시작한다. 100mb까지 쓸일이 없다고 생각할 수 있을텐데, 시트 몇장에 데이터를 스캔하여 적용하는 함수들을 몇개 걸다보면 100mb는 금방이다. 만약 매크로가 포함되어있다면...(긴말안함)

2. 엑셀함수

양날의 검이다. 엑셀함수는 장점이지만 어느순간 사용성에 고비가 오게된다. 함수를 쓰다보면 어려워지고, 여러함수를 함께 쓰게되면 잘작동하지않는 경우가 생기게 된다. 

 

이러한 이유들로 엑셀을 최종 보고서를 만들고 이를 시각화하여 전달하고 공유하는데 최적화면 프로그램이 아닐까 싶다.

 

 

그렇다면 판다스를 직접 사용해보도록하자. 해당 게시물에서는 판다스로 파일 읽기, 데이터 특성 파악하기 및 기본 연산을 알아볼 것이다.

 

판다스로 csv 읽기

import pandas as pd

file_url = "https://파일_다운로드_주소"
data = pd.read_csv(file_url, index_col= "회차")

pandas를 불러오고 앞으로 pd로 부르기로 한다.

 

파일을 다운로드 받을 수있는 URL을 지정하고 pd.read_csv를 이용해 csv파일을 불러온다. index컬럼(가장 좌측에 오는 컬럼)은 회차라는 컬럼명을 지정하였다.

 

불러온 파일이 아래와 같은 형식이라고 가정해보자

 

회차이름구매일무게구매처
1복숭아2021-01-010.3백화점
2딸기2021-01-020.2과일가게
3아보카도2021-01-03NaN백화점
4딸기2021-01-040.5과일가게
5토마토2021-01-05NaN과일가게
6아보카도2021-01-060.7백화점
7포도2021-01-070.1과일가게

 

데이터 파일 살펴보기

data.index

결과

Int64Index([1, 2, 3, 4, 5, 6, 7], dtype='int64', name='회차')

>인덱스에 대한 정보를 볼 수 있다.

 

data.columns

결과

Index(['이름', '구매일', '무게', '구매처'], dtype='object')

>데이터 컬럼들의 종류를 알 수 있다.

 

data.shape

결과

(7,4)

>데이터의 행갯수, 열갯수를 알 수 있다.

 

data.head()

결과

회차이름구매일무게구매처
1복숭아2021-01-010.3백화점
2딸기2021-01-020.2과일가게
3아보카도2021-01-03NaN백화점
4딸기2021-01-040.5과일가게
5토마토2021-01-05NaN과일가게

>상위 5개 행을 볼 수 있다.

괄호에 넣는 숫자만큼 행의 갯수가 나타난다. 데이터를 눈으로 확인하고 싶을때 사용한다.

 

data.tail(3)

결과

회차이름구매일무게구매처
5토마토2021-01-05NaN과일가게
6아보카도2021-01-060.7백화점
7포도2021-01-070.1과일가게

>하위 행들을 볼 수 있다. 괄호안에 숫자를 안넣는것이 기본이고 5개 행이 도출된다. 숫자 3을 넣어 3개의 행만이 나오게 된다. head와 동일

 

여기서 궁금증이 생길 것이다. 어떤 코드는 소괄호를 쓰고 어떤건 안쓴다. 차이가 뭘까 ?
이는 매소드라는 개념이랑 비슷한데 소괄호가 없는것이 특이한 경우로, 모종의 사정으로 판다스에서 괄호를 안넣었다고 한다.(강의에서 선생님이 그랬습니다. 나는 몰라요) 인덱스(index),쉐이프(shape),컬럼스(columns)만 괄호를 안넣는걸로 생각하면 될듯 하다.

 

판다스 기본 연산

평균

data["무게"].mean()

결과

0.36

>각 행의 무게들의 평균을 구한다. 이때 NaN은 제외한다.

 

최솟값

data["무게"].min()

결과

0.1

>무게 중 최솟값을 찾아낸다.

 

최댓값

data["무게"].max()

결과

0.7

>무게 중 최댓값을 찾아낸다.

 

기본통계값

data["무게"].describe()

결과

count 5.000000

mean 0.360000

std 0.481663

min 0.100000

25% 0.200000

50% 0.300000

75% 0.500000

max 0.700000

Name: 무게, dtype: float64

>각 값들의 개수, 평균, 표준편차, 최솟값, 사분위수, 최댓값을 알려준다.

 

이와같이 숫자형 컬럼에 대한 여러 통계값들을 구할 수 있다. 다음 글에서는 이어서 값변경(replace), 행밀고당기기(shift), 컬럼속성변경, 날짜 칼럼 조작과 행렬단위의 기본연산에 대해 알아보겠다.

반응형