Redes egocéntricas: generadores de nombres, intérpretes de nombres, censo de díadas y sociogramas
Recoge redes personales en Potato con generadores de nombres, intérpretes de nombres, un censo de díadas y un sociograma, importa protocolos de Network Canvas y exporta GraphML.
Nuevo en v2.12.0
ego_network recoge una red personal (egocéntrica), un objeto de estudio habitual del análisis de redes sociales. La persona encuestada, el ego, nombra a otras personas (los alteri), responde preguntas sobre cada una, indica cuáles se conocen entre sí y las sitúa en un mapa. El esquema funciona en una página de encuesta, que es como lo ejecutan la mayoría de los estudios de redes personales, y en ítems de anotación, donde un codificador registra la red que describe un documento.
Un esquema contiene una lista ordenada de etapas. Todas las etapas trabajan sobre el mismo conjunto de alteri, así que una persona nombrada en el primer generador de nombres aparece en todas las etapas posteriores.
| Etapa | Qué hace la persona encuestada |
|---|---|
name_generator | Escribe nombres en respuesta a un enunciado, o los elige de una lista |
name_interpreter | Responde las mismas preguntas sobre cada persona (radio, multiselect, number, text) |
dyad_census | Indica, para cada par de personas, si se conocen: n(n-1)/2 pares, de uno en uno, con una barra de progreso |
sociogram | Arrastra a las personas por un lienzo y hace clic en dos personas para añadir o quitar una línea entre ellas |
Por defecto las etapas se muestran de una en una, cada una con sus propios botones Back y Next y una fila de botones de paso. stage_layout: stacked las muestra todas a la vez en la página.
Configuración
En una página de encuesta, enumera la página en phases y pon el esquema en su archivo:
phases:
order: [your_network, annotation]
your_network:
type: prestudy
file: surveys/your-network.jsonEl archivo de la página contiene el esquema, que aquí se muestra en YAML. Las mismas claves funcionan en annotation_schemes:
- annotation_type: ego_network
name: personal_network
description: People you talk to
label_requirement:
required: true
stages:
- type: name_generator
id: discuss
title: Important matters
prompt: >-
Looking back over the last six months, who are the people you talked
to about matters that are important to you?
min_alters: 1
max_alters: 8
sets: {discuss: true}
- type: name_generator
id: help
title: Practical help
prompt: Who would you ask for help if you were ill for a couple of weeks?
sets: {help: true}
- type: name_interpreter
id: about
title: About each person
required: true
questions:
- name: closeness
type: radio
description: How close do you feel to {name}?
labels:
- {name: very, text: Very close}
- {name: somewhat, text: Somewhat close}
- {name: not, text: Not close}
- name: years_known
type: number
description: About how many years have you known {name}?
min: 0
max: 100
required: false
- type: dyad_census
id: know
prompt: Do {a} and {b} know each other?
- type: sociogram
id: map
rings: 3| Opción | Valor por defecto | Significado |
|---|---|---|
stages | obligatorio | Las etapas, en orden. Un name_generator tiene que ir antes que cualquier otra etapa |
stage_layout | steps | steps muestra una etapa cada vez, stacked las muestra todas a la vez |
label_requirement | ninguno | {required: true} impide que la página continúe hasta que la red esté completa |
Todas las etapas admiten type, id (una letra seguida de letras, dígitos, _ o -, que por defecto es <type>_<n>), title, prompt e instructions.
Generadores de nombres
| Opción | Valor por defecto | Significado |
|---|---|---|
min_alters | 0 | Personas que necesita esta etapa antes de que la persona encuestada pueda seguir |
max_alters | ninguno | Máximo de personas que acepta esta etapa |
roster | ninguno | Nombres entre los que elegir en lugar de escribirlos: cadenas, o {id, name} |
roster_field | ninguno | Un campo del ítem que contiene la lista (solo en ítems de anotación) |
sets | ninguno | Atributos que se dan a todas las personas nombradas en esta etapa, como {support: true} |
placeholder | First name or nickname | Marcador de posición del cuadro del nombre |
Escribir un nombre que ya está en la lista se rechaza con un mensaje, para que una persona no quede registrada dos veces. Un generador de nombres posterior enumera a las personas nombradas antes bajo "Named earlier", y la persona encuestada añade con un clic a quien también deba estar ahí. El alter conserva un único ID y registra todos los generadores que lo nombraron. Quitar a una persona del único generador que la nombró la elimina de la red, junto con sus respuestas y sus vínculos.
Intérpretes de nombres
Una etapa name_interpreter admite questions (obligatorio) y required, el valor por defecto de sus preguntas. Cada pregunta tiene name (único en todo el esquema), type (radio, multiselect, number o text), description ({name} se sustituye por el nombre de la persona), labels para radio y multiselect (cadenas o {name, text}, donde name es lo que se guarda), required, y min, max y step para los números. La página muestra una tarjeta por persona con todas las preguntas.
Censo de díadas
| Opción | Valor por defecto | Significado |
|---|---|---|
prompt | Do {a} and {b} know each other? | {a} y {b} se sustituyen por los dos nombres |
relation | ninguno | Nombre de la relación, cuando un estudio registra más de un tipo de vínculo |
yes_label, no_label | Yes, No | Etiquetas de las respuestas |
strength_labels | ninguno | Pregunta por la fuerza del vínculo en lugar de por el sí, con un botón por etiqueta más no_label |
strength_variable | strength | Atributo del vínculo en el que se guarda la respuesta sobre la fuerza |
El censo muestra un par cada vez y pasa al siguiente par sin responder después de cada respuesta. "All pairs" enumera todos los pares con su respuesta, y al hacer clic en uno se vuelve a él.
Sociograma
| Opción | Valor por defecto | Significado |
|---|---|---|
relation | ninguno | La relación que registran las líneas |
allow_ties | true | false para un lienzo en el que solo se sitúa a las personas |
rings | 3 | Círculos concéntricos dibujados detrás de las personas, de 0 a 6 |
Las posiciones se guardan como fracciones de la anchura y la altura del lienzo. Una línea dibujada en el sociograma y una respuesta del censo para la misma relación son el mismo registro, así que dibujar una línea entre dos personas pone su respuesta del censo en sí, y quitarla la pone en no.
Todos los controles son botones o cuadros de texto accesibles con Tab. En el sociograma, Tab pasa de una persona a otra, Enter selecciona una y abre una lista con todas las demás para añadir o quitar vínculos, las flechas mueven a la persona con el foco (Shift la mueve más lejos), y Escape cierra la lista.
Formato de datos
La respuesta se guarda como una cadena JSON:
{
"alters": [{"id": "a1", "name": "Ann", "named_in": ["discuss", "help"]},
{"id": "a2", "name": "Bob", "named_in": ["discuss"]}],
"attributes": {"a1": {"discuss": true, "help": true, "closeness": "very"}},
"ties": [["a1", "a2"]],
"positions": {"a1": [0.42, 0.31], "a2": [0.7, 0.55]},
"census": {"a1|a2": true},
"tie_attributes": {}
}Los ID de los alteri son a1, a2 y así sucesivamente, en el orden en que se nombró a las personas, y un ID eliminado no se reutiliza. Un vínculo es [a, b], o [a, b, relation] cuando la etapa nombra una relación.
Exportación
python -m potato.export --config config.yaml --format ego_network --output out/| Archivo | Contenido |
|---|---|
egos.csv | Una fila por red: network_size, n_ties, possible_ties, density, isolates, components, relations, y complete con incomplete_reason, comprobado según las propias reglas del esquema |
alters.csv | Una fila por alter: alter_id, named_in, x, y, degree, y una columna attr_<name> por atributo |
edges.csv | Una fila por vínculo: source_alter, target_alter, relation (tie cuando no tiene nombre), y columnas tie_<name> como tie_strength |
graphml/<user>__<item>.graphml | Un archivo GraphML por red, con los alteri como nodos y los vínculos como aristas no dirigidas |
El ego no es un nodo en estos archivos. La densidad, los componentes y el grado se calculan sobre los vínculos entre alteri, y dos personas vinculadas en dos relaciones cuentan como un solo par conectado.
Nombres de los alteri
Los nombres que escriben las personas encuestadas identifican a personas que no han aceptado participar en el estudio, así que la exportación ego_network los deja fuera y escribe solo los ID seudónimos. --option export_names=true los incluye.
Los nombres siguen estando en la salida en bruto (annotation_output/) y en las exportaciones generales (csv, jsonl), que escriben el JSON guardado tal cual. Pide a las personas encuestadas nombres de pila o apodos, y trata esos archivos como datos identificables.
Completitud
Con label_requirement: {required: true}, la página no continúa mientras un generador de nombres tenga menos de min_alters personas, una pregunta obligatoria de un intérprete de nombres quede sin responder para alguien, o un censo de díadas tenga pares sin responder, e indica cuál es el caso. Dentro del widget, Next se queda en un generador de nombres hasta que tiene min_alters personas, tanto si el esquema es obligatorio como si no.
Importar un protocolo de Network Canvas
potato import -f network_canvas -i my-study.netcanvas -o my-study/ lee un protocolo de Network Canvas, ya sea el archivo .netcanvas guardado en Architect o un protocol.json suelto. Los formularios del ego se convierten en páginas de preguntas normales, y las etapas de red de cada tipo de nodo se convierten en una pregunta ego_network:
| Network Canvas | Potato |
|---|---|
EgoForm | Una página de encuesta, con el panel de introducción como encabezado |
Information (elementos de texto) | Una página pure_display, con el Markdown reducido a texto plano |
NameGenerator, NameGeneratorQuickAdd | Etapas name_generator, una por enunciado |
NameGeneratorRoster | name_generator con un roster leído del recurso CSV o JSON del protocolo |
additionalAttributes en un enunciado | sets en ese generador de nombres |
| Campos adicionales en el formulario para añadir personas | Una etapa name_interpreter justo después del generador de nombres |
AlterForm | name_interpreter |
OrdinalBin, CategoricalBin | name_interpreter con una pregunta radio por enunciado |
DyadCensus, OneToManyDyadCensus | dyad_census, con relation tomado del tipo de arista |
TieStrengthCensus | dyad_census con strength_labels tomado de las opciones de la variable de la arista |
Sociogram | sociogram, con concentricCircles como rings |
minNodes, maxNodes | min_alters (primer enunciado), max_alters (cada enunciado) |
Los valores de las opciones se conservan como respuestas guardadas, así que las exportaciones llevan los mismos códigos que el protocolo. La lógica de salto sobre variables del ego se convierte en show_when de página, y un salto a una etapa FinishSession se convierte en exit_when en la página anterior, así que un participante que no da su consentimiento sale del estudio en ese punto. Los protocolos con traducciones se importan en inglés salvo que indiques --survey-language.
Algunas cosas cambian. Todas las etapas de red de un tipo de nodo comparten una página, situada donde estaba la primera de ellas, así que una etapa de red que venía después de otras páginas pasa a ir antes que ellas, y la importación avisa de cada una. Arrastrar a las personas a casillas se convierte en una elección por persona, con los mismos valores guardados. La lógica de salto que comprueba datos de nodos o de aristas, AlterEdgeForm, Narrative, Geospatial y las etapas de genealogía, los selectores de fecha, los elementos multimedia y las notas del entrevistador aparecen en IMPORT_REPORT.md y no se importan.
Ejemplo
examples/advanced/ego-network/ ejecuta el esquema dos veces: como página de encuesta antes de la tarea, para la red propia del participante, y como tarea de anotación, en la que los codificadores registran la red que describe cada fragmento de entrevista.
python potato/flask_server.py start examples/advanced/ego-network/config.yaml -p 8000Pon entre comillas "Yes" y "No" en las listas de etiquetas, porque YAML los lee sin comillas como booleanos, y escribe stage_layout: stacked, no layout: stacked, ya que layout es el mapeo de colocación en la cuadrícula que admiten todos los esquemas.
Lecturas adicionales
- Importación de encuestas - Network Canvas y otros seis formatos de cuestionario
- Flujos de trabajo multifase - Páginas de encuesta antes y después de la tarea
- Análisis de dominios culturales - Listados libres y pruebas de tríadas para las mismas personas encuestadas
Para detalles de implementación, consulta la documentación fuente.