De ATLAS.ti a una matriz de codificación en excel

SCRIPT en gitHUB atlas-ti_long_to_excel_wide: anidado → long/tidy → matriz wide.

#HowTo #Python #AnalisisCualitativo #ATLASti

Te comparto un flujo de trabajo para poder trabajar con ATLASti (que me resulta muy comodo para análisis cualitativo) y convertir los resultados en el formato de tabla acordado con tu equipo de trabajo, si no quieren tablas en formarto pseudo-long (que es como lo saca Atlas-ti)

En la reunión de mi grupo acordamos un formato de matriz de este estilo (wide): una fila por cita, una columna por código, y el texto de la cita colocado en la columna que le toca. 

Lo que exporta ATLAS.ti es una fila por cita con un campo multivalor: todos los códigos concatenados dentro de una celda separados por saltos de línea. Eso incumple la primera forma normal (los valores no son atómicos), así que técnicamente es una tabla no normalizada. En el vocabulario de tidyverse se le suele llamar campo anidado o colapsado, que es lo que deshace separate_rows() o unnest(). El formato “long” de verdad sería una fila por par cita-código, sin repetir el texto en columnas.

De modo que me he creado uin script de python que genera el formato wide requerido, (una matriz de incidencia cita × código, one-hot salvo que, en lugar de un uno, lleva el texto de la cita como carga. Este formato no es tidy (pero es el que acordamos). Es justo el contraejemplo canónico de Wickham: las 21 cabeceras de columna son valores de una variable (el código), no nombres de variables.

La versión tidy, que además coincide con la primera forma normal, es precisamente el long intermedio de una fila por par cita-código, con columnas ID cita, fuente, texto y código. El script lo construye y saca como hoja adicional. Así que la cadena real es: anidado → long/tidy → matriz wide.

El flujo es muy simple:

  1. Se codifica en ATLAS.ti, que es donde tiene sentido hacerlo porque es donde están el libro de códigos, los memos, los grupos de códigos y la posibilidad de filtrar por lo que te interese (en mi caso, las citas codificadas con cualquier código de las familias C6.A o C6.B).
  2. Se exporta el informe de citas a Excel, que sale en formato largo: una fila por cita con el identificador, la fuente, el texto, el comentario y todos los códigos apilados dentro de una misma celda separados por saltos de línea.
  3. Y ahí es donde entra un script de Python de poco más de cien líneas que lo transpone al formato que acordamos, añadiéndolo como hoja nueva en el mismo libro para que quede la traza entre el export original y la matriz derivada.

Mi export tenía 97 citas, 54 fuentes y 21 códigos distintos, con 162 etiquetas en total (la mayoría de las citas llevan una o dos, alguna llega a cinco). El script imprime al terminar estas cifras, etiquetas en origen frente a celdas rellenas en la matriz, y si no coinciden, es que algo raro ha pasado. Es el tipo de comprobación que cuesta tres líneas de código y te ahorra descubrir el problema cuando ya llevas media tabla de contingencia calculada.

Un par de detalles que no son obvios hasta que te los encuentras. Ordenar los códigos alfabéticamente te coloca C6.B10 justo detrás de C6.B1, así que hay que ordenar por familia y número. ATLAS.ti mete dentro del texto de algunas citas un carácter separador de párrafo (U+2029) que Excel muestra como un cuadradito y que conviene traducir a salto de línea normal. 

El script falló en el primer intento con un ModuleNotFoundError porque VS Code había decidido ejecutarlo con el Python que viene empotrado dentro de Inkscape. No en el mío, que está instalado en D:. En los notebooks eliges el kernel y lo ves; en un .py el intérprete está escondido en la barra de estado y no te enteras hasta que revienta.

Lo he montado con Claude, que es lo que hace que esto pase de “algún día lo automatizo” a estar funcionando en la misma tarde. 

El script está en un repositorio público (pipeAtlasti-Excel, bajo AGPL-3.0) por si a alguien le sirve, aunque está bastante atado a mi esquema de códigos. La función que ordena las columnas es el único sitio que habría que tocar para adaptarlo.

El formato de matriz decidido es cómodo para revisar la codificación a ojo y para las tablas de frecuencias, pero para casi cualquier análisis posterior el formato largo es mejor punto de partida. Sospecho que dentro de dos reuniones habremos acordado volver al formato del que venimos…

ANTES
DESPUES

Visitas: 2

ffmpeg: automatizar el procesado de vídeo con scripts en Windows, linux y Mac

 

#HowTo #ffmpeg #herramientas #productividad

Disclaimer: a mí siempre me ha gustado más trabajar con scripts que con menús y ventanas. Desde que hace unos 35 años empecé a usar SPSS, pasando por R y cualquier otro programa que me permita guardar un log de lo que he hecho como algo ejecutable en el futuro, me tienen robado el corazón. Así que esto que describo no es para todos los públicos.

Dicho esto: llevo años editando vídeos con Camtasia, MS Stream y otras aplicaciones. Funcionan bien. El problema no es solo que no puedas hacer batch. Es que algunas operaciones que parecen simples, en una herramienta con interfaz gráfica, se vuelven absurdamente lentas. Sacar diez fragmentos recortados de un vídeo en Camtasia puede costarte fácilmente dos horas: abrir el proyecto, marcar el inicio y el fin de cada fragmento, exportar, esperar el render y repetir si no ha salido como querías a la primera. Lo mismo con Adobe Premiere,  Clipchamp, MS Stream,  o cualquier otra herramienta con ventanas y botones. Están diseñadas para la edición creativa, para decidir qué hacer con un vídeo. No para procesar en volumen. No es un defecto, es que no es su caso de uso.

Si además tenemos en cuenta el tiempo de renderizado… Las herramientas con interfaz gráfica tienen que gestionar previsualización, efectos, capas… Aunque tú solo quieras cortar un fragmento. ffmpeg en local no tiene nada de eso; va directo al fichero y, en muchos casos, a una velocidad de vértigo.

El otro problema es la reproducibilidad. Si has tardado dos horas en sacar esos diez fragmentos y luego necesitas cambiar algo (el formato de salida, el punto de corte, lo que sea), vuelves a empezar casi desde cero.  Con un script, cualquier modificación tarda solo segundos: cambias un parámetro, vuelves a ejecutar, y obtienes el resultado actualizado sobre todos los ficheros. Además, tienes por escrito exactamente qué has hecho, lo que no es fácil de recordar cuando ha pasado tiempo (aunque sea poco) desde que lo hiciste.

Este fin de semana he integrado ffmpeg a mi espacio de trabajo (es un año con intensas novedades: migrar de Ennote a Zotero, empezar con Obsidian, pasar de Jira a Clockify…). ffmpeg es una herramienta de línea de comandos (gratuita, de código abierto) que procesa vídeo y audio en local y acepta scripts. Puedes dividir un vídeo en fragmentos por tiempo, comprimir, cambiar de formato, extraer audio, recortar o concatenar, y hacerlo en modo batch sobre los ficheros de una carpeta entera sin tocar nada manualmente.

Cómo instalarlo en Windows

  1. Descarga la versión compilada desde https://ffmpeg.org/download.html (sección Windows, yo he usado la build de gyan.dev).
  2. Descomprime el .zip
  3. Localiza el ejecutable que necesitas es ffmpeg.exe, que está dentro de la subcarpeta bin. No hace falta instalarlo ni tocar el PATH si  el ffmpeg.exe está en la misma carpeta donde tienes los scripts y lo llamas como .\ffmpeg.exe.
  4. Si prefieres añadir la carpeta donde este el .ex al PATH para poder ejecutarlo desde cualquier carpeta tambien es una opcion (yo no la uso).

Los scripts: PowerShell + .bat

Yo escribo los scripts en PowerShell (.ps1) porque es más legible para lógica con bucles y condiciones. El único problema es que hacer doble clic en un .ps1 no lo ejecuta directamente en Windows debido a la política de ejecución por defecto. La solución es crear un fichero .bat que lo llame:

@echo off
powershell.exe -ExecutionPolicy Bypass -File "%~dp0tu_script.ps1"
pause

Con ese .bat en la misma carpeta que el .ps1, los videos y el ffmepg.exe haces doble clic y se ejecuta. El %~dp0 es la ruta de la carpeta donde está el .bat (así no depende de desde dónde lo lances), y el pause al final mantiene la ventana abierta para que puedas ver si ha habido algún error.

Un script básico que procesa todos los .mp4 de la carpeta actual tiene esta estructura:

$carpeta = Split-Path -Parent $MyInvocation.MyCommand.Path
$videos = Get-ChildItem -Path $carpeta -Filter "*.mp4"

foreach ($video in $videos) {
    $entrada = $video.FullName
    $salida = Join-Path $carpeta ("procesado_" + $video.Name)
    
    & ffmpeg -i $entrada [tus opciones aquí] $salida
}

Ajustas [tus opciones aquí] a lo que necesites y el script recorre todos los vídeos de la carpeta sin que tengas que hacer nada más.

El balance

Me costó unas dos horas montarme los scripts (era novato en ffmpeg y parte del tiempo fue entender qué opciones hacen qué). Ya me han ahorrado aproximadamente seis horas de trabajo este fin de semana en tareas que hago con regularidad. El retorno empieza a ser positivo, y va a seguir siéndolo cada vez que los reutilice.

Camtasia y similares no va a desaparecer de mi flujo para ediciones más elaboradas. Pero para procesar en batch, para tareas que se repiten, o simplemente para no perder una tarde haciendo a mano algo que dura treinta segundos en un script, merece la pena la inversión inicial.

Visitas: 64

Zotero. Cómo quitar una etiqueta de varias referencias a la vez

En Zotero tengo varias referencias (cada una con muchos tags). En las que tenga seleccionadas en un momento dado, quiero quitar UNA tag (por ejemplo “/ToRead”), solo esa tag. Pero para TODAS las referencias seleccionadas y no para las demás en la pantalla, ¿es posible? ¿Como?

Método 1: Shift + arrastrar

  1. Selecciona las referencias en el panel central
  2. Mantén Shift y arrastra la selección sobre /ToRead en el panel de etiquetas (abajo izquierda)
  3. Zotero la quita de todas las seleccionadas

Limitación: solo funciona si todas las seleccionadas ya tienen esa etiqueta.


Método 2: Asignar color + tecla numérica (más robusto)

  1. Clic derecho sobre /ToRead en el panel de etiquetas > Asignar color
  2. Ponle el número 1 (o cualquier otro libre)
  3. Selecciona las referencias y pulsa 1 en el teclado: alterna la etiqueta (quita si la tienen, pone si no la tienen)

Este segundo método es más práctico si vas a hacer esta operación con frecuencia. Y luego puedes quitar el color asignado si no lo quieres permanente.

Visitas: 36

AIR Framework: documentar el uso de IA en 5 minutos (y necesitar varias semanas para justificarlo)

Marco AIR para uso responsable de IA: útil pero revelador de nuestras inconsistencias 

 Young, J. (2026). AIR: AI in Research – A framework for transparent and responsible AI use mapped to the research process (Version 1). figshare. https://doi.org/10.6084/m9.figshare.31268020.v1

Creo que es muy útil para resolver algunas de las dudas que surgen en mis charlas sobre IA generativa en Research.

Con esta tabla, en menos de 5 minutos, puedes informar con transparencia sobre el uso que has hecho de la IA y las verificaciones que has realizado (la última columna) para estar seguro de que lo etiquetado como riesgo moderado no representa ningún “concern” para la validez de tu trabajo.

Intentar justificar que lo etiquetado como riesgo elevado no te afecta podría dar lugar a un artículo por cada una de las casillas de la columna A4.

Y este es el talón de Aquiles de todo esto… si alguien te obliga a demostrar punto por punto que estás exento de riesgos y sesgos, igual necesitas uno o dos años de trabajo para justificar adecuadamente cualquier artículo… incluso los que has escrito completamente “a mano” sin ayuda de ninguna IA generativa.

Es un poco sorprendente el doble rasero que se aplica, no pidiendo ninguna justificación si lo haces tú solito (proyectando todas tus torpezas y sesgos implícitos), y abrumándote con justificaciones si te apoyas en IA generativa. No, si no está prohibido que la uses, pero si dices que la usas, debes invertir una burrada de horas de trabajo para justificar “adecuadamente” que el uso ha sido correcto.

¿Alguien me ha preguntado alguna vez si he usado correctamente SPSS en los artículos que he escrito en los últimos 30 años? ¡Pero si, las veces que intento adjuntar la sintaxis, los revisores me dicen que quite esa información porque les “despista” y hace innecesariamente largo el artículo!

Young, J. (2026). AIR: AI in Research – A framework for transparent and responsible AI use mapped to the research process (Version 1). figshare. https://doi.org/10.6084/m9.figshare.31268020.v1

Visitas: 96

Estructura de codigos para construir mi 2ndBrain

Para ir avanzando en mi modelo de “second brain”, estaba reflexionando sobre el procesos que sigo para extraer la información y he tenido que hacer un alto para aclarar términos.

La literatura (ver referencias) suele identificar diferente cantidad de etapas en el proceso de análisis de contenido, y darle nombres distintos a etapas que tienen muchas cosas en común.
Por eso he dedicado toda la mañana a integrar la información en una tabla en la que lo relevante es la definición basada en tareas. Que haya estado más o menos acertado al capturar los significados o al agrupar los sinónimos, creo que es mucho menos relevante.

Term used*Definition (qué se hace)
Chunk (free coding; open coding; free text; annotation; quotation)Extraer fragmentos de información; seleccionar la “quotation/annotation” sin añadir ningún “code” es el equivalente a resaltar o subrayar un fragmento de texto (“chunk” en el lenguaje de IAgen). Representan la voz de la persona informante sin interpretación del investigador-a
Open Coding (1st-order concept, initial coding)Selección y refinamiento de los códigos para que representen los temas principales de los chunks, sus similitudes y diferencias. Interpretación conceptual de los open coding y decidir cómo agruparlos bajo temas más abstractos. Emergen nuevos conceptos que ayuden a describir, entender los chunks, o a rellenar gaps entre chunks
Focused coding (axial coding, 2nd order themes)Crear una jerarquía o relación entre los focused codes, añadiendo categorías, y creando una integración conceptual a través de las relaciones entre temas y/o conceptos que explica el cómo, el porqué o las causas (que viene siendo una representación gráfica de la teoría)
Aggregate dimensions (selective coding, theoretical coding)Crear una jerarquía o relación entre los focused codes, añadiendo categorías, y creando una integración conceptual a través de las relaciones entre temas y/o conceptos que explica el cómo, el por qué o las causas (que viene siendo una representación gráfica de la teoria)
* Incluyo entre paréntesis sinónimos utilizados por diferentes tradiciones

Visitas: 28

HowTo impresora PDF con errores

Si al intentar imprimir PDF un documento te sale un error como este:

Eso es debido a algún conflicto de fuentes (por ejemplo, que alguien con un ordenador con otro sistema operativo u otro conjunto de fuentes, haya elegido una fuente muy “molona” que no está en tu ordenador). Y se soluciona de manera supersencilla (pero ojo, cualquier actualización de Acrobat puede volver a marca la opción que crea problemas. ¿Por qué una actualización debe poder cambiar mis opciones? Eso se lo preguntas a ADOBE, porque yo no le encuentro ningún sentido).

Vas a preferencias de impresión en la impresora PDF y desmarcas la opción utilizar solo fuentes del sistema (como está en la imagen de abajo)

Visitas: 41

HowTo aumentar el numero de tokens que admite copilot BING desde EDGE

Vas a la pagina del Chat ampliada :

https://www.bing.com/search?q=Bing+AI&showconv=1&FORM=undexpand

o pulsas el boton de ampliar el chat desde el panel lateral

abre el devTools (inspect) con F12 y posteriormente elige la opcion de seleccionar elemento para inspeccionarlo (Ctrl+Shift+C)

pones el cursor en la la casilla del promt para ver la propiedad maxlength. se hace doble click en el 2000 y se cambia por 10000

y en el navegador verás que cambia el maximo de caracteres disponibles

Antes

despues. admite más de los 4000 que indica el limite de promt

Pero hay que repetir todo el proceso cada vez que sales del foco de la pagina

Visitas: 277

How to biblioteca UPV encontrar libros de un departamento

No resulta evidente como localizar En Polibuscador los fondos que forman parte de la colección de un Departamento. Te explico cómo hacerlo en esta entrada. Abrimos Polibuscador: https://polibuscador.upv.es/ , en la caja de búsqueda hay que poner un asterisco: *, para que busque todos los libros (si sabes el tema o titulo aproximado puedes usar la busqueda más orientada).

Después, desde los filtros de la derecha, en la pestaña “Biblioteca” es posible seleccionar departamentos (además de Bibliotecas). Es decir los libros de un departamento se consideran una “biblioteca” departamental.

Por ejemplo, para localizar los del Dpto. Organización de empresas serían: https://acortar.link/gvNSdo

Visitas: 66

How_to reutilizar texto en un documento word

Hay varias formas de definir un texto que puedas reutilizar automáticamente en otras secciones de un documento WORD.

Una de ellas es utilizar los controles de contenidos en modo diseño de la barra de programador para la introducción de la primera instancia de un dato a repetir.

Y luego usar Marcadores (para cambiar o etiquetar el nombre de un dato) -si el nombre que etiqueta por defecto el control de contenidos no es interactivo) e insertar/elementos rápidos/campo y el tipo de campo REF

PD: para identificar el marcador de los controles de contenidos, puedes ir a marcadores seleccionar uno y que te lleve (ir) para ver cuál es

Referencia (el video es un poco pesado y lento, en 3-4 minutos se podría haber ido al grano): https://www.youtube.com/watch?v=pjckdkC6bhw 

Visitas: 122

En la vida real los grupos de trabajo no se forman eligiendo gente al azar. Por favor, si eres docente deja de difundir ese mensaje falso.

Este es un mensaje para mis colegas profesores-as de universidad. Desde el cariño, por favor, dejad de usar este argumento para justificar que vais a crear grupos aleatorios de alumnos-as: “los alumnos no deben elegir a sus compañeros de equipo porque en “la vida real” no elegirán a sus compañeros de trabajo”. Es falso.
En las organizaciones reales jamás se crearán grupos aleatorios. Toda persona es seleccionada y filtrada antes de entrar en una organización y cada composición de equipo está pensada y diseñada. La gente de RRHH (cuando la empresa tiene dimensión para ello) ayuda en el proceso.
#gioi #RRHH #acededot

Pearlstein, J. (2020). Experiential exercise in team formation in the capstone: Providing students with the information to make good team choices. Journal of Management Education, 1052562920938071. doi:10.1177/1052562920938071

Visitas: 81