Análise Exploratória dos dados da Covid-19
Vítor Beltr?o
Data Scientist | Machine Learning Engineer | Python | Pyspark | SQL | ETL | Microsoft Azure | AWS | AI Solutions | Statistics | LLM | Portuguese & English Language Proficiency
O último vírus que assombra o planeta no último ano, causando uma pandemia, denominado Covid-19, teve início na cidade de Wuhan, localizada na China.
A doen?a possui uma letalidade global de aproximadamente 3,4%, aumentando de acordo com a idade da pessoa acometida e com as comorbidades presentes.
A taxa transmiss?o do vírus é de aproximadamente 2,75, isso quer dizer que uma pessoa infectada transmite, em média, para outros 2,75 indivíduos.
Nos últimos meses foi iniciada a vacina??o em todo mundo, com a esperan?a de que conseguiremos conter este vírus.
Por estar em total evidência nos últimos meses desde janeiro de 2020, é que vamos fazer uma análise exploratória completa com os dados da Covid-19 ao longo deste artigo.
Posteriormente, vamos fazer também uma análise exploratória focada apenas no Brasil.
Obten??o dos dados
Os dados que ser?o explorados aqui, foram retirados da base de dados do Our World In Data. Eles possuem um DataSet bem completo, atualizado diariamente. Vale a pena também, explorar a página deles (link acima). Lá se encontra diversos dashboards muito interessantes para análise da situa??o do Covid-19 no mundo.
Importando os dados e bibliotecas
Análise exploratória inicial
Após importar o nosso DataFrame no item anterior, vamos fazer uma análise inicial do mesmo para nos situar e visualizar o banco de dados em quest?o e assim conseguir informa??es básicas para darmos prosseguimento a análise de forma mais aprofundada.
Esta etapa inicial, é muito importante, pois, é nela que vamos entender como devemos trabalhar com esse banco de dados específico.
Vamos extrair informa??es como: tamanho do Data Frame, nomes das séries (colunas), quais s?o os tipos das variáveis, visualiza??o das entradas (linhas), identificar valores ausentes, entre outros.
<class 'pandas.core.frame.DataFrame'> RangeIndex: 72096 entries, 0 to 72095 Data columns (total 59 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 iso_code 72096 non-null object 1 continent 68516 non-null object 2 location 72096 non-null object 3 date 72096 non-null object 4 total_cases 71132 non-null float64 5 new_cases 71130 non-null float64 6 new_cases_smoothed 70129 non-null float64 7 total_deaths 62042 non-null float64 8 new_deaths 62200 non-null float64 9 new_deaths_smoothed 70129 non-null float64 10 total_cases_per_million 70743 non-null float64 11 new_cases_per_million 70741 non-null float64 12 new_cases_smoothed_per_million 69745 non-null float64 13 total_deaths_per_million 61666 non-null float64 14 new_deaths_per_million 61824 non-null float64 15 new_deaths_smoothed_per_million 69745 non-null float64 16 reproduction_rate 58005 non-null float64 17 icu_patients 7613 non-null float64 18 icu_patients_per_million 7613 non-null float64 19 hosp_patients 9157 non-null float64 20 hosp_patients_per_million 9157 non-null float64 21 weekly_icu_admissions 717 non-null float64 22 weekly_icu_admissions_per_million 717 non-null float64 23 weekly_hosp_admissions 1182 non-null float64 24 weekly_hosp_admissions_per_million 1182 non-null float64 25 new_tests 32862 non-null float64 26 total_tests 32708 non-null float64 27 total_tests_per_thousand 32708 non-null float64 28 new_tests_per_thousand 32862 non-null float64 29 new_tests_smoothed 37463 non-null float64 30 new_tests_smoothed_per_thousand 37463 non-null float64 31 positive_rate 36226 non-null float64 32 tests_per_case 35675 non-null float64 33 tests_units 38760 non-null object 34 total_vaccinations 2982 non-null float64 35 people_vaccinated 2523 non-null float64 36 people_fully_vaccinated 1649 non-null float64 37 new_vaccinations 2519 non-null float64 38 new_vaccinations_smoothed 4376 non-null float64 39 total_vaccinations_per_hundred 2982 non-null float64 40 people_vaccinated_per_hundred 2523 non-null float64 41 people_fully_vaccinated_per_hundred 1649 non-null float64 42 new_vaccinations_smoothed_per_million 4376 non-null float64 43 stringency_index 61934 non-null float64 44 population 71698 non-null float64 45 population_density 67385 non-null float64 46 median_age 65589 non-null float64 47 aged_65_older 64833 non-null float64 48 aged_70_older 65219 non-null float64 49 gdp_per_capita 65767 non-null float64 50 extreme_poverty 44924 non-null float64 51 cardiovasc_death_rate 66378 non-null float64 52 diabetes_prevalence 67205 non-null float64 53 female_smokers 52239 non-null float64 54 male_smokers 51522 non-null float64 55 handwashing_facilities 33307 non-null float64 56 hospital_beds_per_thousand 60818 non-null float64 57 life_expectancy 68508 non-null float64 58 human_development_index 66356 non-null float64 dtypes: float64(54), object(5) memory usage: 32.5+ MB
Conforme mostrado acima, nosso DataFrame possui 71.494 entradas (linhas) e 59 variáveis (colunas). Temos também textos tipos números e strings. Podemos ter já nesse primeiro comando uma boa vis?o geral de como est?o os dados do DF.
Vamos agora ver as 05 primeiras e as 05 últimas entradas do nosso DataFrame.
Com esses comandos executados acima, conseguimos ter uma visualiza??o melhor do nosso DataSet, em forma de linhas e colunas.
Um ponto muito importante desta forma de visualizar o nosso DataSet é que além de enxergarmos os números no seu devido lugar, conseguimos identificar também as colunas que tem valores ausentes com mais facilidade.
Vamos agora verificar a porcentagem de valores ausentes nas colunas.
<bound method DataFrame.sum of iso_code continent ... life_expectancy human_development_index 0 False False ... False False 1 False False ... False False 2 False False ... False False 3 False False ... False False 4 False False ... False False ... ... ... ... ... ... 72091 False False ... False False 72092 False False ... False False 72093 False False ... False False 72094 False False ... False False 72095 False False ... False False
[72096 rows x 59 columns]>
iso_code 0.000000 continent 0.049656 location 0.000000 date 0.000000 total_cases 0.013371 new_cases 0.013399 new_cases_smoothed 0.027283 total_deaths 0.139453 new_deaths 0.137261 new_deaths_smoothed 0.027283 total_cases_per_million 0.018767 new_cases_per_million 0.018794 new_cases_smoothed_per_million 0.032609 total_deaths_per_million 0.144668 new_deaths_per_million 0.142477 new_deaths_smoothed_per_million 0.032609 reproduction_rate 0.195448 icu_patients 0.894405 icu_patients_per_million 0.894405 hosp_patients 0.872989 hosp_patients_per_million 0.872989 weekly_icu_admissions 0.990055 weekly_icu_admissions_per_million 0.990055 weekly_hosp_admissions 0.983605 weekly_hosp_admissions_per_million 0.983605 new_tests 0.544191 total_tests 0.546327 total_tests_per_thousand 0.546327 new_tests_per_thousand 0.544191 new_tests_smoothed 0.480373 new_tests_smoothed_per_thousand 0.480373 positive_rate 0.497531 tests_per_case 0.505174 tests_units 0.462383 total_vaccinations 0.958638 people_vaccinated 0.965005 people_fully_vaccinated 0.977128 new_vaccinations 0.965060 new_vaccinations_smoothed 0.939303 total_vaccinations_per_hundred 0.958638 people_vaccinated_per_hundred 0.965005 people_fully_vaccinated_per_hundred 0.977128 new_vaccinations_smoothed_per_million 0.939303 stringency_index 0.140951 population 0.005520 population_density 0.065343 median_age 0.090255 aged_65_older 0.100741 aged_70_older 0.095387 gdp_per_capita 0.087786 extreme_poverty 0.376886 cardiovasc_death_rate 0.079311 diabetes_prevalence 0.067840 female_smokers 0.275424 male_smokers 0.285370 handwashing_facilities 0.538019 hospital_beds_per_thousand 0.156430 life_expectancy 0.049767 human_development_index 0.079616
Nesta última análise conseguimos ver qual a porcentagem de valores nulos em cada coluna. Pode-se notar que algumas colunas praticamente nem foram alimentadas.
Vamos transformar a coluna "date" para formato datetime, para que possamos explorar essa variável ao máximo.
Conforme podemos ver acima, a última data que foi alimentada nesse DataFrame é de 01/03/2021.
Informa??es Estatísticas do Covid-19
Finalizado a etapa inicial da análise dos dados, vamos aprofundar um pouco mais em itens específicos. Como o nosso DataFrame é composto de muitas variáveis, vamos escolher algumas para analisar de forma mais aprofundada.
Fizemos um resumo estatístico do nosso DataFrame e logo abaixo fizemos uma rela??o da média do número de mortes com a média populacional, ou seja, o Covid-19 matou em média aproximadamente 0,014% da popula??o mundial.
Fizemos também, a rela??o do número total de mortes com o número total de casos, isso mostra que a letalidade do Covid-19 é em média de aproximadamente 3,02%.
Vamos agora, ver quais s?o os 05 locais mais afetados pelo Covid-19 e ver quais s?o os números de mortes deles.
Podemos ver nesse resultado que os 03 primeiros locais mais afetados s?o:
- 1° - Europa: 34.433.651 de casos
- 2° - América do Norte: 32.952.021 de casos
- 3° - EUA: 28.664.481 de casos
E os 03 primeiros locais com mais mortes s?o:
- 1° - Europa: 817.560 de mortes
- 2° - América do Norte: 748.936 de mortes
- 3° - Uni?o Europeia: 547.909 de mortes
Visualiza??o de Dados
Vamos agora visualizar nossos dados de maneira gráfica a fim de retirar insights valiosos. Vamos come?ar plotando um gráfico de barras para vermos melhor a situa??o dos locais mais afetados pelo Covid-19.
Neste gráfico acima, conseguimos ver os 05 locais com mais mortes pela covid-19 no mundo.
Vamos plotar um gráfico também, para visualizar como o número de mortes aumentou no mundo.
Análise exploratória para o Brasil
Vamos agora fazer uma rápida análise exploratória com dados exclusivos para o Brasil.
Acima verificamos que o nosso DataSet possui dados de 26/02/2020 até 04/03/2020
Vamos agora identificar quando houve o primeiro caso e a primeira morte no Brasil.
O primeiro caso e a primeira morte foram ambos identificados em 26/02/2020.
Por fim, vamos plotar gráficos de linha para compararmos a evolu??o dos casos e mortes no Brasil.
Conclus?o
Como esses dados s?o atualizados diariamente, essa análise exploratória ficará desatualizada em alguns poucos dias.
Entretanto, levando em considera??o o contexto dos dados analisados, vale a pena destacar que:
- A Europa está disparada em rela??o aos casos e mortes.
- A evolu??o dos casos no Brasil está em tendência de crescimento, como vimos nos gráficos de linhas.
- No geral, casos e mortes ainda est?o crescendo.
Muitas outras análises podem ser retiradas desse conjunto de dados, mas com essa análise inicial já conseguimos retirar muitas informa??es.
Obrigado!
Obrigado pelo seu tempo! Se tiver qualquer dúvida ou feedback vou adorar que você comente ou entre em contato pelo Medium.
Para ver esse e outros projetos completos, acesse meu portfólio no GitHub.
Valeu!
Data | Python | SQL | Statistics | ETL
4 年Análise super pertinente! Parabéns!!