Comment j'ai utilisé Python pour comprendre la durée de vie de ma batterie de mon téléphone et de ma tablette
Sommaire
Résumé
-
Python et l'analyse statistique peuvent être utilisés pour explorer la relation linéaire entre le temps d'écran et la durée de vie de la batterie sur les appareils mobiles.
-
Seaborn, Pandas et Python peuvent être utilisés pour tracer des régressions, tandis que Pingouin construira le modèle.
-
L'utilisation de la batterie était linéaire pour le téléphone et la tablette, démontrant la valeur pratique de l'analyse statistique dans Python.
Récemment, je voulais découvrir comment le temps d'écran du téléphone et des tablettes affectait la décharge de la batterie. Vous pourriez ne pas penser à aller à Python pour cela, mais ses outils de base des statistiques peuvent réellement fournir la réponse.
Peut-être que je fais partie de ces personnes qui semblent s'agiter sur la durée de vie de la batterie, bien que je ne pense pas que j'en ai besoin. J'ai toujours plus qu'assez à la fin de la journée avec mon téléphone et ma tablette Android et travaillant à la maison, je ne suis jamais très loin d'un débouché.
Il semble évident que le fait d'avoir l'écran pourrait utiliser davantage la batterie, mais j'étais curieux de savoir comment les deux étaient réellement liés. Serait-ce une relation linéaire? Cela pourrait-il être exponentiel, où l'utilisation de la batterie s'accélère rapidement?
Je m'intéresse récemment à l'analyse des données. J'avais suivi un cours de statistiques de base et de probabilité au collège, et j'avais d'abord rencontré le concept de régressions linéaires, où les points de données sont tracés le long de deux axes et une ligne est tracée à travers elles, dans un laboratoire de physique.
Lorsque j'ai remarqué que mon téléphone et ma tablette conservaient des statistiques sur le temps d'écran et l'utilisation de la batterie, je me suis souvenu de mon expérience antérieure. La calculatrice graphique TI que j'ai utilisée au collège est – quelque part dans ma maison, mais je n'ai plus besoin d'une calculatrice depuis que j'ai du python. J'ai décidé d'utiliser la gamme d'outils informatiques statistiques de Python pour déterminer la relation, le cas échéant, cette durée d'écran et la durée de vie de la batterie.
Formuler une hypothèse
Une partie des statistiques est le test d'hypothèse. C'est la clé d'une bonne science. Cela aurait peut-être été exagéré pour un petit projet comme celui-ci, mais je voulais être un bon statisticien et scientifique, ne serait-ce que pour un petit moment.
Dans les statistiques, vous formez une hypothèse nulle et une hypothèse alternative, également connue sous le nom de « H0 » et « H1 ».
L'hypothèse nulle est censée être quelque chose que vous pouvez rejeter et choisir l'hypothèse alternative si les preuves sous la forme d'un test statistique, garantissent le rejetant.
Dans le cas de l'heure d'écran et de la durée de vie de la batterie. En ce qui concerne la durée de vie de la batterie pour mon téléphone et ma tablette:
Hypothèse nulle (H0) |
Il n'y a pas de relation entre le temps d'écran et la durée de vie de la batterie. |
Hypothèse alternative (H1) |
Il existe une relation entre le temps d'écran et la durée de vie de la batterie. |
Avec les hypothèses nulles et alternatives définies, je pouvais procéder à la collecte et à l'analyse de mes données.
Mettre mes données dans Python
La première étape a été d'organiser mes données. Le système d'exploitation Python modifié sur mon téléphone et ma tablette Samsung maintient l'onglet sur l'utilisation de la batterie et le temps d'écran au cours de la semaine dernière.
J'ai renversé consciencieusement l'ouvrir ma tablette et mon téléphone sur leurs pages de diagnostic et copié les données dans une feuille de calcul de calcul LibreOffice, puis je l'ai enregistrée en tant que fichier CSV.
J'ai créé des colonnes pour les temps d'écran signalés pour mon téléphone et ma tablette, avec deux colonnes chacune pour les deux appareils. J'ai pensé que le moyen le plus simple de coder le temps d'écran était de multiplier les heures par 60 et d'ajouter les minutes à cela, donnant le nombre total de minutes sur l'écran du téléphone. (Je les avais codés à l'origine comme des heures et des minutes dans la feuille de calcul, mais Pandas ne semblait pas aimer le format, donc je l'ai finalement recodé.)
J'ai utilisé la bibliothèque Pandas de Python pour lire dans les données. Pandas peut lire de nombreux formats de données, y compris les fichiers CSV. Pandas facilite le travail avec des données disposées en lignes et colonnes, ce qui facilite la réalisation des feuilles de calcul à Python.
J'ai ouvert un cahier Jupyter et exécuté quelques commandes Python pour configurer l'environnement:
import numpy as np
import pandas as pd
import seaborn as sns
import pingouin as pg
%matplotlib inline
En rapport
Comment commencer à créer des cahiers interactifs dans Jupyter
Mélangez librement le texte et le code dans vos programmes dans un nouveau style de programmation.
Ces commandes ont configuré les bibliothèques que j'allais utiliser. Numpy est pratique pour toutes sortes d'opérations numériques, y compris les statistiques. C'est un peu comme une couverture de sécurité statistique, donc je l'importe toujours chaque fois que je travaille avec des données. La deuxième instruction importe évidemment des pandas, mais abrégée comme « PD » juste pour que je n'ai pas à continuer de taper « pandas ». SeaBorn est un outil fantastique pour fabriquer des parcelles statistiques, et c'est ce que j'ai utilisé pour faire mes parcelles de dispersion et mes régressions. Pingouin (français pour « Penguin ») est une bibliothèque qui fait des tests statistiques, et c'est ce que j'ai utilisé pour construire mes modèles et voir à quel point ils étaient bons à mes données.
La dernière ligne de ce bloc est de faire apparaître tous les parcelles en ligne dans le cahier Jupyter. Sinon, ils apparaîtront dans une fenêtre séparée.
Avec toutes les bibliothèques nécessaires chargées, je pourrais créer un Pandas DataFrame avec mes données:
battery = pd.read_csv("data/device_batteries.csv")
Je pourrais inspecter mon nouveau DataFrame avec la fonction de tête:
battery.head()
Cela montre les premières lignes des données et me permet de voir comment elle est organisée. Bien sûr, je le savais déjà depuis que je l'ai créé. Cette commande est utile pour tous les ensembles de données que je télécharge dans des endroits comme Kaggle.
L'étape suivante consistait à obtenir des statistiques descriptives de mon ensemble de données. La méthode de décrire de mon dataframe fait exactement cela:
batteries.describe()
Cela imprime des statistiques descriptives de base comme le nombre, la moyenne, l'écart type, les valeurs minimales et maximales, ainsi que le quartile inférieur ou le 25e centile, la médiane (50e centile), et le quartile supérieur ou le 75e centile pour toutes les colonnes numériques dans le cadre de données. Toutes ces statistiques m'aident à avoir une idée de la configuration du pays.
Tracer la régression
Maintenant, avec mes données entrées et importées, il était temps d'explorer les relations.
J'ai commencé par faire un tracé de dispersion de l'heure d'écran de mon téléphone par rapport à la fuite de la batterie en point de pourcentage:
sns.relplot(x='phone_screen_on',y='phone_battery',data=battery)
Cela indique à Seaborn de faire l'intrigue en utilisant le temps d'écran comme l'axe des x et la batterie qui s'écoule comme l'axe y. Si vous regardez attentivement, les points de données semblent s'aligner sur presque une ligne droite. J'ai décidé de tracer la régression et de voir à quel point une ligne s'adapterait:
sns.regplot(x='phone_screen_on',y='phone_battery',data=battery)>
La ligne s'adapte assez bien.
Mais comment pourrais-je vérifier l'ajustement et comment pourrais-je reconstruire l'équation utilisée pour produire la ligne? C'est là que Pingouin entre en jeu. Plusieurs autres bibliothèques vous permettent de faire des tests statistiques et de faire des régressions, mais Pingouin est mon préféré parce que je le trouve le plus facile à utiliser.
J'ai utilisé la fonction de régression linéaire de Pingouin sur le temps d'écran par rapport à la vidange de la batterie:
pg.linear_regression(battery('phone_screen_on'),battery('phone_battery'))
Pingouin produit une table. Voici ce que cela signifie. Les chiffres vraiment importants sont sur le côté de gauche. Si vous vous souvenez de votre algèbre, l'équation d'une ligne droite est y = mx + b. Avec une régression linéaire, nous retournons un peu pour faire une « équation normale » de y = b + mx, ou plutôt y = a + bx. L'origine Y, ou où la ligne traverse l'axe y, est le A, étiqueté « Interception » est de 5,339232, et le coefficient de X ou le temps d'écran, est de 0,201630, qui détermine la pente ou la pente de la ligne. L'équation de notre modèle est donc y = 5,339232 + 0,201630x.
Les autres chiffres nous indiquent à quel point cette ligne est bonne. « SE » signifie « erreur standard » et mesure à quelle distance la ligne est des points de données. Plus l'erreur standard est faible, mieux l'ajustement est faible. Pour le temps d'écran, la valeur est d'environ 0,20, ce qui signifie que la ligne est un bon ajustement pour les points de données. Le score T est la statistique t des mesures de test t de l'élève teste l'hypothèse que le coefficient de corrélation, mentionné ci-dessous, est 0, ce qui signifie aucune corrélation. Une valeur de plus de 2 ou moins de -2 signifie qu'un résultat est statistiquement significatif. La valeur p est la probabilité que la statistique de l'échantillon, dans ce cas, la valeur t, soit aussi extrême ou plus extrême si l'hypothèse nulle était vraie. La plupart des statisticiens utilisent un certain seuil, généralement avec un maximum de 0,05, pour accepter ou rejeter l'hypothèse nulle. Étant donné que la statistique T est supérieure à 2 et que la valeur p est inférieure à 0,05, nous pouvons rejeter l'hypothèse nulle qu'il n'y a pas de relation entre le temps d'écran et la vidange de la batterie aux niveaux de signifigance .05 et 0,01.
Les « R2 » et « R2_Adusted » sont les carrés du coefficient de corrélation. Une valeur élevée ici signifie également que la ligne est un bon ajustement. Les deux dernières colonnes sont des intervalles de confiance, qui représentent des zones où les valeurs de l'équation pourraient atterrir à 2,7% et 97,5% de niveaux de confiance. Les zones ombrées des parcelles de régression représentent également des intervalles de confiance.
Maintenant que nous avons un modèle, nous pouvons brancher des valeurs dans la variable de temps d'écran pour prédire la quantité de batterie qui s'écoulera.
Je peux définir une fonction Python pour ceci:
def phone_battery_usage(minutes):
return 5.339232 + 0.201630 * minutes
Pour calculer l'utilisation pendant trois heures ou 180 minutes:
phone_battery_usage(180)
Faisons la même chose pour ma tablette. D'abord le tracé de dispersion:
sns.relplot(x='tablet_screen_on',y='tablet_battery',data=battery)
Encore une fois, il semble y avoir une corrélation linéaire. Plotons la régression:
sns.regplot(x='tablet_screen_on',y='tablet_battery',data=battery)
Un autre bon ajustement. Essayons une régression linéaire de Pingouin:
pg.linear_regression(battery('tablet_screen_on'),battery('tablet_battery'))
Le modèle est une utilisation de la batterie = 5,017013 + 0,112511 (temps d'écran). C'est un bon ajustement, avec T = 6,202436, p = 0,001591 et R² = 0,884979.
Ce que j'ai appris de mon petit projet scientifique
Une chose qui m'a surpris, c'est comment les relations linéaires ont maintenu dans le monde réel. L'utilisation de la batterie était linéaire pour mon téléphone et mon tablette. Cela peut s'aligner avec des recherches que j'ai faites sur la fuite des batteries des batteries au lithium-ion, où elles s'écoulent plus rapidement lorsque vous commencez à les utiliser et vers la fin de la charge, mais la courbe de décharge reste linéaire entre les deux, selon la batterie UFine. Ce projet prouve la valeur de l'analyse statistique.
Il offre un moyen plus rigoureux de répondre aux questions, mais avec des logiciels modernes comme Python, Seaborn et Pingouin, c'est plus facile que jamais pour les chercheurs et les gens ordinaires comme moi à explorer.