ateneatla / sexinsa_qol_ELSA

Research about the possible relationship between sexual insatisfaccion and the quality of life in elder people from English Longitudinal Study of Ageing
GNU General Public License v3.0
0 stars 0 forks source link

Isolation: kind_of_contact = "-1" "item not applicable" & has_vip = "-9" "not answered" #22

Closed ateneatla closed 4 years ago

ateneatla commented 4 years ago

Is your feature request related to a problem? Please describe. In Isolation Questionnaire there are peaople who don't answer to the question about if they have family, friends or childs, and don't answer neither the kind of the contact withs these people. These answers contaminate the results.

Describe the solution you'd like Delete each whole subject

ateneatla commented 4 years ago

cols_to_clean_didnt_awr_hasvip_w6 = ['scchd', 'scfam', 'scfrd']

cols_to_clean_kind_of_contact_not_applicable_w6 = [['scchdg', 'scchdh', 'scchdi', 'scchdt'],

                                            ['scfamg', 'scfamh', 'scfami', 'scfamt'], 

                                            ['scfrdg', 'scfrdh', 'scfrdi', 'scfrdt']]

Función que vamos a utilizar para eliminar sujetos

Traducción:

Define def la función (llamada delete_sbj_didnt_awr_kind_of_contact_not_applicable) que para cada sujeto devuelva un buleano bool (True o False). Hazlo (devolver True) si se cumple que en algún any caso el sujeto no contesta (-9) a si tiene personas importantes (vip: friends, children, family) sbj[has_vip] == -9 y a la vez and si alguno any de los sujetos tiene en la columna un valor de -1, lo haces para cada [i] lista de columnas de las cols_to_clean_kind_of_contact_not_applicable_w6. Y ahora, hazme todo eso que te he dicho con cada elemento i de has_vip y con cada elemento de cols_to_clean_didnt_awr_hasvip_w6 dándome indice y el elemento de la lista (esto es lo que hace enumerate: te asocia cada i de has_vip con cada elemento de la lista a la que se refiere enumerate)

def is_sbj_didnt_awr_kind_of_contact_not_applicable(sbj) -> bool:

return any([

    sbj[has_vip] == -9 and any([

        sbj[col] == -1 for col in cols_to_clean_kind_of_contact_not_applicable_w6[i]])

    for i, has_vip in enumerate(cols_to_clean_didnt_awr_hasvip_w6)])

reducimos de nuevo el dataframe, sobre el que ya estaba reducido, esta vez para eliminar los nuevos sujetos seleccionados: Construimos El data frame is_sbj_didnt_awr_kind_of_contact_not_applicable_w6_df aplicando

Traducción:

is_sbj_didnt_awr_kind_of_contact_not_applicable_w6_df = w8_without_sbj_out_of_sample_df.apply(

                                                        is_sbj_didnt_awr_kind_of_contact_not_applicable

                                                        ,

                                                        axis=1)

w8_without_sbj_didnt_awr_kind_of_contact_not_applicable = w8_without_sbj_out_of_sample_df.loc[

is_sbj_didnt_awr_kind_of_contact_not_applicable_w6_df == False]