[PYTHON] Regrouper les écoles représentatives à l'été 2016 avec scikit-learn

introduction

J'ai essayé de toucher «scikit-learn» pendant mes études parce que c'était des vacances d'été. C'est comme une étude gratuite pendant les vacances d'été. Veuillez pardonner bien qu'il s'agisse d'un contenu pour débutants.

Je voulais vraiment faire quelque chose comme l'apprentissage automatique, mais j'ai commencé parce que je pouvais le faire parce que je manquais de connaissances et de données. Le tournoi d'été de baseball de Koshien au lycée commence à peine (personnellement), j'ai donc décidé de regrouper les écoles représentatives en utilisant les données du tournoi local.

Préparation des données

Il semble que nous pouvons analyser diverses choses en collectant des données telles que des résultats individuels, mais nous avons d'abord décidé d'utiliser des données de base telles que le taux de réussite de l'équipe et le taux de défense.

Résultats frappants

Créez les données originales en vous référant à ce site. Le taux de frappeurs, les coups sûrs des bases, les sacrifices et le nombre de bases volées du tournoi local de chaque école représentative sont résumés. Le nombre de visites à domicile est exceptionnel dans une seule école. D'ailleurs, si vous regardez de près, les écoles représentatives sont alignées dans l'ordre du code préfectoral.

https://github.com/radiocat/study-sklearn/blob/master/hs-bb/batting-2016.csv

Performance du lanceur

[Ce site](http://koshien.site/wp/2016/08/05/%E9%AB%98%E6%A0%A1%E9%87%8E%E7%90%83%E5%A4% 8F% E3% 81% AE% E7% 94% B2% E5% AD% 90% E5% 9C% 92% E5% 87% BA% E5% A0% B4% E6% A0% A1% E6% 8A% 95% Créez les données d'origine en référence à E6% 89% 8B% E6% 88% 90% E7% B8% BE /). Les lanceurs principaux, les temps de lancer, les courses et les taux de défense aux compétitions locales de chaque école représentative sont résumés. Si une personne ne lance pas plus de 60% des fois, il semble que deux ou trois lanceurs soient utilisés pour le calcul. Le lanceur de combat principal a compté le nombre de personnes et l'a ajouté à un autre objet.

https://github.com/radiocat/study-sklearn/blob/master/hs-bb/pitching-2016.csv

Clustering

Le nombre de clusters est pour le moment fixé à «5». Il n'y a pas de base particulière. L'algorithme utilise «k-means». Je n'ai pas les connaissances pour en choisir un autre plutôt que c'est bien ...

Résultats frappants

#coding:utf-8
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans

dataframe = pd.read_csv('batting-2016.csv')

array = np.array([dataframe['Nombre de parties'].tolist(),
    dataframe['moyenne au bâton'].tolist(),
    dataframe['Base d'accueil'].tolist(),
    dataframe['Sacrifice'].tolist(),
    dataframe['Vol'].tolist()
    ], np.float)
array = array.T

predict = KMeans(n_clusters=5).fit_predict(array)
print(predict)

Performance du lanceur

#coding:utf-8
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans

dataframe = pd.read_csv('pitching-2016.csv')

array = np.array([dataframe['Nombre de pichets'].tolist(),
    dataframe['Nombre de lancers'].tolist(),
    dataframe['Concédé'].tolist(),
    dataframe['Taux de défense'].tolist()
    ], np.float)
array = array.T

predict = KMeans(n_clusters=5).fit_predict(array)
print(predict)

Note globale

J'ai essayé de faire correspondre les résultats au bâton et au lanceur.

#coding:utf-8
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans

batting_dataframe = pd.read_csv('batting-2016.csv')
pitching_dataframe = pd.read_csv('pitching-2016.csv')

array = np.array([batting_dataframe['Nombre de parties'].tolist(),
    batting_dataframe['moyenne au bâton'].tolist(),
    batting_dataframe['Base d'accueil'].tolist(),
    batting_dataframe['Sacrifice'].tolist(),
    batting_dataframe['Vol'].tolist(),
    pitching_dataframe['Nombre de pichets'].tolist(),
    pitching_dataframe['Nombre de lancers'].tolist(),
    pitching_dataframe['Concédé'].tolist(),
    pitching_dataframe['Taux de défense'].tolist()
    ], np.float)
array = array.T

predict = KMeans(n_clusters=5).fit_predict(array)
print(predict)

résultat

nom de l'école Coup lanceur Complet
Clark Memorial International 1 2 2
la mer du Nord 2 0 1
Hachinohe Gakuin Kosei 3 2 3
Avec Morioka Dai 0 1 0
Tohoku 4 0 1
Omagari 0 2 2
Tsuruoka Higashi 1 4 0
Institut sacré d'optique 0 3 0
Joso Gakuin 0 1 2
Sakushin Gakuin 0 3 0
Maebashi Ikuei 0 0 1
Tokuei Hanasaki 1 1 3
Synthèse de Kisarazu 4 2 1
Kanto Ichi 1 2 2
Hachioji 3 3 4
Yokohama 1 2 2
Chuetsu 3 3 4
Toyama Daiichi 4 4 3
Crête étoilée 1 3 0
Hokuriku 0 3 0
Yamanashi Gakuin 0 4 0
Chosei Saku 1 1 2
Chukyo 0 4 0
Tsuneha Kikukawa 3 1 3
Toho 3 1 4
Synthèse Inabe 0 4 0
Omi 0 1 2
Shoei Kyoto 0 1 2
Shoshosha 1 0 1
Ville Amagasaki 4 0 1
Chiben Gakuen 1 2 2
Ichi Wakayama 4 2 3
Frontière 0 3 0
Izumo 4 1 3
Soushi Gakuen 0 1 2
Hiroshima Shinjo 4 2 3
Takakawa Gakuen 3 0 3
Naruto 1 4 0
Zensei Gakuen 4 3 3
Matsuyama Seiryo 4 2 3
Meitoku Gijuku 0 4 0
Université internationale de Kyushu 0 2 2
Quotient de Karatsu 1 3 2
Quotient de Nagasaki 1 2 2
Shudakekan 3 4 4
Oita 0 3 2
Nichinan Gakuen 0 4 0
Kanan 2 2 1
Kadena 1 2 2

Résumé

Il semble y avoir divers tsukkomi, mais il semble que 0 ou 4 ne soit pas plus fort car les tendances des données sont numériquement similaires. Eh bien, les données du tournoi local sont complètement différentes à Koshien, et il ne peut être empêché de les approfondir.

Puisque le but n'est pas de prédire l'école gagnante, je ne mentionnerai plus le contenu, mais je le recalculerai au taux de réussite moyen par jeu, etc., ou s'il y a plusieurs joueurs principaux, cela sera également en moyenne. Je pense que des résultats différents peuvent être obtenus en examinant des informations telles que le nombre de lancers pour chaque lancer et en donnant des valeurs numériques plus fines pour le regroupement. Je pense que ce domaine est un domaine important de la science des données, mais cette fois, j'aimerais le terminer.

Recommended Posts

Regrouper les écoles représentatives à l'été 2016 avec scikit-learn
Clustering avec scikit-learn (1)
Clustering avec scikit-learn (2)
Clustering avec scikit-learn + DBSCAN
DBSCAN (clustering) avec scikit-learn
Identifiez les valeurs aberrantes avec le classificateur de forêt aléatoire de scikit-learn
L'analyse de clustering la plus basique avec scikit-learn
Remplissez les valeurs manquantes avec Scikit-learn impute
Isomap avec Scikit-learn
Clustering avec python-louvain
DBSCAN avec scikit-learn
Prédisez le deuxième tour de l'été 2016 avec scikit-learn
PCA avec Scikit-learn
kmeans ++ avec scikit-learn
(Suite) Essayez d'autres fonctions de distance avec kmeans dans Scikit-learn
Texte de cluster en Python
Validation croisée avec scikit-learn
Apprentissage Scikit-Learn avec la chimioinfomatique
Installez scikit.learn avec pip
Calculer tf-idf avec scikit-learn