<jupyter_start><jupyter_text>Exploratory Data Analysis - Carga HorariaCarga horária dos servidores  Imports<jupyter_code>import pandas as pd
import os
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from unidecode import unidecode

pd.set_option('display.max_columns', None)<jupyter_output><empty_output><jupyter_text>Carregar dados<jupyter_code>PATH = '../data/raw'<jupyter_output><empty_output><jupyter_text>Dados da carga horária do servidor<jupyter_code># Remocao manual no arquivo "BASE_CARGA_HOR_SALA_AULA_0818_anonimizado.csv", o cabecalho estava repitido no meio do dataset. Esta linha repetida foi removida
df_carga_horaria = pd.read_csv(os.path.join(PATH, 'BASE_CARGA_HOR_SALA_AULA_0818_anonimizado.csv'), sep=';', encoding='latin-1', low_memory=False)
print(df_carga_horaria.shape)
df_carga_horaria.head()<jupyter_output>(572022, 29)<jupyter_text>Dados dos Servidores ativos<jupyter_code>df_servidores = pd.read_csv(os.path.join(PATH, 'BASE_SERVIDORES_ATIVOS_1118.csv'), sep=';', encoding='latin-1', low_memory=False)
print(df_servidores.shape)
df_servidores.head()<jupyter_output>(240465, 41)<jupyter_text>Filtrar apenas dados referentes aos professores<jupyter_code>df_servidores = df_servidores[df_servidores['NOMECAR_E'].str.contains('PROFESSOR', na=False)]<jupyter_output><empty_output><jupyter_text>Dados da formação do servidor<jupyter_code>df_formacao = pd.read_csv(os.path.join(PATH, 'BASE_FORMACAO_1118.csv'), sep=';', encoding='latin-1')
print(df_formacao.shape)
df_formacao.head()<jupyter_output>(240465, 21)<jupyter_text>Agregação por Servidor  Quantidade de disciplinas<jupyter_code>qtd_disciplinas_prof_esc = df_carga_horaria.groupby(['CPF', 'CODESC']).size()
qtd_disciplinas_prof_esc.name = 'QTD_DISCIPLINAS'
qtd_disciplinas_prof_esc = qtd_disciplinas_prof_esc.reset_index()<jupyter_output><empty_output><jupyter_text>Total de aulas<jupyter_code>total_aulas = df_carga_horaria.groupby(['CPF', 'CODESC'])['TOT_GERAL_AULA'].sum()
total_aulas.name = 'QTD_TOTAL_AULAS'
total_aulas = total_aulas.reset_index()<jupyter_output><empty_output><jupyter_text>Juntar características<jupyter_code>df_features_cpf_esc = pd.merge(qtd_disciplinas_prof_esc, total_aulas, on=['CPF', 'CODESC'])
df_features_cpf_esc.shape
df_jornada_features = df_features_cpf_esc.drop('CPF', axis=1).groupby('CODESC').agg(['mean', 'max'])
df_jornada_features.columns = ['JORNADA_' + c[0] + '_' + c[1] for c in df_jornada_features.columns]
df_jornada_features.reset_index(inplace=True)
df_jornada_features.fillna(0, inplace=True)
df_jornada_features.head()<jupyter_output><empty_output><jupyter_text>Junção da base de servidores com Carga Horária para obter a escolaSeguindo as instruções de https://dados.educacao.sp.gov.br/sites/all/themes/DataSEE-Theme/assets/images/editais/DesafiosNotaTecnica.pdf<jupyter_code>df_servidores[['CPF', 'UAC', 'UA_E', 'IDADE', 'ANOS_TRAB_CARGO_C', 'QTDE_ATS']]
df_servidores_escola = pd.merge(df_carga_horaria[['CPF', 'UA', 'DI', 'CODESC']], df_servidores, left_on=['CPF', 'UA', 'DI'], right_on=['CPF', 'UA_E', 'DI'], how='inner')
df_servidores_escola.head()<jupyter_output><empty_output><jupyter_text>Agregar por escola e computar características dos servidores   Idade<jupyter_code>df_features_idade = df_servidores_escola.groupby(['CODESC'])['IDADE'].agg(['mean'])
df_features_idade.columns = 'SERVIDORES_IDADE_' + df_features_idade.columns<jupyter_output><empty_output><jupyter_text>Tempo no cargo de classificação<jupyter_code>df_features_tempo_cargo = df_servidores_escola.groupby(['CODESC'])['ANOS_TRAB_CARGO_C'].agg(['mean'])
df_features_tempo_cargo.columns = 'SERVIDORES_TEMPO_CARGO_C_' + df_features_tempo_cargo.columns<jupyter_output><empty_output><jupyter_text>Categoria funcional  Distribuição<jupyter_code>df_servidores_escola['CATEG_C'].value_counts(normalize=True)<jupyter_output><empty_output><jupyter_text>Professores com categoria funcional diferente dentro da rede estadual- Categoria funcional A: Docentes que ingressaram na Rede por meio de concurso público- Categoria funcional O: Docentes que possuem vínculo temporário e excepcional com a Secretaria da Educação<jupyter_code>df_servidores_escola[df_servidores_escola['CATEG_E'].isin(['A', 'O'])].groupby('CPF')['CATEG_E'].nunique().where(lambda x: x>1).dropna()
df_servidores_escola[df_servidores_escola['CPF'] == 154669]<jupyter_output><empty_output><jupyter_text>Agregação por escola e construção dos atributos<jupyter_code>df_features_cat_funcional = df_servidores_escola.groupby(['CODESC'])['CATEG_E'].value_counts(normalize=True).unstack().fillna(0)
df_features_cat_funcional.columns = 'SERVIDORES_CAT_FUNCIONAL_' + df_features_cat_funcional.columns
df_features_servidores = pd.concat([df_features_idade, df_features_tempo_cargo, df_features_cat_funcional], axis=1)
df_features_servidores.reset_index(inplace=True)
df_features_servidores.head()<jupyter_output><empty_output><jupyter_text>Junção dos dados<jupyter_code>df_features = pd.merge(df_jornada_features, df_features_servidores, on='CODESC', how='inner')
print(df_features.shape)
df_features.head()<jupyter_output>(5369, 12)<jupyter_text>Exportar dados<jupyter_code>df_features.to_csv('../data/processed/jornada.csv', index=False)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12447579107891726, 'fraction_numerical': 0.01181852840259245, 'mean_word_length': 12.01985111662531, 'pattern_counts': {'":': 0, '<': 65, '<?xml version=': 0, '>': 66, 'https://': 1, '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': '17', 'dir': 'jupyter-structured-clean-dedup', 'id': '421580', 'license': 'MIT', 'n_tokens_mistral': 2158, 'n_tokens_neox': 2139, 'n_words': 261, 'path': 'notebooks/01-eda-carga_horaria.ipynb', 'repo_name': 'miltongneto/Explainable-Educational-Data-Mining', 'size': '5246'}