{"id":14271,"url":"\/distributions\/14271\/click?bit=1&hash=51917511656265921c5b13ff3eb9d4e048e0aaeb67fc3977400bb43652cdbd32","title":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0430\u0442\u0438\u0432\u043e\u043a \u0438 \u0441\u043f\u0435\u0446\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 vc.ru \u2014 \u043d\u0430\u0439\u0434\u0438\u0441\u044c!","buttonText":"","imageUuid":""}

Интерактивная визуализация данных распространения COVID-19

Вирусологи изучают морфологию, физиологию, генетику а так же эволюцию вирусов, рассматривают способы диагностики, терапии и профилактики вирусных заболеваний. Изучают вирус под микроскопом. Какие инструменты необходимы Data Scientist’y для изучения вируса?

Data Scientist/Data Analytic работает с огромным объёмом данных, в которые необходимо «погрузиться». Одним из подходов изучения данных является построение графического представления.

В этой статье мы познакомимся с Python’овской библиотекой Plotly, которая позволяет быстро и эффективно строить графические представления данных. Эффективность заключается в интерактивности. Библиотека даёт возможность «прикоснуться» к данным и изучить их со всех «сторон».Plotly — это открытая библиотека, распространяемая по лицензии MIT, что позволяет использовать её в научной и коммерческой деятельности. Весь исходный код находится в репозитории GitHub

Библиотека очень обширная и позволяет строить графические представления данных с разным уровнем сложности, мы же рассмотрим несложные примеры, которые применимы к большинству задач. Если Вы заинтересуетесь библиотекой, рекомендуем ознакомиться с документацией на официальном сайте Plotly.

Данные, с которыми мы сегодня будем работать — статистика распространения короновируса (COVID-19). Датасет взят с репозитория Университета Джонса Хопкинса на GitHub. Университет Джонса Хопкинса — это частный исследовательский университет, основанный Джонсом Хопкинсом в городе Балтимор, штат Мэриленд, США. Мы будем работать с данными на 22.03.2020.

COVID-19 был выбран «на злобу дня», такого же результата можно было добиться на данных, например, о миграции китов, изменения курса валют или каких-либо других. Наша задача заключается в демонстрации возможностей библиотеки, её функциональности и удобстве. Давайте начнём!

Первое, что нам стоит сделать — импортировать библиотеки, с которыми мы будем работать:

import pandas as pd import plotly.express as px import plotly.graph_objects as go

Давайте построим наш первый интерактивный график. Это будет гистограмма по топ 5 стран по количеству заразившихся.

# сountrysTop5 - наш Pandas DataFrame c топ 5 fig = px.histogram(allCountrysTop5, y="Confirmed",x="Country/Region", title='Гистограмма распространения вируса в разрезе топ 5 стран',histfunc='avg') fig.show()

Как вы можете заметить код максимально лаконичен, и думаю даже человек, который не занимается программированием легко прочитает этот код.

Вот наша гистограмма.

Следующим этапом будет линейный график. Пример кода.

# countrys - Pandas DataFrame c данными о распространении и смертности Deaths = px.line(countrys, x="Last Update", y="Deaths",color='Country/Region',title='Deaths in Countrys', hover_name="Country/Region") Deaths.show()

График достаточно прост в реализация, но и достаточно информативен. Но мы можем добавить на график некие события, которые помогут посмотреть на ситуацию с иной стороны. Сделаем мы это на примере Италии.

colors = ['red','black','blue','darkgreen','darkorange'] fig = go.Figure() tabCountry = italy.loc[confirmedCountrys['Country/Region']==country] fig.add_trace(go.Scatter(x=italy['Last Update'], y=italy['Confirmed'],name=country+'_Confirmed')) fig.add_trace(go.Scatter(x=italy['Last Update'], y=italy['Deaths'],name=country+'_Deaths')) fig.add_trace(go.Scatter(x=italy['Last Update'], y=italy['Recovered'],name=country+'_Recovered')) maxy = max(italy['Confirmed']) num=1 # status - словарь статусов for st in status: col = colors[num-1] date = status[st][country] fig.add_shape(dict(type="line", x0=date,x1=date, y0=0,y1=maxy/num,line=dict(color=col))) fig.add_trace(go.Scatter( x=[date, date],name=st, y=[maxy/num, maxy/num],text=[' '+st] ,mode="text",textfont=dict(color=col),textposition='middle right')) num+=1 fig.update_layout(title_text='Confirmed,Deaths and Recovered in Italy') fig.show()

На данные можно посмотреть совсем под иным угло… а точнее под всеми углами. Plotly позволяет создавать 3D графики. И вот один пример такого графика:

# countrys43D - Pandas DataFrame c данными о заражении # population - стобец с информацие о зараженных в процентном соотношении с общим населением страны fig = go.Figure(go.Mesh3d(x=countrys43D['Last Update'],y=countrys43D['Country/Region'] ,z=countrys43D['population'],color='rgba(244,22,100,0.3)')) fig.update_layout(scene=dict(xaxis_title='Date', yaxis_title='Country', zaxis_title='population'),margin=dict(l=20,r=10,b=10,t=10),autosize=False) fig.show()

И напоследок совместим две очень интересных функциональности библиотеки Plotly: анимация и карты. Создавать анимированные графики в библиотеке очень легко, Вы сами можете в этом убедиться:

# allCountrys - Pandas DataFrame c данными о заражении в разрезе всех стран mapGraph = allCountrys.groupby(['Last Update', 'Country/Region'])['Confirmed', 'Deaths', 'Recovered'].max() mapGraph = mapGraph.reset_index() mapGraph['size'] = mapGraph['Confirmed'].pow(0.3) fig = px.scatter_geo(mapGraph, locations="Country/Region", locationmode='country names', color="Confirmed", size='size', hover_name="Country/Region", range_color= [0, max(mapGraph['Confirmed'])+2], projection="natural earth", animation_frame="Last Update", title='Карта распространения COVID-19 ') fig.update(layout_coloraxis_showscale=False) fig.show()
0
Комментарии
-3 комментариев
Раскрывать всегда