Crea una función para calcular D
Calcular el Índice de Disimilitud requiere varios pasos y tiene un alto potencial de reutilización. En este ejercicio vas a crear la función dissimilarity que usamos en el ejercicio anterior. Los parámetros de entrada de la función serán un DataFrame con geografías de áreas pequeñas (como tracts) y tres nombres de columna: las dos columnas con los conteos de población del Grupo A y del Grupo B, y la columna con los nombres o identificadores geográficos de la geografía contenedora (como estados o áreas metropolitanas).
Como recordatorio, la fórmula del Índice de Disimilitud es:
$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$
pandas se ha importado con el alias habitual. El groupby y el merge ya están preparados para ti en el código de abajo.
Este ejercicio forma parte del curso
Análisis de datos del Censo de EE. UU. con Python
Instrucciones del ejercicio
- Calcula la expresión dentro de las barras de valor absoluto según la fórmula: los nombres de columna para \(A\) y \(B\) se forman añadiendo el sufijo
"_sum"a los parámetroscol_Aycol_B - El método
sumsobre una única columna devuelve una serie; usa el métodoto_frame()para convertir la serie en un DataFrame - Prueba la nueva función en
tracts: calcula la disimilitud White-Black por nombre de MSA
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
def dissimilarity(df, col_A, col_B, group_by):
# Sum Group A and Group B by grouping column
grouped_sums = df.groupby(group_by)[[col_A, col_B]].sum()
tmp = pd.merge(df, grouped_sums, left_on = group_by,
right_index = True, suffixes = ("", "_sum"))
# Calculate inner expression
tmp["D"] = abs(____)
# Calculate Index of Dissimilarity and convert to DataFrame
return 0.5 * tmp.groupby(group_by)["D"].sum().____
msa_D = dissimilarity(msa_tracts, ____, ____, "msa_name")
print(msa_D.head())