Crea una funzione per calcolare D
Il calcolo dell'Indice di Dissimilarità richiede più passaggi e ha un alto potenziale di riutilizzo. In questo esercizio creerai la funzione dissimilarity che abbiamo usato nell'esercizio precedente. I parametri di input della funzione saranno un DataFrame di geografie di piccole aree (come i tracts) e tre nomi di colonne: le due colonne con i conteggi di popolazione del Gruppo A e del Gruppo B, e la colonna con i nomi o gli identificatori geografici della geografia contenitore (come stati o aree metropolitane).
Come promemoria, la formula dell'Indice di Dissimilarità è:
$$D = \frac{1}{2}\sum{\left\lvert \frac{a}{A} - \frac{b}{B} \right\rvert}$$
pandas è stato importato usando il solito alias. Le operazioni groupby e merge sono già predisposte per te nel codice qui sotto.
Questo esercizio fa parte del corso
Analizzare i dati del Censimento USA con Python
Istruzioni dell'esercizio
- Calcola l'espressione all'interno dei valori assoluti in base alla formula: i nomi delle colonne per \(A\) e \(B\) si ottengono aggiungendo il suffisso
"_sum"ai parametricol_Aecol_B - Il metodo
sumsu una singola colonna restituisce una serie; usa il metodoto_frame()per convertire la serie in un DataFrame - Metti alla prova la nuova funzione su
tracts: calcola la dissimilarità White-Black per nome MSA
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
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())