Satisfacció¶
Una empresa de software vol analitzar l’opinió dels seus clients sobre la seva pàgina web. Per això, passa una enquesta de 10 preguntes a les que es pot respondre amb un valor entre 1 i 5 (una escala de Likert).
L’objectiu de l’exercici és obtenir alguns paràmetres estadístics sobre les enquestes. Per això es dissenyaran funcions amb python utilitzant la llibreria pandas.
Per fer una primera prova, es guarden uns resultats ficticis en un fitxer de text amb format CSV en el que es separen els elements amb un “;” (punt i coma). La primera línia del fitxer conté l’identificador de la pregunta (P1 a P10) i les files següents les respostes donades a cada enquesta, que seran valors de 1 a 5. Disposeu d’un exemple de fitxer de resultats al fitxer satisfaccio.csv. Deseu totes les funcions al fitxer satisfaccio.py (mòdul satisfaccio).
Dissenyeu la funció
llegir_csv()que a partir del nom del fitxer de resultats, retorna un DataFrame que tingui per files les enquestes i per columnes les preguntes. Per això, investigueu com utilitzar la funcióread_csv().>>> nomf = 'satisfaccio.csv' >>> df = llegir_csv(nomf) >>> df P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 0 1 1 1 5 5 4 5 2 1 3 1 4 5 5 1 1 3 5 3 2 4 2 3 5 3 5 1 2 5 4 1 4 3 3 5 3 4 2 1 5 1 3 3
Dissenyeu la funció
selecciona_index()que donat unDataFramecom el construït a la pregunta anterior, i donat l’índex d’una enquesta i l’identificador d’una pregunta retorni la resposta corresponent. Sidfés elDataFramede l’exemple, aquest seria un exemple d’utilització de la funció:>>> selecciona_index(df, 2, 'P3') 3
Dissenyeu la funció
selecciona_fila()que donat unDataFramecom el construït a la pregunta 1 i un índexienter retorni unaSeriesformada per les respostes de lai-èssima enquesta.>>> selecciona_fila(df, 2) P1 3 P2 5 P3 3 P4 5 P5 1 P6 2 P7 5 P8 4 P9 1 P10 4 Name: 2, dtype: int64
Dissenyeu la funció
selecciona_parell()que donat unDataFramecom el construït a la pregunta 1 retorni un nouDataFrameformat per les files d’índex parell.>>> dsel = selecciona_parell(df) >>> dsel P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 0 1 1 1 5 5 4 5 2 1 3 2 3 5 3 5 1 2 5 4 1 4
Dissenyeu la funció
selecciona_columnes()que donat unDataFramecom el construït a la pregunta 1, i una llista d’identificadors de preguntes, retorni un nouDataFrameformat per totes les enquestes corresponents a les preguntes de la llista donada.>>> dsel = selecciona_columnes(df, ['P1', 'P2', 'P3']) >>> dsel P1 P2 P3 0 1 1 1 1 4 5 5 2 3 5 3 3 3 5 3
Dissenyeu la funció
selecciona_valor()que donat unDataFramecom el construït a la pregunta 1, donat un identificador de pregunta i un valor de resposta, retorni un nouDataFrameformat per totes les enquestes que tenen el valor donat com a resposta de la pregunta donada. Per l’exemple, el resultat esperat seria:>>> dsel = selecciona_valor(df, 'P1', 3) >>> dsel P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 2 3 5 3 5 1 2 5 4 1 4 3 3 5 3 4 2 1 5 1 3 3
Dissenyeu la funció
estadistiques()que donat unDataFramecom el construït a la primera pregunta i donat un identificador de pregunta retorni la mitjana aritmètica i la desviació típica de les respostes a aquesta pregunta. Per això, exploreu els mètodes del tipusSeries:mean()istd().>>> mit, des = estadistiques(df, 'P4') >>> round(mit, 3), round(des, 3) (3.75, 1.893)
Dissenyeu la funció
mes_valorada()que donat unDataFramecom el construït a la pregunta 1, retorni l’identificador de la pregunta que ha obtingut la millor mitjana aritmètica de totes. Per això, exploreu el mètode del tipusDataFrame,mean()i el del tipusSeriesidxmax().>>> pmv = mes_valorada(df) >>> pmv 'P7'
Dissenyeu la funció
totes_estadistiques()que donat unDataFramecom el construït a la pregunta 1, retorni un nouDataFrameque tingui per files els següents paràmetres estadístics: nombre de valors, mitjana, desviació títpica, valor mínim, percentils 25, 50 i 75 i valor màxim. Es recomana que exploreu el mètodedescribe()per a fer-ho.>>> est = totes_estadistiques(df) >>> est.index Index(['count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max'], dtype='object') >>> est[['P1', 'P10']] P1 P10 count 4.000000 4.00000 mean 2.750000 3.50000 std 1.258306 0.57735 min 1.000000 3.00000 25% 2.500000 3.00000 50% 3.000000 3.50000 75% 3.250000 4.00000 max 4.000000 4.00000 >>> est.loc['std'] P1 1.258306 P2 2.000000 P3 1.632993 P4 1.892969 P5 1.892969 P6 1.290994 P7 0.000000
Disposeu de més jocs de proves al fitxer test-satisfaccio.txt.
Solució
Disposeu d’una solució al fitxer satisfaccio.py.