본문 바로가기

언어/Python

[Python] Python(파이썬) 유용한 분석 기법(피벗 테이블)

시작하기 전 import 설정

%matplotlib inline
import pandas as pd

# 시각화를 위한 matplotlib 설정(폰트=맑은 고딕)
from matplotlib import rc
rc('font', family='Malgun Gothic')

describe 함수

마트판매현황 = pd.read_excel('합친결과.xlsx')
print(마트판매현황.shape)
마트판매현황.head()

이전 포스팅에서 만들었던 Excel을 사용한다.

 

마트판매현황.describe()

describe 함수를 사용하면 각각의 열 단위로 데이터의 개수(count), 평균(mean), 표준 편차(std), 최소값(min), 25% 위치의 수치(25%), 50% 위치의 수치(50%), 75% 위치의 수치(75%), 최대값(max)을 확인할 수 있다.

 

마트판매현황.describe().loc['max']

dataframe의 형태를 가지고 있기 때문에 loc 인덱서를 사용해서 최대값(max)를 확인할 수 있다.

 

# 마트판매현황.describe(percentiles=[.25, .50, .75]) # 기본적으로 지정되어 있는 값(25%, 50%, 75%)
마트판매현황.describe(percentiles=[.10, .20, .30, .40, .50, .60, .70, .80, .90])

describe 함수를 사용해서 나타나는 퍼센트 범위는 기본적으로 25%, 50%, 75%로 지정되어 있다. 따라서 percentiles 옵션을 사용하여 필요한 퍼센트의 수치를 지정하여 확인할 수 있다.

 

# 상위 15개 항목에 대해 내림차순
마트판매현황['상품명'].value_counts().sort_values(ascending=False)[:15]

value_counts 함수는 현재 '상품명' 시리즈에서 각각의 값들이 몇 번 나왔는지 알려준다. 정렬이 필요하면 sort_values 함수에서 ascending을 통해 오름차순 또는 내림차순을 지정해준다. 예제 코드는 내림차순으로 정렬하고 상위 15개 항목에 대해 보여준다.

 

top100 = pd.read_excel('data/top100.xlsx', index_col='id')
print(top100.shape)
top100.head()

top100.describe()

top100에 대해서 describe 함수를 사용하면 '좋아요' 항목에 대한 결과를 확인할 수 있다. 평균 '좋아요'의 개수나 최소 또는 최대값을 보고 데이터 분석 및 활용이 가능하다.

 

top100['artist_name'].value_counts().sort_values(ascending=False)

위의 예제 코드를 통해 어떤 가수가 top100 순위에 가장 많이 올라갔는지 확인할 수 있다. 이처럼 value_counts는 데이터 분석에 굉장히 유용한 함수이다.

피벗 테이블

그룹 분석을 통해 새로운 데이터 프레임을 생성하고 데이터를 새로운 기준으로 바라보고자 할 때 사용한다. 결국 피벗 테이블의 기본 전제는 그룹 분석이다. 다양한 열들 중에서 어떤 열을 기준으로 그룹화 할 것인지가 중요하다.

 

마트판매현황.pivot_table(index='상품명')

예제 코드는 피벗 테이블의 그룹 기준을 '상품명'으로 지정하였다. 피벗 테이블에서 실제 columns으로 나오는 데이터는 숫자 데이터에 한정해서 테이블로 보여지게 된다. 피벗 테이블을 통해 평균, 최소값, 최대값 혹은 원하는 특정 통계 함수들을 사용할 수도 있다.

 

마트판매현황.pivot_table(index='상품명', values='판매건수')
# 마트판매현황.pivot_table(index='상품명')[['판매건수']]

특정한 값에 대해서만 보고자 한다면 values 옵션을 사용하면 된다. 혹은 리스트를 사용해서 출력 가능하다. 하지만 가능하면 values를 사용하자.

 

마트판매현황.pivot_table(index='상품명', values=['가격', '판매건수'])

만약 피벗 테이블에서 2개 이상을 보고 싶으면 리스트 형태로 values에 넣어주면 된다.

 

마트판매현황['매출'] = 마트판매현황['가격'] * 마트판매현황['판매건수']
마트판매현황.pivot_table(index='상품명', values=['매출', '판매건수'])

위의 예제 코드를 사용하면 피벗 테이블로 매출의 항목도 확인 가능하다.

 

# aggfunc(max, min, mean, sum)
마트판매현황.pivot_table(index='년월', values=['매출', '판매건수'], aggfunc='mean')

aggfunc 인자를 사용해서 매출 및 판매 건수에 대해서 평균이나 합한 값을 확인할 수 있다. 더 의미 있는 인자를 사용하면 된다.

 

마트판매현황.pivot_table(index='년월', values=['매출', '판매건수'], aggfunc='sum').plot(kind='pie', y='매출')

예제 코드와 같이 파이 그래프를 그려보면 월 별로 매출 그래프를 확인할 수도 있다.

 

top10 = top100.pivot_table(index='artist_name', values='좋아요', aggfunc='sum').sort_values('좋아요', ascending=False).head(10)
top10

top100 가요에 대해 피벗 테이블을 위의 예제 코드와 같이 작성하면 좋아요 숫자가 가장 많은 가수를 확인할 수 있다.

 

top10.sort_values('좋아요', ascending=True).plot(kind='barh')

좋아요가 가장 많은 top10에 대해 'barh' 그래프로 나타내고 데이터를 분석할 수도 있다.

결론

Excel의 데이터가 많을 수록 raw 데이터만을 사용해서는 올바른 분석이 상당히 어렵다. 따라서 이해하기 쉽도록 피벗 테이블을 사용하고 여러 각도에서 데이터를 분석할 수 있어야 한다.