<jupyter_start><jupyter_text>Lendo somente as primeiras 5 Linhas do CSV para verificar quais são as colunas<jupyter_code>#leitura df completo
df = pd.read_csv(".\DADOS\MICRODADOS_ENEM_2019.csv", encoding='latin-1', sep=';')<jupyter_output><empty_output><jupyter_text>Verificar dados faltantes<jupyter_code>df.isnull().sum().sort_values(ascending=False)
total = df.isnull().sum().sort_values(ascending=False)
percentual = (df.isnull().sum()/df.isnull().count()*100).sort_values(ascending=False)
faltantes = pd.concat([total, percentual], axis=1 , keys=["Total", 'Percentual'])
faltantes
df.info()<jupyter_output><class 'pandas.core.frame.DataFrame'>
RangeIndex: 5095270 entries, 0 to 5095269
Columns: 136 entries, NU_INSCRICAO to Q025
dtypes: float64(25), int64(70), object(41)
memory usage: 5.2+ GB<jupyter_text>Tratativa dos dados<jupyter_code>colunas = ['SG_UF_RESIDENCIA','NU_IDADE','TP_SEXO','TP_ESTADO_CIVIL','TP_COR_RACA','TP_ST_CONCLUSAO','TP_ANO_CONCLUIU','TP_ESCOLA','IN_TREINEIRO','IN_BAIXA_VISAO','IN_CEGUEIRA','IN_SURDEZ','IN_DEFICIENCIA_AUDITIVA','IN_SURDO_CEGUEIRA','IN_DEFICIENCIA_FISICA','IN_DEFICIENCIA_MENTAL','IN_DEFICIT_ATENCAO','IN_DISLEXIA','IN_DISCALCULIA','IN_AUTISMO','IN_VISAO_MONOCULAR','IN_OUTRA_DEF','IN_GESTANTE','IN_LACTANTE','IN_SEM_RECURSO','TP_PRESENCA_CN','TP_PRESENCA_CH','TP_PRESENCA_LC','TP_PRESENCA_MT','NU_NOTA_CN','NU_NOTA_CH','NU_NOTA_LC','NU_NOTA_MT','TP_LINGUA','TP_STATUS_REDACAO','NU_NOTA_REDACAO','Q001','Q002','Q006','Q024','Q025']
df_novo = df.loc[:, colunas]

#Coluna de qtd. deficientes
df_novo['DEF'] = np.where(df_novo.iloc[:, 10:24].sum(axis=1) > 0,1,0)

#Colune Nota média dos participantes
df_novo['NOTA_MEDIA'] = (df_novo.loc[:,('NU_NOTA_CN', 'NU_NOTA_CH', 'NU_NOTA_LC', 'NU_NOTA_CN', 'NU_NOTA_REDACAO')].sum(axis=1) / 5)
df_novo['Q024'] = np.where(df_novo.loc[:,'Q024'] == 'A',0,1)
df_novo['Q025'] = np.where(df_novo.loc[:,'Q025'] == 'A',0,1)
df_novo["Q024"] = df_novo['Q024'].apply(np.sign).replace({ 0:'Não tem computador', 1: 'Tem computador'})
df_novo["Q025"] = df_novo['Q025'].apply(np.sign).replace({ 0:'Não tem internet', 1: 'Tem internet'})

##quantidade de pessoas presentes em todas as provas
df_novo['PRESENCA'] = np.where(df_novo.iloc[:, 26:29].sum(axis=1) > 0,1,0)

#drop nas colunas de deficientes
df_novo.drop(df_novo.columns[10:24],axis=1,inplace=True)


df_novo.info()
df_novo.shape
df_novo.describe()

df_novo.describe(include='O')
# Pessoas com nota máxima na redação
len(df_novo[df_novo['NU_NOTA_REDACAO'] == 1000.0])
# Participantes que zeraram na prova
len(df_novo[df_novo['NOTA_MEDIA'] == 0.00])
df_sorted = df_novo.sort_values('NOTA_MEDIA', ascending=False)
df_sorted
#drop notas em branco
df_novo.dropna(subset=['NOTA_MEDIA'],inplace=True)
generoXmedia=pd.pivot_table(df_novo,values=['NOTA_MEDIA'],columns=["TP_SEXO"])
estadoXmedia=pd.pivot_table(df_novo,values=['NOTA_MEDIA'],columns=['SG_UF_RESIDENCIA'])
defXmedia=pd.pivot_table(df_novo,values=['NOTA_MEDIA'],columns=["DEF"])
computXinternetXmedia=pd.pivot_table(df_novo,values=['NOTA_MEDIA'],columns=["Q024","Q025"])
print(generoXmedia)
print(estadoXmedia)
print(defXmedia)
print(escolarXmedia)
print(computXinternetXmedia)
#Aqui substitui os estados por regiões para melhor visualização
df_novo["SG_UF_RESIDENCIA"]=df_novo.filter(items=["SG_UF_RESIDENCIA"]).replace(['AM','PA','AC','RO','RR','AP','TO'],"NORTE")
df_novo["SG_UF_RESIDENCIA"]=df_novo.filter(items=["SG_UF_RESIDENCIA"]).replace(['MA','PI','CE','RN','PB','PE','AL','SE','BA'],"NORDESTE")
df_novo["SG_UF_RESIDENCIA"]=df_novo.filter(items=["SG_UF_RESIDENCIA"]).replace(['MT','MS','GO','DF'],"CENTRO-OESTE")
df_novo["SG_UF_RESIDENCIA"]=df_novo.filter(items=["SG_UF_RESIDENCIA"]).replace(['MG','SP','RJ','ES'],"SUDESTE")
df_novo["SG_UF_RESIDENCIA"]=df_novo.filter(items=["SG_UF_RESIDENCIA"]).replace(['PR','SC','RS'],"SUL")
regiaoXmedia=pd.pivot_table(df_novo,values=['NOTA_MEDIA'],columns=['SG_UF_RESIDENCIA'])
print(regiaoXmedia)<jupyter_output><empty_output><jupyter_text>Selecionando os melhores 1000 participantes (TOP 1000)<jupyter_code>df_top1k = df_novo.NOTA_MEDIA.nlargest(1000)
df_top1k
nota_corte = df_top1k.min()
nota_corte
df_top1k = df_sorted[df_sorted['NOTA_MEDIA'] >= nota_corte]
df_top1k.reset_index(drop=True)<jupyter_output><empty_output><jupyter_text>----------------------  COMPARANDO PARTICIPANTES NO TOTAL E NOS 1000 MELHORES COLOCADOS<jupyter_code>df_top1k.replace({0:'Não declarado', 1:'Branca',2:'Preta',3:'Parda',4:'Amarela',5:'Indígena'},inplace=True)
df_sorted.TP_COR_RACA.value_counts()
df_sorted.TP_COR_RACA.value_counts(normalize=True)*100
df_top1k.TP_COR_RACA.value_counts()
df_top1k.TP_COR_RACA.value_counts(normalize=True)*100
df_sorted.TP_SEXO.value_counts(normalize=True)*100
df_top1k.TP_SEXO.value_counts(normalize=True)*100
df_sorted.Q006.value_counts(normalize=True)*100
df_top1k.Q006.value_counts(normalize=True)*100
df_top1k.SG_UF_RESIDENCIA.value_counts(normalize=True)*100<jupyter_output><empty_output><jupyter_text>Analise de Presentes e Ausentes<jupyter_code>#Analise de presentes e ausentes totais por estado
df_novo.groupby(['SG_UF_RESIDENCIA']).agg({'PRESENCA':np.sum}).sort_values(by='PRESENCA', ascending=True)
#Idade média por presenca sexo e tipo de escola
df_novo.groupby(['PRESENCA','TP_SEXO','TP_ESCOLA']).agg({'NU_IDADE':np.mean})
#Data Frame sem os ausentes em todas as provas
df_sem_ausentes= df_novo[df_novo['PRESENCA'] != 0]
#Estados com o menor e maior numero de participantes presentes
df_novo.groupby(by="SG_UF_RESIDENCIA").size().sort_values()<jupyter_output><empty_output><jupyter_text>Analise de Gestantes, Idosos, Candidatos<jupyter_code>df_novo = df_novo.dropna()
idades = df['NU_IDADE']
gestantes = df['IN_GESTANTE']
sexos = df['TP_SEXO']
# quantidade e distribuição por idade de candidatos menores de 18 anos
print(f'Um total de {idades[idades < 18].count()} candidatos menores de 18 anos realizaram o exame')
print(f'Distribuição dos {idades[idades < 18].count()} menores por idade:')
print(idades[idades < 18].value_counts().sort_index())
# notas de acordo com a escolaridade do pai
display(df_novo.filter(items=['NU_NOTA_REDACAO', 'Q001']).replace({'A': 'Nunca estudou', 'B': 'Não completou a 4ª série/5º ano do Ensino Fundamental', 'C': 'Completou a 4ª série/5º ano, mas não completou a 8ª série/9º ano do Ensino Fundamental', 'D': 'Completou a 8ª série/9º ano do Ensino Fundamental, mas não completou o Ensino Médio', 'E': 'Completou o Ensino Médio, mas não completou a Faculdade', 'F': 'Completou a Faculdade, mas não completou a Pós-graduação', 'G': 'Completou a Pós-graduação', 'H': 'Não sabe'}).groupby('Q001').mean().sort_values(by='NU_NOTA_REDACAO', ascending = False))
display(df_novo.filter(items=['NU_NOTA_MT', 'Q001']).replace({'A': 'Nunca estudou', 'B': 'Não completou a 4ª série/5º ano do Ensino Fundamental', 'C': 'Completou a 4ª série/5º ano, mas não completou a 8ª série/9º ano do Ensino Fundamental', 'D': 'Completou a 8ª série/9º ano do Ensino Fundamental, mas não completou o Ensino Médio', 'E': 'Completou o Ensino Médio, mas não completou a Faculdade', 'F': 'Completou a Faculdade, mas não completou a Pós-graduação', 'G': 'Completou a Pós-graduação', 'H': 'Não sabe'}).groupby('Q001').mean().sort_values(by='NU_NOTA_MT', ascending = False))
display(df_novo.filter(items=['NU_NOTA_LC', 'Q001']).replace({'A': 'Nunca estudou', 'B': 'Não completou a 4ª série/5º ano do Ensino Fundamental', 'C': 'Completou a 4ª série/5º ano, mas não completou a 8ª série/9º ano do Ensino Fundamental', 'D': 'Completou a 8ª série/9º ano do Ensino Fundamental, mas não completou o Ensino Médio', 'E': 'Completou o Ensino Médio, mas não completou a Faculdade', 'F': 'Completou a Faculdade, mas não completou a Pós-graduação', 'G': 'Completou a Pós-graduação', 'H': 'Não sabe'}).groupby('Q001').mean().sort_values(by='NU_NOTA_LC', ascending = False))
display(df_novo.filter(items=['NU_NOTA_CH', 'Q001']).replace({'A': 'Nunca estudou', 'B': 'Não completou a 4ª série/5º ano do Ensino Fundamental', 'C': 'Completou a 4ª série/5º ano, mas não completou a 8ª série/9º ano do Ensino Fundamental', 'D': 'Completou a 8ª série/9º ano do Ensino Fundamental, mas não completou o Ensino Médio', 'E': 'Completou o Ensino Médio, mas não completou a Faculdade', 'F': 'Completou a Faculdade, mas não completou a Pós-graduação', 'G': 'Completou a Pós-graduação', 'H': 'Não sabe'}).groupby('Q001').mean().sort_values(by='NU_NOTA_CH', ascending = False))
display(df_novo.filter(items=['NU_NOTA_CN', 'Q001']).replace({'A': 'Nunca estudou', 'B': 'Não completou a 4ª série/5º ano do Ensino Fundamental', 'C': 'Completou a 4ª série/5º ano, mas não completou a 8ª série/9º ano do Ensino Fundamental', 'D': 'Completou a 8ª série/9º ano do Ensino Fundamental, mas não completou o Ensino Médio', 'E': 'Completou o Ensino Médio, mas não completou a Faculdade', 'F': 'Completou a Faculdade, mas não completou a Pós-graduação', 'G': 'Completou a Pós-graduação', 'H': 'Não sabe'}).groupby('Q001').mean().sort_values(by='NU_NOTA_CN', ascending = False))
# notas de acordo com a escolaridade da mãe
display(df_novo.filter(items=['NU_NOTA_REDACAO', 'Q002']).replace({'A': 'Nunca estudou', 'B': 'Não completou a 4ª série/5º ano do Ensino Fundamental', 'C': 'Completou a 4ª série/5º ano, mas não completou a 8ª série/9º ano do Ensino Fundamental', 'D': 'Completou a 8ª série/9º ano do Ensino Fundamental, mas não completou o Ensino Médio', 'E': 'Completou o Ensino Médio, mas não completou a Faculdade', 'F': 'Completou a Faculdade, mas não completou a Pós-graduação', 'G': 'Completou a Pós-graduação', 'H': 'Não sabe'}).groupby('Q002').mean().sort_values(by='NU_NOTA_REDACAO', ascending = False))
display(df_novo.filter(items=['NU_NOTA_MT', 'Q002']).replace({'A': 'Nunca estudou', 'B': 'Não completou a 4ª série/5º ano do Ensino Fundamental', 'C': 'Completou a 4ª série/5º ano, mas não completou a 8ª série/9º ano do Ensino Fundamental', 'D': 'Completou a 8ª série/9º ano do Ensino Fundamental, mas não completou o Ensino Médio', 'E': 'Completou o Ensino Médio, mas não completou a Faculdade', 'F': 'Completou a Faculdade, mas não completou a Pós-graduação', 'G': 'Completou a Pós-graduação', 'H': 'Não sabe'}).groupby('Q002').mean().sort_values(by='NU_NOTA_MT', ascending = False))
display(df_novo.filter(items=['NU_NOTA_LC', 'Q002']).replace({'A': 'Nunca estudou', 'B': 'Não completou a 4ª série/5º ano do Ensino Fundamental', 'C': 'Completou a 4ª série/5º ano, mas não completou a 8ª série/9º ano do Ensino Fundamental', 'D': 'Completou a 8ª série/9º ano do Ensino Fundamental, mas não completou o Ensino Médio', 'E': 'Completou o Ensino Médio, mas não completou a Faculdade', 'F': 'Completou a Faculdade, mas não completou a Pós-graduação', 'G': 'Completou a Pós-graduação', 'H': 'Não sabe'}).groupby('Q002').mean().sort_values(by='NU_NOTA_LC', ascending = False))
display(df_novo.filter(items=['NU_NOTA_CH', 'Q002']).replace({'A': 'Nunca estudou', 'B': 'Não completou a 4ª série/5º ano do Ensino Fundamental', 'C': 'Completou a 4ª série/5º ano, mas não completou a 8ª série/9º ano do Ensino Fundamental', 'D': 'Completou a 8ª série/9º ano do Ensino Fundamental, mas não completou o Ensino Médio', 'E': 'Completou o Ensino Médio, mas não completou a Faculdade', 'F': 'Completou a Faculdade, mas não completou a Pós-graduação', 'G': 'Completou a Pós-graduação', 'H': 'Não sabe'}).groupby('Q002').mean().sort_values(by='NU_NOTA_CH', ascending = False))
display(df_novo.filter(items=['NU_NOTA_CN', 'Q002']).replace({'A': 'Nunca estudou', 'B': 'Não completou a 4ª série/5º ano do Ensino Fundamental', 'C': 'Completou a 4ª série/5º ano, mas não completou a 8ª série/9º ano do Ensino Fundamental', 'D': 'Completou a 8ª série/9º ano do Ensino Fundamental, mas não completou o Ensino Médio', 'E': 'Completou o Ensino Médio, mas não completou a Faculdade', 'F': 'Completou a Faculdade, mas não completou a Pós-graduação', 'G': 'Completou a Pós-graduação', 'H': 'Não sabe'}).groupby('Q002').mean().sort_values(by='NU_NOTA_CN', ascending = False))
# percentual de mulheres gestantes
numGestantes = gestantes.value_counts()
percentGestantes = [100*x/numGestantes.sum() for x in numGestantes]
numSexos = sexos.value_counts()
percentSexos = [100*x/numSexos.sum() for x in numSexos]
numSexoFeminino = numSexos[0]
numGestantes = numGestantes[1]
percentGestantes = 100*numGestantes/numSexoFeminino
print(f'Percentual de mulheres gestantes {percentGestantes:.3f}%')
# quantidade de candidatos homens
numSexoMasculino = numSexos[1]
print(f'A quantidade de candidatos autodeclarados como homens é de {numSexoMasculino}')

print('-='*50)

# quantidade de candidatas mulheres
print(f'A quantidade de candidatas autodeclarados como mulheres é de {numSexoFeminino}')
# quantidade e distribuição por idade de candidatos idosos
print(f'Um total de {idades[idades >= 60].count()} idosos fizeram o Enem em 2019, nunca é tarde para se perseguir metas!')
print(f'Distribuição dos {idades[idades >= 60].count()} idosos por idade:')
print(idades[idades >= 60].value_counts().sort_index())<jupyter_output>Um total de 10160 idosos fizeram o Enem em 2019, nunca é tarde para se perseguir metas!
Distribuição dos 10160 idosos por idade:
60.00000    1901
61.00000    1602
62.00000    1384
63.00000    1075
64.00000     849
65.00000     713
66.00000     531
67.00000     495
68.00000     366
69.00000     306
70.00000     221
71.00000     174
72.00000     127
73.00000     101
74.00000      78
75.00000      58
76.00000      41
77.00000      34
78.00000      31
79.00000      20
80.00000      11
81.00000      14
82.00000       8
83.00000       6
84.00000       3
85.00000       2
86.00000       3
87.00000       1
88.00000       1
91.00000       2
92.00000       1
94.00000       1
Name: NU_IDADE, dtype: int64
{'fraction_non_alphanumeric': 0.15490081680280046, 'fraction_numerical': 0.0492269544924154, 'mean_word_length': 6.8629587155963305, 'pattern_counts': {'":': 0, '<': 31, '<?xml version=': 0, '>': 34, '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': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '306897', 'license': 'MIT', 'n_tokens_mistral': 6114, 'n_tokens_neox': 5566, 'n_words': 1232, 'path': 'Projeto - EDA ENEM 2019/ENEM2019_EDA_F.ipynb', 'repo_name': 'thiagoreis96/DS_Degree_Course', 'size': '13712'}