Comment j’ai utilisé Python pour déterminer l’autonomie de la batterie de mon téléphone et de ma tablette
Résumé
- Python et l’analyse statistique peuvent être utilisés pour explorer la relation linéaire entre le temps passé à l’écran et l’autonomie 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, ce qui démontre la valeur pratique de l’analyse statistique en Python.
Récemment, j’ai voulu savoir comment le temps d’écran passé sur les téléphones et les tablettes affectait l’épuisement de la batterie. Vous ne pensez peut-être pas à aller à Python pour cela, mais ses outils de statistiques de base peuvent en fait fournir la réponse.
Ma question de recherche : Quel est le lien entre le temps d’allumage de l’écran et l’autonomie de la batterie ?
Peut-être que je fais partie de ces personnes qui semblent se tourmenter sur la durée de vie de la batterie, même si je ne pense pas en avoir vraiment besoin. J'en ai toujours plus qu'assez à la fin de la journée avec mon téléphone et ma tablette Android et en travaillant à domicile, je ne suis jamais très loin d'une prise.
Il semble évident que le fait d’avoir l’écran allumé pourrait utiliser davantage la batterie, mais j’étais curieux de savoir comment les deux étaient réellement liés. Pourrait-il s’agir d’une relation linéaire ? Pourrait-il être exponentiel, où l’utilisation de la batterie s’accélère rapidement ?
Je me suis intéressé à l'analyse de données récemment. J'avais suivi un cours de statistiques de base et de probabilités à l'université, et j'avais découvert pour la première fois le concept de régressions linéaires, où des points de données sont tracés le long de deux axes et une ligne est tracée à travers eux, dans un laboratoire de physique.
Lorsque j’ai remarqué que mon téléphone et ma tablette conservaient des statistiques sur le temps d’affichage de l’écran et l’utilisation de la batterie, je me suis souvenu de mon expérience précédente. La calculatrice graphique TI que j'utilisais à l'université se trouve quelque part dans ma maison, mais je n'ai plus besoin d'une calculatrice depuis que j'ai Python. J'ai décidé d'utiliser la gamme d'outils de calcul statistique de Python pour déterminer quelle relation, le cas échéant, entre le temps passé devant l'écran et l'autonomie de la batterie.
Formulation d’une hypothèse
Une partie des statistiques est la vérification d’hypothèses. C’est la clé d’une bonne science. C’était peut-être exagéré pour un petit projet comme celui-ci, mais je voulais être un bon statisticien et un bon scientifique, même si ce n’était que pour un petit moment.
En 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 la preuve, sous la forme d’un test statistique, justifie de la rejeter.
Dans le cas du temps d’allumage de l’écran et de l’autonomie de la batterie. En ce qui concerne l’autonomie de la batterie de mon téléphone et de ma tablette :
Hypothèse nulle (H0) | Il n’y a pas de relation entre le temps d’allumage de l’écran et l’autonomie de la batterie. |
Hypothèse alternative (H1) | Il existe une relation entre le temps d’allumage de l’écran et l’autonomie de la batterie. |
Une fois les hypothèses nulles et alternatives définies, j’ai pu procéder à la collecte et à l’analyse de mes données.
Intégrer 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 garde un œil sur l’utilisation de la batterie et le temps passé à l’écran au cours de la semaine écoulée.
J’ai consciencieusement ouvert ma tablette et mon téléphone sur leurs pages de diagnostic et j’ai copié les données dans une feuille de calcul LibreOffice Calc, puis je les ai enregistrées sous forme de 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 la façon la plus simple de coder le temps d'allumage de l'écran était de multiplier les heures par 60 et d'ajouter les minutes à cela, ce qui donne le nombre total de minutes pendant lesquelles l'écran du téléphone était allumé. (À l'origine, je les avais codés en heures et minutes dans la feuille de calcul, mais les pandas ne semblaient pas aimer le format, alors je l'ai finalement recodé.)
J'ai utilisé la bibliothèque pandas de Python pour lire les données. pandas peut lire de nombreux formats de données, y compris les fichiers CSV. pandas facilite l’utilisation de données disposées en rangées et en colonnes, ce qui permet de passer facilement des tableurs à Python.
J’ai ouvert un notebook 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
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 déclaration importe évidemment des pandas, mais abrégée en « » juste pour que je n'aie pas à continuer à taper « pandas ». Seaborn est un outil fantastique pour faire des graphiques statistiques, et c'est ce que j'ai utilisé pour faire mes nuages de points et mes régressions. Pingouin 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 bien ajustés à mes données.
La dernière ligne de ce bloc permet d’afficher tous les tracés en ligne dans le carnet Jupyter. Sinon, ils apparaîtront dans une fenêtre séparée.
Avec toutes les bibliothèques nécessaires chargées, j’ai pu créer un dataframe pandas avec mes données :
battery = pd.read_csv("data/device_batteries.csv")
J’ai pu inspecter mon nouveau dataframe avec la fonction head :
battery.head()
Cela montre les premières lignes des données et me permet de voir comment elles sont organisées. Bien sûr, je le savais déjà puisque je l’ai créé. Cette commande est utile pour tous les ensembles de données que je télécharge à partir d’endroits comme Kaggle.
L’étape suivante consistait à obtenir des statistiques descriptives à partir de mon ensemble de données. C’est exactement ce que fait la méthode describe de mon dataframe :
batteries.describe()
Cela imprime des statistiques descriptives de base telles que le nombre, la moyenne, l’écart type, les valeurs minimale et maximale, ainsi que le quartile inférieur ou le 25e centile, la médiane (50e centile) et le quartile supérieur ou 75e centile pour toutes les colonnes numériques de la trame de données. Toutes ces statistiques m’aident à me faire une idée de la configuration du terrain.
Tracer la régression
Maintenant que mes données sont saisies et importées, il était temps d’explorer les relations.
J'ai commencé par faire un nuage de points du temps d'allumage de l'écran de mon téléphone par rapport à l'épuisement de la batterie en points de pourcentage :
sns.relplot(x='phone_screen_on',y='phone_battery',data=battery)
Cela indique à Seaborn de faire le graphique en utilisant le temps d’écran comme axe x et l’épuisement de la batterie comme axe y. Si vous regardez attentivement, les points de données semblent s’aligner presque en ligne droite. J’ai décidé de tracer la régression et de voir comment une ligne s’adapterait :
sns.regplot(x='phone_screen_on',y='phone_battery',data=battery)>
La ligne s’ajustait plutôt bien.
Mais comment pourrais-je vérifier l’ajustement et comment pourrais-je reconstruire l’équation utilisée pour produire la droite ? C'est là qu'intervient Pingouin. Plusieurs autres librairies permettent de faire des tests statistiques et de faire des régressions, mais Pingouin est mon préféré car je le trouve le plus facile à utiliser.
J'ai utilisé la fonction de régression linéaire de Pingouin sur le temps d'allumage de l'écran par rapport à l'épuisement de la batterie :
pg.linear_regression(battery['phone_screen_on'],battery['phone_battery'])
Pingouin sort une table. Voici ce que cela signifie. Les numéros vraiment importants se trouvent tout à l’autre gauche. Si vous vous souvenez de votre algèbre, l’équation d’une droite est y=mx + b. Avec la régression linéaire, nous inversons un peu cela pour faire une « équation normale » de y=b + mx, ou plutôt y=a + bx. L’ordonnée à l’origine, c’est-à-dire l’endroit où la droite croise l’axe y, est le a, étiqueté « ordonnée à l’origine » est 5,339232, et le coefficient de x, ou le temps de mise à l’écran, est de 0,201630, ce 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 bien ajustée. « SE » signifie « erreur standard » et mesure la distance entre la ligne et les points de données. Plus l’erreur type est faible, meilleur est l’ajustement. Pour le temps de mise à l’écran, la valeur est d’environ 0,20, ce qui signifie que la ligne est bien adaptée aux points de données. Le score T est la statistique t des mesures du test t de Student qui teste l'hypothèse selon laquelle le coefficient de corrélation, mentionné ci-dessous, est de 0, ce qui signifie qu'il n'y a pas de corrélation. Une valeur supérieure à 2 ou inférieure à -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 selon laquelle il n'y a pas de relation entre le temps d'allumage de l'écran et l'épuisement de la batterie aux niveaux de signification de 0,05 et de 0,01.
Le « r2 » et le « r2_adusted » sont les carrés du coefficient de corrélation. Une valeur élevée signifie également que la ligne est bien adaptée. Les deux dernières colonnes sont des intervalles de confiance, qui représentent des zones où les valeurs de l’équation pourraient se situer à des niveaux de confiance de 2,7 % et 97,5 %. Les zones ombrées dans les graphiques de régression représentent également les intervalles de confiance.
Maintenant que nous avons un modèle, nous pouvons insérer des valeurs dans la variable de temps d’allumage de l’écran pour prédire combien la batterie va se décharger.
Je peux définir une fonction Python pour cela :
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. Tout d’abord, le nuage de points :
sns.relplot(x='tablet_screen_on',y='tablet_battery',data=battery)
Encore une fois, il semble y avoir une corrélation linéaire. Tracons 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 utilise la batterie=5,017013 + 0,112511 (temps d’allumage de l’é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 à quel point les relations linéaires se sont maintenues dans le monde réel. L’utilisation de la batterie était linéaire pour mon téléphone et ma tablette. Cela pourrait s’aligner avec certaines recherches que j’ai faites sur l’épuisement de la batterie des batteries lithium-ion, où elles se déchargent 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 Ufine Battery. Ce projet prouve la valeur de l’analyse statistique.
Il offre une façon plus rigoureuse de répondre aux questions, mais avec des logiciels modernes comme Python, Seaborn et Pingouin, il est plus facile que jamais pour les chercheurs et les gens ordinaires comme moi d'explorer.