Друкарня від WE.UA

Створюємо стовпчикові графіки за допомогою plotly

Всіх вітаю! У цій статті пропоную вам зануритися у графіки та візуалізацію на Python за допомогою plotly. На цей раз ми втілимо стовпчикові графіки прослуховувань різних реп виконавців за місяць та графік з оцінками деяких їхніх альбомів за сайтом AOTY.

Підготовка

Встановлення plotly

Windows:

pip install plotly

MacOS:

pip3 install plotly

Linux:

pip install plotly

Створення списків з даними

Імпортуємо бібліотеку:

import plotly.graph_objects as go

Спершу нам треба створити список із значеннями, щоб потім їх візуалізувати. Дані про кількість прослуховувань за місяць були взяті зі Spotify.

Отже, ось наші готові дані:

x = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", 
     "J. Cole", "A$AP Rocky", "Nas", "Travis Scott", "21 Savage", "Pusha T",     "Tyler, The Creator", "Lil Baby", "Dr. Dre", "Snoop Dogg", "2Pac",
     "The Notorious B.I.G.", "Wiz Khalifa", "Central Cee"]

y = [40520489, 73310969, 46514936, 74929387, 48226508, 54879735, 39121626,   47108369, 9384635, 60529505, 41217352,5574622, 39509505, 31399992, 24295716, 31792147, 28141092, 26072294, 43335258, 24837881]

Етапи створення візуалізації

Створення загального графіка

Спочатку створимо загальний графік, де будуть відображені прослуховування за місяць усіх виконавців.

Ось повний код нашого першого графіка:

import plotly.graph_objects as go


x = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "J. Cole", "A$AP Rocky", "Nas",
     "Travis Scott", "21 Savage", "Tyler, The Creator", "Lil Baby", "Dr. Dre", "Snoop Dogg", "2Pac",
     "The Notorious B.I.G.", "The Game", "Wiz Khalifa", "Central Cee"]

y = [40520489, 73310969, 46514936, 74929387, 48226508, 54879735, 39121626, 47108369, 9384635, 60529505, 41217352,
     5574622, 39509505, 31399992, 24295716, 31792147, 28141092, 26072294, 14817907, 43335258, 24837881]

bar_figure = go.Figure(data=[go.Bar(x=x, y=y)])
bar_figure.update_layout(title_text="Топ 20 реп виконавців")
bar_figure.show()

Тут ми створюємо сам графік із стовпців та вказуємо значення x та y:

bar_figure = go.Figure(data=[go.Bar(x=x, y=y)])

За допомогою метода update_layout() вказуэмо заголовок:

bar_figure.update_layout(title_text="Топ 20 реп виконавців")

Відображаємо створений графік:

bar_figure.show()

Ось результат:

Наш перший графік

Графік вийшов чудовим, але я думаю слід додати йому інший колір та тему. Тому змінюємо колір стовпців на відтінок синього за допомогою параметра marker_color:

bar_figure = go.Figure(data=[go.Bar(x=x, y=y, marker_color="#409151")])

Тепер додаємо темну тему за допомогою параметра template у методі update_layout():

bar_figure.update_layout(title_text="Топ 20 реп виконавців", template="plotly_dark")

Тема plotly_dark — це стандартна темна тема для plotly.

Ось видозмінений код:

import plotly.graph_objects as go


x = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "J. Cole", "A$AP Rocky", "Nas",
     "Travis Scott", "21 Savage", "Pusha T", "Tyler, The Creator", "Lil Baby", "Dr. Dre", "Snoop Dogg", "2Pac",
     "The Notorious B.I.G.", "Wiz Khalifa", "Central Cee"]

y = [40520489, 73310969, 46514936, 74929387, 48226508, 54879735, 39121626, 47108369, 9384635, 60529505, 41217352,
     5574622, 39509505, 31399992, 24295716, 31792147, 28141092, 26072294, 43335258, 24837881]

bar_figure = go.Figure(data=[go.Bar(x=x, y=y, marker_color="#409151")])
bar_figure.update_layout(title_text="Топ 20 реп виконавців", template="plotly_dark")
bar_figure.show()

Результат:

Покращений графік

Категоризація графіка

Також ми можемо дещо відредагувати наш графік. Зараз він виглядає красивим, але водночас є дуже простим. Я пропоную розділити графік на категорії, щоб виконавці, що мають сорок і більше мільйонів прослуховувань були позначені окремою категорією від тих, що мають менше сорока мільйонів прослуховувань.

Ось код, який оновить наш графік:

part_one_names = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "A$AP Rocky",
                  "Travis Scott", "21 Savage", "Wiz Khalifa"]

part_one_data = [40520489, 73310969, 46514936, 74929387, 48226508, 54879735, 47108369, 60529505, 41217352, 43335258]

part_two_names = ["J. Cole", "Nas", "Pusha T", "Tyler, The Creator", "Lil Baby", "Dr. Dre", "Snoop Dogg", "2Pac",
                  "The Notorious B.I.G.", "Central Cee"]
part_two_data = [39121626, 9384635, 5574622, 39509505, 31399992, 24295716, 31792147, 28141092, 26072294, 24837881]

bar_figure = go.Figure(data=[
     go.Bar(name=">= 40 мільйонів", x=part_one_names, y=part_one_data, marker_color="#409151"),
     go.Bar(name="< 40 мільйонів", x=part_two_names, y=part_two_data, marker_color="#8ba955")
])

bar_figure.update_layout(title_text="Топ 20 реп виконавців", template="plotly_dark")
bar_figure.show()

Результат:

Графік, що розділений на дві категорії

Згрупований графік

Тепер пропоную згрупувати наш графік так, щоб під одним значенням по осі x були два стовпчики. Для цього, ми візьмемо по альбому з кожного виконавця та відобразимо його оцінки, зроблені критиками і користувачами.

Оцінки альбомів взяті із сайту AOTY.

Отже, ось зібрані дані:

albums_titles = ["The Blueprint", "The Eminem Show", "Get Rich or Die Tryin'",
                 "To Pimp a Butterfly", "Tha Carter II", "DS2",
                 "2014 Forest Hills Drive"]

authors = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "J. Cole"]

critic_scores = [85, 75, 74, 95, 79, 77, 69]
user_scores = [88, 82, 77, 95, 82, 80, 79]

Ось повний код:

albums_titles = ["The Blueprint", "The Eminem Show", "Get Rich or Die Tryin'",
                 "To Pimp a Butterfly", "Tha Carter II", "DS2",
                 "2014 Forest Hills Drive"]

authors = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "J. Cole"]

critic_scores = [85, 75, 74, 95, 79, 77, 69]
user_scores = [88, 82, 77, 95, 82, 80, 79]

bar_figure = go.Figure(data=[
     go.Bar(name="Critic score", x=albums_titles, y=critic_scores,
            marker_color="#a2767f",
            text=authors,
            textposition="inside"),
     go.Bar(name="User score", x=albums_titles, y=user_scores,
            marker_color="#d9898c",
            text=authors,
            textposition="inside")])

bar_figure.update_layout(title_text="Оцінки альбомів на AOTY", template="plotly_dark", barmode="group")
bar_figure.show()

У цьому графіку необхідно також додати й псевдоніми виконавців, тому спершу нам треба вказати, звідки саме ми будемо брати псевдоніми.

Для цього, у plotly є параметр text:

bar_figure = go.Figure(data=[
     go.Bar(name="Critic score", x=albums_titles, y=critic_scores,
            marker_color="#a2767f", 
            text=authors, 
            textposition="inside"),
     go.Bar(name="User score", x=albums_titles, y=user_scores, 
            marker_color="#d9898c",
            text=authors, 
            textposition="inside")])

Отже, ми взяли псевдоніми зі списку authors, але тепер нам треба подумати над їхнім розташуванням на графіку. Для розташування псевдонімів виконавців ми використаємо параметр textposition, де вказали їх положення всередині стовпців (передали значення inside).

Тут, окрім заголовку та теми, надаємо значення “group“ параметру barmode, щоб отримати згрупований графік:

bar_figure.update_layout(title_text="Оцінки альбомів на AOTY", template="plotly_dark", barmode="group")

Результат:

Оцінки альбомів на AOTY

Складений графік

Крім згруповування, ми ще можемо скласти графік так, щоб стовпці були один на одному. Для втілення такого типу графіка варто надати значення “stack” у параметр barmode.

Ось повний код:

albums_titles = ["The Blueprint", "The Eminem Show", "Get Rich or Die Tryin'",
                 "To Pimp a Butterfly", "Tha Carter II", "DS2",
                 "2014 Forest Hills Drive"]

authors = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "J. Cole"]

critic_scores = [85, 75, 74, 95, 79, 77, 69]
user_scores = [88, 82, 77, 95, 82, 80, 79]

bar_figure = go.Figure(data=[
     go.Bar(name="Critic score", x=albums_titles, y=critic_scores,
            marker_color="#a2767f",
            text=authors,
            textposition="inside"),
     go.Bar(name="User score", x=albums_titles, y=user_scores,
            marker_color="#d9898c",
            text=authors,
            textposition="inside")])

bar_figure.update_layout(title_text="Оцінки альбомів на AOTY", template="plotly_dark", barmode="stack")
bar_figure.show()

Резульат:

Складений графік

Висновок

У даній статті ми навчилися створювати стовпчикові графіки різного типу (категоризовані, згруповані, складені) та стилізовувати їх на різні смаки. Дякую за увагу!

Список джерел
  1. JAY-Z - кількість прослуховувань за місяць
  2. Eminem - кількість прослуховувань за місяць
  3. 50 Cent - кількість прослуховувань за місяць
  4. Kendrick Lamar - кількість прослуховувань за місяць
  5. Lil Wayne - кількість прослуховувань за місяць
  6. Future - кількість прослуховувань за місяць
  7. J. Cole - кількість прослуховувань за місяць
  8. A$AP Rocky - кількість прослуховувань за місяць
  9. Nas - кількість прослуховувань за місяць
  10. Travis Scott - кількість прослуховувань за місяць
  11. 21 Savage - кількість прослуховувань за місяць
  12. Pusha T - кількість прослуховувань за місяць
  13. Tyler, The Creator - кількість прослуховувань за місяць
  14. Lil Baby - кількість прослуховувань за місяць
  15. Dr. Dre - кількість прослуховувань за місяць
  16. Snoop Dogg - кількість прослуховувань за місяць
  17. 2Pac - кількість прослуховувань за місяць
  18. The Notorious B.I.G. - кількість прослуховувань за місяць
  19. Wiz Khalifa - кількість прослуховувань за місяць
  20. JAY-Z - The Blueprint. Оцінка альбому
  21. Eminem - The Eminem Show. Оцінка альбому
  22. Kendrick Lamar - To Pimp a Butterfly. Оцінка альбому
  23. 50 Cent - Get Rich or Die Tryin'. Оцінка альбому
  24. Lil Wayne - Tha Carter II. Оцінка альбому
  25. Future - DS 2. Оцінка альбому
  26. J. Cole - 2014 Forest Hills Drive. Оцінка альбому

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Mystique Lord
Mystique Lord@nocturnal_reader we.ua/nocturnal_reader

Нічний читач

52Довгочити
572Прочитання
16Підписники
Підтримати
На Друкарні з 14 липня

Більше від автора

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: