NewTechAudit
122

Интерактивная визуализация данных распространения 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()
Лайфхаки IT, проверенные AI-решения для стандартных задач
{ "author_name": "NewTechAudit", "author_type": "editor", "tags": [], "comments": 0, "likes": 1, "favorites": 0, "is_advertisement": false, "subsite_label": "newtechaudit", "id": 118811, "is_wide": false, "is_ugc": false, "date": "Thu, 09 Apr 2020 10:23:04 +0300", "is_special": false }
Онлайн-марафон «2 шага до уровня pro в маркетинге авто»
28 мая Онлайн Бесплатно
Объявление на vc.ru
0
Комментариев нет
Популярные
По порядку

Прямой эфир