<jupyter_start><jupyter_text>Análise Exploratória de Dados<jupyter_code>import pandas as pd
import pandera as pa
import matplotlib.pyplot as plt
#Criação do dataframe e checagem dos dados
valores_ausentes = "00/01/1900"
df = pd.read_csv("93f4e8c2-430f-4142-86b3-96dab4905b4e.csv", parse_dates=['data_inicio_primeiros_sintomas','data_notificacao','data_obito'], na_values=valores_ausentes)
df
#Alteração do tipo de dados da coluna 'etnia' para 'object'
df["etnia"] = df["etnia"].astype(object)
#Renomear a coluna '_id' para 'id'
df = df.rename(columns={"_id":"id"})
#Checar os tipos de dados
df.dtypes
#Criação de uma nova coluna de idade
df["Idade"] = df["idade"]
df.head(5)
#Substituição de idades com menos de 1 ano por 0
filtro = df.Idade.str.contains("mês|meses")
df.loc[filtro, ["Idade"]] = 0
df.head(5)
df.loc[df.Idade == "IGN"]
#Substituição de dados não informados da coluna 'Idade'
df.loc[df.Idade == "IGN", ["Idade"]] = 999
#Converter a coluna 'idade' para valores inteiros
df["Idade"] = df["Idade"].astype("float").astype("Int64")
#Converter os dados não informados da coluna 'Idade' para nulos
df.loc[df.Idade == 999, ["Idade"]] = pd.NA
df.dtypes
#Total de dados nulos por coluna
df.isna().sum()
#Validação dos dados
schema = pa.DataFrameSchema(
    columns = {
        "id": pa.Column(pa.Int),
        "sexo": pa.Column(pa.String),
        "idade": pa.Column(pa.String, nullable=True),
        "raca": pa.Column(pa.String, nullable=True),
        "etnia": pa.Column(pa.String, nullable=True),
        "morbidades_previas": pa.Column(pa.String, nullable=True),
        "outras_morbidades_previas": pa.Column(pa.String, nullable=True),
        "evolucao": pa.Column(pa.String, nullable=True),
        "data_inicio_primeiros_sintomas": pa.Column(pa.DateTime, nullable=True),
        "data_notificacao": pa.Column(pa.DateTime),
        "data_obito": pa.Column(pa.DateTime, nullable=True),
        "classificacao_final": pa.Column(pa.String),
        "Idade": pa.Column(pa.Int, nullable=True)
    }
)
schema.validate(df)
#Dados estatísticos
df.describe()
#Média de idade dos enfermos
df.Idade.mean()
#Idade do enfermo mais velho
df.Idade.max()
#Idade do enfermo mais novo
df.Idade.min() #Menos de 1 ano
#Registro dos 3 enfermos mais velhos
df.nlargest(3, "Idade")
#Registro dos 3 enfermos mais novos
df.nsmallest(3, "Idade")
#Quantidade de enfermos com menos de 1 ano de vida ou não informado
df.groupby(df.Idade == 0)["id"].count().sort_values(ascending=True)
#Atributos da coluna 'sexo'
df["sexo"].unique()
#Atributos da coluna 'raca'
df["raca"].unique()
#Atributos da coluna 'evolucao'
df["evolucao"].unique()
#Atributos da coluna 'classificao_final'
df["classificacao_final"].unique()
#Média de idade por gênero
df.groupby("sexo")["Idade"].mean().sort_values(ascending=False)
#Média de idade por raca
df.groupby("raca")["Idade"].mean().sort_values(ascending=False)
#Média de idade por quadros de evolução
df.groupby("evolucao")["Idade"].mean().sort_values(ascending=False)
#Média de idade por classificação final
df.groupby("classificacao_final")["Idade"].mean().sort_values(ascending=False)
#Enfermos por gênero
df.groupby("sexo")["id"].count().sort_values(ascending=False)
#Enfermos por raca
df.groupby("raca")["id"].count().sort_values(ascending=False)
#Enfermos por evolução
#df.groupby("evolucao")["id"].nunique().sort_values(ascending=False)
df.groupby("evolucao")["id"].count().sort_values(ascending=False)
#Enfermos por classificação final
df.groupby("classificacao_final")["id"].count().sort_values(ascending=False)
#Morbidades prévias por gênero
df.groupby("sexo")["morbidades_previas"].count().sort_values(ascending=False)
#Morbidades prévias por raça
df.groupby("raca")["morbidades_previas"].count().sort_values(ascending=False)
#Óbitos por gênero
df.groupby("sexo")["data_obito"].count().sort_values(ascending=False)
#Óbitos por raça
df.groupby("raca")["data_obito"].count().sort_values(ascending=False)
#Óbitos por diabetes
df.groupby(df.morbidades_previas.str.contains("Diabetes"))["data_obito"].count().sort_values(ascending=True)
#Óbitos por doenças cardíacas ou vasculares
df.groupby(df.morbidades_previas.str.contains("Doenças Cardíacas ou Vasculares"))["data_obito"].count().sort_values(ascending=False)
#Óbitos por doenças respiratórias crônicas
df.groupby(df.morbidades_previas.str.contains("Doenças Respiratórias Crônicas"))["data_obito"].count().sort_values(ascending=True)
#Óbitos por tabagistas ou ex-tabagistas
df.groupby(df.outras_morbidades_previas.str.contains("TABAGISTA|Tabagista"))["data_obito"].count().sort_values(ascending=True)
#Óbitos por hipertensão
df.groupby(df.outras_morbidades_previas.str.contains("HIPERTENSÃO|hipertensão"))["data_obito"].count().sort_values(ascending=True)
#Óbitos por obesidade
df.groupby(df.outras_morbidades_previas.str.contains("OBESIDADE|Obesidade"))["data_obito"].count().sort_values(ascending=True)
#Óbitos por turbeculose
df.groupby(df.outras_morbidades_previas.str.contains("TUBERCULOSE|Tuberculose"))["data_obito"].count().sort_values(ascending=True)
#Enfermos por evolução
df["evolucao"].value_counts(ascending=False)
#Gráfico da quantidade de enfermos por evolução
df["evolucao"].value_counts(ascending=True).plot.barh(title="Total de enfermos por quadro evolutivo");
plt.ylabel("Evolução")
plt.xlabel("Total de enfermos");
#Enfermos por classificação final
df["classificacao_final"].value_counts(ascending=True)
#Gráfico da quantidade de enfermos por classificação final
df["classificacao_final"].value_counts(ascending=True).plot.bar(title="Total de enfermos por classificação final");
plt.ylabel("Total de enfermos")
plt.xlabel("Resultado de exame");
#Óbitos por raça
df.groupby("raca")["data_obito"].count().sort_values(ascending=False)
#Gráfico do total de óbitos por raça
df.groupby("raca")["data_obito"].count().sort_values(ascending=False).plot.pie(title="Total de Óbitos por Raça", figsize=(10,5), autopct='%1.0f%%')
plt.ylabel("");
#Gráfico de notificações ano 2020 - 2021
df.groupby(df["data_notificacao"])["id"].count().plot(title="Total de Notificações 2020 - 2021",figsize=(12,8))
plt.ylabel("Notificações")
plt.xlabel("Mês");
#No ano de 2020
df_2020 = df[df.data_notificacao.dt.year == 2020]
#Gráfico de notificações ano 2020
df_2020.groupby(df_2020.data_notificacao)["id"].count().plot(title="Total de Notificações por Mês em 2020",figsize=(12,8))
plt.ylabel("Notificações")
plt.xlabel("Mês");<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15624027388733272, 'fraction_numerical': 0.016339869281045753, 'mean_word_length': 7.282216494845361, 'pattern_counts': {'":': 14, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, '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': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '234281', 'license': 'MIT', 'n_tokens_mistral': 2536, 'n_tokens_neox': 2464, 'n_words': 446, 'path': 'casos-graves-covid-19-recife/Analise_Exploratoria.ipynb', 'repo_name': 'Flavio-Varejao/Projeto-ETL-1', 'size': '6426'}