Ricerca nel sito web

Come ho usato Python per capire la durata della batteria del mio telefono e tablet


Sommario

  • Python e l'analisi statistica possono essere utilizzati per esplorare la relazione lineare tra il tempo di accensione dello schermo e la durata della batteria sui dispositivi mobili.
  • Seaborn, panda e Python possono essere utilizzati per tracciare le regressioni, mentre Pingouin costruirà il modello.
  • L'utilizzo della batteria è stato lineare sia per il telefono che per il tablet, dimostrando il valore pratico dell'analisi statistica in Python.

Di recente, volevo scoprire in che modo il tempo trascorso davanti allo schermo del telefono e del tablet influiva sul consumo della batteria. Potresti non pensare di andare su Python per questo, ma i suoi strumenti statistici di base possono effettivamente fornire la risposta.

La mia domanda di ricerca: in che modo il tempo di accensione dello schermo e la durata della batteria sono correlati?

Forse sono una di quelle persone che sembra agonizzare per la durata della batteria, anche se non credo di averne effettivamente bisogno. Alla fine della giornata ne ho sempre più che a sufficienza sia con il mio telefono Android che con il mio tablet e lavorando da casa, non sono mai molto lontano da una presa di corrente.

Sembra ovvio che avere lo schermo acceso potrebbe consumare di più la batteria, ma ero curioso di sapere come i due fossero effettivamente correlati. Potrebbe essere una relazione lineare? Potrebbe essere esponenziale, dove l'uso della batteria accelera rapidamente?

Di recente mi sono interessato all'analisi dei dati. Avevo seguito un corso di statistica di base e probabilità all'università, e mi ero imbattuto per la prima volta nel concetto di regressione lineare, in cui i punti dati vengono tracciati lungo due assi e una linea viene tracciata attraverso di essi, in un laboratorio di fisica.

Quando ho notato che sia il mio telefono che il mio tablet tenevano statistiche sul tempo di accensione dello schermo e sull'utilizzo della batteria, mi sono ricordato della mia esperienza precedente. La calcolatrice grafica TI che usavo al college è... da qualche parte in casa mia, ma non ho più bisogno di una calcolatrice da quando ho Python. Ho deciso di utilizzare la serie di strumenti di calcolo statistico di Python per capire quale relazione, se esisteva, avesse il tempo di accensione dello schermo e la durata della batteria.

Formulare un'ipotesi

Una parte della statistica è la verifica delle ipotesi. Questa è la chiave per una buona scienza. Questo potrebbe essere stato eccessivo per un piccolo progetto come questo, ma volevo essere un buon statistico e scienziato, anche se solo per un po'.

In statistica, si formano un'ipotesi nulla e un'ipotesi alternativa, nota anche come "H0" e "H1".

Si suppone che l'ipotesi nulla sia qualcosa che si può rifiutare e scegliere l'ipotesi alternativa se l'evidenza, sotto forma di test statistico, giustifica il suo rifiuto.

In caso di tempo di accensione dello schermo e durata della batteria. Per quanto riguarda la durata della batteria del mio telefono e tablet:

Ipotesi nulla (H0)

Non esiste alcuna relazione tra il tempo di accensione dello schermo e la durata della batteria.

Ipotesi alternativa (H1)

Esiste una relazione tra il tempo di accensione dello schermo e la durata della batteria.

Definite le ipotesi nulle e alternative, ho potuto procedere con la raccolta e l'analisi dei miei dati.

Inserire i miei dati in Python

Il primo passo è stato organizzare i miei dati. Il sistema operativo Python modificato sul mio telefono e tablet Samsung tiene sotto controllo l'utilizzo della batteria e il tempo di accensione dello schermo nell'ultima settimana.

Ho diligentemente aperto il mio tablet e il mio telefono alle loro pagine di diagnostica e ho copiato i dati in un foglio di calcolo di LibreOffice Calc, quindi li ho salvati come file CSV.

Ho creato colonne per i tempi di accensione dello schermo riportati per il mio telefono e tablet, con due colonne ciascuna per entrambi i dispositivi. Ho pensato che il modo più semplice per codificare il tempo di accensione dello schermo fosse moltiplicare le ore per 60 e aggiungere i minuti, dando il numero totale di minuti in cui lo schermo del telefono era acceso. (Inizialmente li avevo codificati come ore e minuti nel foglio di calcolo, ma ai panda non sembrava piacere il formato, quindi alla fine l'ho ricodificato.)

Ho usato la libreria panda di Python per leggere i dati. I panda possono leggere molti formati di dati, inclusi i file CSV. pandas semplifica il lavoro con i dati disposti in righe e colonne, il che semplifica il passaggio dai fogli di calcolo a Python.

Ho aperto un notebook Jupyter ed eseguito alcuni comandi Python per configurare l'ambiente:

        
import numpy as np
import pandas as pd
import seaborn as sns
import pingouin as pg
%matplotlib inline
    

Questi comandi configurano le librerie che avrei utilizzato. NumPy è utile per tutti i tipi di operazioni numeriche, comprese le statistiche. È un po' come una coperta di sicurezza statistica, quindi la importo sempre ogni volta che lavoro con i dati. La seconda affermazione ovviamente importa pandas, ma abbreviata in "pd" solo per non dover continuare a digitare "pandas". Seaborn è uno strumento fantastico per creare grafici statistici, ed è quello che ho usato per creare i miei grafici a dispersione e regressioni. Pingouin (in francese "pinguino") è una libreria che esegue test statistici, ed è quello che ho usato per costruire i miei modelli e vedere quanto fossero adatti ai miei dati.

L'ultima riga di questo blocco serve a far apparire tutti i grafici in linea nel taccuino di Jupyter. In caso contrario, appariranno in una finestra separata.

Con tutte le librerie necessarie caricate, ho potuto creare un dataframe di panda con i miei dati:

        
battery = pd.read_csv("data/device_batteries.csv")
    

Ho potuto ispezionare il mio nuovo dataframe con la funzione head:

        
battery.head()
    

Questo mostra le prime righe dei dati e mi permette di vedere come sono organizzati. Certo, lo sapevo già da quando l'ho creato. Questo comando è utile per tutti i set di dati che scarico da luoghi come Kaggle.

Il passo successivo è stato quello di ottenere alcune statistiche descrittive dal mio set di dati. Il metodo describe del mio dataframe fa proprio questo:

        
batteries.describe()
    

In questo modo vengono stampate statistiche descrittive di base come il conteggio, la media, la deviazione standard, i valori minimo e massimo, nonché il quartile inferiore o 25° percentile, la mediana (50° percentile) e il quartile superiore o il 75° percentile per tutte le colonne numeriche nel dataframe. Tutte queste statistiche mi aiutano a farmi un'idea della conformazione del terreno.

Tracciare la regressione

Ora con i miei dati inseriti e importati, era il momento di esplorare le relazioni.

Ho iniziato facendo un grafico a dispersione del tempo di accensione dello schermo del mio telefono rispetto al consumo della batteria in punti percentuali:

        
sns.relplot(x='phone_screen_on',y='phone_battery',data=battery)
    

Questo dice a Seaborn di fare il grafico usando il tempo di accensione dello schermo come asse x e il consumo della batteria come asse y. Se si guarda da vicino, i punti dati sembrano allinearsi quasi in linea retta. Ho deciso di tracciare la regressione e vedere quanto bene si adatterebbe una linea:

        
sns.regplot(x='phone_screen_on',y='phone_battery',data=battery)>
    

La linea si adattava abbastanza bene.

Ma come potrei verificare l'adattamento e come potrei ricostruire l'equazione utilizzata per produrre la linea? È qui che entra in gioco Pingouin. Diverse altre librerie ti permettono di fare test statistici e fare regressioni, ma Pingouin è la mia preferita perché la trovo la più facile da usare.

Ho usato la funzione di regressione lineare di Pingouin sul tempo di accensione dello schermo rispetto al consumo della batteria:

        
pg.linear_regression(battery['phone_screen_on'],battery['phone_battery'])
    

Pingouin produce un tavolo. Ecco cosa significa. I numeri veramente importanti sono all'estrema sinistra. Se ricordi la tua algebra, l'equazione di una retta è y=mx + b. Con la regressione lineare, capovolgiamo un po' questo per creare una "equazione normale" di y=b + mx, o meglio y=a + bx. L'intercetta y, o il punto in cui la linea attraversa l'asse y, è la a, etichettata come "intercetta" è 5,339232, e il coefficiente di x o il tempo di accensione dello schermo è 0,201630, che determina la pendenza o la ripidità della linea. Quindi l'equazione del nostro modello è y=5,339232 + 0,201630x.

Gli altri numeri ci dicono quanto sia adatta questa linea. "SE" sta per "errore standard" e misura la distanza della linea dai punti dati. Più basso è l'errore standard, migliore è l'adattamento. Per il tempo di accensione dello schermo, il valore è di circa 0,20, il che significa che la linea si adatta bene ai punti dati. Il punteggio T è la statistica t delle misure del test t di Student verifica l'ipotesi che il coefficiente di correlazione, menzionato di seguito, sia 0, il che significa nessuna correlazione. Un valore superiore a 2 o inferiore a -2 significa che un risultato è statisticamente significativo. Il valore p è la probabilità che la statistica del campione, in questo caso il valore t, sarebbe altrettanto estrema o più estrema se l'ipotesi nulla fosse vera. La maggior parte degli statistici utilizza una certa soglia, di solito con un massimo di 0,05, per accettare o rifiutare l'ipotesi nulla. Poiché la statistica t è maggiore di 2 e il valore p è inferiore a 0,05, possiamo rifiutare l'ipotesi nulla che non ci sia alcuna relazione tra il tempo di accensione dello schermo e il consumo della batteria sia a 0,05 che a 0,01.

"r2" e "r2_adusted" sono i quadrati del coefficiente di correlazione. Un valore alto qui significa anche che la linea è una buona misura. Le ultime due colonne sono gli intervalli di confidenza, che rappresentano le aree in cui i valori dell'equazione potrebbero arrivare a livelli di confidenza del 2,7% e del 97,5%. Le aree ombreggiate nei grafici di regressione rappresentano anche gli intervalli di confidenza.

Ora che abbiamo un modello, possiamo inserire i valori nella variabile del tempo di accensione dello schermo per prevedere quanto si scaricherà la batteria.

Posso definire una funzione Python per questo:

        
def phone_battery_usage(minutes):
    return 5.339232 + 0.201630 * minutes
    

Per calcolare l'utilizzo per tre ore o 180 minuti:

        
phone_battery_usage(180)
    

Facciamo la stessa cosa per il mio tablet. Per prima cosa il grafico a dispersione:

        
sns.relplot(x='tablet_screen_on',y='tablet_battery',data=battery)
    

Ancora una volta, sembra esserci una correlazione lineare. Tracciamo la regressione:

        
sns.regplot(x='tablet_screen_on',y='tablet_battery',data=battery)
    

Un'altra buona vestibilità. Proviamo una regressione lineare di Pingouin:

        
pg.linear_regression(battery['tablet_screen_on'],battery['tablet_battery'])
    

Il modello è consumo della batteria=5,017013 + 0,112511 (tempo di accensione dello schermo). È una buona corrispondenza, con T=6,202436, p=0,001591 e r²=0,884979.

Cosa ho imparato dal mio piccolo progetto scientifico

Una cosa che mi ha sorpreso è stata la reggenza delle relazioni lineari nel mondo reale. L'utilizzo della batteria è stato lineare sia per il mio telefono che per il tablet. Questo potrebbe essere in linea con alcune ricerche che ho fatto sul consumo della batteria delle batterie agli ioni di litio, dove si scaricano più velocemente quando si inizia a usarle e verso la fine della carica, ma la curva di scarica rimane lineare nel mezzo, secondo Ufine Battery. Questo progetto dimostra il valore dell'analisi statistica.

Offre un modo più rigoroso di rispondere alle domande, ma con software moderni come Python, Seaborn e Pingouin, è più facile che mai esplorare per i ricercatori e le persone comuni come me.