Ошибка кодирования при использовании интерактивного сюжета altair? - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь использовать следующие данные df_roc для построения кривой RO C с использованием altair:

    Threshold   TPR     FPR
0   0.1     1.000000    0.941176
1   0.2     1.000000    0.705882
2   0.3     0.923077    0.588235
3   0.4     0.846154    0.470588
4   0.5     0.692308    0.352941
5   0.6     0.615385    0.235294
6   0.7     0.461538    0.117647
7   0.8     0.307692    0.058824
8   0.9     0.076923    0.000000

Это код, который я пытаюсь использовать, чтобы сделать интерактивный сюжет:

base = alt.Chart(df_roc, 
                 title='ROC Curve of KNN'
                ).properties(width=300)

roc_curve = base.mark_line(point=True).encode(
    alt.X('fpr', title='False Positive Rate (FPR)',  sort=None),
     alt.Y('tpr', title='True Positive Rate (TPR) (a.k.a Recall)'),
)

roc_rule = base.mark_line(color='green').encode(
    x='fpr',
    y='fpr',
    size=alt.value(2)
)


(roc_curve + roc_rule).interactive()

И это ошибка, которую я получаю:

ValueError: fpr encoding field is specified without a type; the type cannot be inferred because it does not match any column in the data.

alt.Chart(...)

Я попытался немного погуглить и попробовать какую-то информацию об этом, но не было не особо много. Кто-нибудь сталкивался с решением этой проблемы или помогал мне найти способ ее обойти?

Я бы действительно предпочел использовать для этого altair, а не другие пакеты для построения графиков.

Можно кто-нибудь мне поможет?

1 Ответ

1 голос
/ 09 мая 2020

Имена столбцов в Altair (и в pandas в целом) чувствительны к регистру. Похоже, что в ваших данных есть столбцы с именами "TPR" и "FPR', но ваша диаграмма определяет столбцы с именами "tpr" и "fpr".

Измените регистр, и ваша диаграмма должна работать:

base = alt.Chart(df_roc, 
                 title='ROC Curve of KNN'
                ).properties(width=300)

roc_curve = base.mark_line(point=True).encode(
    alt.X('FPR', title='False Positive Rate (FPR)',  sort=None),
     alt.Y('TPR', title='True Positive Rate (TPR) (a.k.a Recall)'),
)

roc_rule = base.mark_line(color='green').encode(
    x='FPR',
    y='TPR',
    size=alt.value(2)
)


(roc_curve + roc_rule).interactive()

enter image description here

...