피벗테이블은 엑셀에서 가장 유용히 쓰이는 기능 중 하나이다. Pandas에서도 피벗테이블을 당연히 지원한다. 만드는 방법은 아주 간단한데 ‘DataFrame.pivot_table’을 하고 엑셀에서 하듯이 필드데이터를 지정해주면 된다.

방식은 이러하다

DataFrame.pivot_table(data, values=None, index=None, columns=None, aggfunc=’mean’, fill_value=None, margins=False, dropna=True, margins_name=’All’)

그럼 앞선 게시물에서 구했던 평점 데이터를 이용해 피벗테이블을 만들어보자

평균평점 = data.pivot_table('평점', aggfunc='mean', index='제목', columns='성별')
평균평점.sample(5)

평균평점

이런 식으로 결과가 나올 것이다.(샘플데이터 임으로 랜덤이다.) 앞서 데이터에서 확인 할 수 있듯이 영화 마다 평점의 수가 상이하다. 그렇기에 평점이 250건 보다 많은 경우를 추려내보도록 하겠다.

영화별 = data.groupby('제목')
평점수 = 영화별.size()
평점수.index.name = '평점수'
평점수[:5]
평점기준충족 = 영화별.size() > 250
평균평점 = 평균평점[평점기준충족]
평균평점['평점수'] = 평점수
평균평점[:5]

해당 피벗테이블에서 특정 조건에 맞는 값을 뽑아보자 여성(F)이 선호하는 순으로 영화 데이터를 정렬하고 남녀 평균 평점의 차이를 구해보자 이때는 DataFrame.sort_values(by= , array type) 방식을 쓴다.

# 여성이 선호하는 순으로 정렬
평균평점.sort_values(by='F', ascending=False)[:5]

# 남녀 평균 평점의 차이
평균평점['차이'] = 평균평점['M'] - 평균평점['F']
평균평점[:5]

요걸 엑셀로 저장하려면

평균평점.to_excel(‘영화 평균평점.xlsx’)

라고 해주면 된다.

이제 앞선 데이터를 이용해 ‘남녀간에 호불호가 극명하게 갈리는 영화’를 구하고 이를 그래프로 나타내 보자

# 표준편차를 구해서 편차가 큰 순으로 나열
영화별 = data.groupby('제목')
영화별_평점_표준편차 = 영화별['평점'].std()
영화별_평점_표준편차 = 영화별_평점_표준편차[평점기준충족]

# 그래프 만들기
%matplotlib inline
영화별_평점_표준편차.sort_values(ascending=False)[:5].plot(kind='barh')

결과

요렇게 나왔다. 록키호러픽쳐쇼, 탱크걸, 네츄럴본킬러 등이 남녀 간 호불호가 가장 많이 나는 것을 알 수 있다.