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).

  1. 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
    
  2. Dissenyeu la funció selecciona_index() que donat un DataFrame com el construït a la pregunta anterior, i donat l’índex d’una enquesta i l’identificador d’una pregunta retorni la resposta corresponent. Si df és el DataFrame de l’exemple, aquest seria un exemple d’utilització de la funció:

    >>> selecciona_index(df, 2, 'P3')
    3
    
  3. Dissenyeu la funció selecciona_fila() que donat un DataFrame com el construït a la pregunta 1 i un índex i enter retorni una Series formada per les respostes de la i-è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
    
  4. Dissenyeu la funció selecciona_parell() que donat un DataFrame com el construït a la pregunta 1 retorni un nou DataFrame format 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
    
  5. Dissenyeu la funció selecciona_columnes() que donat un DataFrame com el construït a la pregunta 1, i una llista d’identificadors de preguntes, retorni un nou DataFrame format 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
    
  6. Dissenyeu la funció selecciona_valor() que donat un DataFrame com el construït a la pregunta 1, donat un identificador de pregunta i un valor de resposta, retorni un nou DataFrame format 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
    
  7. Dissenyeu la funció estadistiques() que donat un DataFrame com 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 tipus Series: mean() i std().

    >>> mit, des = estadistiques(df, 'P4')
    >>> round(mit, 3), round(des, 3)
    (3.75, 1.893)
    
  8. Dissenyeu la funció mes_valorada() que donat un DataFrame com 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 tipus DataFrame, mean() i el del tipus Series idxmax().

    >>> pmv = mes_valorada(df)
    >>> pmv
    'P7'
    
  9. Dissenyeu la funció totes_estadistiques() que donat un DataFrame com el construït a la pregunta 1, retorni un nou DataFrame que 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ètode describe() 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.