Визуализация, которая может показывать четыре различных типа данных одновременно - PullRequest
0 голосов
/ 18 февраля 2020

Я хочу визуализировать свои данные следующим образом:

  1. У меня есть 5 различных алгоритмов (alg1, alg2, alg3, alg4 и alg5)

  2. У меня есть три группы пользователей (g1, g2 и g3)

  3. Для каждой группы алгоритм оценивается по двум метрикам m1 и m2 (например, точность и прибыль для каждой группы)

Я хочу визуализировать все это на одном графике, который может показать, как эти алгоритмы работают по отношению к двум метрикам во всех трех группах пользователей.

Я думал о графике рассеяния, но не был уверен, как все это можно объединить в одном графике рассеяния.

Результаты для metri c m1 выглядят так: каждое значение имеет три элемента, которые соответствуют трем различным группам пользователей.

{'alg1': [662.0003391054959, 175.32345651614452, 72.03508238727193],
 'alg2': [923.6524005590929, 385.2151039219693, 190.71692280990948],
 'alg3': [1404.387917216172, 446.2766994367938, 213.12994410684388],
 'alg4': [-28.01225225765556, -73.09081443515035, -85.32203386999164],
 'alg5': [1117.9970322350164, 424.7898159256133, 208.7032559089046]}

и для metri c m2:

{'alg1': [0.03111111111111112, 0.04362962962962987, 0.06071428571428592],
 'alg2': [0.0991111111111115, 0.10851851851851772, 0.14776785714285706],
 'alg3': [0.006074074074074077,
  0.02911111111111126,
  0.061904761904762164],
 'alg4': [0.0017777777777777776, 0.00362962962962963, 0.0038690476190476205],
 'alg5': [0.06148148148148173, 0.08140740740740716, 0.12187499999999994]}

1 Ответ

2 голосов
/ 18 февраля 2020

Вы можете идентифицировать алгоритмы по цвету и группам пользователей по типу маркера. Метрики M1 и M2 по оси.

Что вы думаете?

enter image description here

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

m1d = {'alg1_m1': [662.0003391054959, 175.32345651614452, 72.03508238727193],
 'alg2_m1': [923.6524005590929, 385.2151039219693, 190.71692280990948],
 'alg3_m1': [1404.387917216172, 446.2766994367938, 213.12994410684388],
 'alg4_m1': [-28.01225225765556, -73.09081443515035, -85.32203386999164],
 'alg5_m1': [1117.9970322350164, 424.7898159256133, 208.7032559089046]}

m2d = {'alg1_m2': [0.03111111111111112, 0.04362962962962987, 0.06071428571428592],
 'alg2_m2': [0.0991111111111115, 0.10851851851851772, 0.14776785714285706],
 'alg3_m2': [0.006074074074074077,
  0.02911111111111126,
  0.061904761904762164],
 'alg4_m2': [0.0017777777777777776, 0.00362962962962963, 0.0038690476190476205],
 'alg5_m2': [0.06148148148148173, 0.08140740740740716, 0.12187499999999994]}

m1 = pd.DataFrame.from_dict(m1d)
m2 = pd.DataFrame.from_dict(m2d)

f, ax = plt.subplots()
a = ax.scatter(m1['alg1_m1'],m2['alg1_m2'],color=['r','g','b'], marker='.')
b = ax.scatter(m1['alg2_m1'],m2['alg2_m2'],color=['r','g','b'], marker='v')
c = ax.scatter(m1['alg3_m1'],m2['alg3_m2'],color=['r','g','b'], marker='<')
d = ax.scatter(m1['alg4_m1'],m2['alg4_m2'],color=['r','g','b'], marker='>')
e = ax.scatter(m1['alg5_m1'],m2['alg5_m2'],color=['r','g','b'], marker='^')
ax.set_xlabel('M1')
ax.set_ylabel('M2')

red = mpatches.Patch(color='red', label='Group 1')
blue = mpatches.Patch(color='blue', label='Group 2')
green = mpatches.Patch(color='green', label='Group 3')

legend2 = plt.legend(handles=[red, blue, green], loc=1)
plt.legend((a,b,c,d,e),['alg1','alg2','alg3','alg4','alg5'], loc=7)
plt.gca().add_artist(legend2)

leg = ax.get_legend()
for i in range(0,5,1):
    leg.legendHandles[i].set_color('k')
plt.show()
...