도찐개찐

[데이터시각화] 05. 파이차트 본문

카테고리 없음

[데이터시각화] 05. 파이차트

도개진 2023. 1. 2. 12:38
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns

파이 차트

  • 파이차트의 경우 부채꼴의 시작은 12시 방향에서 부터 시작해야함
  • 하나의 원을 여러 영역 또는 조각으로 나눈 원그래프
  • 각 조각은 해당 변수에 대한 관측치 개수 또는 백분율 의미
  • 전체 대비 여러 구성 요소 간 관계를 표시하는 데 유용
  • 고객 유형별 백분율, 다양한 제품별 매출 백분율, 다양한 국가별 수익
  • pie(값, 레이블, 옵션)
# autopct : 부채꼴 않에 백분율 표시
vals = [10, 20, 30, 40]
labels = ['Java', 'Python', 'R', 'C#']
plt.pie(vals, labels=labels, autopct='%d%%', startangle=55)
plt.show()

# exploded : 부채꼴 간의 간격
# shadow : 부채꼴 아래 그림자
explodes = [.3, 0, 0, 0]
plt.pie(vals, labels=labels, autopct='%d%%', explode=explodes, shadow=True)
plt.show()

# exploded : 부채꼴 간의 간격
# shadow : 부채꼴 아래 그림자
piestyles = {'width': .7, 'edgecolor': 'k', 'linewidth': 1.5}
colors = ['red', 'orange', 'yellow', 'green']
explodes = [.3, 0, 0, 0]
plt.pie(vals,
        labels=labels,
        autopct='%d%%',
        explode=explodes,
        # shadow=True,
        colors=colors,
        wedgeprops=piestyles,
       )
plt.show()

타이타닉 승객의 성별 시각화(PIE)

titanic = pd.read_csv('../data/titanic.csv')
df = pd.DataFrame(titanic.sex.value_counts())

df['prop'] = df.sex / np.sum(df.sex)
sns.countplot(data=titanic, x='sex')
plt.show()

# counterclock : 그래프 시계방향, 반시계 방향 여부
plt.pie(df['prop'], labels=df.index, autopct='%.1f%%', startangle=90, counterclock=False)
plt.show()

사원들의 직책별 분포 시각화

emps = pd.read_csv('../data/employees.csv')
df = pd.DataFrame(emps['JOB_ID'].value_counts())
df['prop'] = df.JOB_ID / np.sum(df.JOB_ID)
sns.countplot(ebmps, x='JOB_ID')
plt.xticks(rotation='vertical')
plt.show()

plt.pie(df['prop'][:8], labels=df.index[:8], autopct='%.1f%%', startangle=90, counterclock=False)
plt.show()

요일별 교통사고 건수 시각화

fontpath = '/home/bigdata/py39/lib/python3.9/site-packages/matplotlib/mpl-data/fonts/ttf/NanumGothic.ttf'
fname = mpl.font_manager.FontProperties(fname=fontpath).get_name()

mpl.rcParams['font.family'] = 'NanumGothic'
mpl.rcParams['font.size'] = 12
mpl.rcParams['axes.unicode_minus'] = False
car = pd.read_csv('../data/car_accient2016.csv')
df = pd.DataFrame(car['요일'].value_counts())
df['prop'] = df.요일 / np.sum(df.요일)
sns.countplot(car, x='요일')
plt.xticks(rotation='vertical')
plt.show()

plt.pie(df['prop'], labels=df.index, autopct='%.1f%%', startangle=90, counterclock=False)
plt.show()

728x90
Comments