lunes, 27 de noviembre de 2023

Python. Aplicación.

Hojas de cálculo con Python

Ya vimos que una de las opciones disponibles para automatizar el trabajo con servicios ofimáticos mediante Python consiste en implementar librerías específicas para trabajar con MSO, concretamente con Word y con Excel. Dada la compatibilidad entre MSO y LibreOffice, aunque la suite no sea LO, esto no impide que finalmente podamos trabajar desde esta suite, utilizando incluso script OOoBasic para complementar la automatización del documento.


En una entrada anterior traté el trabajo con Word, así que en la presente me centraré en una de las opciones para trabajar con Excel: la librería OpenPyXL. Además del anterior (web oficial), al final de la entrada te dejo algunos enlaces de interés.

Aunque las posibilidades de uso son muchas, por el momento me voy a limitar a lo más básico: lo equivalente a lo hecho con Word/Writer, aunque sin entrar en comparaciones entre el uso de OOoBasic y Python, ya que ese discurso y sus implicaciones quedaron dichas en una entrada precedente respecto a un ejemplo práctico. Me parece más útil ahora centrarme en el uso básico de OpenPyXL con el objetivo inmediato de alcanzar el conocimiento necesario para desarrollar aplicaciones similares a los docap simples que podemos crear con OOoBasic; esto nos permitirá dar posteriormente algunos pasos en esa dirección.

Para ello expondré cómo crear un libro Excel, cómo acceder a un libro previamente creado, cómo acceder a una hoja concreta del libro y los rudimentos del trabajo con celdas: lectura y escritura de contenido. Estos conocimientos me permiten emular las acciones básicas que desarrollamos en OOoBasic (script y/o macros), por lo que, como dije antes, nos situamos en Python en niveles de competencia similares a los que nos han permitido crear docap sencillo en OOo Basic. Creo que el camino que debimos recorrer en OOoBasic para llegar a ese nivel y el que vamos a recorrer ahora en Python es un buen ejemplo del potencial de este lenguaje.

Lo primero que tenemos que hacer para trabajar con OpenPyXL es instalar este paquete para que está disponible en Python, ya que no es una de las librerías que trae Python en su instalación de base. Como ya vimos respecto a python-docx, la instrucción necesaria (pip install openpyxs) de escribe en el cmd, tras el prompt C:\Users\NombreUsiario> (sea NombreUsuario el que corresponda en tu ordenador).

Lo segundo que debes hacer, ahora ya en la creación de un script Python, es importar la librería instalada. La forma más simple, que no la única, pero sí la que vamos a utilizar por ahora, es la instrucción import opnepyxl escrita siempre y necesariamente al inicio del script (puedes, eso sí, escribir algún comentario explicativo de lo que se pretende con el script; es más, te lo recomiendo)

Pasemos ahora a crear nuestro primer archivo Excel, algo tan sencillo en Python como lo siguiente:

libro = openpyxl.Workbook()
libro.save("PrimerLibro.xlsx") 

La primera línea de instrucciones asigna a la variable libro la creación del libro excel mediante la función Workbook(). La segunda guarda el libro creado con la función save().(1) Sin esto, el libro no se guardará, por lo que perderemos todo el trabajo que hagamos en el script, así que es muy importante finalizar este con una instrucción save() y lo que corresponda escribir dentro del paréntesis, claro.

Existe un modo alternativo y simplificado de crear un libro excel:

  • Primero importamos OpenPyXL incluyendo en la solicitud la expresión Workbook del siguiente modo:

from openpyxl import Workbook

  • Después creamos la variable libro y asignamos la función Workbook()

libro = Workbook()

Como puedes ver, de este modo lo que hacemos es omitir openpyxl de la expresión openpyxl.Workbook(), pero el resto del procedimiento es igual, así que puedes optar por una forma o por otra, que el resultado será el mismo.

Entre paréntesis escribimos, como parámetro de la fución, el nombre del archivo y la extensión (.xlsx), ambos como cadena de texto. La forma empleada en el ejemplo, crea el archivo excel PrimerLibro.xlsx en el mismo directorio en el que esté ubicado el script python. Para indicar otra dirección deberemos señalarlo como parámetro. Un ejemplo podría ser...

libro.save("C:/Users/NombreUsuario/Desktop/PrimerLibro.xlsx")

Donde pone NombreUsuario deberás escribir el que corresponda. Observa además que he invertido la  barra separadora que genera windows por defecto.

C:\Users\NombreUsuario\Desktop\PrimerLibro.xlsx

Para ahorrarte experimentos condenados al fracaso: puedes utilizar la extensión Calc para nombrar el fichero (PrimerLibro.ods) y se creará el archivo sin ningún problema, pero cuando intentes abrirlo desde Calc te encontrarás con un menaje de error y no podrás acceder a él. Por el contrario, un archivo de extensión xlsx podrás abrirlo perfectamente desde Calc y trabajar con él sin mas problemas. Después ya decides tú si lo conviertes al formato .ods o lo dejas como .xlsx. Por cierto, Calc crea ficheros xlsx desde la opción guardar como... Excel 2007-365.

Resuelta la primera cuestión, vamos a plantear la segunda. Antes creamos un libro (de momento no hicimos nada en él), pero ahora nos planteamos que lo que necesitamos no es crear un nuevo libro, sino acceder a uno ya creado.

En este caso, después de importar el módulo openpyxl (2), podemos plantearnos también dos opciones: 

  • La primera consiste en crear una variable ruta (path, si prefieres) y después utilizarla para acceder al archivo. Esta opción es válida para cualquier ubicación del archivo al que deseamos acceder.

ruta = "C:\\Users\\NombreUsuario\\Desktop\\NombreArchivoExcel.xlsx" (3)
libro = openpy.load_workbook(ruta)

  • La segunda forma consiste en utilizar directamente el nombre del libro excel en la instrucción de apertura. Esta opción es útil (y yo diría que recomendable) cuando el libro excel se encuentra en el mismo directorio que el script Python.

libro = openpy.load_workbook("NombreArchivoExcel.xlsx")

Una vez que hemos accedido al libro deseado, o que lo hemos creado, (obviamente antes de guardarlo si queremos que surta efecto lo que hagamos en él) nos podemos plantear diferentes tareas, pero todas ellas pasan por acceder a una hoja, en primer lugar, y por acceder a una celda en particular. Resumiendo, que nos interesa saber cómo manejarnos con las hojas del libro y con las celdas de las hojas. A ello vamos a continuación, empezando por las hojas.

Cuando creamos un nuevo libro, inicialmente sólo tiene una hoja, pero cuando cargamos uno ya creado, nos puede interesar saber cuántas hojas tiene; para ello emplearemos la siguiente instrucción...

print(libro.sheetnames) 

... después de haber asignado a libro el acceso al archivo cargado, por ejemplo...

libro = openpy.load_workbook("NombreArchivoExcel.xlsx")

La instrucción anterior imprime en pantalla (cmd) una lista con los nombres de las hojas que contiene el libro, en mi caso ['Hoja0', 'Hoja1']. Esto nos permite trabajar con las hojas como podemos hacerlo con cualquier lista python, por ejemplo, conocer el número de hojas del libro con la función len()

lista_hojas = libro.sheetnames
num_hojas = len(lista_hojas)
print(num_hojas)                     
-> devuelve 2

Con frecuencia vas a necesitar añadir nuevas hojas a un libro. No en el caso de acceder a un libro creado previamente, pero sí seguramente en caso de crear un libro mediante Python, ya que lo que se crea es un libro básico de una única hoja. Vamos, entonces a aprender cómo crear nuevas hojas mediante OpenPyXL. 

Estas son las diferentes formas con que podemos crear una hoja (4). 

hoja1 = libro.create_sheet("Hoja_Creada") -> Crea la Hoja_Creada al final del libro
hoja2 = libro.create_sheet("Hoja_Ini",0) -> Crea la Hoja_Ini al inicio del libro
hoja3 = libro.create_sheet("Hoja_Fin",-1) -> Crea Hoja_Fin en la penúltima posición 

También nos puede interesar borrar una hoja creada, por ejemplo, la hoja Hoja_Creada que posicionamos al final del libro. Para ello utilizaremos la función remove() mediante la siguiente instrucción:

libro.remove(libro['Hoja_Creada']) -> Observa que estamos trabajando con una lista

Una vez creadas las hojas necesarias (y borradas las no deseada), necesitamos actuar sobre cada una de ellas, lo que supone acceder a la hoja activa

Debemos saber que, por defecto, la hoja activa es, por defecto, la hoja que ocupa la posición 0. Por ejemplo, según lo hecho mediante las anteriores instrucciones de creación de hojas, la que ocupa la posición 0 es la hoja llamada Hoja_Ini, así que...

hoja_activa = libro.active

print(hoja_activa.title) ... nos devolverá  Hoja_Ini

... y podemos aprovechar este procedimiento para modificar el nombre o título de la hoja mediante...

hoja_activa.title ="PrimeraHoja" (5)

Pero aun más interesante para el manejo básico del código es posicionarse en otra hoja, lo que es lo mismo que desplazar el foco (la condición de hoja activa) a esa nueva hoja. Para ello volvemos a trabajar sobre la lista de hojas del libro mediante las siguientes instrucciones:

hoja_activa = libro['Hoja_Fin']
libro.active = hoja_activa

... de modo que se ahora pedimos el nombre de la nueva hoja activa (print(hoja_activa.title), ahora nos devolverá Hoja_Fin, lo mismo que si lo pedimos de este modo: print(libro.active.title)

Para un uso básico de OpenPyXL, nos falta aprender a acceder a las celdas, cosa que ahora ya estamos en disposición de hacer, una vez que hemos sido capaces de acceder a una hoja y convertirla en hoja activa. Esto quiere decir que, al menos una de las formas de acceder a una celda pasa por las siguientes fases:

  1. Accedemos al libro
  2. Accedemos a la hoja (la hoja activa)
  3. Y finalmente accedemos a la celda que nos interesa, que, supongamos, es la celda A5.
El procedimiento ahora es sencillo (suponiendo resueltos los pasos 1 y 2):

celda_interes = hoja_activa['A5']

Otra forma consiste en utilizar las referencias de columna y fila:

celda_interes = hoja_activa.cell(row=5, column=1)

... y la mejor forma de saber a ciencia cierta que estamos trabajando sobre la celda A5 es pedir su contenido:

print(celda_interes.value) -> Nos devuelve None, ya que está vacía, pero...

Podemos atribuir valores (contenido) a cada celda de forma muy sencilla:

  • Asignando el valor directamente a la celda:

hoja_activa['A5'] = 10
celda_interes =hoja_activa['A5']

  •  Usando la notación fila-columna y el argumento value

celda_interes =hoja_activa.cell(row=5, column=1,value=10)

  • O actualizando la propiedad value de una celda

 celda_interes = hoja_activa.cell(row=5, column=1)
 celda_interes.value=10

Si ahora solicitamos el valor de la celda...

print(celda_interes.value)

... nos deberá devolver 10 en todos los casos. 

No está todo dicho, ni mucho menos, sobre lo que podemos hacer con OpenPyXL, pero esta entrada está siendo ya demasiado extensa, y como tenemos los fundamental para empezar a trabajar, mejor será dejarlo así de momento, pero con una propuesta de trabajo sencilla:

  1. Crea un libro excel nuevo en el mismo directorio que el script Python
  2. Cambia el nombre de la primera y única hoja disponible a "DATOS"
  3. Escribe en esa hoja un "a modo de formulario" de datos de identificación:
    • A1 -> "Datos de identificación"
    • A2 -> "Nombre" - C2 -> alum_nombre
    • A3 -> "Apellidos" - C3 -> alum_apellidos
    • A4 -> "Curso/Nivel - C4 -> centro_nivel
    • A5 -> "Centro" - C5 -> centro_nombre
Te dejo mi script para que lo compares con el tuyo. Corre de tu cuenta mejorarlo y/o crear otros ejemplos de código sencillo.

Enlaces:

NOTA 1. Fíjate que Workbook() se escribe con primera letra en mayúscula, pero que save() se escribe todo en minúscula. Esta diferencia es fundamental en Python y deberás escribir ambas funciones exactamente como te indico, así evitarás un mensaje de error innecesario.

NOTA 2. De una forma  - import openpyxl - o de otra - from openpyxl import Workwook - como vimos antes. Yo opto por la primera forma, de ahí que después acceda al archivo empleando la instrucción que incluye la llamada a openpyxl.

NOTA 3. Observa que he usado dos formas diferentes de separar las carpetas de la ruta: mediante dos barrar inclinadas hacia la izquierda (\\) y mediante una inclinada hacia la derecha (/). En Windows ambas surten el mismo efecto.

NOTA 4. Respecto a hoja2 y hoja3los valores de posición 0 y -1 (posición inicial y posición anterior a final, respectivamente) pueden ser sustituidos por otros valores, siempre que exista un número de hojas que lo permita.

NOTA 5. Si ahora pedimos saber la hoja activa mediante la función print() [print(hoja_activa.title], ahora nos devolverá PrimeraHoja en vez de Hoja_Ini.

viernes, 17 de noviembre de 2023

Opinión. Sobre expedientes

Expedientes SEO. Seguimiento de Actuaciones (registro)

Puestos a elegir, si algo tendría que aportar un expediente SEO tanto de la propia actuación del Servicio como del alumnado en el que interviene, debería ser un conjunto de información que permitiera escribir el relato de lo que ha sido esta intervención y, en el caso del alumnado, la propia biografía educativa. Digo que permitiera escribir un relato, no que lo escriba necesariamente. Por desgracia, un expediente SEO no es eso. Contiene elementos que facilitan escribir cierta historia, pero sólo parcialmente y de forma discontinua.


Algunos documentos parecen ir en esa dirección y están presentes en algunos expedientes (en el 30% de una pequeña muestra), pero siempre desde lo parcial y discontinuo. Cierto que estos intentos son muy de agradecer, como los SISE (Seguimiento e Intervención SocioEducativa) que han elaborado algunas PTSC, y lo son especialmente porque son "avis rara" que ofrecen un modelo sencillo de lo que podría ser una práctica sistemática y generalizada con un coste de trabajo relativamente bajo.

Es posible considerar también dentro de esta línea la presencia de otros documentos que expresan más que el producto, la finalidad: me refiero a los documentos que recogen informaciones de actuaciones. En este sentido lo son todos los documentos del expediente, pero más y más específicamente (ya que los otros tienen finalidad y razón de ser propia) un conjunto un tanto anárquico y asistemático de documentos que por su inespecificidad he incluido en la carpeta ACTUACIONES, lo que facilita ahora conocer su peso en la configuración de los expedientes.

El análisis de una limitada muestra de 10 expedientes arroja los siguientes resultados:

  • El peso de los documentos de ACTUACIONES supone el 22% del total, siendo el porcentaje más bajo respecto a los otros dos directorios o carpetas que componen el expediente SEO: INFORMES, 44,4% y MAD, 34%
  • Podemos diferenciar tres "modelos" de expediente en función de su composición: 
    • Expedientes en los que predomina INFORMES (40%)
    • Expedientes en los que predomina MAD (30%)
    • Y expedientes en los que se aprecia equilibrio entre dos subcarpetas (30%)

... en ninguno de los expedientes de la muestra predomina ACTUACIONES, aunque en dos (20% del total) de los tres del tercer grupo los archivos de ACTUACIONES son tan numerosos como los de otro directorio.

  • En tres (30%) de los expedientes el número de documentos de ACTUACIONES es muy bajo (0-2 documentos, el 7,7% del total de documentos de esos expedientes), en 5 (50%) el peso se sitúa en un máximo de 26%, y sólo en dos (20%) supera el 40% del total de documentos del expediente.
  • En ningún caso ACTUACIONES supera el 50% del total de documentos de los expedientes, algo que sí sucede con las otras dos carpetas en el 50% de los 10 expedientes tomados como muestra.
  • Respecto a los documentos-listados, esto es, específicamente de registro de actuaciones (SISE de PTSC y algún listado no SISE de PTSC y de OE), de estos 10 expedientes, tres cuentan con este tipo de documentos. El 30% podría parecer un porcentaje relevante, pero no lo es para el objetivo que debería cumplir este tipo de documentación y en realidad representan  lo contrario de lo que deberían representar: asistematicidad y parcialidad, por lo que son indicadores de formas a superar más que ejemplos a seguir.
  • En realidad estos documentos-listados tan sólo son 6 en un total de 242  (el 2,5%), 2 generados por el/la OE (el 3,7% de los documentos de ACTUACIONES) y 4 por PTSC (el 5% de MAD, ya que los SISE se ubican en esta carpeta). Cualquiera de estos tres 3 porcentajes revelan la insuficiente presencia de este tipo de documentos, más aun si se tiene en cuenta que son documentos que recogen las actuaciones anuales, no del conjunto de actuaciones a lo largo de los cursos
En resumen, los datos anteriores revelan que los documentos específicos de seguimiento son escasos, asistemáticos. Son escasos porque una amplia mayoría de expedientes (el 70% en esta pequeña muestra) carece de ellos. Son insuficiente incluso en el 30% de los expedientes en los que sí están presentes porque no permiten reconstruir la historia de las intervenciones SEO en este alumnado. Y son asistemáticos y sesgados incluso cuando está presentes por recoger información discontinua y relativa a cierto tipo de actuaciones del SEO, no la conjunto.

Considerando ahora la documentación ubicada en ACTUACIONES, su presencia es superior a la de documentos-listado (suponen algo más del 22% del total de documentos de los expedientes), pero sigue siendo minoritaria en comparación con el peso porcentual de las otras dos carpetas: descontando los 4 SISE, ambas carpetas suman el 76% del total de documentos de los 10 expedientes. 

Además ya vimos también que ACTUACIONES no genera un perfil específico de expediente, como sí lo hacen INFORMES y MAD, si bien contribuye a la formulación del tercero (o mixto), cuya presencia es equivalente (30%), aunque ligeramente inferior en sentido estricto (20%), a la que tienen los expedientes que contienen documentos-listado de actuaciones (también el 30%, como vimos). 

Mantengo pues lo dicho al inicio de esta entrada: los documentos que recogen las actuaciones realizadas a lo largo del tiempo por los diferentes profesionales de los SEO intervinientes se caracterizan por su escasez y asistematicidad. Ambos son problemas serios, aunque posiblemente más el segundo por ser más exigente: no es suficiente con la presencia de un documento-listado aislado para dar por supuesto que haya existido una intención de mantener el seguimiento de la actividad desarrollada con un alumno o alumna a lo largo del tiempo.

Debo decir que lo antes afirmado no debe entenderse como ausencia de interés por el seguimiento de las actuaciones, únicamente de que éste no queda recogido en lo que llamo expediente (informatizado) SEO. De hecho los profesionales de los SEO dedican mucho tiempo y esfuerzo al desarrollo sistemático de actuaciones de este tipo, actuaciones que son  tan costosas en términos de tiempo de trabajo como escasamente útiles más allá de lo inmediato, como queda en evidencia "al final del trayecto" y en momentos críticos del mismo. Me explico.

  • Es común y una preocupación compartida por parte de todos los profesionales SEO llevar el seguimiento de las actuaciones y tomar notas de forma sistemática sobre ellas. Esto se lleva haciendo desde siempre en la forma en que en sus inicios era posible y funcional: en libretas y/o agendas o soportes equivalentes.
  • Mientras que otras prácticas fueron paulatinamente volcándose a formatos electrónicos, el uso de cuadernos y agendas (especialmente los primeros) continuó, persistiendo en el tiempo, sin que se encontraran medios digitales apropiados de sustitución.
  • Pueden considerarse como intentos de resolver este "problema" prácticas como las grabaciones de audio o video y el escaneo de libretas. Otras formas más sofisticadas como el uso de programas ocr y/o aplicaciones de escritura en pantalla también se ensayaron. Todas ellas costosas en tiempo y algunas en recursos, y todas con escaso éxito en funcionalidad y continuidad.
Cierto es que algunos de los documentos recogidos ahora en ACTUACIONES son el resultado de estas prácticas (de otras no queda resto) que se presentan ahora en formatos diversos, aunque predomina el pdf, resultante de la captura de una imagen que reproduce un texto escrito manualmente que ha sido escaneado. También son relativamente frecuentes los documentos en formato imagen, resultado del escaneo de páginas de esas libretas de registro. 

Lo que todo esto revela es la forma variada, insatisfactoria y también asistemática de dar respuesta a una necesidad sentida por los profesionales de los SEO: recoger la información resultante de las actuaciones desarrolladas en un "caso". Si esto es cierto, también lo es que nunca se llegó a resolver de forma satisfactoria el paso del soporte-papel al soporte-informático como sí lo ha sido en otros ámbitos de la intervención.

En esos otros el salto del papel al documento digital es cronológicamente anterior y viene de la mano de la exigencia la propia Administración educativa al formalizar los soportes documentales, como es el caso de los modelos de informe psicopedagógico y del Dictamen de escolarización. 

Algo parecido se aprecia también en los soportes de ACI/PTI, aunque ahora con la peculiaridad de que éstos no son documentos responsabilidad directa de los SEO, pero que sí están presenten con cierta frecuencia en los expedientes SEO debido a que los modelos son aportados (con frecuencia) por los propios SEO al profesorado y que disponer de esta documentación facilita la intervención de asesoramiento y colaboración, que son las dos formas en que se concreta la participación de los SEO en el desarrollo de las MAD.

Así, frente a los motivos y la pertinencia de que esos tipos de documentos (informes y ACI/PTI) estén presentes en los expedientes SEO, no existe equivalente respecto a los documentos de "seguimiento", ni en forma de registro  (documento-lista) ni como informatización de documentación de registro de su contenido, si bien éstos pueden estar presentes por mera recopilación de documentos, sin necesidad de que exista un interés específico en ello ni sea resultado de un proyecto definido a priori.

Sin embargo, el registro de la actividad de los servicios que prestan los SEO es necesario por muchos y diferentes motivos en los que no me voy a detener en estos momentos porque considero requieren un análisis más detallado por las implicaciones que tienen. Únicamente, por lógica, enunciaré algunos de ellos sin entrar en detalle:

  • Por mero conocimiento de las actuaciones que desarrolla el SEO  a lo largo del curso.
  • Para facilitar el conocimiento de la ejecución de los proyectos formulados al inicio del curso.
  • Para comprobar la coherencia entre las formulaciones "teóricas" de modelo de intervención del SEO y su realidad práctica.
  • Para conocer la historia de las intervenciones que se han practicado en una intervención concreta.
  • Para conocer si estas actuaciones son coherentes y/o siguen un patrón de actuación adecuado al contexto y circunstancias en las que se desarrollan.
  • ...

El éxito de la libreta como recurso de registro de las actuaciones justifica su pervivencia en el tiempo,  así como la falta de alternativa digital satisfactoria. Pero también es parte del problema: 

  • Como registro abierto no se formaliza su cumplimentación.
  • Al ser resultado de una práctica personal, mantiene ese carácter y no se incorpora a una fuente pública de datos.
  • Cuando se debe realizar el análisis de la intervención, es necesaria una revisión del soporte que no se ve facilitada por el mismo, lo que repercute negativamente en la exactitud y calidad de dicho análisis.
  • Algo similar sucede en lo que se refiere a la necesidad de proceder a realizar una síntesis de las actuaciones relativas a un tipo de intervención, un programa o un alumno en concreto. Especialmente en este caso, y si supone tener en cuenta diferentes cursos, el mero listado de las actuaciones se vuelve sumamente complicado.
  • Cuando se produce el cambio de profesional que interviene en el "caso", y se hace necesaria una recopilación de datos que se torna muy complicada, propiciando la pérdida de datos sensibles.

No haber llegado a una solución aceptable es posiblemente consecuencia del propio enfoque de "máximos" que preside (o presidió) el intento de solución, algo similar a lo que Borges plantea magistralmente en su relato "Del rigor de la ciencia" respecto a la escala de los mapas. 

Creo que este arriesgado símil explica con claridad lo que quiero decir, lo que me ahorra más explicaciones y me lleva a formular lo que sigue de forma simple: un exceso de precisión resulta ser tan negativo como su defecto absoluto. Dicho de otro modo, intentar dejarlo todo registrado, no diferenciando el seguimiento de las actuaciones con la recogida sistemática de todo cuanto acontece, impide dar respuesta posible a lo necesario, intentando el imposible de darla a lo innecesario.

Mientras que lo primero es perfectamente factible y relativamente poco costoso, lo segundo es imposible sin medios tecnológicos adecuados y difícil con ellos, pero, lo que es peor: es innecesario en cuanto carece de funcionalidad, e insostenible por perseguir una exactitud impracticable.

Con todo, lo que aquí y ahora se expone debe entenderse como primer acercamiento al tema. He llegado hasta el punto que me interesa para compaginar el análisis con las propuestas de soporte documental que planteo ahora, aunque no aquí [ver entrada]. En próximas entradas avanzaré en el desarrollo de una propuesta que tiene obligadamente muchas más implicaciones y de más calado que lo que puede parecer si nos limitamos a lo que en estos momentos parece: una forma sencilla y básica de dar respuesta a una necesidad no exenta de controversia. 

domingo, 5 de noviembre de 2023

Procedimientos. Docap.

DOCAP combinado Calc + Writer

También es posible crear docap complejos empleando dos archivos del mismo servicio: dos hojas de cálculo o dos documentos de texto). Pero tampoco tenemos por qué limitarnos a utilizar dos documentos.


Eso es precisamente lo que he hecho en esta ocasión: utilizar dos hojas de cálculo como componentes básicos del docap y opcionalmente un documento Writer; este último de cumplirse una condición. La imagen anterior representa la composición del modelo de docap complejo que expondré en esta entrada.

En ella me voy a limitar a explicar el funcionamiento de este modelo de docap y mostrar las instrucciones fundamentales de su código, pero si deseas saber qué objetivo se persigue con el docap concreto que utilizo de ejemplo, deberás leer esta entrada. También dispones de un vídeo en YouTu.be para visualizar su funcionamiento.

Veamos ahora la estructura de componentes del docap, empezando por visualizar su esquema general.



En este docap se pueden diferenciar tres fases:

Primera: Fase input mediante formulario sobre documento Calc Gestor. Como ya sebes de otros docap anteriores, los controles del formulario se asocian celdas directamente desde la configuración de los controles que lo componen.



... y mediante script accedo al contenido de estas celdas para asignarlos a una matriz. 

oHojaDatos = ThisComponent.getSheets().getByName("Datos")

For i = 1 To 3
oCelda = oHojaDatos.getCellRangeByName("B" & i)
sDatosPer(i-1) = oCelda.getString()
Next

Tomando parte de estos datos creo un listado a modo de base de datos. Esta base de datos es muy simple y se limita a unos pocos campos, pero el procedimiento que implica es de gran importancia, ya que nos puede servir de base para crear docap entrados en los procesos de evaluación grupal. De hecho, sin esta funcionalidad que ahora es complementaria, el docap puede considerarse referente básico para crear soportes para la aplicación de test estandarizados, pero el hecho de crear este listado-BD permite avanzar en la creación de soportes de evaluación que toman como referencia el grupo-clase y permiten crear baremos locales (1).

For i= 1 To 500
oCeldaInicio = oHojaLista.getCellByPosition(0,i)
sContenido = oCeldaInicio.getString()
If sContenido = "" Then
For a =0 To 4
oCeldaInicio = oHojaLista.getCellByPosition(a,i)
oCeldaInicio.setString(mListado(a))
Next
Exit For
End If
Next

El paso siguiente y con el que finaliza esta primera fase consiste en el acceso al documento Calc Ficha como plantilla y activando el uso de macros.

mOpciones(0).Name="AsTemplate"
mOpciones(0).Value=True
mOpciones(0).Name="MacroExecutionMode"
mOpciones(0).Value=4

sRuta = ConvertToUrl("D:\ModeloExpediente.ods")
oDoc = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mOpciones() )

Segunda: La plantilla Ficha genera automáticamente el documento que concreta la ficha del alumno y que se archiva dentro de la carpeta Expedientes. Dentro de este archivo se concreta el doble proceso de traslado de datos al listado de campos y su asociación a un conjunto de celdas que muestras dichos datos en formato ficha (de ahí el nombre del documento.


Posteriormente se accede al contenidos de determinados campos...


For i=0 To 10
    oCelda(i) = oHojaDatos.getCellRangeByName( "A" & i+1 )
     sDatos(i) = oCelda(i).getString
Next

... para posteriormente analizar los datos que contienen y que se consideran relevantes (2).

If iTotalDif = 0 Then
sValorDif = " no existe diferencia en cuanto al númer de documentos, lo que indica que el expediente se ha mantenido actualizado hasta el momento."
ElseIf iTotalDif > 0 Then
sValorDif = "una reducción del número de archivos (" & ABS(iTotalDif) & " documentos)"
ElseIf iTotalDif < 0 Then
sValorDif = "un incremento del número de archivos (" & ABS(iTotalDif) & " documentos)"
End If

En función de este análisis se plantean diferentes opciones de documentación, incluyendo la creación de un tercer soporte (Writer) que denomino Informe.

If dPorcentajeDif > 25 Then
CrearInfo (sIdentificador,sNumDoc,sAnalisisTotal,sValoraPorcentaje)
Else
MsgBox ("ANÁLISIS DE RESULTADOS: " & Chr(13) & sIdentificador & Chr(13) & sNumDoc & " " & sAnalisisTotal & " " & sValoraPorcentaje)
End If

Tercera: Esta fase se desarrolla bien dentro de Ficha, cuando no se considera necesario crear un informe (3) o, y de forma más específica y compleja, a partir del propio documento Writer Informe. En este caso se puede (también es opcional) aplicar una macro de formato. Esta macro es universal, pero podría estar específicamente creada para formatear dicho documento, aunque necesariamente deberá ser ubicada en Mis macros (4)

dim args4(4) as new com.sun.star.beans.PropertyValue
args4(0).Name = "CharFontName.StyleName"
args4(0).Value = ""
args4(1).Name = "CharFontName.Pitch"
args4(1).Value = 2
args4(2).Name = "CharFontName.CharSet"
args4(2).Value = -1
args4(3).Name = "CharFontName.Family"
args4(3).Value = 5
args4(4).Name = "CharFontName.FamilyName"
args4(4).Value = "Verdana"
dispatcher.executeDispatch(document, ".uno:CharFontName", "", 0, args4())


NOTA 1La relevancia de esta cuestión sobrepasa el objetivo de esta entrada y no corresponde a este blog, por lo que ahora no seguiré tratando este tema, pero sin señalar su gran importancia para la definición de un modelo de intervención de los SEO, diferenciado del modelo clínico aun predominante en la práctica profesional real.

NOTA 2El análisis que se realizar en este docap en concreto está limitado conscientemente por la función que se pretende que cumpla, evitando entrar en procesos de mayor complejidad. En caso de ser empleado para desarrollar el uso de en test en concreto, sería necesario profundizar en el modelo de análisis.

NOTA 3En este caso (cuando se incumple el criterio de una diferencia superior al 25%, se emite un breve informe soportado en MsgBox desde la propia ficha.

NOTA 4Esto está relacionado obviamente por ser un documento creado desde el propio código del documento Ficha.

Documentos. Expediente

Mantenimiento del expediente SEO digitalizado.

En una entrada anterior hablaba yo de las carencias del proceso de informatización de los "expedientes" SEO del alumnado con NEAE y reclamaba la necesidad de profundizar en ella, así como de disponer de recursos para facilitar dicha informatización. Considero ahora también necesario contar con recursos que ayuden al mantenimiento de estos "expedientes", ya que se observa que con el tiempo tienden a degradarse a consecuencia de la falta de sistematización y de continuidad en su gestión. 


Propongo para ello elaborar un recurso que ayude al análisis de esta documentación que llamo impropiamente "expediente SEO" por facilitar la comprensión de su naturaleza, a sabiendas que sólo existe un expediente escolar y es el que se encuentra custodiado en los colegios. 

Salvando rigores de denominación, es necesario añadir a las deficiencias observadas en la entrada citada al inicio de la actual, la tendencia a la desorganización de estos expedientes derivada del paso del tiempo, la pluralidad de gestores y usuarios, pero también de la propia ausencia de sistematización de los expedientes.

Este recurso (docap) no evita dicho desorden pero ayuda a sistematizar y reorganizar el expediente, además de contribuir al análisis de los datos que derivan de dicha sistematización. Si satisface suficientemente estos objetivos ya contribuye sobradamente al fin último que se persigue en este blog: colaborar en el proceso de informatización de la documentación SEO, como medio de favorecer sus sistematización, mantenimiento y análisis.

La sistematización se concreta en el modelo de recogida de datos que se propone y que reflejan los formularios que se emplean. Cualquier modificación de los criterios subyacentes implica necesariamente una modificación de dichos formularios.


En mi propuesta opto por analizar la documentación inicial y final en función del soporte o tipo de documento, categorizar su tipología en función de tres variables de contenido: Actuaciones, Informes y MAD y, en paralelo y/o como subdivisión de las anteriores en categorías más cercanas al contenido real de los documentos (entrevistas, observaciones, informes, PTI...) Pero únicamente se trata de una propuesta y, además, provisional (1)

El cuanto al mantenimiento de los expedientes, la mayor contribución de este docap lo es en la creación de una ficha individual por alumno. Precisamente nació como herramienta para facilitar esta tarea, después de desarrollarla manualmente sobre un número suficiente de expedientes. Aunque los resultados son modestos, he comprobado que son satisfactorios en términos de ahorro de tiempo.

Finalmente, y también como último desarrollo del docap (es lo último que he implementado en él), he añadido un  procedimiento, sencillo y limitado, para facilitar la recogida sistemática de información que se concreta en la creación de una base de datos, como fuente para un posterior análisis de datos. Únicamente me quedo en esto (en la práctica), aunque apunto hacia ciertas posibilidades de concreción de dicho análisis. Para mis fines esto es más que suficiente, pero es posible que no si se desea utilizar como recurso con esta finalidad como principal objetivo (2)

Este docap va dirigido a facilitar el registro sistemático y actualizado del conjunto de documentos informatizados que conforman dicho expediente. De hecho nada impide que también se incluyan los documentos en soporte papel, aunque sería necesario, para ello, realizar las modificaciones que correspondan, tanto en el soporte de gestión (Gestor) como en el de almacenamiento (Ficha).

También es posible (y yo diría aquí que necesario) ampliar y mejorar los procedimientos de análisis que se ubican en el código del documento Ficha, a fin de mejorar la elaboración del documento Informe (Writer), ya que su redacción es actualmente muy básica. Mejorar este aspecto puede implicar desarrollar procesos de análisis y recogida de datos que no se plantean en estos momentos, aunque la mera formulación del informe ya permite un primer acercamiento a dicho análisis.

En cuanto al funcionamiento, aunque no me voy a detener en aquello que ya ha sido explicado en la entrada o en el vídeo complementario, sí quiero insistir  en algunas cuestiones:

  • El soporte de gestión (Gestor) utiliza el ya conocido recurso de asociar control-celda. Esto simplifica el funcionamiento del docap y justifica que se utilice Calc en la fase input.
  • Lo mismo puede aplicarse al segundo componente (Ficha) aunque aquí en sentido inverso: las celdas de Ficha a las que se trasladan los valores desde Gestor se asocian mediante procedimientos elementales Calc con otras celdas (vg. A1=B5), permitiendo así simular la visualización del contenido en formato "ficha".
  • El código OOoBasic no resulta novedoso, ya que es el mismo que se ha empleado en docap anteriores para acceder al contenido de las celdas (previo acceso al documento y a la hoja). La forma en que se concreta este código ha sido expuesta en una entrada que complementa a ésta  y está a disposición del interesado desde el IDE de los propios documentos originales (3)
  • Tanto en la creación de la base datos como en la ficha individual he reducido conscientemente la complejidad del análisis de los datos para eludir complicaciones que son de poca utilidad en estos momentos. No obstante una propuesta de trabajo real implica acordar a nivel de SEO la gestión y el tratamiento a dar a la información y, una vez acordado, proceder en consecuencia desarrollando procedimientos de análisis más complejos y ajustados a los objetivos que se establezcan.
  • Algo similar se puede decir respecto al texto del documento Informe, como cabe esperar en función de la relación que existe entre éste y el resultado del análisis de los datos individuales. De hecho, el con el uso (opcional) de este tercer componente en el docap  pretendo únicamente mostrar que es posible crear un proceso complejo de interacción entres diferentes componentes y servicios de LO, utilizando cada uno de ellos en la forma y para el fin en que resulte más conveniente y útil.

NOTA 1. Animo a plantear colectivamente una propuesta de estructuración de los contenidos del expediente SEO. Aunque únicamente sea provisional (como lo es mi propuesta) aplicarlo de forma sistemática, prolongada en el tiempo y suficiente en frecuencia permitirá apreciar las ventajas que aporta esta sistematicidad y aportará datos para formular propuestas más sólidas en futuro.

NOTA 2. En ese caso es necesario definir a priori el tipo de análisis que interesa, a fin de identificar los datos necesarios y proceso de análisis a llevar a desarrollar. En esta línea estoy trabajando sobre un proyecto de análisis, pero no lo vinculo a este docap para hacerlo más sencillo y poder ofrecerlo desde ahora como recurso, sin esperar a la conclusión del proceso de revisión y sobre todo de análisis de resultados. Entendiendo las limitaciones que esto conlleva, prefiero que pueda ser de inmediata utilidad aunque provisional. Tiempo habrá, si es que resulta pertinente, de ofrecer una herramienta más potente en términos de análisis de datos; por ahora es suficiente que lo sea para la creación de documentos de expediente.

NOTA 3Ver a continuación en Descarga.

Descarga. Documentos necesarios para el funcionamiento del docap.

  • Estos archivos se deberán descargar y copiar en la unidad D, directorio raíz. Cualquier cambio en esta ubicación implica modificar el código correspondiente.
  • En esa ubicación deberá crearse una carpeta llamada Expedientes. En ella se guardan automáticamente las fichas individuales y se recomienda guardar manualmente los informes. Ambos se crean de forma automática según el funcionamiento del docap.
  • En Gestor se deben cumplimentar TODOS los campos, no dando por cumplimentado ninguno, bien sea que aparezcan con un valor por defecto (0) o vacíos. No hacerlo provoca error en el funcionamiento del docap y su suspensión.
  • La macro de formato para informe deberá ser copiada dentro del directorio IDE Mis macros, librería Standard y activada desde la misma de forma directa ((Herramientas/Macros/Ejecutar macro)
Documentos:

Opinión. Sobre expedientes

Sobre expedientes SEO y su informatización

Como recurso para facilitar el análisis de los documentos informatizados que constan en los "expedientes SEO del alumnado [desarrollé un docap]. Ahora me gustaría comentar algunas observaciones sobre los resultados obtenidos hasta el momento.



Se trata de un análisis provisional, por lo que ciertamente es mejor considerarlo como meras observaciones a raíz de los datos obtenidos. Quiero adelantar así lo que espero poder desarrollar con más fundamento (o al menos más datos) cuando finalice el proceso, por eso de que se plantea como proyecto a medio plazo y hay cosas que ya se pueden observar ahora con nitidez; cosas que pueden ser de utilidad para el trabajo de los SEO, por lo que no hay motivo para demora, ya que es la utilidad práctica lo que orienta el desarrollo de estos blog y no los conocimientos teoréticos.

Ya señalé en una entrada anterior algunas características de los expedientes informatizados según se encuentran "en bruto". Y he de decir que en lo que llevo de análisis de su contenido y estructura, lo que he podido comprobar confirma más que desmiente lo que afirmaba en aquel momento. 

Por resumir y no andarse por las ramas, si no en el mejor de los casos, sí al menos en prácticas que superan de largo el nivel medio de organización y uso de medios informáticos, se puede decir que el grado de informatización de los "expedientes SEO" distan mucho de estar al nivel de lo que podría deducirse del uso generalizado de herramientas informáticas por parte de estos servicios.

Esto se aprecia a nivel cuantitativo, como tuvimos ocasión de ver anteriormente (cerca del 49% de los "expedientes están formados por un máximo de cuatro documentos y suben al 33% los que sólo constan de dos).

También avanzaba en aquella ocasión el predominio de los documentos en formato procesador de texto (cerca del 60%), siendo el segundo formato su derivado (.pdf -> cercano al 30%), lo que deja a las bases de datos y a las hojas de cálculo (Hc 8%) en niveles ínfimos de uso.

Ambos datos se confirman tras un análisis detallado de un número suficiente de expedientes Aun no muchos, pero sí de los que más documentación contienen):
  • Predominan los documentos derivados del uso del procesador de texto, aunque son también los que más se ven afectados por la purga de irrelevantes.
  • Le siguen los documentos en formato .pdf, que derivan de dos prácticas predominantes en esta muestra, que no es necesariamente representativa de la práctica profesional común (muy posiblemente sea más bien excepcional):
    • Informes derivados de bases de datos. Estos documentos resultan de aplicar instrumentos de evaluación (1).
    • Sistemas de "almacenamiento de anotaciones" resultantes del escaneo de notas en papel o del uso de herramientas de escritura manual sobre tablets.
En el primer caso se pueden considerar en línea con el uso de sistemas de registro, pero también de análisis de datos cuantitativos en la evaluación psicopedagógica, con lo que debemos considerarlos asimilables al empleo de hojas de cálculo como soporte para la automatización de dicha evaluación.

Pero en el segundo caso estamos antes lo que podemos definir como intento no satisfactoriamente resuelto de abordar la informatización de la recogida de información que deriva de las actuaciones de seguimiento. Este tipo de documentación en .pdf lo es (en este soporte) a falta de mejor formulación, pero no se puede considerar una solución viable.

De todas formas sí muestra algo que no resultaba tan evidente en el primer análisis: además del proceso de evaluación psicopedagógica, que sigue siendo hegemónica en número de documentos, las actuaciones de seguimiento en sus diferentes formas, resulta ser el segundo componente con mayor frecuencia en los expedientes. Aunque las formas de afrontar estas actuaciones diste mucho de ser satisfactoria, este dato me resulta especialmente satisfactorio, ya que indica un interés por aplicar los recursos informáticos más allá del uso que podemos considerar obligado por la forma en que se concreta la propia evaluación. Otro datos interesante es que, aunque no muy numerosos, los documentos que aportan las PTSC van en línea con este objetivo (sistematizar la recogida de datos derivada de actuaciones de seguimiento). LO negativo de todo esto es que ni la fuente OE ni la fuente PTSC se pueden considerar representativas de ambos grupos profesionales, por lo que no cabe generalizar estas observaciones.

Para finalizar y no ir más allá de donde permiten los datos actuales. me referiré finalmente a una cuestión que inciden en las consideraciones negativas respecto al estado de la cuestión: supera ligeramente el 50% el número de expedientes que contienen un 25% o más de documentos indebidos, siendo la media de éstos cerca del 30% de los inicialmente presentes en los "expedientes SEO". Si tenemos en cuenta que entiendo por documento indebido aquél que estando presente en el expediente debe ser eliminado por estar duplicado o no ser relevante para el propio expediente, se puede decir que tal y como se encuentran estos expedientes en su estado "natural" revelan una marcada ausencia atención,  mantenimiento y uso real y funcional de dichos expediente. 

Es muy posible que esta situación esté relacionada con la falta de criterios consensuados en el seno de los SEO respecto a la utilidad y la propia necesidad de dichos expedientes, pero lo que es (a mi entender) aun más negativo es que revela indirectamente la falta de perspectiva que los propios SEO tienen respecto a la importancia del estudio de los datos que estos expediente aportan (o pueden aportar) para el conocimiento basado en evidencias de la propia práctica profesional de los SEO. Ambas cuestiones las planeo a modo de "temas de estudio", y las considero suficientemente relevantes como para sugerir a los SEO la necesidad de ponerlas en el orden del día de sus propios planteamientos de revisión para la mejora de dicha práctica profesional.

Es más, afirmo que en ausencia de estos planteamientos (cuanto menos) las consabidas referencias "autocríticas" a las necesidades de cambio del modelo de intervención no son más que lamentos al Sol, que quedan bien en las memorias de trabajo pero que no se mueven un ápice de la repetición de las prácticas reales "más de lo mismo" y vuelta a empezar. Quienes forman parte de los SEO saben (o deberían saber) perfectamente de lo que hablo. 

Retomando el análisis, estos datos del "desorden predominante" en los "papeles" revelan, por lo pronto, que el mantenimiento actualizado de los expedientes dista mucho de ser una práctica sistemática. Lo que esto revela podrá se objeto de discusión, pero el problema de base es ineludible, como lo es buscar soluciones o, en coherencia con la práctica real, olvidarnos simplemente de mantener la ilusión de desear cierto orden y control como base para el conocimiento de la propia práctica.

Cierto es que los datos indican también una tendencia positiva a reducirse el número de documentos espurios conforme se incrementa la muestra (empezamos con una incidencia del 75% y actualmente estamos en un 51%), pero también hay que tener en cuenta que este incremento de la muestra implica la inclusión de expedientes cada vez menos informatizados o más recientes, por lo que no cabe esperar que únicamente el paso del tiempo soluciones el problema, salvo que implique una mayor concienciación de los SEO respecto a la necesidad de mantener actualizados los expedientes.

Precisamente ese [docap] es una herramienta útil por lo que aporta como recurso para facilitar el análisis y limpieza de los expedientes y por lo que su creación revela sobre la necesidad de dar importancia a la creación, mantenimiento y exploración del contenidos de los expedientes como estrategia de intervención y como fuente de información sobre la practica real que se desarrolla por parte del SEO.

No es una herramienta definitiva ni resuelve lo fundamental de la tercera de las cuestiones antes indicadas (el análisis de los datos en función de hipótesis) pero contribuye al logro de ambos objetivos. 

Y por el momento poco más que aportar. Espero retomar este análisis más adelante, contando con más datos y mejores perspectiva en el análisis. Lo visto hasta el momento es suficiente como para que, como SEO, nos planteemos que es necesario mantener actualizados los expedientes del alumnado.

NOTAS 

(1) No tengo contabilizados estos documentos de forma específica, pero sí me constan cierta incidencia que permite matizar lo dicho antes respecto a la irrelevancia de la presencia de bases de datos en el cómputo total documentos de los expedientes. Aun así es necesario recordar que esta práctica es excepcional en la ordinario de los SEO, con lo que insistir en este tipo de datos puede tergiversar más que  clarificar este análisis.