4. Qualitat de l’aire (3 punts)

La informació sobre diverses estacions de mesura de la qualitat de l’aire s’emmagatzema en dos diccionaris. El diccionari de lectures té com a clau el codi d’una estació (string) i com a valor una llista numèrica de lectures de contaminació. Per exemple:

>>> lectures = {
...     'E01': [42, 55, 61, 100], 'E02': [30, 34, 50],
...     'E03': [70, 65, 80, 75], 'E04': [51, 49, 53],
...     'E05': [20, 30, 40, 90] }

El diccionari d’estacions té com a claus codis d’estacions (string) i com a valors tuples formades pel districte on es troba l’estació i el tipus d’estació.

Per exemple:

>>> estacions = {
...     'E01': ('EIXAMPLE', 'A'), 'E02': ('GRACIA', 'A'),
...     'E03': ('EIXAMPLE', 'B'), 'E04': ('SANTS', 'C'),
...     'E05': ('GRACIA', 'A') }
  1. Definim la mitjana truncada de les lectures d’una estació com a la mitjana calculada descartant una ocurrència del valor mínim i una ocurrència del valor màxim.

    Dissenya la funció mitjanes_districte(d_lect, d_est, t) que donats un diccionari de lectures d_lect, un diccionari d’estacions d_est, i un tipus d’estació t (string), retorna un nou diccionari amb informació de les estacions que apareixen a d_lect i són del tipus indicat per t. Si no hi ha cap estació del tipus t la funció retorna un diccionari buit.

    Les claus del diccionari han de ser els districtes i cada valor una llista de tuples amb una per cada estació del districte del tipus t. Cada tupla ha de contenir dos valors:

    • la mitjana de totes les lectures de l’estació

    • la mitjana truncada de les lectures de l’estació

    Cada llista ha d’estar ordenada ascendentment segons la mitjana no truncada.

    Suposeu que tots els codis d’estació que apareixen al diccionari de lectures també apareixen al diccionari d’estacions i que totes les llistes de lectures tenen com a mínim tres valors.

    Els següents doctests mostren exemples del que ha de fer la funció:

    >>> lectures = {
    ...     'E01': [42, 55, 61, 100], 'E02': [30, 34, 50],
    ...     'E03': [70, 65, 80, 75], 'E04': [51, 49, 53],
    ...     'E05': [20, 30, 40, 90] }
    
    >>> estacions = {
    ...     'E01': ('EIXAMPLE', 'A'), 'E02': ('GRACIA', 'A'),
    ...     'E03': ('EIXAMPLE', 'B'), 'E04': ('SANTS', 'C'),
    ...     'E05': ('GRACIA', 'A') }
    
    >>> dres = mitjanes_districte(lectures, estacions, 'A')
    >>> dres == {
    ...     'EIXAMPLE': [(64.5, 58.0)],
    ...     'GRACIA': [(38.0, 34.0), (45.0, 35.0)]
    ... }
    True
    
    >>> mitjanes_districte(lectures, estacions, 'D')
    {}
    

    Desa la funció al fitxer qualitat.py.

    Disposes de més tests al fitxer test-mitjanes.txt

  2. Definim la variació dins un districte com la diferència (sense arrodonir) entre el màxim i el mínim de les mitjanes no truncades de totes les estacions del districte.

    Dissenya la funció mes_variacio(d_lect, d_est, t, min_est) que donats un diccionari de lectures d_lect, un diccionari d’estacions d_est, un tipus d’estació t (string) i un enter min_est, retorna una tupla amb el districte de més variació i aquesta variació arrodonida a un decimal, considerant només les estacions de tipus t. Només s’han d’incloure els districtes que tinguin com a mínim min_est estacions del tipus t.

    Suposarem que totes les variacions són positives, que sempre existeix almenys un districte amb com a mínim min_est estacions del tipus t i que hi haurà un únic districte amb la variació màxima.

    Aquesta funció ha de cridar la funció mitjanes_districte().

    Els següents doctests mostren exemples del que ha de fer la funció:

    >>> lectures1 = {
    ...     'E01': [10, 20, 30, 40, 100], 'E02': [5, 15, 25],
    ...     'E03': [60, 70, 80, 90], 'E04': [12, 18, 24, 30, 60],
    ...     'E05': [20, 40, 60, 80, 200], 'E06': [7, 9, 11, 13],
    ...     'E07': [31, 33, 35, 37, 80] }
    
    >>> estacions1 = {
    ...     'E01': ('EIXAMPLE', 'A'), 'E02': ('GRACIA', 'B'),
    ...     'E03': ('EIXAMPLE', 'A'), 'E04': ('SANTS', 'A'),
    ...     'E05': ('GRACIA', 'A'), 'E06': ('HORTA', 'C'),
    ...     'E07': ('SANTS', 'A') }
    
    >>> mes_variacio(lectures1, estacions1, 'A', 2)
    ('EIXAMPLE', 35.0)
    

    Desa la funció al fitxer qualitat.py.

    Disposes de més tests al fitxer test-mes-variacio.txt

    Disposes de solucions al fitxer qualitat.py.