C'est une continuation du précédent. De la collecte de données à la création / prédiction de modèles afin de prédire le temps objectif lors de la course d'un marathon complet (42,195 km) à partir des données au moment de la pratique de la course sous le titre de [Prédire le temps objectif du marathon complet par apprentissage automatique] J'écrirai une série de flux de.
Dans l'article précédent (Prédire le temps objectif d'un marathon complet avec apprentissage automatique-②: j'ai essayé de créer des données d'entraînement avec Garmin-), j'ai créé des données d'entraînement. Pour ce faire, nous avons décrit la procédure pour supprimer les éléments inutiles et ajouter les données nécessaires.
Cette fois, avant de créer un modèle de prédiction qui prédit le temps cible d'un marathon complet en utilisant les données d'entraînement créées, nous décrirons comment visualiser les données et voir la tendance générale. Certains d'entre eux sont faciles à faire dans Excel, mais j'espère que vous aurez l'opportunité de savoir comment écrire du code si vous voulez faire de même en Python. [pixtabay](https://pixabay.com/ja/photos/%E7%8C%AB-%E3%83%A1%E3%82%AC%E3%83%8D-%E7%9C%BC%E9 À partir de% 8F% A1-% E3% 83% 9A% E3% 83% 83% E3% 83% 88-984097 /)
Nous créons des données d'entraînement comprenant 14 éléments dont on pense qu'ils affectent la distance et le rythme pendant la course.
Exemple de données pour un enregistrement
Practice Time | Distance | Time | Average heart rate | Max heart rate | Aerobic TE | Average pitch | Average pace | Max pace | Average stride | temperature | Wind speed | Work | Average sleep time |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2020/2/23 16:18:00 | 8.19 | 0:59:35 | 161 | 180 | 3.6 | 176 | 00:07:16 | 00:06:11 | 0.78 | 7.9 | 9 | 44.5 | 6:12:00 |
Tout d'abord, importez ce dont vous pensez avoir besoin pour visualiser les données. Pour le moment, je pense que cela suffit.
RunnningDataVisualization.ipynb
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as mdates
import seaborn as sns
Vous pouvez dessiner un graphique du kilométrage mensuel avec le code suivant.
RunnningDataVisualization.ipynb
df = pd.read_csv(r'Activities.csv', index_col=["PracticeTime"],parse_dates=True)
#"PracticeTime"Pour lire comme un type de date, spécifiez l'index comme index d'argument_Faites-le avec col
#parse_Spécifiez True pour les dates et l'index_Définir l'élément spécifié par col comme index de type de date
#Dessinez un graphique
df_m = df.resample(rule="M").sum()
df_m_graph = df_m['Distance']
df_m_graph.plot.bar()
#Définir divers formats d'affichage des graphiques
plt.title("Distance per month", fontsize = 22) #Donnez au graphique un nom de titre
plt.grid(True) #Ajouter une ligne d'échelle au graphique
plt.xlabel("month", fontsize = 15) #Étiqueter l'axe horizontal du graphique
plt.ylabel("km", fontsize = 15) #Étiqueter l'axe vertical du graphique
plt.yticks( np.arange(0, 60, 5) ) #Ajuster la taille du graphique
Résultat de l'exécution
Si vous regardez comme ça, vous pouvez voir à quel point vous n'avez pas pratiqué pendant les mois chauds de l'été.
Ensuite, je vais dessiner un diagramme de dispersion pour voir s'il existe une corrélation entre l'allure et le pas par km. De manière générale, si le rythme ralentit, la hauteur (pas par minute) semble diminuer, mais qu'en est-il de la réalité?
RunnningDataVisualization.ipynb
df = df.sort_values("Average pace") #Trier le rythme par ordre de vitesse
plt.scatter(df['Average pace'], df['Average pitch'],s=40 ,marker="*", linewidths="4", edgecolors="orange") #Dessinez un diagramme de dispersion
plt.title("Scatter plot of pace and pitch", fontsize = 22)
plt.ylabel('Average pitch', fontsize = 15)
plt.xlabel('Average pace', fontsize = 15)
plt.grid(True)
plt.xticks(rotation=90)
plt.figure(figsize=(50, 4))
Résultat de l'exécution
Vous pouvez voir que le ton est différent de temps en temps, que le rythme soit rapide ou lent.
Alors qu'en est-il de la relation entre le rythme et la foulée? Si le rythme ralentit, la foulée (longueur de pas par pas) est susceptible de diminuer.
RunnningDataVisualization.ipynb
df = df.sort_values("Average pace")
plt.scatter(df['Average pace'], df['Average stride'],s=40 ,marker="*", linewidths="4", edgecolors="blue")
plt.title("Scatter plot of pace and stride", fontsize = 22)
plt.ylabel('Average stride', fontsize = 15)
plt.xlabel('Average pace', fontsize = 15)
plt.grid(True)
plt.xticks(rotation=90)
plt.figure(figsize=(10, 10),dpi=200)
plt.show()
Résultat de l'exécution
Contrairement au diagramme de dispersion du rythme et de la hauteur précédent, vous pouvez voir que la collection de points est en quelque sorte en pente descendante. En d'autres termes, on peut lire que plus le rythme est lent, plus la foulée est petite jusqu'à 25 cm.
Quand je cours beaucoup de distance, il y aura toujours un moment où le rythme ralentit, mais était-ce une des causes? Vous pouvez être convaincu en visualisant avec Python. ←
Enfin, découvrons le coefficient de corrélation entre chaque quantité de caractéristiques. Corrélation avec le kilométrage, la fréquence cardiaque, etc. dans les quatre quantités de caractéristiques (température, vitesse du vent, heures de travail hebdomadaires, temps de sommeil moyen) ajoutées aux données d'entraînement par moi-même en plus des données enregistrées par Garmin Si une forte quantité de caractéristiques apparaît, on considère qu'elle a une certaine influence sur le rythme et le kilométrage.
Cette fois, je ne savais pas comment calculer le coefficient de corrélation des données temporelles, donc je n'ai calculé que le coefficient de corrélation entre les quantités de caractéristiques des données numériques.
Lors du calcul du coefficient de corrélation, convertissez le type de fréquence cardiaque moyenne et les valeurs de fréquence cardiaque maximale lues sous forme de chaîne de caractères lors de la lecture de csv à partir de la chaîne de caractères en une valeur numérique.
RunnningDataVisualization.ipynb
#Conversion de type
df['Average heart rate'] = df['Average heart rate'].fillna(0).astype(np.int64)
df['Max heart rate'] = df['Max heart rate'].fillna(0).astype(np.int64)
#Visualisez le coefficient de corrélation
df_corr = df.corr()
print(df_corr) #Afficher le coefficient de corrélation entre les quantités d'entités dans une liste
fig = plt.subplots(figsize=(8, 8)) #Visualisation facile à comprendre
sns.heatmap(df_corr, annot=True,fmt='.2f',cmap='Blues',square=True)
Résultat de l'exécution
Des trois grandeurs de caractéristiques sur lesquelles nous nous sommes concentrés (température, vitesse du vent et heures de travail sur une base hebdomadaire), aucune d'entre elles n'avait un coefficient de corrélation absolu supérieur à 0,5 avec d'autres quantités de caractéristiques. En d'autres termes, on constate que ces trois caractéristiques n'affectent pas de manière significative le kilométrage ou le rythme.
Eh bien, si vous y réfléchissez, les jours trop chauds, trop froids ou venteux, vous ne pratiquez pas la course à pied en premier lieu, et si vous travaillez beaucoup pendant la semaine, vous aurez beaucoup de fatigue physique. Vous choisirez de ne pas vous entraîner à courir. Ce résultat est donc également convaincant.
Malheureusement, je n'ai pas pu trouver le montant de la fonctionnalité qui affecte le kilométrage et le rythme simplement en calculant le coefficient de corrélation, mais en visualisant tout en regardant diverses données comme celle-ci, je suis quand je cours. C'est une bonne occasion de revenir sur les tendances et comment pratiquer.
La prochaine fois, nous allons enfin créer un modèle de prédiction et faire pivoter le processus de prédiction.
Recommended Posts