Ceci est le premier message de Qiita. Puisque je suis presque un débutant en analyse de données, je pense qu'il y a beaucoup d'erreurs, alors veuillez le signaler. Cette fois, j'ai utilisé le SDK Qore de Qauntum Core Co., Ltd.
L'utilisation du SDK Qore est expliquée dans l'article suivant. Le monde du calcul des réservoirs ~ avec Qore ~ Introduction du SDK Qore et détection de l'arythmie avec Qore
Le contenu de l'effort sera la prédiction de la victoire ou de la défaite en Soccer Premier League. Plus précisément, ce sera une tâche de prédire le résultat du match joué en 2019-2020 en utilisant les données de 2010-2018.
L'ensemble de données a été téléchargé à partir du site suivant. http://football-data.co.uk/englandm.php
J'ai publié tous les ensembles de données et le prétraitement sur GitHub, veuillez donc vous y référer. https://github.com/obameyan/QoreSDK-Premire-League
Comme il est difficile de décrire ici l'ensemble du prétraitement, seules les données avant le prétraitement et les données après le prétraitement sont décrites. Pour expliquer brièvement ce que j'ai fait, j'ai converti les données afin qu'elles puissent être jetées dans le SDK Qore en tant que données de séries chronologiques, en tenant compte de divers facteurs tels que l'équipe adverse, le résultat du match, le nombre de buts, le nombre de buts marqués et le tour du chapeau.
Voici les données avant le prétraitement. (Afficher uniquement une partie)
import pandas as pd
#Données d'origine
raw_data = pd.read_csv('./data/PremierLeague/2018-19.csv') #Seule une partie est décrite
raw_data.head()
Div | Date | HomeTeam | AwayTeam | FTHG | FTAG | FTR | HTHG | HTAG | HTR | Referee | HS | AS | HST | AST | HF | AF | HC | AC | HY | AY | HR | AR | B365H | B365D | B365A | BWH | BWD | BWA | IWH | IWD | IWA | PSH | PSD | PSA | WHH | WHD | WHA | VCH | VCD | VCA | Bb1X2 | BbMxH | BbAvH | BbMxD | BbAvD | BbMxA | BbAvA | BbOU | BbMx>2.5 | BbAv>2.5 | BbMx<2.5 | BbAv<2.5 | BbAH | BbAHh | BbMxAHH | BbAvAHH | BbMxAHA | BbAvAHA | PSCH | PSCD | PSCA |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
E0 | 10/08/2018 | Man United | Leicester | 2 | 1 | H | 1 | 0 | H | A Marriner | 8 | 13 | 6 | 4 | 11 | 8 | 2 | 5 | 2 | 1 | 0 | 0 | 1.57 | 3.9 | 7.50 | 1.53 | 4.0 | 7.50 | 1.55 | 3.80 | 7.00 | 1.58 | 3.93 | 7.50 | 1.57 | 3.8 | 6.00 | 1.57 | 4.0 | 7.00 | 39 | 1.60 | 1.56 | 4.20 | 3.92 | 8.05 | 7.06 | 38 | 2.12 | 2.03 | 1.85 | 1.79 | 17 | -0.75 | 1.75 | 1.70 | 2.29 | 2.21 | 1.55 | 4.07 | 7.69 |
E0 | 11/08/2018 | Bournemouth | Cardiff | 2 | 0 | H | 1 | 0 | H | K Friend | 12 | 10 | 4 | 1 | 11 | 9 | 7 | 4 | 1 | 1 | 0 | 0 | 1.90 | 3.6 | 4.50 | 1.90 | 3.4 | 4.40 | 1.90 | 3.50 | 4.10 | 1.89 | 3.63 | 4.58 | 1.91 | 3.5 | 4.00 | 1.87 | 3.6 | 4.75 | 39 | 1.93 | 1.88 | 3.71 | 3.53 | 4.75 | 4.37 | 38 | 2.05 | 1.98 | 1.92 | 1.83 | 20 | -0.75 | 2.20 | 2.13 | 1.80 | 1.75 | 1.88 | 3.61 | 4.70 |
E0 | 11/08/2018 | Fulham | Crystal Palace | 0 | 2 | A | 0 | 1 | A | M Dean | 15 | 10 | 6 | 9 | 9 | 11 | 5 | 5 | 1 | 2 | 0 | 0 | 2.50 | 3.4 | 3.00 | 2.45 | 3.3 | 2.95 | 2.40 | 3.30 | 2.95 | 2.50 | 3.46 | 3.00 | 2.45 | 3.3 | 2.80 | 2.50 | 3.4 | 3.00 | 39 | 2.60 | 2.47 | 3.49 | 3.35 | 3.05 | 2.92 | 38 | 2.00 | 1.95 | 1.96 | 1.87 | 22 | -0.25 | 2.18 | 2.11 | 1.81 | 1.77 | 2.62 | 3.38 | 2.90 |
E0 | 11/08/2018 | Huddersfield | Chelsea | 0 | 3 | A | 0 | 2 | A | C Kavanagh | 6 | 13 | 1 | 4 | 9 | 8 | 2 | 5 | 2 | 1 | 0 | 0 | 6.50 | 4.0 | 1.61 | 6.25 | 3.9 | 1.57 | 6.20 | 4.00 | 1.55 | 6.41 | 4.02 | 1.62 | 5.80 | 3.9 | 1.57 | 6.50 | 4.0 | 1.62 | 38 | 6.85 | 6.09 | 4.07 | 3.90 | 1.66 | 1.61 | 37 | 2.05 | 1.98 | 1.90 | 1.84 | 23 | 1.00 | 1.84 | 1.80 | 2.13 | 2.06 | 7.24 | 3.95 | 1.58 |
E0 | 11/08/2018 | Newcastle | Tottenham | 1 | 2 | A | 1 | 2 | A | M Atkinson | 15 | 15 | 2 | 5 | 11 | 12 | 3 | 5 | 2 | 2 | 0 | 0 | 3.90 | 3.5 | 2.04 | 3.80 | 3.5 | 2.00 | 3.70 | 3.35 | 2.05 | 3.83 | 3.57 | 2.08 | 3.80 | 3.2 | 2.05 | 3.90 | 3.4 | 2.10 | 39 | 4.01 | 3.83 | 3.57 | 3.40 | 2.12 | 2.05 | 38 | 2.10 | 2.01 | 1.88 | 1.81 | 20 | 0.25 | 2.20 | 2.12 | 1.80 | 1.76 | 4.74 | 3.53 | 1.89 |
Viennent ensuite les données après le prétraitement. (Afficher uniquement une partie)
import pandas as pd
#Pas les données d'origine car elles sont au milieu du processus
data=pd.read_csv("./data/PremierLeague/allAtt_onehot_large_train.csv") #Données d'entraînement
dataT=pd.read_csv("./data/PremierLeague/allAtt_onehot_large_test.csv") #données de test
#Données après prétraitement
data = data[['HTGS','ATGS','HTP','ATP','HM1','AM1', 'DiffLP','final1']]
dataT = dataT[['HTGS','ATGS','HTP','ATP','HM1','AM1','DiffLP','final1']]
df = data[200:210]
HTGS | ATGS | HTP | ATP | HM1 | AM1 | DiffLP | final1 |
---|---|---|---|---|---|---|---|
0.4737 | 0.2568 | 1.3333 | 1.0476 | 3 | 3 | 1 | 0 |
0.3289 | 0.3784 | 0.9048 | 1.0476 | 1 | 1 | -3 | 1 |
0.4342 | 0.3243 | 2.0952 | 1.2857 | 3 | 3 | -12 | 1 |
0.4342 | 0.2703 | 1.8571 | 1.8095 | 3 | 3 | 1 | 0 |
0.3553 | 0.2432 | 1.0000 | 1.2857 | 0 | 1 | -1 | 0 |
0.2763 | 0.3378 | 1.1905 | 1.1905 | 3 | 1 | 9 | 1 |
0.4342 | 0.3919 | 1.3810 | 0.9524 | 1 | 1 | -2 | 0 |
0.3289 | 0.3378 | 1.0476 | 1.7143 | 1 | 3 | 2 | 1 |
0.4474 | 0.3784 | 1.1905 | 0.8095 | 3 | 0 | -8 | 1 |
0.3816 | 0.3919 | 0.8571 | 1.6667 | 1 | 0 | 15 | 1 |
Ici, nous allons effectuer un prétraitement à l'aide du SDK Qore.
Plus précisément, utilisez qore_sdk.utils.sliding_window ()
pour convertir la dimension des données d'entraînement en (nombre de données, heure, données réelles) et la dimension d'étiquette correcte en (nombre de données, 1).
from qore_sdk.utils import sliding_window
x = np.array(data)
x_t = np.array(dataT)
x_train = np.array(x[:, :7])
x_test = np.array(x_t[:, :7])
y_train = np.array(x[:, 7])
y_test = np.array(x_t[:, 7])
X, y= sliding_window(x_train, 10, 5, axis=0, y=y_train,y_def='mode', y_axis=0)
X_test, y_test = sliding_window(x_test, 10, 5, axis=0, y=y_test,y_def='mode', y_axis=0)
print(X.shape, y.shape, X_test.shape, y_test.shape)
>> (653, 10, 7), (653, 1), (159, 10, 7), (159, 1)
Entrez les informations de compte émises ici.
from qore_sdk.client import WebQoreClient
username = '*****'
password = '*****'
endpoint = '*****'
client = WebQoreClient(username, password, endpoint=endpoint)
Apprenons réellement.
client.classifier_train(X, y)
>> {'res': 'ok', 'train_time': 0.8582723140716553}
J'ai pu apprendre en un instant. Ensuite, vérifiez la précision à l'aide des données de test.
res = client.classifier_predict(X_test)
report = classification_report(y_test, res['Y'])
print(report)
precision recall f1-score support
0.0 0.73 0.90 0.81 104
1.0 0.68 0.38 0.49 55
accuracy 0.72 159
macro avg 0.71 0.64 0.65 159
weighted avg 0.71 0.72 0.70 159
La précision était de 72%. Pour être honnête, c'est une précision subtile, mais je pense que c'est un problème de pré-traitement ... J'ai pensé que nous devrions prétraiter en considérant attentivement le gonflement des données et plus de corrélation ...
Je voulais faire des analyses de données au quotidien, mais je ne pouvais rien y faire, mais je suis reconnaissant à QuantumCore de m'avoir donné l'opportunité d'effectuer une telle analyse de données. Je voudrais également profiter de cette occasion pour continuer à relever le défi de l'analyse des données.
Recommended Posts