No se encontraron librerías con esos filtros.
● Análisis cuantitativo
Python
pandas
Limpieza y manipulación de datos tabularesBásico
Úsalo cuando…
- Limpias bases de datos de encuestas de hogares
- Fusionas registros administrativos de distintas fuentes
- Calculas frecuencias, medias y cruces de variables sociodemográficas
- Preparas datos para análisis estadístico posterior
Ventajas en investigación social
- Lee directamente Excel, CSV, SPSS (.sav) y Stata (.dta)
- Operaciones de grupo muy intuitivas (groupby)
- Manejo claro de valores perdidos (NaN)
- Integración directa con matplotlib, seaborn y statsmodels
¿Cuándo Python vs R para esta tarea?
Python / pandas
Mejor cuando el flujo de trabajo incluye scraping, APIs o automatización. Más potente para bases de datos muy grandes (+500 mil filas).
R / dplyr + tidyr
Preferible si el análisis es exploratorio-estadístico. La sintaxis de tidyverse es más legible para operaciones de transformación encadenadas.
pandas — limpieza básica de encuesta
import pandas as pd # Leer encuesta exportada desde KoboToolbox df = pd.read_csv("encuesta_hogares.csv") # Ver estructura y valores perdidos print(df.info()) print(df.isnull().sum()) # Frecuencia por categoría + porcentaje tabla = (df["nivel_educativo"] .value_counts(normalize=True) .mul(100) .round(1) .reset_index()) print(tabla)
R
dplyr + tidyr
Transformación y orden de datos en tidyverseBásico
Úsalo cuando…
- Filtras, agrupas y resumes datos de encuestas
- Recodificas variables ordinales o nominales
- Pivoteas tablas de formato largo a ancho o viceversa
- Encadenas transformaciones de forma legible (pipe |>)
Ventajas en investigación social
- Sintaxis tipo "verbo" muy intuitiva (filter, mutate, summarise)
- El pipe |> hace el código autoexplicativo
- Integración perfecta con ggplot2 para visualizar al instante
- Comunidad enorme en ciencias sociales y políticas
dplyr — resumen por grupo
library(tidyverse) # Leer encuesta df <- read_csv("encuesta_hogares.csv") # Ingreso promedio por nivel educativo y sexo resumen <- df |> filter(!is.na(ingreso_mensual)) |> group_by(nivel_educativo, sexo) |> summarise( promedio = mean(ingreso_mensual), n = n(), .groups = "drop" ) print(resumen)
Python
statsmodels
Modelos estadísticos y pruebas de hipótesisIntermedio
Úsalo cuando…
- Ajustas modelos de regresión OLS, logística o de conteo
- Analizas series de tiempo sociales (desempleo, criminalidad)
- Necesitas tablas de resultados con p-valores y IC al estilo académico
- Realizas pruebas de diferencias de medias o ANOVA
Ventajas en investigación social
- Fórmulas tipo R (y ~ x1 + x2) muy legibles
- Salida de resultados con formato de paper incorporado
- Modelos de panel y efectos fijos disponibles
- Diagnósticos de supuestos integrados
¿Cuándo Python vs R para esta tarea?
Python / statsmodels
Más conveniente cuando el flujo incluye limpieza con pandas y visualización con seaborn en un mismo notebook.
R / lm + lme4
Ecosistema más maduro para modelos mixtos y multinivel. stargazer y modelsummary generan tablas publicables en segundos.
statsmodels — regresión OLS con fórmula
import statsmodels.formula.api as smf # Regresión: ingreso ~ educación + experiencia + sexo modelo = smf.ols( "ingreso ~ C(educacion) + anios_exp + C(sexo)", data=df ).fit() # Tabla de resultados estilo paper print(modelo.summary())
R
lme4
Modelos mixtos y análisis multinivelIntermedio
Úsalo cuando…
- Tienes datos anidados: estudiantes en escuelas, hogares en municipios
- Controlas por efectos aleatorios de grupo
- Analizas varianza explicada a nivel individual y contextual
- Modelas trayectorias longitudinales de individuos
Ventajas en investigación social
- Ideal para encuestas con diseño muestral por conglomerados
- Maneja datos desbalanceados sin problema
- sjPlot produce visualizaciones de efectos listas para publicar
- Estándar de oro en sociología y psicología educativa
lme4 — modelo multinivel básico
library(lme4) library(lmerTest) # agrega p-valores # Rendimiento escolar ~ nivel socioeconómico # con intercepto aleatorio por escuela modelo <- lmer( rendimiento ~ nse + (1 | escuela_id), data = df_estudiantes ) summary(modelo) confint(modelo) # intervalos de confianza
● Análisis de texto y discurso
Python
spaCy
Procesamiento de lenguaje natural en españolIntermedio
Úsalo cuando…
- Extraes entidades nombradas de noticias o documentos de política
- Lematizas corpus de entrevistas para análisis de frecuencia
- Analizas dependencias sintácticas en discurso político
- Preprocesas texto antes de modelado de tópicos
Ventajas en investigación social
- Modelo entrenado en español latinoamericano disponible
- Mucho más rápido que NLTK para corpus grandes
- Pipeline modular: solo activas los componentes que necesitas
- Integra con transformers de Hugging Face para análisis de sentimiento
spaCy — entidades en corpus de noticias
import spacy # Modelo en español: python -m spacy download es_core_news_md nlp = spacy.load("es_core_news_md") texto = "La ministra de Educación anunció en San Salvador... un aumento en la cobertura escolar para 2025." doc = nlp(texto) # Extraer entidades: personas, lugares, organizaciones for ent in doc.ents: print(ent.text, "→", ent.label_)
R
tidytext
Minería de texto en el ecosistema tidyverseIntermedio
Úsalo cuando…
- Analizas frecuencia de términos en corpus de entrevistas
- Comparas vocabulario entre grupos o períodos
- Realizas análisis de sentimiento básico en español
- Preparas datos para LDA con el paquete topicmodels
Ventajas en investigación social
- Integración perfecta con dplyr y ggplot2
- TF-IDF implementado con una línea de código
- Fácil visualización de bigramas como redes de palabras
- Curva de aprendizaje muy baja si ya conoces tidyverse
tidytext — palabras más frecuentes en entrevistas
library(tidytext) library(tidyverse) # df con columnas: entrevista_id, texto palabras <- df |> unnest_tokens(palabra, texto) |> filter(!palabra %in% stopwords("es")) |> count(palabra, sort = TRUE) palabras |> slice_max(n, n = 20) |> ggplot(aes(n, reorder(palabra, n))) + geom_col(fill = "#0891b2") + labs(title = "Términos más frecuentes")
Python
gensim
Modelado de tópicos LDA en corpus cualitativosAvanzado
Úsalo cuando…
- Tienes un corpus grande (100+ documentos) y quieres identificar temas emergentes
- Analizas prensa, informes o registros de sesiones parlamentarias
- Quieres complementar análisis cualitativo con identificación temática inductiva
- Exploras variación temática entre grupos o periodos temporales
Ventajas en investigación social
- LDA produce tópicos interpretables con palabras clave asociadas
- pyLDAvis genera visualización interactiva de tópicos
- Coherencia de tópicos medible para elegir el número óptimo
- Procesamiento eficiente de corpus en español con preprocesamiento spaCy
gensim — LDA básico en corpus de informes
from gensim import corpora, models # textos: lista de listas de tokens limpios diccionario = corpora.Dictionary(textos) corpus_bow = [diccionario.doc2bow(t) for t in textos] lda = models.LdaModel( corpus=corpus_bow, id2word=diccionario, num_topics=6, passes=15, random_state=42 ) for i, topico in lda.print_topics(): print(f"Tópico {i}: {topico}")
● Visualización
R
ggplot2
Gramática de gráficos para publicaciónBásico
Úsalo cuando…
- Necesitas figuras listas para publicar en paper o informe
- Visualizas distribuciones, comparaciones o tendencias temporales
- Aplicas identidad visual consistente a todos tus gráficos
- Combinas múltiples paneles con patchwork o cowplot
Ventajas en investigación social
- Lógica de capas: cada elemento del gráfico es independiente
- Temas personalizables: un theme() para toda la investigación
- Extensiones: ggridges, ggdist, ggrepel para figuras avanzadas
- Exportación en vectorial (SVG, PDF) sin pérdida de calidad
ggplot2 — distribución con facetas por grupo
library(ggplot2) ggplot(df, aes(x = ingreso_mensual, fill = sexo)) + geom_density(alpha = 0.6) + facet_wrap(~ region) + scale_fill_manual(values = c("#3b82f6", "#f59e0b")) + labs( title = "Distribución del ingreso por sexo y región", x = "Ingreso mensual (USD)", y = "Densidad" ) + theme_minimal(base_size = 12)
Python
matplotlib + seaborn
Visualización estadística en PythonBásico
Úsalo cuando…
- Exploras datos de manera iterativa en Jupyter Notebook
- Visualizas matrices de correlación entre variables sociales
- Produces heatmaps de respuestas en escalas Likert
- Necesitas control total sobre cada elemento de la figura
Ventajas en investigación social
- seaborn simplifica gráficos estadísticos complejos con una línea
- Integración directa con pandas DataFrames
- catplot permite comparaciones multivariables muy limpias
- Paletas accesibles para daltónicos incluidas (colorblind)
seaborn — heatmap de correlaciones
import seaborn as sns import matplotlib.pyplot as plt # Variables socioeconómicas continuas vars_num = ["ingreso", "educacion_anios", "edad", "hijos"] fig, ax = plt.subplots(figsize=(7, 5)) sns.heatmap( df[vars_num].corr(), annot=True, fmt=".2f", cmap="RdBu_r", center=0, ax=ax ) ax.set_title("Correlaciones entre variables socioeconómicas") plt.tight_layout()
● Encuestas y M&E
R
survey
Análisis de encuestas con diseño muestral complejoIntermedio
Úsalo cuando…
- Trabajas con EHPM, ENIGH u otras encuestas oficiales con factores de expansión
- Calculas estimaciones representativas a nivel poblacional
- Produces tablas de indicadores con errores estándar correctos
- Ajustas modelos de regresión respetando el diseño muestral
Ventajas en investigación social
- Maneja estratificación, conglomerados y pesos de manera integrada
- svymean, svytotal y svyratio con IC correctos
- Evita los errores estándar subestimados al ignorar el diseño muestral
- Compatible con tidyverse mediante el paquete srvyr
survey — media ponderada con diseño complejo
library(survey) # Declarar diseño muestral de la EHPM diseno <- svydesign( id = ~upm, strata = ~estrato, weights = ~fac_hog, data = ehpm_df, nest = TRUE ) # Ingreso promedio per cápita con IC svymean(~ingreso_percapita, design = diseno) # Tasa de pobreza por departamento svyby(~pobre, ~departamento, diseno, svymean)
Python
samplics
Muestreo y estimación para encuestas complejasIntermedio
Úsalo cuando…
- Diseñas marcos muestrales para evaluaciones de programas sociales
- Calculas tamaños de muestra para estimaciones con precisión definida
- Produces estimaciones con varianza correcta para encuestas estratificadas
- Prefieres Python sobre R pero necesitas rigor muestral formal
Ventajas en investigación social
- Diseñada específicamente para encuestas con diseño complejo
- Cálculo de tamaño de muestra integrado con parámetros de diseño
- Estimadores de razón, post-estratificación y calibración
- Documentación clara orientada a estadística oficial
samplics — tamaño de muestra para proporción
from samplics.sampling import SampleSize # Calcular n para estimar proporción con precisión calculador = SampleSize() n = calculador.calculate( target = "proportion", hal = 0.04, # margen de error ±4% proportion = 0.50, # p conservadora alpha = 0.05, # confianza 95% deff = 1.5 # efecto de diseño ) print(f"Tamaño de muestra requerido: {n}")
R
lavaan
Modelos de ecuaciones estructurales (SEM)Avanzado
Úsalo cuando…
- Construyes y validas escalas e índices compuestos
- Modelas variables latentes: capital social, bienestar subjetivo
- Pruebas mediación o moderación entre constructos teóricos
- Realizas análisis factorial confirmatorio de instrumentos
Ventajas en investigación social
- Sintaxis tipo ecuación muy legible para especificar el modelo
- Índices de ajuste completos (CFI, RMSEA, SRMR) integrados
- semPlot genera diagramas de path automáticamente
- Referencia estándar en psicología social y sociología cuantitativa
lavaan — análisis factorial confirmatorio
library(lavaan) # Modelo de 2 factores latentes modelo <- ' capital_social =~ cs1 + cs2 + cs3 + cs4 confianza =~ cf1 + cf2 + cf3 capital_social ~~ confianza ' fit <- cfa(modelo, data = df_encuesta) summary(fit, fit.measures = TRUE, standardized = TRUE)
● Redes y análisis espacial
Python
NetworkX
Análisis de redes sociales y organizacionalesIntermedio
Úsalo cuando…
- Analizas redes de organizaciones de sociedad civil
- Mapeas flujos de información o colaboración entre actores
- Calculas centralidad, intermediación y cohesión en redes de política
- Identificas comunidades o clústeres en redes relacionales
Ventajas en investigación social
- Métricas de red estándar (betweenness, closeness, eigenvector) integradas
- Lee desde matrices de adyacencia o listas de aristas en pandas
- pyvis genera visualizaciones interactivas explorables en HTML
- Algoritmos de detección de comunidades (Louvain) disponibles
NetworkX — centralidad de actores en red de política
import networkx as nx # Crear red desde lista de vínculos (actores, colaboraciones) G = nx.from_pandas_edgelist( df_vinculos, source="actor_a", target="actor_b", edge_attr="peso" ) # Centralidad de intermediación centralidad = nx.betweenness_centrality(G, weight="peso") # Top 5 actores más influyentes top = sorted(centralidad.items(), key=lambda x: x[1], reverse=True)[:5] print(top)
R
sf + tmap
Análisis espacial y cartografía temáticaIntermedio
Úsalo cuando…
- Produces mapas de indicadores sociales por municipio o departamento
- Vinculas datos de encuesta con unidades geográficas (join espacial)
- Analizas distribución territorial de pobreza, acceso a servicios
- Cruzas capas de shapefiles con datos administrativos
Ventajas en investigación social
- sf integra datos espaciales como si fueran un data frame normal
- tmap produce mapas publicables con una sintaxis tipo ggplot
- Compatible con datos del RNPN, IGN y fuentes regionales CEPAL
- tmaptools facilita la lectura directa de shapefiles de OpenStreetMap
sf + tmap — mapa de pobreza por municipio
library(sf) library(tmap) # Leer shapefile de municipios municipios <- st_read("municipios_sv.shp") # Unir con indicadores de pobreza mapa_df <- municipios |> left_join(indicadores, by = "cod_mun") # Mapa coroplético tm_shape(mapa_df) + tm_fill("tasa_pobreza", palette = "YlOrRd", title = "Tasa de pobreza (%)") + tm_borders(alpha = 0.4) + tm_layout(title = "Pobreza por municipio")