Как использовать столбцы со спецсимволами в Альтаире - PullRequest
0 голосов
/ 06 мая 2019

Я довольно новичок в библиотеке Альтаира. У меня возникают трудности при создании графиков, если для отображаемой переменной в объекте данных pandas указан объект dtype.

Я безуспешно пробовал диаграмму и блокпост. Буду признателен за любую оказанную помощь.

столбиковый: Я пытаюсь создать диаграмму, которая выглядит следующим образом:

Desired Barchart

Я прочитал документацию по Altair и попробовал следующий код:

alt.Chart(psy).mark_bar().encode(x = alt.X('player.q_mother_language', title = 'Mother language'), y  ='count()', color = 'player.q_mother_language')

График, который предоставляет код:

enter image description here

Boxplot Тогда я решил попробовать некоторые коробочные сюжеты.

Boxplot, который я хочу создать:

enter image description here

Код, который я использовал:

alt.Chart(psy).mark_boxplot().encode(x = 'player.q_gender', y = 'player.q_age', color = 'player.q_gender')

Результат, который я получаю:

enter image description here

Набор данных выглядит следующим образом:

player.q_mother_language,player.q_country,player.q_age,player.q_gender
Czech,Czech,21,Male
Serbian,Serbia,23,Female
German,Austria,26,Male
German,Austria,21,Female
Portuguese,Portugal,21
Russian,Kazakhstan,22,Female
Mongolian,Mongolia,32,Female
Ukrainian,Ukraine,19,Female
German,Austria,22,Male

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 06 мая 2019

Проблема в том, что специальные символы в именах столбцов (включая точки, скобки и кавычки) используются для обозначения иерархических переменных.Чтобы продолжить работу с диаграммой, вы должны либо переименовать столбцы, чтобы они не содержали специальных символов, либо экранировать эти специальные символы в кодировке диаграммы.

Вот пример последнего подхода:

import pandas as pd
import io
import altair as alt

data = """player.q_mother_language,player.q_country,player.q_age,player.q_gender
Czech,Czech,21,Male
Serbian,Serbia,23,Female
German,Austria,26,Male
German,Austria,21,Female
Portuguese,Portugal,21
Russian,Kazakhstan,22,Female
Mongolian,Mongolia,32,Female
Ukrainian,Ukraine,19,Female
German,Austria,22,Male
"""

psy = pd.read_csv(io.StringIO(data))

alt.Chart(psy).mark_bar().encode(
    x= alt.X(r'player\.q_mother_language', type='nominal', title = 'Mother language'),
    y='count()',
    color=alt.Color(r'player\.q_mother_language', type='nominal')
)

enter image description here

...