├── README.md ├── model.pkl.gz ├── requirements.txt ├── app.py ├── Streamlit Setup.ipynb ├── LICENSE └── Modelo_Nivelo.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # modelo de machine learning e aplicação do Nivelo 2 | -------------------------------------------------------------------------------- /model.pkl.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luislauriano/nivelo/main/model.pkl.gz -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy>=1.9.2 2 | scipy>=0.15.1 3 | scikit-learn==1.3.2 4 | matplotlib>=1.4.3 5 | pandas>=0.19 6 | streamlit 7 | altair 8 | plotly 9 | xgboost 10 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | import streamlit as st 2 | import pandas as pd 3 | import pickle 4 | import gzip 5 | import plotly.express as px 6 | from xgboost import XGBClassifier 7 | 8 | # Carregamento do modelo 9 | with gzip.open('model.pkl.gz', 'rb') as f: 10 | model = pickle.load(f) 11 | 12 | # Função para preparar os dados de entrada 13 | def prepare_input(bncc_componente, acertos, possui_diagnostico_de_transtorno, turma, ano): 14 | # Ajustando os dados de entrada com base nas variáveis da sua tabela 15 | input_data = pd.DataFrame({ 16 | 'bncc_componente': [bncc_componente], 17 | 18 | 'faltas': [faltas], 19 | 'possui_diagnostico_de_transtorno': [possui_diagnostico_de_transtorno], 20 | 'turma': [turma] 21 | 22 | }) 23 | 24 | # Convertendo variáveis categóricas em variáveis dummy 25 | input_data = pd.get_dummies(input_data, columns=['bncc_componente', 'turma']) 26 | 27 | # Garantindo que as colunas do input_data correspondam ao modelo treinado 28 | model_columns = model.feature_names_in_ 29 | input_data = input_data.reindex(columns=model_columns, fill_value=0) 30 | 31 | return input_data 32 | 33 | # Carregar os dados do CSV (ajustar conforme seus dados reais) 34 | df = pd.read_csv('Dados_tratados.csv') 35 | 36 | # Calculando algumas métricas para exibição 37 | media_acertos = df['total_acertos'].mean() 38 | 39 | maior_acertos = df['total_acertos'].max() 40 | 41 | 42 | with st.container(): 43 | col4, col5 = st.columns(2) 44 | 45 | with col4: 46 | st.markdown( 47 | f""" 48 | 68 |
| \n", 119 | " | id_aluno | \n", 120 | "bncc_questao_1 | \n", 121 | "acertou_questao_1 | \n", 122 | "bncc_questao_2 | \n", 123 | "acertou_questao_2 | \n", 124 | "bncc_questao_3 | \n", 125 | "acertou_questao_3 | \n", 126 | "bncc_questao_4 | \n", 127 | "acertou_questao_4 | \n", 128 | "bncc_questao_5 | \n", 129 | "... | \n", 130 | "bncc_questao_7 | \n", 131 | "acertou_questao_7 | \n", 132 | "bncc_questao_8 | \n", 133 | "acertou_questao_8 | \n", 134 | "bncc_questao_9 | \n", 135 | "acertou_questao_9 | \n", 136 | "bncc_questao_10 | \n", 137 | "acertou_questao_10 | \n", 138 | "nota_final | \n", 139 | "dificuldade | \n", 140 | "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", 145 | "1 | \n", 146 | "EF06MA03 | \n", 147 | "1 | \n", 148 | "EF07MA11 | \n", 149 | "1 | \n", 150 | "EF08MA12 | \n", 151 | "1 | \n", 152 | "EF09MA06 | \n", 153 | "1 | \n", 154 | "EM13MAT101 | \n", 155 | "... | \n", 156 | "EF06MA08 | \n", 157 | "1 | \n", 158 | "EF07MA05 | \n", 159 | "0 | \n", 160 | "EF09MA08 | \n", 161 | "1 | \n", 162 | "EM13MAT303 | \n", 163 | "1 | \n", 164 | "9 | \n", 165 | "0 | \n", 166 | "
| 1 | \n", 169 | "2 | \n", 170 | "EF06MA03 | \n", 171 | "0 | \n", 172 | "EF07MA11 | \n", 173 | "1 | \n", 174 | "EF08MA12 | \n", 175 | "0 | \n", 176 | "EF09MA06 | \n", 177 | "1 | \n", 178 | "EM13MAT101 | \n", 179 | "... | \n", 180 | "EF06MA08 | \n", 181 | "0 | \n", 182 | "EF07MA05 | \n", 183 | "1 | \n", 184 | "EF09MA08 | \n", 185 | "0 | \n", 186 | "EM13MAT303 | \n", 187 | "1 | \n", 188 | "5 | \n", 189 | "1 | \n", 190 | "
| 2 | \n", 193 | "3 | \n", 194 | "EF06MA03 | \n", 195 | "1 | \n", 196 | "EF07MA11 | \n", 197 | "0 | \n", 198 | "EF08MA12 | \n", 199 | "0 | \n", 200 | "EF09MA06 | \n", 201 | "1 | \n", 202 | "EM13MAT101 | \n", 203 | "... | \n", 204 | "EF06MA08 | \n", 205 | "0 | \n", 206 | "EF07MA05 | \n", 207 | "0 | \n", 208 | "EF09MA08 | \n", 209 | "0 | \n", 210 | "EM13MAT303 | \n", 211 | "0 | \n", 212 | "4 | \n", 213 | "1 | \n", 214 | "
| 3 | \n", 217 | "4 | \n", 218 | "EF06MA03 | \n", 219 | "0 | \n", 220 | "EF07MA11 | \n", 221 | "0 | \n", 222 | "EF08MA12 | \n", 223 | "1 | \n", 224 | "EF09MA06 | \n", 225 | "0 | \n", 226 | "EM13MAT101 | \n", 227 | "... | \n", 228 | "EF06MA08 | \n", 229 | "0 | \n", 230 | "EF07MA05 | \n", 231 | "0 | \n", 232 | "EF09MA08 | \n", 233 | "1 | \n", 234 | "EM13MAT303 | \n", 235 | "0 | \n", 236 | "3 | \n", 237 | "1 | \n", 238 | "
| 4 | \n", 241 | "5 | \n", 242 | "EF06MA03 | \n", 243 | "1 | \n", 244 | "EF07MA11 | \n", 245 | "1 | \n", 246 | "EF08MA12 | \n", 247 | "0 | \n", 248 | "EF09MA06 | \n", 249 | "0 | \n", 250 | "EM13MAT101 | \n", 251 | "... | \n", 252 | "EF06MA08 | \n", 253 | "1 | \n", 254 | "EF07MA05 | \n", 255 | "0 | \n", 256 | "EF09MA08 | \n", 257 | "0 | \n", 258 | "EM13MAT303 | \n", 259 | "0 | \n", 260 | "4 | \n", 261 | "1 | \n", 262 | "
5 rows × 23 columns
\n", 266 | "| \n", 725 | " | count | \n", 726 | "
|---|---|
| dificuldade | \n", 729 | "\n", 730 | " |
| 1 | \n", 735 | "41446 | \n", 736 | "
| 0 | \n", 739 | "8554 | \n", 740 | "
XGBClassifier(base_score=None, booster=None, callbacks=None,\n", 1318 | " colsample_bylevel=None, colsample_bynode=None,\n", 1319 | " colsample_bytree=None, device=None, early_stopping_rounds=None,\n", 1320 | " enable_categorical=False, eval_metric=None, feature_types=None,\n", 1321 | " gamma=None, grow_policy=None, importance_type=None,\n", 1322 | " interaction_constraints=None, learning_rate=None, max_bin=None,\n", 1323 | " max_cat_threshold=None, max_cat_to_onehot=None,\n", 1324 | " max_delta_step=None, max_depth=None, max_leaves=None,\n", 1325 | " min_child_weight=None, missing=nan, monotone_constraints=None,\n", 1326 | " multi_strategy=None, n_estimators=None, n_jobs=None,\n", 1327 | " num_parallel_tree=None, random_state=None, ...)In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
XGBClassifier(base_score=None, booster=None, callbacks=None,\n", 1328 | " colsample_bylevel=None, colsample_bynode=None,\n", 1329 | " colsample_bytree=None, device=None, early_stopping_rounds=None,\n", 1330 | " enable_categorical=False, eval_metric=None, feature_types=None,\n", 1331 | " gamma=None, grow_policy=None, importance_type=None,\n", 1332 | " interaction_constraints=None, learning_rate=None, max_bin=None,\n", 1333 | " max_cat_threshold=None, max_cat_to_onehot=None,\n", 1334 | " max_delta_step=None, max_depth=None, max_leaves=None,\n", 1335 | " min_child_weight=None, missing=nan, monotone_constraints=None,\n", 1336 | " multi_strategy=None, n_estimators=None, n_jobs=None,\n", 1337 | " num_parallel_tree=None, random_state=None, ...)