Análise exploratória de casos de Dengue notificado pelo SUS¶
Neste tutorial vamos explorar como começar a entender a descrição de casos do sis tema de notificação de agravos do SUS, o SINAN. Estes dados são bastante ricos e a documentação sobre o significado de cada uma das variáveis pode ser encontrada aqui.
[1]:
from pysus.online_data import SINAN, parquets_to_dataframe
import keplergl
import pandas as pd
import geopandas as gpd
%pylab inline
%pylab is deprecated, use %matplotlib inline and import the required libraries.
Populating the interactive namespace from numpy and matplotlib
Primeiro vamos começar pelo carregamento dos dados a partir do servidor do DataSUS. Como o dado está no formato Parquet, nós vamos utilizar a biblioteca pandas para visualizar os dados em um Dataframe:
[14]:
cols = [
'ID_AGRAVO', 'DT_NOTIFIC', 'SEM_NOT', 'NU_ANO', 'ID_MUNICIP',
'DT_SIN_PRI', 'SEM_PRI', 'NU_IDADE_N', 'CS_SEXO', 'CS_GESTANT',
'latitude', 'longitude',
'NM_DISEASE'
]
casos = parquets_to_dataframe(SINAN.download('Dengue', 2010))
[6]:
munrj = gpd.read_file('rj-municipalities.json')
munrj.plot();
/home/luabida/micromamba/envs/pysus/lib/python3.9/site-packages/geopandas/array.py:93: ShapelyDeprecationWarning: __len__ for multi-part geometries is deprecated and will be removed in Shapely 2.0. Check the length of the `geoms` property instead to get the number of parts of a multi-part geometry.
aout[:] = out
/home/luabida/micromamba/envs/pysus/lib/python3.9/site-packages/geopandas/plotting.py:33: ShapelyDeprecationWarning: Iteration over multi-part geometries is deprecated and will be removed in Shapely 2.0. Use the `geoms` property to access the constituent parts of a multi-part geometry.
for poly in geom:
/home/luabida/micromamba/envs/pysus/lib/python3.9/site-packages/descartes/patch.py:62: ShapelyDeprecationWarning: The array interface is deprecated and will no longer work in Shapely 2.0. Convert the '.coords' to a numpy array instead.
vertices = concatenate([

[26]:
casos.head()
[26]:
TP_NOT | ID_AGRAVO | SEM_NOT | NU_ANO | SG_UF_NOT | ID_MUNICIP | ID_REGIONA | ID_UNIDADE | DT_SIN_PRI | SEM_PRI | ... | PLASMATICO | EVIDENCIA | PLAQ_MENOR | CON_FHD | COMPLICA | HOSPITALIZ | DT_INTERNA | UF | MUNICIPIO | TP_SISTEMA | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DT_NOTIFIC | |||||||||||||||||||||
2010-02-24 | 2 | A90 | 201008 | 2010 | 35 | 351870 | 1349 | 2034573 | 2010-02-17 | 201007 | ... | 1 | |||||||||
2010-02-25 | 2 | A90 | 201008 | 2010 | 35 | 351870 | 1349 | 2034573 | 2010-02-24 | 201008 | ... | 1 | |||||||||
2010-02-26 | 2 | A90 | 201008 | 2010 | 35 | 351870 | 1349 | 2034573 | 2010-02-22 | 201008 | ... | 1 | |||||||||
2010-02-25 | 2 | A90 | 201008 | 2010 | 35 | 351870 | 1349 | 2034573 | 2010-02-25 | 201008 | ... | 1 | |||||||||
2010-02-24 | 2 | A90 | 201008 | 2010 | 35 | 351870 | 1349 | 2034573 | 2010-02-23 | 201008 | ... | 1 |
5 rows × 65 columns
Estes dados correspondem a todos os casos de dengue notificado ao SUS durante um período. Neste caso de 2015 a 2016. Para podermos tratar adequadamente estes dados para fins de visualização ou análise precisamos corrigir os tipos das colunas. Por exemplo vamos converter as datas.
[16]:
casos.DT_NOTIFIC = pd.to_datetime(casos.DT_NOTIFIC)
casos.DT_SIN_PRI = pd.to_datetime(casos.DT_SIN_PRI)
Para poder organizar os dados temporalmente, é útil indexar a tabela por alguma variável temporal
[17]:
casos = casos.set_index('DT_NOTIFIC')
Agora podemos plotar o número de casos por semana de dengue na cidade do Rio de Janeiro.
[18]:
casos.ID_AGRAVO.resample('1W').count().plot(grid=True);

Suponhamos agora que desejamos visualizar em um mapa os casos que ocorreram, por exemplo entre janeiro e março de 2015
[21]:
map1 = keplergl.KeplerGl(height=600,)
map1
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter
[27]:
# Animando os casos
for ano in [2015., 2016.]:
for i in range(1,53):
map1.add_data(casos[(casos.NU_ANO==ano)&(casos.SEM_PRI.apply(int)<=float(i))])#,name=f'semana {i} de {int(ano)}')
# time.sleep(1)
[28]:
map1.add_data(munrj,name='Municipios')
[ ]: