<jupyter_start><jupyter_text>**Trabalho da quarentena**Um pouco do pacote matplotlib e análise de dados do ENEM 2018 com ajuda do canal Programação dinâmica. Essa amostra dos dados do ENEM não representa fielmente o banco de dados principal, onde tem as informações de todos os inscritos. Neste data frame têm menos de 2,5% do total.<jupyter_code>import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.plot([1,2,3,4],"ro") # pontos vermelhos
plt.plot([1,2,3,4]) # linha contínua
plt.show()
fig1, ax = plt.subplots(figsize=(8,8))
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.]
plt.plot(x, y, marker='o')
for xn, yn in zip(x,y):
  ax.annotate(f'({xn}, {yn})', xy=(xn*1.01, yn))
# fig == a figura toda; f1_axes == matriz com os subplots
x = np.arange(0, 10, 0.1)
fig, f1_axes = plt.subplots(nrows=2,ncols=2, figsize=(15,10))
fig.suptitle('Conjunto gráficos',size=30)

f1_axes[0, 0].plot(np.sin(x), label="sen(x)", color="red")
f1_axes[0, 0].plot(np.cos(x), label="cos(x)",color="blue")
f1_axes[0, 0].set_title("gráfico 1")
f1_axes[0, 0].legend()

f1_axes[0, 1].plot(np.cos(x))
f1_axes[0, 1].set_title("gráfico 2")

f1_axes[1, 0].plot(np.tan(x))
f1_axes[1, 0].set_title("gráfico 3")

f1_axes[1, 1].set_title("gráfico 4")
f1_axes[1, 1].set_xlabel("gráfico 4 - eixo x")
f1_axes[1, 1].set_ylabel("gráfico 4 - eixo y")

plt.show()

amostra_enem = pd.read_csv("drive/My Drive/Colab Notebooks/Datasets/ENEM/fracao_matplotlib_MICRODADOS_ENEM_2018.csv") # abrindo o arquivo
amostra_enem
colunas_selecionadas = ['TP_SEXO','NU_NOTA_REDACAO']
amostra_enem_dropado = amostra_enem.dropna()
amostra_enem_dropado[colunas_selecionadas].query("NU_NOTA_REDACAO > 0").groupby('TP_SEXO').hist()
colunas_selecionadas = ['NU_INSCRICAO','NU_NOTA_MT','NU_NOTA_REDACAO','Q001','Q002']
amostra_enem_selecionado = amostra_enem_dropado[colunas_selecionadas]
amostra_enem_selecionado
q001_002_respostas = {'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, mas não completou o Ensino Médio',
                      'E':'Completo 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 sei'}
amostra_enem_selecionado_resp = amostra_enem_selecionado.copy() # para retirar os avisos de problema de cópia
amostra_enem_selecionado_resp['RESP_Q001'] = [q001_002_respostas[resp] for resp in amostra_enem_selecionado.Q001]
amostra_enem_selecionado_resp['RESP_Q002'] = [q001_002_respostas[resp] for resp in amostra_enem_selecionado.Q002]
amostra_enem_selecionado_resp.head(4)<jupyter_output><empty_output><jupyter_text>**Análise do número de inscrições de acordo com o grau de escolaridade dos pais**1.   Perfil do Pai2.   <NAME><jupyter_code>amostra_enem_selecionado_resp[['NU_INSCRICAO','RESP_Q001']].groupby('RESP_Q001').count()\
.sort_values('NU_INSCRICAO', ascending=False)
amostra_enem_selecionado_resp[['NU_INSCRICAO','RESP_Q002']].groupby('RESP_Q002').count()\
.sort_values('NU_INSCRICAO', ascending=False)<jupyter_output><empty_output><jupyter_text>**Análise da média da nota de matemática de acordo com o grau de escolaridade dos pais**1.   Perfil do Pai2.   Per<NAME><jupyter_code>amostra_enem_selecionado_resp[['NU_NOTA_MT','RESP_Q001']].groupby('RESP_Q001').mean()\
.sort_values('NU_NOTA_MT', ascending=False)
amostra_enem_selecionado_resp[['NU_NOTA_MT','RESP_Q002']].groupby('RESP_Q002').mean()\
.sort_values('NU_NOTA_MT', ascending=False)
amostra_enem_selecionado_resp['SG_UF_RESIDENCIA'] = amostra_enem_dropado['SG_UF_RESIDENCIA']
amostra_enem_selecionado_resp
# Usando o where (que parece com o query)
amostra_enem_selecionado_resp[['NU_NOTA_REDACAO','RESP_Q002']]\
.where(amostra_enem_selecionado_resp.SG_UF_RESIDENCIA == 'SP').groupby('RESP_Q002')\
.mean().sort_values('NU_NOTA_REDACAO',ascending=False)
amostra_enem_agrupado_resp = amostra_enem_selecionado_resp[['SG_UF_RESIDENCIA','Q002','NU_NOTA_REDACAO']]\
.groupby(['Q002','SG_UF_RESIDENCIA']).mean()
amostra_enem_agrupado_resp
# O gráfico
axes = amostra_enem_agrupado_resp.unstack().plot(figsize=(16,8), grid=True)
axes.set_title('Nota Redação x Escolaridade x Estado', fontsize=20)

# Colocando o conteúdo da legenda em uma lista de strings
handles, labels = axes.get_legend_handles_labels()

# Extraindo a sigla dos estados, da legenda e mostrando-a no gráfico
import re # TODO pesquisar depois
edited_labels = [re.search(',\s(.+?)\)', label).group(1) for label in labels]
axes.legend(edited_labels, bbox_to_anchor=(1.005, 1), loc=0, borderaxespad=0.)

# montagem da legenda das respostas do questionário
text_dict_Q002 = ''
for key, value in q001_002_respostas.items():
  text_dict_Q002 += f"{key} : {value}\n"

# mostrando a legenda das respostas do questionário
axes.text(0.005, 0.75, text_dict_Q002, transform=axes.transAxes, fontsize=11,
          bbox={'boxstyle':'round','facecolor':'white','alpha':1})

#rotacionando as marcações no eixo x
axes.tick_params(axis='x',labelrotation=45, labelsize=12.)

plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1413573303337083, 'fraction_numerical': 0.044244469441319836, 'mean_word_length': 5.982984293193717, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 16, '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': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '159771', 'license': 'Apache-2.0', 'n_tokens_mistral': 2482, 'n_tokens_neox': 2232, 'n_words': 419, 'path': 'Matplotlib_intro.ipynb', 'repo_name': 'LeonardoClemente23/ENEM-2018', 'size': '5345'}