2. Normalització de dades

Una fàbrica utilitza una màquina que es pot sobreescalfar durant el funcionament. Per controlar aquesta situació, es disposa d’un sensor de temperatura configurat amb un llindar de 75 °C. Quan la temperatura de la màquina supera aquest llindar, el sensor guarda el mesurament.

Una llista de lectures d’un dia és una llista que conté valors numèrics de les temperatures registrades pel sensor durant aquest dia. Per exemple, a la següent llista,

[80, 84, 76, 80, 92]

s’han registrat cinc lectures de temperatura per sobre de 75 °C.

D’altra banda, definim la normalització del valor d’una temperatura segons la fórmula

\[\frac{temperatura - mínim}{màxim - mínim}\]

On utilitzarem sempre 75 com a valor mínim i el màxim serà el valor més alt de totes les temperatures observades en el dia en què s’ha mesurat la temperatura.

Dissenya la següent funció desa-la al fitxer normalitzacio.py.

normalitzacio.normalitza(llect_dia)

Modifica la llista llect_dia de manera que cada element es canviï pel seu valor normalitzat i arrodonit a dos decimals.

Paràmetres:

llect_dia (list[int]) – Llista de lectures d’un dia amb les temperatures.

Per exemple:

>>> llect_dia1 = [80, 84, 76, 80, 92]
>>> normalitza(llect_dia1)
>>> llect_dia1
[0.29, 0.53, 0.06, 0.29, 1.0]

>>> llect_dia2 = []
>>> normalitza(llect_dia2)
>>> llect_dia2
[]

Nota

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


Es disposa també d’una llista de lectures que conté les lectures del sensor organitzades per dies. Cada element és una altra llista que representa les dades d’un dia específic on el primer element és un string que indica la data (en format YYYY-M-D, a on el mes i el dia poden tenir un o dos dígits) i el segon és una llista de lectures d’un dia amb el format indicat anteriorment.

>>> llect1 = [
...     ['2025-1-1', [80, 84, 76, 80, 92]],
...     ['2025-3-04', []],
...     ['2025-03-14', [80, 83]],
...     ['2025-7-25', [82, 84, 77, 80, 79, 75]]
... ]

Dissenya la següent funció desa-la al fitxer normalitzacio.py.

normalitzacio.transforma(llect)

Crea una nova llista amb les lectures diàries normalitzades i la data canviada pel mes amb format de dos dígits.

Paràmetres:

llect (list[list]) – Llista de lectures de diversos dies en què cada element correspon a la lectura d’un dia i és una subllista on el primer element és un string amb una data i el segon una llista de números amb temperatures.

Tipus de retorn:

list[list]

Retorna:

una nova llista amb la mateixa estructura que l’original, però amb la data canviada pel mes, expressat com a un string de dos dígits, i on cada temperatura s’ha normalitzat.

Aquesta funció ha de cridar a la funció normalitza().

Per exemple:

>>> llect1 = [
...     ['2025-1-1', [80, 84, 76, 80, 92]],
...     ['2025-3-04', []],
...     ['2025-03-14', [80, 83]],
...     ['2025-7-25', [82, 84, 77, 80, 79, 75]]
... ]

>>> lres1 = transforma(llect1)
>>> lres1
[['01', [0.29, 0.53, 0.06, 0.29, 1.0]], ['03', []], ['03', [0.62, 1.0]], ['07', [0.78, 1.0, 0.22, 0.56, 0.44, 0.0]]]

>>> llect2 = []
>>> lres2 = transforma(llect2)
>>> lres2
[]

Suggeriment

Fer una còpia de la llista original pot ajudar-te a resoldre aquest problema.

Nota

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

Disposes de solucions al fitxer normalitzacio.py.