융무의 기술블로그
article thumbnail
Published 2020. 9. 23. 00:38
[python] 레이더차트 시각화 BI/Python

python을 이용해서 간단한 레이더차트 시각화를 해보겠습니다. 먼저 가상의 데이터를 데이터 프레임 형태로 만들어줍니다.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from math import pi

plt.rcParams["font.family"] = 'Malgun Gothic'
plt.rcParams["font.size"] = 15

df = pd.DataFrame({'시군구': ['서울','광주','부산','울산'],
                   '관광': [2, 5, 4, 3],
                   '환경': [2, 1, 3, 5],
                   '의료/복지/교육': [5, 3, 3, 4],
                   '안전': [4, 3, 2, 1],
                   '주거': [2, 3, 5, 3]},
                  columns=['시군구', '관광', '환경', '의료/복지/교육', '안전', '주거'])
df

해당 인덱스에 있는 시군구 한 곳인 서울에 대해서 레이더차트를 그리고 각 피처들을 비교해보겠습니다.

categories = list(df)[1:]

val_c1 = df.loc[0].drop('시군구').values.flatten().tolist()
val_c1 += val_c1[:1]

angles = [n / float(len(categories)) * 2 * pi for n in range(len(categories))]
angles += angles[:1]
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 8), subplot_kw=dict(polar=True))

plt.title(df['시군구'][0])
plt.xticks(angles[:-1], categories, color='grey', size=12)
plt.yticks(np.arange(1, 6), ['1', '2', '3', '4', '5'], color='grey', size=12)
plt.ylim(0, 5)
ax.set_rlabel_position(30)

ax.plot(angles, val_c1, linewidth=1, linestyle='solid', label='Client c1')
ax.fill(angles, val_c1, 'skyblue', alpha=0.4)

레이더차트에 서울과 울산을 그려 속성들을 비교해보겠습니다.

fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 8), subplot_kw=dict(polar=True))

plt.xticks(angles[:-1], categories, color='grey', size=12)
plt.yticks(np.arange(1, 6), ['1', '2', '3', '4', '5'], color='grey', size=12)
plt.ylim(0, 5)
ax.set_rlabel_position(30)
 
# part 1
val_c1 = df.loc[0].drop('시군구').values.flatten().tolist()
val_c1 += val_c1[:1]
ax.plot(angles, val_c1, linewidth=1, linestyle='solid', label='서울')
ax.fill(angles, val_c1, 'skyblue', alpha=0.4)
 
# part 2
val_c2=df.loc[3].drop('시군구').values.flatten().tolist()
val_c2 += val_c2[:1]
ax.plot(angles, val_c2, linewidth=1, linestyle='solid', label='울산')
ax.fill(angles, val_c2, 'lightpink', alpha=0.4)
 
plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))

plt.show()

레이더차트는 각 피처별 항목별 점수를 매겨서 장점과 단점의 균형을 쉽게 알 수 있어서 유의미하게 사용될 수 있습니다

profile

융무의 기술블로그

@융무

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!