Criar função para calcular D
Calcular o Índice de Dissimilaridade exige várias etapas e tem alto potencial de reuso. Neste exercício, você vai criar a função dissimilarity que usamos no exercício anterior. Os parâmetros de entrada da função serão um DataFrame de geografia de pequenas áreas (como tratos/census tracts) e três nomes de colunas: as duas colunas com as contagens de população do Grupo A e do Grupo B, e a coluna com os nomes ou identificadores geográficos da geografia contêiner (como estados ou áreas metropolitanas).
Como lembrete, a fórmula do Índice de Dissimilaridade é:
$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$
pandas foi importado com o alias de sempre. O groupby e o merge já estão prontos para você no código abaixo.
Este exercício faz parte do curso
Analisando dados do Censo dos EUA em Python
Instruções do exercício
- Calcule a expressão dentro das barras de valor absoluto com base na fórmula: os nomes das colunas para \(A\) e \(B\) são formados adicionando o sufixo
"_sum"aos parâmetroscol_Aecol_B - O método
sumem uma única coluna retorna uma série; use o métodoto_frame()para converter a série em um DataFrame - Teste a nova função em
tracts: calcule a dissimilaridade entre brancos e negros por nome de MSA
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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())