Интерактивни графики и динамично филтриране

Altair е библиотека за статистическа визуализация за Python. Синтаксисът му е чист и лесен за разбиране, както ще видим в примерите. Също така е много лесно да създавате интерактивни визуализации с Altair.

В първата част на поредицата Altair създадохме някои основни сюжети, за да се запознаем със синтаксиса и структурата. Това беше нещо като уводно ръководство за Altair. Във втората част се съсредоточихме повече върху филтрирането и трансформацията на данни във визуализациите.

Забележка: Ето списък на статиите от поредицата Алтаир.

В тази статия ще разгледаме подробно интерактивната визуализация. Altair прави доста ефективно създаването на интерактивни визуализации. Той също така позволява използването на други графики, легенди и някои джаджи като метод за филтриране.

Започваме с внос на Altair. Ако използвате Google Colab, той вече е инсталиран и може да се импортира директно. Ако не, можете лесно да го инсталирате с помощта на pip.

import altair as alt

Ще направим примерите въз основа на „набор от данни“ за отлив на клиенти, който е наличен в Kaggle.

cols = ['Attrition_Flag','Gender','Education_Level', 'Marital_Status','Credit_Limit','Total_Trans_Amt','Total_Trans_Ct']
churn = pd.read_csv("/content/BankChurners.csv", usecols=cols)\
.sample(n=1000)
churn.head()

Създадох рамката с данни с извадка от 1000 точки от данни (т.е. редове) от оригиналните набори от данни. Избрал съм само колоните, които ще се използват във визуализациите.

Пример 1

Първият пример се състои от точкова диаграма и стълбовидна диаграма. Ние ще свържем тези диаграми по начин, по който лентовата диаграма се актуализира според избраната част от диаграмата на разсейване.

Първо създаваме обект за избор, използвайки функцията за избор на Altair. Обектът за избор е това, което прави графиките интерактивни в този случай.

selection = alt.selection(type='interval')

Вече можем да създадем диаграмата на разпръскване и лентовата диаграма.

plt1 = (alt.
         Chart(churn).
         mark_circle(size=50).
         encode(
          x='Credit_Limit', y='Total_Trans_Amt',
          color = alt.condition(selection, 'Gender',  
          alt.value('lightgray'))
         ).
         add_selection(selection))
plt2 = (alt.
         Chart(churn).
         mark_bar().
         encode(y='Gender', x='count(Gender):Q',color = 'Gender').
         transform_filter(selection))

Синтаксисът започва с обект Chart от най-високо ниво. Във втория ред посочваме вида на парцела. Ние определяме какво да се начертае във функцията за кодиране. Колоните, които да се използват в осите x и y, както и разделителната цветна колона, са посочени в тази функция.

Има важна разлика между тези два сюжета. Това е начинът, по който преминаваме обекта за избор.

В първия график обектът за селекция се предава като филтър за избор, докато за втория график той е филтър за трансформация. По този начин вторият график се актуализира въз основа на избраната част в първия график.

Сега трябва да ги начертаем заедно. Можем да използваме функциите concat на Altair или операторите за конкатенация.

plt1 & plt2

Точковата диаграма показва колоните с кредитния лимит и общата сума на транзакцията. Стълбовата диаграма, която показва броя на мъжките и женските, се актуализира, докато избираме различни секции на диаграмата на разсейване.

Пример 2

Нека направим втория пример по начин, противоположен на първия пример. Ще използваме лентовата диаграма, за да актуализираме диаграмата на разсейване.

selection = alt.selection(type='interval')
plt1 = (alt.
         Chart().
         mark_circle(size=50).
         encode(x='Credit_Limit', y='Total_Trans_Amt',
         color='Gender').
         transform_filter(selection))
plt2 = (alt.
         Chart().
         mark_bar().
         encode(
         x='Marital_Status', y='mean(Total_Trans_Amt):Q',
         color=alt.condition(selection, alt.value("lightblue"),   
         alt.value("lightgray"))
         ).
         properties(height=300, width=200).
         add_selection(selection))

Първата диаграма е точкова диаграма, която показва колоните за кредитен лимит и обща сума на транзакцията. Предаваме колоната за пол към параметъра цвят, за да разделим точките от данни според пола. За разлика от точковата диаграма в предишния пример, обектът за избор се добавя с функцията transform_filter, тъй като точковата диаграма ще се актуализира въз основа на това, което е избрано във втората диаграма.

Вторият график е стълбовидна диаграма, която показва средната обща сума на транзакцията за различни категории в колоната за семейно положение.

Както можете да видите, трансформацията на данни е доста проста в Altair. Можем да предадем желаната трансформация, както е показано по-долу:

y='mean(Total_Trans_Amt):Q'

След функцията за кодиране използваме функцията за свойства, за да коригираме размера на графиките. Накрая обектът за избор се добавя с функцията add_selection.

Може би сте забелязали, че не сме предали името на рамката с данни на функцията Chart в този пример. Причината е начинът, по който ще свържем тези парцели.

alt.hconcat(plt1, plt2, data=churn)

Рамката с данни може да бъде предадена на параметъра за данни на конкатенираните функции (hconcat или vconcat).

Точковата диаграма се актуализира въз основа на избраните секции в лентовата диаграма. Оста y на лентовата диаграма показва средната обща сума на транзакцията за различните категории от колоната за семейно положение.

Пример 3

Една от хубавите черти на Altair е, че легендите могат да се използват като филтър. В този пример ще създадем точкова диаграма, която може да се актуализира с помощта на легендата.

Започваме със създаването на обекта за избор, както обикновено.

selection = alt.selection_multi(fields=['Education_Level'], bind='legend')

Предаваме името на колоните, които ще се използват като легенда и опция за филтриране.

(alt.
  Chart(churn).
  mark_circle(size=50).
  encode(
  x='Total_Trans_Ct', y='Total_Trans_Amt',
  color= alt.Color('Education_Level:N',
  scale=alt.Scale(scheme='category20b')),
  opacity=alt.condition(selection, alt.value(1), alt.value(0.1))
  ).
  properties(height=400, width=500).
  add_selection(selection))

Точките от данни, показани на точковата диаграма, се актуализират въз основа на избраната категория в легендата.

Заключение

В първата част на поредицата Altair създадохме някои основни сюжети, за да се запознаем със синтаксиса и структурата. Това беше нещо като уводно ръководство за Altair. Във втората част се съсредоточихме повече върху филтрирането и трансформацията на данни във визуализациите.

В тази статия създадохме интерактивни диаграми и вижте как обектите за избор могат да се използват за добавяне на интерактивни функции към диаграмите.

Тази библиотека предлага още много. Ще пиша още уроци за Altair. Очаквайте по-разширени функции на тази библиотека.

Благодаря ви, че прочетохте. Моля, уведомете ме, ако имате отзиви.