<jupyter_start><jupyter_text>Uma Análise da Vulnerabilidade das Capitais Brasileiras à Pandemia do SARS-CoV-2 PPGEE0248 - Disciplina Modelos de Decisão Multicritério <NAME>, 2021  Contextualização***No final do ano de 2019, casos de uma pneumonia desconhecida foram identificados na cidade de Wuhan, na China. Mais tarde, em 2020, o vírus que causou tais doenças foi identificado e denominado SARS-CoV-2. A Síndrome Respiratória causada pelo SARS-CoV-2 foi denominada Doença pelo Coronavírus 2019, ou COVID-19.O primeiro caso de COVID-19 no Brasil ocorreu no Hospital <NAME>, na cidade de São Paulo, em fevereiro de 2020. Desde então, a doença foi disseminada rapidamente em todo o país.De acordo com [Worldometer](https://www.worldometers.info/coronavirus/countries), em 08 de junho de 2021 o Brasil apresentou as seguintes estatísticas:- **Número de Casos:** 16,9 Milhões (Terceiro lugar mundial)- **Número de Óbitos:** 474 Mil (Segundo lugar mundial)A pandemia da COVID-19 atingiu o país de maneira desigual e com um alto grau de subnotificação de mortalidade. Portanto, é necessário analisar o grau de vulnerabilidade de cada região do país para que medidas adequadas de controle e contenção da doença possam ser melhor direcionadas. Objetivos***Neste nenário, o objetivo deste trabalho consiste em identificar as **capitais brasileiras com maior vulnerabilidade** a pandemia do SARS-CoV-2, baseando-se em **critérios sociais, econômicos, demográficos e epidemiológicos**.  <NAME>***As análises realizadas foram baseadas no artigo **A vulnerability analysis for the management of and response to the COVID-19 epidemic in the second most populous state in Brazil**, disponível [Neste Link](https://www.medrxiv.org/content/10.1101/2020.07.20.20158345v1).  Importando as Bibliotecas Necessárias***<jupyter_code># ---------------------------- Importing Libraries and Setup --------------------------- #

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from tabulate import tabulate


from pymcdm import methods as mcdm_methods
from pymcdm import weights as mcdm_weights
from pymcdm import normalizations as norm
from pymcdm import correlations as corr
from pymcdm.helpers import rankdata, rrankdata

np.set_printoptions(suppress=True, precision=4)
#sns.set_theme(style="whitegrid")
plt.style.use('Matte')<jupyter_output><empty_output><jupyter_text>Carregando e Processando o Conjunto de Dados***O conjunto de dados pode ser acessado através do arquivo **criterios.xlsx** e contém as seguintes informações: ![alt text](../presentation/figs/criterios.png)A informação **Tipo** indica se a variável é benéfica (+1) ou não-benéfica (-1), este item é necessário para a aplicação do método.<jupyter_code># ------------------------------- Loading and Processing Data ------------------------------- #
# Loading .csv
df = pd.read_excel('../criterios.xlsx', sheet_name='Dados', index_col='Capitais')
data = df.to_numpy()

# Criteria Types (1 or -1)
types = np.array([1, -1, 1, -1, 1, -1, -1, -1])

# Normalize Data
norm_data = norm.normalize_matrix(data, norm.minmax_normalization, types)<jupyter_output><empty_output><jupyter_text>Definição dos Pesos***Duas técnicas distintas foram utilizadas para determinar os pesos de cada critério:1. Pesos Iguais2. EntropiaDe acordo com os autores do artigo, não há evidências para justificar a utilização de pesos diferentes para atribuir importância ao conjunto de critérios utilizado. Portanto, o método de decisão aplicado pelos autores foi executado com pesos iguais. Por fins de comparação, o método baseado na entropia da informação também foi utilizado.<jupyter_code># Weights
w_equal = mcdm_weights.equal(data)
w_entropy = mcdm_weights.entropy(data)

print("Pesos Iguais:")
print(w_equal)
print("\nEntropia:")
print(w_entropy)<jupyter_output>Pesos Iguais:
[0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125]

Entropia:
[0.3764 0.0014 0.0007 0.0838 0.0368 0.0406 0.036  0.4244]<jupyter_text>Preference Ranking Organization Method for Enrichment Evaluation II (PROMETHEE)***Método de Decisão Multi-Critério- Comparação par-a-par de possíveis decisões;- Possíveis decisões são avaliadas de acordo com diferentes critérios (minimização ou maximização)- Pesos e Função de Preferência![alt text](../presentation/figs/promethee2-1.png)![alt text](../presentation/figs/promethee2-2.png)<jupyter_code># PROMETHEE II

# Preference Functions: usual, vshape, ushape, level, vshape2
preference_function = 'usual'
promethee = mcdm_methods.PROMETHEE_II(preference_function=preference_function)

# Calculate Results
results_equal =  promethee(data, w_equal, types)
results_entropy = promethee(data, w_entropy, types)<jupyter_output><empty_output><jupyter_text>Resultados***Salvando resultados em formato de Data Frame e atribuindo uma escala de vulnerabilidade variando de 1 a 5.<jupyter_code>df_results = pd.DataFrame(index=df.index)

df_results['Results Equal'] = results_equal
df_results['Vulnerability Equal'] = pd.qcut(df_results['Results Equal'], 5, ['5', '4', '3', '2', '1'])

df_results['Results Entropy'] = results_entropy
df_results['Vulnerability Entropy'] = pd.qcut(df_results['Results Entropy'], 5, ['5', '4', '3', '2', '1'])


df_results = df_results.sort_values(by='Results Equal')
df_results.to_csv('results.csv')<jupyter_output><empty_output><jupyter_text>Visualizando o Data Frame com os resultados. Existem poucas diferenças entre a utilização de pesos iguais e pesos baseados na Entropia.<jupyter_code>df_results<jupyter_output><empty_output><jupyter_text>Plotando o Ranking de vulnerabilidade em um gráfico de barras<jupyter_code>fig = plt.figure(figsize=(8,10))

sns.barplot(x='Results Equal', y=df_results.index, data=df_results, palette="coolwarm_r")

plt.savefig('../presentation/figs/barranking.pdf')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11179804224626481, 'fraction_numerical': 0.030740168298128114, 'mean_word_length': 5.3929747530186605, 'pattern_counts': {'":': 0, '<': 31, '<?xml version=': 0, '>': 31, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 1, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '323717', 'license': 'MIT', 'n_tokens_mistral': 2121, 'n_tokens_neox': 1958, 'n_words': 605, 'path': 'code/promethee-covid-vulnerability.ipynb', 'repo_name': 'andrematte/mcda-covid-vulnerability', 'size': '5848'}