Demanda de evaluación (IV)
Categorización del nivel de escolarización
Ya tenemos todos los datos de identificación necesario, incluyendo los que nos permiten ubicar al alumno en un grupo de nivel de escolarización, ya que hemos decidido obtener automáticamente este dato mediante código, como alternativa a un procedimiento directo que exigiría una instrucción específica del profesorado.
En la práctica esto es, en parte, lo que vamos a hacer en esta entrada, en la que, además de resolver esa parte del procedimiento, expondré el script tal y como ha quedado desarrollado hasta este punto, añadiendo como colofón el archivo de los datos obtenidos en un documento txt que nos va a servir a modo de base de datos.
Lo primero que corresponde hacer es retomar el razonamiento expuesto en [esta entrada] donde, básicamente, expongo que los referentes DA (1) no pueden ser los mismos en las diferentes fases de la escolarización de un alumno, dado que el currículo (y el propio proceso de aprendizaje) se van modificando. Esa modificación también implica cambios en los referentes de lo que podemos identificar como mínimo causal de las DA.
La identificación y categorización de cada subperiodo y los contenidos de aprendizaje de referencia quedaron expuestos en esa entrada (2), implicando de paso la necesaria categorización (asignación a categoría) el sujeto, proceso que corresponde a esta entrada ya que, si deseamos automatizarla, previamente tendríamos que obtener tres datos: el mes de la fecha en que se tramita la demanda (en cuanto a referencia de desarrollo del curso), la etapa de escolarización del sujeto y el nivel o curso en que se encuentra (3).
Es a partir de estos datos con los que podremos aplicar el conjunto de condicionales que nos permitan obtener el dato que nos interesa. Previamente, eso sí, y para mayor seguridad, transformaremos el string del nivel en integer para que el orden quede fácilmente definido (4).
Pero antes de llegar a este nivel, falta exponer primero lo que en buena lógica debería haber sido expuesto en la entrada anterior, pero que, para no repetir y por no ser estrictamente necesario en aquel momento, he preferido hacerlo ahora para enlazar con mayor claridad en la lógica de la parte del procedimiento que toca explicar en esta entrada.
from datetime import date, time, datetime
#TOMA DE DATOS --------------------------------------------------------------------
#Variables para datos de identificación
al_nom = ''
al_ap = ''
centro = ''
curso= ''
etapa = ''
nivel_i = 'I1 - I2 - I3'
nivel_p = 'P1 - P2 - P3 - P4 - P5 - P6'
nivel_s = ''
nivel = ''
tutor = ''
fecha_date = 0
fecha_t = ''
fecha_a = 0
fecha_b = 0
fecha_m = 0
fecha_d = 0
f_aa = 0
f_ab = 0
#Solicitud de datos
al_nom = input ('Nombre del alumno o alumna: ')
al_ap = input (f'Apellidos de {al_nom}: ')
centro = input ('Nombre del Centro: ')
etapa = input ('Etapa escolar: \n EI para Educación Infantil \n EP para Educación Primaria \n ')
if etapa == 'EI':
nivel_s = nivel_i
else:
nivel_s = nivel_p
nivel = input(f'Nivel de escolarización: {nivel_s}\n (selecciona el curso o nivel que corresponda)\n')
#Calculo de los valores para curso académico
fecha_date = date.today()
fecha_a = fecha_date.year
fecha_m = fecha_date.month
fecha_d = fecha_date.day
fecha_t = (f'{str(fecha_d)}/{str(fecha_m)}/{str(fecha_a)}')
if fecha_m >= 9:
fecha_b = fecha_a +1
f_aa = fecha_a
f_ab = fecha_b
elif fecha_m <= 7:
fecha_b = fecha_a - 1
f_aa = fecha_b
f_ab = fecha_a
curso = (f'{str(f_aa)}/{str(f_ab)}')
#Datos del tutor
tutor = input(f'Nombre y apellidos del tutor o tutora de {al_nom}: ')
#Obtener el código de posicionamiento de nivel educativo del alumno
'''
Se trata de posicionar al sujeto en un nivel de escolarización de modo que posteriormente se aplique el cuestionario ncc que se considere adecuado en función de dicho nivel: Variable nivel_esc
* 1 - EI a EP (P1-t2)
* 2 - EP(P1>T2)-P3
*3 - EP(>=P4)
'''
nivel_esc = 0
#Conversión curso/nivel EP en número
nivel_n = int(nivel[-1]) #Extraer el dato numérico de la cadena nivel
if etapa == 'EI': # Obtener el valor de nivel_esc
nivel_esc = 1
else:
if nivel_n == 1 and (fecha_m >= 9 or fecha_m <= 3):
nivel_esc = 1
elif nivel_n == 1 and (fecha_m >= 4 or fecha_m <= 6):
nivel_esc = 2
elif nivel_n >= 2 and nivel_n < 4:
nivel_esc = 2
elif nivel_n >= 4:
nivel_esc = 3
#APLICACIÓN DE CUESTIONARIO de posibles DA en función del nivel de escolarización ---------
da = []
da_obs = []
dif = ''
dir_doc = ''
texto = ''
#Acceso a txt de nivel_da
for i in range(1,4,1):
if i == nivel_esc:
dir_doc = 'ncc/da_n'+ str(i)+'.txt'
docum = open (dir_doc,'r',encoding='utf-8')
texto = docum.read()
docum.close()
#Converisón del texto en lista
da = texto.split('\n')
print('\nListados de elementos')
for item in da:
dif = input(f'\n{item}\nDificultad presente (S/N): ')
da_obs.append(dif)
print(da_obs)
Antes de nada advertir que este script aun está proceso de desarrollo y que es muy posible que pueda sufrir incluso importantes modificaciones hasta su formulación definitiva. Aun con todo, tal y como está en estos momentos nos permite obtener resultados de interés en relación con nuestro objetivo.
Decir como segunda advertencia para la correcta comprensión de su lógica que, aunque Python no exige la declaración previa de variables aquí se practica una forma simplificada de esta estrategia de programación por considerarla útil para mejorar la comprensión del script (5).
Lo que nuestro actual script facilita es la entrada de datos de identificación (parte primera, desde la marca #TOMA DE DATOS...), la identificación del posicionamiento del sujeto en función de su nivel de escolarización y la aplicación del cuestionario básico de identificación de dificultades de aprendizaje relevantes (dar) (6) asociadas a ese nivel. En consecuencia, se aplican diferentes estrategias de trabajo con los datos:
- El más simple consiste en la solicitud directa del dato al usuario mediante la función input(). Tal es el caso del nombre del alumno (al_nom = input ('Nombre del alumno o alumna: ')).
- Otros datos también se solicitan directamente, pero están previamente determinados por otro dato que los condiciona. Dentro de esta categoría tenemos la identificación del nivel (curso) en que se encuentra escolarizado el alumno, que depende para su concreción del dato previo de etapa escolar:
etapa = input ('Etapa escolar: \n EI para Educación Infantil \n EP para Educación Primaria \n ')
... siendo el motivo de la especificación de contenido a las variables correspondiente (nivel_i = 'I1 - I2 - I3' - nivel_p = 'P1 - P2 - P3 - P4 - P5 - P6') y su asociación condicionada a una tercera variable (nivel_s) mediante un condicional
if etapa == 'EI':
nivel_s = nivel_i
else:
nivel_s = nivel_p
... antes de proceder a la solicitud directa del dato al usuario
nivel = input(f'Nivel de escolarización: {nivel_s}\n (selecciona el curso o nivel que corresponda)\n')
- Finalmente un tercer procedimiento de obtención de un (determinado) dato se basa en el uso de una función en concreto que proporciona dicho dato en función de una condición específica: la obtención de la fecha actual mediante la función (today()) (7) (fecha_date = date.today()). A partir de este dato obtenemos aquellos (8) que necesitamos para obtener otros, pero también para expresar el propiamente calculado como dato solicitado dando un rodeo en el procedimiento (fecha_t = (f'{str(fecha_d)}/{str(fecha_m)}/{str(fecha_a)}')).
- Con todo, lo más interesante de este procedimiento específico es que nos permite obtener el dato Curso (académico) sin solicitarlo al usuario...
if fecha_m >= 9:
fecha_b = fecha_a +1
f_aa = fecha_a
f_ab = fecha_b
elif fecha_m <= 7:
fecha_b = fecha_a - 1
f_aa = fecha_b
f_ab = fecha_a
curso = (f'{str(f_aa)}/{str(f_ab)}')
... aunque también es de sumo interés el papel que estos datos secundarios tienen para el desarrollo de la segunda fase del procedimiento, la cual consiste, como ya he dicho, en identificar el categorizador del desarrollo del nivel de escolarización que explico a continuación.
La segunda parte de este script, que se inicia en esta marca (#APLICACIÓN DE...), desarrolla la aplicación del cuestionario de detección de DA, que requiere, previamente dos datos:
- uno para asegurar el correcto funcionamiento del script y que consiste en la transformación del dato nivel por el número del mismo (vg P1)
nivel_n = int(nivel[-1]) #Extraer el dato numérico de la cadena nivel
- y otro para obtener el dato que sirve de identificador del propio nivel de escolarización
if etapa == 'EI': # Obtener el valor de nivel_esc
nivel_esc = 1
else:
if nivel_n == 1 and (fecha_m >= 9 or fecha_m <= 3):
nivel_esc = 1
elif nivel_n == 1 and (fecha_m >= 4 or fecha_m <= 6):
nivel_esc = 2
elif nivel_n >= 2 and nivel_n < 4:
nivel_esc = 2
elif nivel_n >= 4:
nivel_esc = 3
Además necesitamos acceder al documento que contiene el listado de ítem...
for i in range(1,4,1):
if i == nivel_esc:
dir_doc = 'ncc/da_n'+ str(i)+'.txt'
... puesto que optamos por externalizar estos datos por medio de archivos txt en lugar de incorporarlos directamente al script, y cargar su contenido en una variable...
docum = open (dir_doc,'r',encoding='utf-8')
texto = docum.read()
docum.close()
... que posteriormente convertiremos en una lista
da = texto.split('\n')
... que usaremos para aplicar el cuestionario (9)
for item in da:
dif = input(f'\n{item}\nDificultad presente (S/N): ')
da_obs.append(dif)
NOTAS
(1) Dificultades de aprendizaje.
(2) Que no grabados en piedra como tablas de la ley, aunque de momento los asumiremos como referencias válidas para el desarrollo de este procedimiento. Tiempo habrá de ponerlos en tela de juicio y proponer modificaciones.
(3) Datos todos ellos que obtuvimos en el proceso explicado en la [entrada anterior], aunque será en ésta en la que expongamos esa parte del script. (4) Veremos cómo en la explicación del script.
(5) Por el momento no he aplicado el principio de declarar todas las variables al inicio del script, tal y como se recomienda. Esto puede ser aplicado en su momento, pero hasta el momento me ha parecido innecesario y hasta contraproducente.
(6) Aquí se entiende por dificultades de aprendizaje relevantes aquellas que se consideran identifican las propias DA como posiblemente determinantes de NEAE. Se diferencian así del concepto más general de DA, resultando más selectiva en términos del proceso de derivación del alumnado al SEO que se desarrolla en este soporte.
(7) Que como sabes el el motivo por el que se ha importado el módulo datetiem (from datetime import date, time, datetime)
(8) Me refiero a año, mes y día (vg fecha_a = fecha_date.year)
(9) He optado por este procedimiento (en lugar de otras formulaciones) para mostrar la funcionalidad de esta estrategia para obtener un listado a partir de un texto empleando la función de segmentación de cadenas (split()), ya que resulta ser un procedimiento más transparente.