Es ist eine Fortsetzung des vorherigen. Von der Datenerfassung bis zur Modellerstellung / -vorhersage, um die Zielzeit beim Laufen eines vollständigen Marathons (42,195 km) anhand der Daten zum Zeitpunkt des Lauftrainings unter dem Titel [Vorhersage der Zielzeit des vollständigen Marathons durch maschinelles Lernen] vorherzusagen. Ich werde eine Reihe von Fluss von schreiben.
Im vorherigen Artikel (Vorhersage der Zielzeit eines vollständigen Marathons mit maschinellem Lernen - ②: Ich habe versucht, Trainingsdaten mit Garmin- zu erstellen) habe ich Trainingsdaten erstellt. Zu diesem Zweck haben wir das Verfahren zum Löschen unnötiger Elemente und zum Hinzufügen der erforderlichen Daten beschrieben.
Bevor wir dieses Mal ein Vorhersagemodell erstellen, das die Zielzeit eines vollständigen Marathons anhand der erstellten Trainingsdaten vorhersagt, werden wir beschreiben, wie die Daten visualisiert und der Gesamttrend angezeigt werden. Einige davon sind in Excel einfach zu erledigen, aber ich hoffe, Sie haben die Möglichkeit zu wissen, wie man Code schreibt, wenn Sie dasselbe in Python tun möchten. [pixtabay](https://pixabay.com/ja/photos/%E7%8C%AB-%E3%83%A1%E3%82%AC%E3%83%8D-%E7%9C%BC%E9 Von% 8F% A1-% E3% 83% 9A% E3% 83% 83% E3% 83% 88-984097 /)
Wir erstellen Trainingsdaten mit 14 Elementen, von denen angenommen wird, dass sie die Distanz und das Tempo beim Laufen beeinflussen.
Beispieldaten für einen Datensatz
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 |
Importieren Sie zunächst das, was Sie für die Visualisierung der Daten benötigen. Vorerst denke ich, dass dies ausreicht.
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
Mit dem folgenden Code können Sie ein Diagramm der monatlichen Kilometerleistung zeichnen.
RunnningDataVisualization.ipynb
df = pd.read_csv(r'Activities.csv', index_col=["PracticeTime"],parse_dates=True)
#"PracticeTime"Geben Sie den Index als Argumentindex an, um ihn als Datumstyp zu lesen_Mach es mit col
#parse_Geben Sie True für Datum und Index an_Legen Sie das durch col angegebene Element als Datumstypindex fest
#Zeichnen Sie ein Diagramm
df_m = df.resample(rule="M").sum()
df_m_graph = df_m['Distance']
df_m_graph.plot.bar()
#Stellen Sie verschiedene Grafikanzeigeformate ein
plt.title("Distance per month", fontsize = 22) #Geben Sie dem Diagramm einen Titelnamen
plt.grid(True) #Fügen Sie dem Diagramm eine Skalierungslinie hinzu
plt.xlabel("month", fontsize = 15) #Beschriften Sie die horizontale Achse des Diagramms
plt.ylabel("km", fontsize = 15) #Beschriften Sie die vertikale Achse des Diagramms
plt.yticks( np.arange(0, 60, 5) ) #Passen Sie die Größe des Diagramms an
Ausführungsergebnis
Wenn Sie es so betrachten, können Sie sehen, dass Sie in den heißen Sommermonaten nicht üben konnten.
Als nächstes werde ich ein Streudiagramm zeichnen, um zu sehen, ob es eine Korrelation zwischen dem Tempo und der Neigung pro km gibt. Wenn sich das Tempo verlangsamt, nimmt die Tonhöhe (Schritte pro Minute) im Allgemeinen ab, aber was ist mit der Realität?
RunnningDataVisualization.ipynb
df = df.sort_values("Average pace") #Sortieren Sie das Tempo in der Reihenfolge der Geschwindigkeit
plt.scatter(df['Average pace'], df['Average pitch'],s=40 ,marker="*", linewidths="4", edgecolors="orange") #Zeichnen Sie ein Streudiagramm
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))
Ausführungsergebnis
Sie können sehen, dass die Tonhöhe von Zeit zu Zeit unterschiedlich ist, unabhängig davon, ob das Tempo schnell oder langsam ist.
Was ist dann mit der Beziehung zwischen Tempo und Schritt? Wenn sich das Tempo verlangsamt, nimmt der Schritt (Schrittlänge pro Schritt) wahrscheinlich ab.
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()
Ausführungsergebnis
Im Gegensatz zum vorherigen Diagramm für Tempo und Tonhöhenstreuung können Sie sehen, dass die Punktsammlung irgendwie nach unten abfällt. Mit anderen Worten kann gelesen werden, dass der Schritt bis zu 25 cm beträgt, je langsamer das Tempo ist.
Wenn ich viel laufe, wird es immer einen Moment geben, in dem sich das Tempo verlangsamt, aber war dies eine der Ursachen? Sie können überzeugt sein, indem Sie mit Python visualisieren. ←
Lassen Sie uns abschließend den Korrelationskoeffizienten zwischen den einzelnen Merkmalsgrößen ermitteln. Die Korrelation mit Kilometerstand, Herzfrequenz usw. in den vier Merkmalsgrößen (Temperatur, Windgeschwindigkeit, wöchentliche Arbeitszeit, durchschnittliche Schlafzeit) wurde zusätzlich zu den von Garmin aufgezeichneten Daten von mir zu den Trainingsdaten hinzugefügt Wenn eine starke Merkmalsmenge auftritt, wird davon ausgegangen, dass sie einen gewissen Einfluss auf das Tempo und die Laufleistung hat.
Dieses Mal wusste ich nicht, wie man den Korrelationskoeffizienten von Zeitdaten berechnet, also berechnete ich nur den Korrelationskoeffizienten zwischen den Merkmalsmengen numerischer Daten.
Geben Sie bei der Berechnung des Korrelationskoeffizienten die durchschnittlichen Herzfrequenz- und maximalen Herzfrequenzwerte, die beim Lesen von csv aus der Zeichenfolge als Zeichenfolgen gelesen wurden, in einen numerischen Wert um.
RunnningDataVisualization.ipynb
#Typkonvertierung
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)
#Korrelationskoeffizient visualisieren
df_corr = df.corr()
print(df_corr) #Zeigen Sie den Korrelationskoeffizienten zwischen Merkmalsgrößen in einer Liste an
fig = plt.subplots(figsize=(8, 8)) #Leicht verständliche Visualisierung
sns.heatmap(df_corr, annot=True,fmt='.2f',cmap='Blues',square=True)
Ausführungsergebnis
Von den drei Merkmalsgrößen, auf die wir uns konzentrierten (Temperatur, Windgeschwindigkeit und wöchentliche Arbeitszeit), hatte keine einen absoluten Korrelationskoeffizienten von mehr als 0,5 mit anderen Merkmalsgrößen. Mit anderen Worten ist ersichtlich, dass diese drei Merkmale den Kilometerstand oder das Tempo nicht wesentlich beeinflussen.
Wenn Sie darüber nachdenken, üben Sie an Tagen, die zu heiß, zu kalt oder zu windig sind, nicht das Laufen, und wenn Sie unter der Woche viel arbeiten, werden Sie viel körperliche Müdigkeit haben. Sie werden sich dafür entscheiden, das Laufen nicht zu üben. Dieses Ergebnis überzeugt also auch.
Leider konnte ich die Feature-Menge, die sich auf Kilometerstand und Tempo auswirkt, nicht finden, indem ich nur den Korrelationskoeffizienten berechnete. Durch Visualisieren beim Betrachten verschiedener Daten wie dieser bin ich es, wenn ich laufe. Es ist eine gute Gelegenheit, auf die Trends und das Üben zurückzublicken.
Nächstes Mal werden wir endlich ein Vorhersagemodell erstellen und den Vorhersageprozess drehen.
Recommended Posts