Всіх вітаю! У цьому матеріалі ми будемо обчислювати та візуалізувати за допомогою бібліотеки plotly дисперсію нашої вибірки. У ролі наших вибірок я візьму максимальні та мінімальні прогнозовані значення температури у Києві на січень.
Створення вибірок
Для поврення обчислень та кінцевої візуалізації нам спочатку треба створити саму вибірки, з якою ми будемо працювати. Цю вибірку я пропоную ствирити з прогнозів погоди на січень у Києві.
Спершу створюємо вирібку із максимально можливих значень температури за січень:
max_predicted_temperature = [-8, 1, 0, -1, -2, -4, -5, -5, -4, -1, -3, -3, -5, 3, 4, 3, 2, 1, 1, 2, 2, 3, -1, -2, -4, -4, 1, 2, 3, 3, 3]Також вибірка із мінімально можливих значень температури:
min_predicted_temperature = [-11, -2, -5, -7, -6, -6, -6, -7, -5, -7, -6, -8, -9, -2, -3, -3, -3, -4, -4, -3, -3, -6, -7, -9, -11, -9, -5, -3, -3, -3, -11]І дні у січні:
days_list = ["Ч 1", "П 2", "С 3", "Н 4", "П 5", "В 6", "С 7", "Ч 8", "П 9",
"С 10", "Н 11", "П 12", "В 13", "С 14", "Ч 15", "П 16", "С 17", "Н 18", "П 19",
"В 20", "С 21", "Ч 22", "П 23", "С 24", "Н 25", "П 26", "В 27", "С 28", "Ч 29", "П 30", "С 31"]Візуалізація даних або створення графіків за допомогою пакета express
Встановлення plotly
Команди для встановлення бібліотеки plotly є у цьому розділі.
Windows:
pip install plotlyMacOS:
pip3 install plotlyLinux:
pip install plotlyГрафік максимальних прогнозованих значень температури
Після встановлення бібліотеки plotly імпортуємо її з пакетом express:
import plotly.express as expДля візуалізації наших даних створимо функцію visualize_data(), яка буде свторювати точковий графік на основі потрібних значень і під відповідним заголовком:
def visualize_data(x, y):
scatter_plot = exp.scatter(x=x, y=y)
scatter_plot.update_layout(title="Прогноз температури у Києві на січень (максимальні прогнозовані значення)")
scatter_plot.show()
visualize_data(days_list, max_predicted_temperature)Тут ми створюємо точковий графік на основі значень x та y:
scatter_plot = exp.scatter(x=x, y=y)Створюємо заголовок графіка:
scatter_plot.update_layout(title="Прогноз температури у Києві на січень (максимальні прогнозовані значення)")Відображаємо графік:
scatter_plot.show()Результат коду:

Чудово! Ми отримали потрібний нам графік, але він якийсь нудний, а тому пропоную зробити його значно красивішим. Для цього, наприклад, можна зробити більшимим крапки та задати їм шкалу кольорів.
По-перше, задамо графіку шкалу кольорів, це ми робимо безпосередньо у функції scatter() за допомогою параметрів color і color_continuous_scale. Перший параметр приймає вісь зі значеннями, до яких ми збираємося застосовувати шкалу кольорів, а другий параметр надає змогу вказати конкретну шкалу кольорів.
Ось як це виглядає у коді:
scatter_plot = exp.scatter(x=x, y=y, color=y, color_continuous_scale="Viridis")По-друге, задамо крапкам розмір 15, щоб вони були більшими. Це можна зробити за допомогою функції update_traces(), а конктено її параметра marker_size:
scatter_plot.update_traces(marker_size=15)Після нововвдень отримуємо ось такий резудьтат:

Як бачимо, тепер наш графік став значно приємнішим і красивішим.
Графік мінімальних прогнозованих значень температури
Для створення цього графіку потрібно лише змінити значення по y на список min_predicted_temperature, який і зберігає ці значення.
Ось код та результат:
def visualize_data(x, y):
scatter_plot = exp.scatter(x=x, y=y)
scatter_plot.update_layout(title="Прогноз температури у Києві на січень (мінімальні прогнозовані значення)")
scatter_plot.show()
visualize_data(days_list, min_predicted_temperature)
А ось оновлений графік:

Можливі помилки при спробі візуалізації через пакет express
Після запуску попореднього коду ви, можливо, можете зіштовхнутися з деякими помилками, які буде відображати ваш код. Це пов’язано із пакетом express бібліотеки plotly. Справа у тому, що для коректної роботи цього пакета треба, щоб ви завантажили декілька інших бібліотек.
Перша помилка полягає у тому, що для роботи з пакетом express треба завантажити бібліотеку numpy. Інакше ви отримаєте таку помилку:

Команди для встановлення numpy є нижче.
Windows:
pip install numpyMacOS:
pip3 install numpyLinux:
pip install numpyДруга ж помилка аналогічна — треба також встановити іншу бібліотеку. На цей раз необхідно встановити бібліотеку pandas. Якщо ви її не встановите, то в результаті отримаєте таку помилку:

Команди для встановлення pandas також показані внизу.
Windows:
pip install pandasMacOS:
pip3 install pandasLinux:
pip install pandasВізуалізація даних або створення графіків за допомогою пакета graph_objects
У першому розділі ми створювали графіки через пакет express бібліотеки plotly, але ті ж самі графіки також можна створювати і через пакет graph_objects, з яким ми вже працювали у минулій статті. Тож, у цьому розділі ми спробуємо створити ці ж графіки через пакет graph_objects, щоб дати ширші знання про plotly.
Імпортуємо бібліотеку з відповідним пакетом:
import plotly.graph_objects as goГрафік максимальних прогнозованих значень температури
Ось приклад реалізації графіка максимальних прогнозованих значень температури на січень:
import plotly.graph_objects as go
def visualize_graph(x, y):
graph_scatter = go.Figure(data=go.Scatter(x=x, y=y, mode="markers",
marker=dict(size=15,
color=max_predicted_temperature,
colorscale="Viridis", showscale=True
)))
graph_scatter.update_layout(title="Прогноз температури у Києві на січень (максимальні прогнозовані значення)")
graph_scatter.show()
visualize_graph(days_list, max_predicted_temperature)Параметр | Означення |
|---|---|
| Вказуємо, що на графіку повинні бути крапки |
| Розмір крапок |
| Застосовує шкалу кольорів до наших крапок |
| Вказуємо шкалу кольорів |
| Показуємо шкалу у правій частині екрана з графіком |
Створюємо графік з крапками та заданим розміром зі шкалою кольорів:
graph_scatter = go.Figure(data=go.Scatter(x=x, y=y, mode="markers",
marker=dict(size=15,
color=max_predicted_temperature,
colorscale="Viridis", showscale=True
)))Різниця з пакетом express видна одразу, так як у тому пакеті ми використовували функцію scatter(), а тут користуємося вже класом Scatter() у середені основного класу Figure(). Тобто Figure() — це по суті наше полотно так би мовити, а Scatter() — це вже тип графіка, який буде на цьому полотні.
Додаємо заголовок:
graph_scatter.update_layout(title="Прогноз температури у Києві на січень (максимальні прогнозовані значення)")Відображаємо графік:
graph_scatter.show()Результат:

Графік мінімальних прогнозованих значень температури
Реалізація графіка мінімальних прогнозованих значень температури на січень:
import plotly.graph_objects as go
def visualize_graph(x, y):
graph_scatter = go.Figure(data=go.Scatter(x=x, y=y, mode="markers",
marker=dict(size=15,
color=min_predicted_temperature,
colorscale="Viridis", showscale=True
)))
graph_scatter.update_layout(title="Прогноз температури у Києві на січень (мінімальні прогнозовані значення)")
graph_scatter.show()
visualize_graph(days_list, min_predicted_temperature)
Об’єднання графіків
В кінці нашої подорожі по візуалізації було б добре об’єднати графік для максимальних та мінімальних значень в один графік. Це також можна зробити у plotly.
Ось повиний код пограми, яка об’єднує дві вибірки в один графік:
import plotly.graph_objects as go
max_predicted_temperature = [-8, 1, 0, -1, -2, -4, -5, -5, -4, -1, -3, -3, -5, 3, 4, 3, 2, 1, 1, 2, 2, 3, -1, -2, -4, -4, 1, 2, 3, 3, 3]
min_predicted_temperature = [-11, -2, -5, -7, -6, -6, -6, -7, -5, -7, -6, -8, -9, -2, -3, -3, -3, -4, -4, -3, -3, -6, -7, -9, -11, -9, -5, -3, -3, -3, -11]
days_list = ["Ч 1", "П 2", "С 3", "Н 4", "П 5", "В 6", "С 7", "Ч 8", "П 9", "С 10", "Н 11", "П 12", "В 13", "С 14", "Ч 15", "П 16", "С 17", "Н 18", "П 19",
"В 20", "С 21", "Ч 22", "П 23", "С 24", "Н 25", "П 26", "В 27", "С 28",
"Ч 29", "П 30", "С 31"]
def visualize_temperature():
graph = go.Figure()
graph.add_trace(go.Scatter(x=days_list,
y=max_predicted_temperature,
name="Максимальні значення температури",
mode="markers",
fillcolor="blue"
)
)
graph.add_trace(go.Scatter(x=days_list,
y=min_predicted_temperature,
name="Мінімальні значення температури",
mode="markers",
fillcolor="red"
)
)
graph.update_traces(marker_size=15)
graph.update_layout(title="Прогноз температури у Києві на січень")
graph.show()
visualize_temperature()Спочатку створюємо об’єкт graph за допомогою класу Figure():
graph = go.Figure()Далі додаємо максимальні значення температури, вказуємо їх колір на графіку та назву, яку ми потім побачимо у правій стороні екрана:
graph.add_trace(go.Scatter(x=days_list,
y=max_predicted_temperature,
name="Максимальні значення температури",
mode="markers",
fillcolor="blue"
)
)Додаємо мінімальні значення температури:
graph.add_trace(go.Scatter(x=days_list,
y=min_predicted_temperature,
name="Мінімальні значення температури",
mode="markers",
fillcolor="red"
)
)Як бачимо, ми просто створили об’єкт graph і тепер додаємо до нашого полотна графіки зі значеннями за допомогою метода add_trace().
Задаємо розмір крапкам, заголовок і нарешті відображаємо графік:
graph.update_traces(marker_size=15)
graph.update_layout(title="Прогноз температури у Києві на січень")
graph.show()В результаті маємо один графік для максимальних і мінімальних значень температури:

Обчислення статистичних показників
Для знаходження статистичних показниів ми будемо використовувати вбудований модуль statistics, який дозволяє впроваджувати статистичні розрахунки.
Середнє арифметичне
Почнемо анш аналіз з нашпростішої речі — середнього арифметичного. Для її знаходження використовується функція mean().
Для максимальних прогнозованих значень температури:
max_temperature_mean = st.mean(max_predicted_temperature)
print(f"Середнє арифметичне максимальних прогнозованих значень температури: {max_temperature_mean}")Середнє арифметичне максимальних прогнозованих значень температури: -0.5806451612903226Для мінімальних прогнозованих значень температури:
min_temperature_mean = st.mean(min_predicted_temperature)
print(f"Середнє арифметичне мінімальних прогнозованих значень температури: {min_temperature_mean}")Середнє арифметичне мінімальних прогнозованих значень температури: -5.709677419354839Медіана
Для обчислення медіани існує функція median().
Для максимальних прогнозованих значень температури:
max_temperature_median = st.median(max_predicted_temperature)
print(f"Медіана максимальних прогнозованих значень: {max_temperature_median}")Медіана максимальних прогнозованих значень: 0Для мінімальних прогнозованих значень температури:
min_temperature_median = st.median(min_predicted_temperature)
print(f"Медіана мінімальних прогнозованих значень: {min_temperature_median}")Медіана мінімальних прогнозованих значень: -6Мода
Щоб знайти моду вибірки необхідно застосувати функцію mode().
Для максимальних прогнозованих значень температури:
max_temperature_mode = st.mode(max_predicted_temperature)
print(f"Мода максимальних прогнозованих значень температури: {max_temperature_mode}")Мода максимальних прогнозованих значень температури: 3Для мінімальних прогнозованих значень температури:
min_temperature_mode = st.mode(min_predicted_temperature)
print(f"Мода мінімальних прогнозованих значень температури: {min_temperature_mode}")Мода мінімальних прогнозованих значень температури: -3Генеральна дисперсія
Генеральна дисперсія — це такий тип дисперсії, який використовується для визначення рівня розсіяності значень саме за конкретний проміжок часу. У нашому випадку це січень місяць.
Взагалі генеральна дисперсія застосовується у випадку, якщо ми маємо повністю усі значення для аналізу чогось. Таким чином ми зможемо зробити загальний висновок про предмет аналізу. Тобто в нашій ситуації ми маємо значення температури за весь січень, і якщо наша кінцева мета — це зробити висновок про рівень розсіяності значень температури конкретно за січень, тоді нам треба буде використовувати генеральну дисперсію.
Щоб знайти дисперсію за допомогою модуля statistics нам треба використати функцію pvariance(). Спочатку знайдемо дисперсію для максимальних прогнозованих значень температури:
max_temperature_generalized_variance = st.pvariance(max_predicted_temperature)
print(f"Генеральна дисперсія максимальних прогнозованих значень: {max_temperature_generalized_variance}")Генеральна дисперсія максимальних прогнозованих значень: 10.049947970863684Тепер для мінімальних прогнозованих значень температури:
min_temperature_generalized_variance = st.pvariance(min_predicted_temperature)
print(f"Генеральна дисперсія мінімальних прогнозованих значень: {min_temperature_generalized_variance}")Генеральна дисперсія мінімальних прогнозованих значень: 7.173777315296566Вибіркова дисперсія
Вибіркова дисперсія — це такий тип дисперсії, який використовується для того, щоб зробити загальний висновок про предмет аналізу за частковою кількістю значень. Тобто це якби ми хотіли знайти рівень розсіяності значень температур за усю зиму, маючи лише значення за січень.
Для знаходження вибіркової дисперсії застосовується функція variance().
Для максимальних прогнозованих значень температури:
max_temperature_sample_variance = st.variance(max_predicted_temperature)
print(f"Вибіркова дисперсія максимальних прогнозованих значень: {max_temperature_sample_variance}")Вибіркова дисперсія максимальних прогнозованих значень: 10.38494623655914Для мінімальних прогнозованих значень температури:
min_temperature_sample_variance = st.variance(min_predicted_temperature)
print(f"Вибіркова дисперсія мінімальних прогнозованих значень: {min_temperature_sample_variance}")Вибіркова дисперсія мінімальних прогнозованих значень: 7.412903225806452Висновок
У підсумку ми дізналися дуже багато нового про створення графіків за допомогою різних пакетів plotly та провели деякий статистичний аналіз наших вибірок завдяки вбудованому модулю statistics, який також був предметом нашої розмови у даній статті. Всім дякую за увагу!