다음은 PyMCDA 패키지의 로우 레벨 플로팅 유틸리티를 활용한 튜토리얼의 한글 번역입니다. 이 튜토리얼에서는 성능 테이블 및 다양한 함수 시각화에 대해 다룹니다.
이 노트북은 패키지에서 제공하는 플로팅 유틸리티를 사용해 성능 테이블과 함수 등을 시각화하는 방법을 보여줍니다.
시각화할 데이터를 가져오기 위해 이전에 사용한 성능 테이블 노트북의 데이터를 불러옵니다.
%matplotlib inline
%config Completer.use_jedi = False
%run performance_table_usage.ipynb
성능 테이블을 시각화하기 위해 필요한 라이브러리를 불러옵니다.
from mcda.plot import *
from mcda.transformers import normalize
fig = Figure(ncols=2)
x = [*range(len(alternatives))]
xticks = x
xticklabels = alternatives
for i in criteria:
values = perfTable.criteria_values[i]
ax = fig.create_add_axis()
ax.title = i
ax.xlabel = "alternatives"
ax.ylabel = "performances"
yticks = None
yticklabels = None
y = values.data
if isinstance(values.scale, QualitativeScale):
y = [v.scale.value(v.value) for v in values.values()]
yticklabels = values.scale.range()
yticks = [
values.scale.value(yy) for yy in yticklabels
]
elif isinstance(values.scale, NominalScale):
yticklabels = values.scale.range()
yticks = [*range(len(yticklabels))]
y = [yticks[yticklabels.index(v.value)] for v in values.values()]
ax.add_plot(
BarPlot(
x,
y,
xticks=xticks,
yticks=yticks,
xticklabels=xticklabels,
yticklabels=yticklabels,
xticklabels_tilted=True,
)
)
fig.draw()
참고: 위 코드에서는 BarPlot을 이용해 각 대안별 성과를 시각화합니다. 성과 값은 정성적 척도와 명목 척도에 따라 다르게 변환됩니다.
성능 테이블을 정규화한 후 기준별로 시각화할 수 있습니다.
norm_table = normalize(perfTable)
ax = Axis()
ax.xlabel = "alternatives"
ax.ylabel = "performances"
x = [*range(len(alternatives))]
xticks = x
xticklabels = alternatives
values = []
for i in criteria:
y = norm_table.criteria_values[i].data
values.append(y)
ax.add_plot(
StackedBarPlot(
x,
values,
xticks=xticks,
xticklabels=xticklabels,
labels=criteria
)
)
ax.add_legend("Criteria :")
ax.draw()
여기서 StackedBarPlot을 사용해 정규화된 각 기준의 성능을 쌓아 표시합니다.
기준별로 파이 차트를 생성할 수도 있습니다.
fig = Figure(ncols=2)
for i in criteria:
values = norm_table.criteria_values[i].data
ax = fig.create_add_axis()
ax.title = i
ax.add_plot(
PiePlot(
alternatives,
values
)
)
fig.draw()
다각형 형태의 레이더 차트를 생성하여 대안의 성능을 시각화합니다.
fig = Figure(ncols=2)
create_radar_projection(len(alternatives), frame="polygon")
for i in criteria:
values = norm_table.criteria_values[i].data
ax = fig.create_add_axis(
projection=radar_projection_name(len(alternatives)))
ax.title = i
ax.add_plot(
RadarPlot(
alternatives,
values
)
)
fig.draw()
특정 함수 f1과 f2를 시각화합니다. f1의 경우 구간별 선형 함수이며, f2는 람다 함수로 정의됩니다.
ax = Axis(title="Function f1")
x = []
y = []
for interval in f1.intervals:
if len(x) == 0:
x.append(interval.dmin)
y.append(f1(interval.dmin))
x.append(interval.dmax)
y.append(f1(interval.dmax))
ax.add_plot(
LinePlot(
x,
y,
marker="o",
)
)
ax.draw()
f2 함수 플로팅 및 주석 추가f2 함수는 다음과 같이 플로팅할 수 있으며, 주석도 추가할 수 있습니다.
ax = Axis(title="Function f2")
x = [0, 0.2, 0.4, 0.6, 0.8, 1]
y = [f2(value) for value in x]
ax.add_plot(
LinePlot(
x,
y,
)
)
ax.add_plot(
Text(
0.25,
1,
"$f_2(x) = 2x - 0.5$",
horizontal_alignement="left",
box=True,
)
)
ax.draw()
여기서 Text를 이용해 f2 함수의 방정식을 그래프에 표시합니다.
f3 함수 플로팅불연속 함수인 f3을 수직 및 수평 스트라이프와 함께 플로팅할 수 있습니다.
ax = Axis(title="Function f3")
ax.add_plot(
HorizontalStripes(
[0.5, 1.5, 2.5, 3.5, 4.5, 5.5],
color="black",
alpha=0.1,
)
)
ax.add_plot(
VerticalStripes(
[-0.5, 0.5, 1.5, 2.5, 3.5, 4.5],
color="red",
alpha=0.1,
attach_xticks=True,
)
)
ax.add_plot(
LinePlot(
[*range(len(f3.values.keys()))],
[*f3.values.values()],
xticks=[*range(len(f3.values.keys()))],
xticklabels=[*f3.values.keys()],
linestyle=":",
marker="o",
)
)
ax.draw()
여기서는 HorizontalStripes와 VerticalStripes를 사용하여 구분선을 추가하고, 불연속 값 f3을 시각화합니다.
여러 기준에 대한 대안의 성능을 평행 좌표 그래프를 통해 시각화합니다.
ax = Axis(title="Normalized performances")
x = [*range(len(criteria))]
values = norm_table.data
xticks=[*range(len(criteria))]
xticklabels=criteria
ax.add_plot(
ParallelCoordinatesPlot(
x,
values,
xticks=xticks,
xticklabels=xticklabels,
labels=alternatives,
linestyle="-.",
)
)
ax.add_legend(title="Alternatives :", location="right")
ax.draw()
모든 대안의 성능을 하나의 레이더 차트에 겹쳐서 표시합니다.
ax = Axis(
projection=radar_projection_name(len(criteria)),
title='Superposed normalized performances'
)
for a in alternatives:
ax.add_plot(
RadarPlot(
criteria,
norm_table.alternatives_values[a].data,
alpha=0.4,
)
)
ax.draw()
이렇게 각 대안을 겹쳐 표시하면, 대안 간의 성능을 쉽게 비교할 수 있습니다.
위 튜토리얼을 통해 PyMCDA에서 제공하는 다양한 플로팅 유틸리티의 사용법을 이해하고, 성능 테이블 및 기준 함수를 시각화하는 방법을 익힐 수 있습니다.