CODING
SUMMARY
1. CODING LFTG Research
2. CODING OLDER ADULTS Research
2. CODING OLDER ADULTS Research
El siguiente fragmento de código en Python muestra cómo cargar y visualizar un archivo de Excel en Google Colab utilizando la biblioteca pandas y la función files.upload() de google.colab. Este ejemplo es útil para análisis de datos, ciencia de datos y tareas de data analysis con archivos .xlsx:
import pandas as pdfrom google.colab import files
uploaded = files.upload()df = pd.read_excel("BD_ABRIL.xlsx")
print(df.head())
El código realiza los siguientes pasos básicos para trabajar con datos en Excel en un entorno de Google Colab:
- Importa la librería pandas como pd para el manejo de datos.
- Importa files desde google.colab para permitir la carga de archivos locales.
- Utiliza files.upload() para subir el archivo BD_ABRIL.xlsx al entorno de Colab.
- Lee el archivo de Excel con pd.read_excel() y lo guarda en el DataFrame df.
- Muestra las primeras filas del conjunto de datos con df.head() para una vista rápida del contenido.
df
print(df.columns)
df = df.drop(index=0)
Python code example for filtering a pandas DataFrame by duration values in seconds:
import pandas as pd
df["Duration (in seconds)"] = pd.to_numeric( df["Duration (in seconds)"], errors="coerce")
df = df[ (df["Duration (in seconds)"] >= 480) & (df["Duration (in seconds)"] <= 3000)]
This snippet converts the Duration (in seconds) column to numeric values using pandas, coerces invalid entries to NaN, and then filters the DataFrame to keep only rows where the duration is between 480 and 3000 seconds. This approach is useful for data cleaning, preprocessing, and preparing time-based datasets for analysis or machine learning.
df = df.dropna(subset=["CONSENT FORM FOR QUT"])
print(df["CONSENT FORM FOR QUT"].unique())
print(df["CONSENT FORM FOR QUT"].value_counts(dropna=False))
df = df[ df["CONSENT FORM FOR QUT"].str.contains("I agree", case=False, na=False)].copy()
df
df = df.dropna(subset=["psid"])df = df.dropna(subset=["Q70"])df
print(df["Q 6.2"].unique())
print(df["Q63"].unique())
df["Q 6.2"] = df["Q 6.2"].astype(str).str.strip().str.lower()
df["Q63"] = df["Q63"].astype(str).str.strip().str.lower()
Define a data quality control function
def control_q1(row):
q62 = row["Q 6.2"]
q63 = row["Q63"]
if q62 == "no" and q63 in ["no", "i am unsure"]:
return "OK"
elif q62 == "yes" and q63 == "yes":
return "OK"
else:
return "ERROR"
Apply the control check and review results
df["controlQ1"] = df.apply(control_q1, axis=1)
print(df["controlQ1"].value_counts(dropna=False))
Este fragmento de código en Python utiliza pandas para validar respuestas de un cuestionario, aplicando reglas lógicas entre las columnas Q52 y Q3.1_6 y generando una nueva columna de control llamada controlQ2.
Validación de respuestas con pandas
El código comienza mostrando los valores únicos de las columnas relevantes con print(df["Q52"].unique()) y print(df["Q3.1_6"].unique()), lo que ayuda a revisar las posibles respuestas antes de aplicar las reglas de validación.
Después se crea una copia del DataFrame original con df = df.copy() para trabajar de forma segura sin modificar los datos fuente.
Función de control de calidad de datos
La función control_q2 recibe cada fila del DataFrame y convierte las respuestas de Q52 y Q3.1_6 a minúsculas para facilitar la comparación de texto:
- Se define una función interna tipo(x) que clasifica la respuesta en tres categorías: "yes", "no" o "unsure", buscando estas palabras clave dentro del texto.
- Las variables t1 y t2 almacenan el tipo detectado para cada una de las preguntas.
A continuación se aplican las reglas de validación:
- Si Q52 es "yes" y Q3.1_6 es "yes" o "unsure", se marca como "OK".
- Si Q52 es "unsure" y Q3.1_6 es "yes" o "unsure", también se marca como "OK".
- Si ambas respuestas son "no", se considera coherente y se devuelve "OK".
- En cualquier otro caso, la combinación se clasifica como "ERROR", indicando una posible inconsistencia en los datos.
Creación de la columna de control
Finalmente, la función se aplica fila por fila con df.apply(control_q2, axis=1), generando la nueva columna controlQ2 que resume el resultado de la validación para cada registro del DataFrame.
df = df[df["controlQ2"] == "OK"].copy() df = df[df["controlQ1"] == "OK"].copy()df
Python code example for cleaning a pandas DataFrame by removing unnecessary survey metadata columns:
Code snippet:
df = df.drop(columns=[ "StartDate", "EndDate", "Status", "IPAddress", "Progress", "Finished", "RecordedDate", "ResponseId", "RecipientLastName", "RecipientFirstName", "RecipientEmail", "ExternalReference", "DistributionChannel", "UserLanguage", "psid", "pid", "anon_id", "Q_DataPolicyViolations","Q85"])
This line of code uses the pandas DataFrame.drop() method to remove multiple columns related to survey metadata, such as timestamps, IP address, response status, recipient information, and data policy violations. It helps streamline the dataset by keeping only the relevant variables for analysis, reporting, or machine learning workflows.
df = df.rename(columns={ "Duration (in seconds)": "duration", "LocationLatitude": "lat", "LocationLongitude": "long", "CONSENT FORM FOR QUT": "consent",
"Q 1.1": "how_often_pt", "Q 1.2": "which_reason_pt", "Q 1.3": "how_far_pt", "Q 1.4": "what_think_barri_pt", "Q 1.4_11_TEXT": "what_think_barri_pt_text", "Q 1.5": "do_think_pt_acces",
"Q 1.6": "what_types_imp_remov_barrie_pt_older_ad", "Q2.1": "how_rate_overall_pt", "Q2.2": "how_safe_using_pt", "Q3.1_1": "wtp_month_better_punctuality", "Q3.1_2": "wtp_month_better_comfort", "Q3.1_3": "wtp_month_better_safety_measures", "Q3.1_4": "wtp_month_better_access_stops", "Q3.1_5": "wtp_month_better_frequency_services", "Q3.1_6": "wtp_month_better_environment", "Q3.1_7": "wtp_month_better_infrastructure", "Q3.2": "which_method_would_prefer", "Q3.3": "would_be_more_likely_invest_financial_incentives", "Q48": "if_you_wtp_month_main_reason", "Q48_8_TEXT": "if_you_wtp_month_main_reason_text", "Q49": "if_you_no_wtp_month_main_reason", "Q49_10_TEXT": "if_you_no_wtp_month_main_reason_text", "Q50": "if_wtp_if_it_takes_more_5years", "Q29": "sce1", "Q31": "sce2", "Q33": "sce3", "Q35": "sce4", "Q37": "sce5", "Q40": "sce6", "Q42": "sce7", "Q44": "sce8", "Q47": "sce9", "Q51": "when_you_choose_do_consider_environmental_benefits", "Q52": "would_you_wtp_improve_environmental_benefits", "Q53": "if_you_wtp_reduce_environmental_impact_which_method", "Q54": "how_satisfied_overall_pt", "Q55": "how_feel_pt_meets_needs_older", "Q 6.1": "if_others_agree_you_agree", "Q 6.2": "do_feel_moral_responsibility", "Q 6.3": "would_be_more_wtp_if_improvements_short_term", "Q 6.4": "would_be_wtp_older_also_contribute_environment_future_generations", "Q 6.5": "do_feel_everyone_contribute_finance_pt_improvements_older_even_if_no_use", "Q 6.6": "would_pay_x_smaller_this_month_or_2x_after_3months_improved_pt", "Q62": "would_prefer_pay_x_next_month_or_2x_after_4_months", "Q63": "do_believe_ethical_duty_contribute_improve_pt_access_older", "Q64": "covid_change_use_pt", "Q65": "gender", "Q66": "employment_status", "Q67": "household_status", "Q67_9_TEXT": "household_status_text", "Q68": "age", "Q69": "level_school", "Q70": "personal_income_before_tax", "Q71": "familiar_income_before_tax"})
df.to_excel("bd_final.xlsx", index=False)
Python code snippet for downloading a file in Google Colab using google.colab and the files.download function:
Example Google Colab download command:
from google.colab import files
files.download("bd_final.xlsx")