Analyse des données par regroupement à l'aide de la méthode k-means (python) ([High school information department information II] pédagogique pour la formation des enseignants)

introduction

L'une des méthodes de regroupement non hiérarchiques est la méthode des k-moyennes (méthode des k-sens). La description du «Chapitre 3 Information et science des données Deuxième moitié de l'apprentissage 16. Classification par regroupement» dans le matériel didactique est citée parce qu'elle est facile à comprendre.

Dans la méthode k-means, le clustering est effectué selon la procédure suivante.

  1. Déterminez à l'avance le nombre de grappes à diviser et déterminez au hasard les points représentatifs (centroïdes).
  2. Trouvez la distance entre les données et chaque point représentatif et classez-la dans le groupe des points représentatifs les plus proches.
  3. Calculez la moyenne de chaque grappe et utilisez-la comme nouveau point représentatif.
  4. Si la position du point représentatif a changé, revenez à 2. S'il n'y a pas de changement, le classement prend fin. En déterminant aléatoirement les points représentatifs selon 1), les résultats seront très différents, résultant en un regroupement approprié. Ce n'est peut-être pas le cas. Elle peut être améliorée en répétant l'analyse plusieurs fois ou en utilisant la méthode k-means ++.

1 ') Sélectionnez au hasard un point représentatif à partir des données et sélectionnez les points représentatifs restants avec une probabilité proportionnelle au carré de la distance à partir de ce point.

SnapCrab_NoName_2020-9-24_20-10-29_No-00.png

Dans la section "Chapitre 3 Information et Data Science Second Half Learning 16. Classification by Clustering" où l'explication sur le clustering des matériels didactiques est écrite, elle a déjà été expliquée par l'exemple d'implémentation de python. Cette fois, dans le "Chapitre 5 Exploration de la découverte de problèmes / solution utilisant l'information et la technologie de l'information, exemple d'activité 3. Utilisation de la technologie de l'information pour l'utilisation des données", un exemple d'implémentation écrit en R est utilisé en python. En le remplaçant, je voudrais confirmer l'analyse des données par clustering à l'aide de la méthode k-means.

Matériel pédagogique

[Matériel de formation des enseignants du Département de l'information du lycée "Information II" (principal): Ministère de l'éducation, de la culture, des sports, de la science et de la technologie](https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/mext_00742.html "Département de l'information du lycée Matériel pédagogique "Information II" pour la formation des enseignants (partie principale): Ministère de l'éducation, de la culture, des sports, des sciences et de la technologie ") Chapitre 5 Exploration de la découverte de problèmes et de la solution utilisant les technologies de l'information et de l'information, fin du livre (PDF: 4,1 Mo)

environnement

ipython Colaboratory - Google Colab

Parties à reprendre dans le matériel pédagogique

Exemple d'activité 3 Utilisation des technologies de l'information pour utiliser les données

Exemple d'implémentation et résultat en python

Avant de faire l'analyse

Cette fois, le matériel pédagogique utilise le japonais pour tracer des graphiques. Par conséquent, il est nécessaire de définir à l'avance pour que le japonais puisse être utilisé dans le tracé graphique (matplotlib).

!apt-get -y install fonts-ipafont-gothic
!ls -ll /root/.cache/matplotlib/
:
-rw-r--r-- 1 root root 46443 Sep 18 20:45 fontList.json
-rw-r--r-- 1 root root 29337 Sep 18 20:25 fontlist-v310.json
drwxr-xr-x 2 root root  4096 Sep 18 20:25 tex.cache

Supprimez l'ancien cache de polices fontlist-v310.json en fonction des informations de la commande ls.

#Supprimez le cache.
!rm /root/.cache/matplotlib/fontlist-v310.json #Cache à effacer
!ls -ll /root/.cache/matplotlib/
#Supprimez le cache.
!rm /root/.cache/matplotlib/fontlist-v310.json #Cache à effacer
!ls -ll /root/.cache/matplotlib/

Maintenant, démarrez le runtime de google colab. Ensuite, définissez matplotlib pour utiliser le japonais.

import matplotlib

#Affichage japonais
matplotlib.rcParams['font.family'] = "IPAGothic"

Prétraitement

Téléchargez les données Excel suivantes sous forme de "Enquête sur la situation actuelle de l'informatisation de l'éducation dans les écoles".

["Conditions réelles de" l'état de l'installation de l'ordinateur "et de" l'état de la connexion Internet "par préfecture (lycée)"](https://www.e-stat.go.jp/stat-search/files?page=1&query= % E5% AD% A6% E6% A0% A1% E3% 81% AB% E3% 81% 8A% E3% 81% 91% E3% 82% 8B% E6% 95% 99% E8% 82% B2% E3 % 81% AE% E6% 83% 85% E5% A0% B1% E5% 8C% 96% E3% 81% AE% E5% AE% 9F% E6% 85% 8B% E7% AD% 89% E3% 81 % AB% E9% 96% A2% E3% 81% 99% E3% 82% 8B% E8% AA% BF% E6% 9F% BB & layout = dataset & stat_infid = 000031898768 & metadata = 1 & data = 1 "Par préfecture" État de l'installation de l'ordinateur "Et la situation réelle de" l'état de la connexion Internet "(lycée)" ")

Comme pour le matériel didactique, effectuez un nettoyage des données sur Excel avant de commencer à analyser avec python. Les données qui ont été organisées et mises en forme sont les suivantes.

pc_sjis.csv

Le traitement effectué est le suivant.

--Supprimer les en-têtes et pieds de page inutiles

Sur cette base, les données sont lues.

import pandas as pd
from IPython.display import display

pc = pd.read_csv('/content/pc_sjis.csv', encoding='shift_jis')
display(pc.head())

SnapCrab_NoName_2020-9-24_20-29-50_No-00.png

Le matériel pédagogique est le suivant.

SnapCrab_NoName_2020-9-24_20-30-34_No-00.png

Dans le matériel didactique, il semble y avoir une erreur selon laquelle le nombre total d'ordinateurs éducatifs lit là où le nombre total d'ordinateurs apprenants doit être lu.

Analyse et visualisation des données

Pour comprendre quelles tendances peuvent être lues, affichons d'abord la matrice du diagramme de dispersion. Cette fois, j'utiliserai le module seaborn.

import seaborn as sns

pg = sns.pairplot(pc)
print(type(pg))

seaborn_pairplot (1).png

À partir du matériel pédagogique

Ceux qui ont une tendance linéaire claire, comme le nombre d'élèves et le nombre de salles de classe, sont soumis au coefficient de corrélation et à une simple analyse de régression apprise dans «Information I». Cette fois, nous ne regarderons pas la tendance linéaire, alors considérons wlan (LAN sans fil) et spp (nombre d'étudiants par PC).

Puisqu'il y en a, retirez les valeurs de wlan (LAN sans fil) et spp (nombre d'étudiants par PC) et l'échelle.

Plus précisément, nous avons normalisé.

from sklearn.preprocessing import StandardScaler

#Extraction de valeur(wlan spp)
pc_ws = pc[['wlan', 'spp']]

#Standardisation(Comment utiliser le scaler standard)
std_sc = StandardScaler()
std_sc.fit(pc_ws)
pcs = std_sc.transform(pc_ws)
pcs_df = pd.DataFrame(pcs, columns = pc_ws.columns)
display(pcs_df.head())

SnapCrab_NoName_2020-9-24_20-38-2_No-00.png

Les types de données manipulés étant différents, nous les standardisons de la même manière que les manuels. Pour la normalisation, les articles précédents seront utiles. https://qiita.com/ereyester/items/b78b22a76a8f50006880

Ensuite, créez et classez le modèle.

from sklearn.cluster import KMeans

#Créer un modèle
km = KMeans(init='random', n_clusters=2 , random_state=0)
#Prévoir
pc_cluster = km.fit_predict(pcs_df)
cluster_df = pd.DataFrame(pc_cluster, columns=['cluster'])

#Extraction de valeur(pref wlan spp cluster)
pcs_cluster_df = pd.concat([pc[['pref', 'wlan', 'spp']], cluster_df], axis=1)
display(pcs_cluster_df.head())

SnapCrab_NoName_2020-9-24_20-40-49_No-00.png

Je voudrais confirmer le résultat avec un diagramme de dispersion.

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

_, ax = plt.subplots(figsize=(5, 5), dpi=200)

sns.scatterplot(data=pcs_cluster_df, x="wlan", y="spp", hue="cluster", ax=ax)

for k, v in pcs_cluster_df.iterrows():
    ax.annotate(v['pref'],xy=(v['wlan'],v['spp']),size=5)

plt.show()

SnapCrab_NoName_2020-9-24_20-41-30_No-00.png

Dans l'ensemble, il semble que le LAN sans fil (wlan) soit classé en fonction des informations. De plus, les préfectures de Chiba et de Saga semblent être hors du centre du groupe.

Analyse plus approfondie

Ensuite, traçons le graphique du nombre d'étudiants et du nombre de PC d'apprentissage pour lesquels une corrélation positive claire peut être lue, avec un code couleur dans le cluster précédent.

#Extraction de valeur(pref student pc cluster)
pcs_cluster2_df = pd.concat([pc[['pref', 'student', 'pc']], cluster_df], axis=1)

_, ax2 = plt.subplots(figsize=(5, 5), dpi=200)

sns.scatterplot(data=pcs_cluster2_df, x="student", y="pc", hue="cluster", ax=ax2)

for k, v in pcs_cluster2_df.iterrows():
    ax2.annotate(v['pref'],xy=(v['student'],v['pc']),size=5)

plt.show()

SnapCrab_NoName_2020-9-24_20-43-21_No-00.png

Si le ratio PC (nombre total d'ordinateurs pour les apprenants) par rapport aux élèves est important, le groupe a tendance à avoir un taux de maintenance élevé du wlan (taux de maintenance du LAN sans fil des salles de classe ordinaires), sinon wlan (classe ordinaire Il semble que le groupe ait tendance à avoir un faible taux de maintenance (taux de maintenance du LAN sans fil). Dans la préfecture de Saga, le ratio PC (nombre total d'ordinateurs apprenants) par rapport aux étudiants (nombre d'étudiants) est très important, tandis que dans la préfecture de Chiba, le ratio ordinateurs (nombre total d'ordinateurs apprenants) par rapport aux étudiants (nombre d'étudiants) est très faible. Vous pouvez voir les caractéristiques de.

Code source

https://gist.github.com/ereyester/ce9370e3022f05f4d7548a8ccaed33cc

Recommended Posts

Analyse des données par regroupement à l'aide de la méthode k-means (python) ([High school information department information II] pédagogique pour la formation des enseignants)
Classification par méthode k-voisinage (kNN) par python ([High school information department information II] matériel pédagogique pour la formation des enseignants)
[Information I / Information II du Département d'Information du Lycée] Résumé du matériel pédagogique pour la formation des enseignants par python
Exploration de texte par word2vec etc. par python ([High School Information Department Information II] matériel pédagogique pour la formation des enseignants)
Classification binar par arbre de décision par python ([High school information department information II] pédagogique pour la formation des enseignants)
[Information du département d'information du lycée I] Matériel pédagogique pour la formation des enseignants: Format des données et visualisation (python)
[Informations sur les lignes directrices d'apprentissage du lycée I] Matériel pédagogique pour la formation des enseignants: mise en œuvre de la méthode Huffman par python
Analyse des données par regroupement à l'aide de la méthode k-means (python) ([High school information department information II] pédagogique pour la formation des enseignants)
[Information I / Information II du Département d'Information du Lycée] Résumé du matériel pédagogique pour la formation des enseignants par python
Exploration de texte par word2vec etc. par python ([High School Information Department Information II] matériel pédagogique pour la formation des enseignants)
Classification binar par arbre de décision par python ([High school information department information II] pédagogique pour la formation des enseignants)
Classification par méthode k-voisinage (kNN) par python ([High school information department information II] matériel pédagogique pour la formation des enseignants)
[Information du département d'information du lycée I] Matériel pédagogique pour la formation des enseignants: Format des données et visualisation (python)
Analyse des composants principaux avec python (version Scikit-learn, version pandas et numpy) ([High school information department information II] didacticiel pour la formation des enseignants)
[Informations sur les lignes directrices d'apprentissage du lycée I] Matériel pédagogique pour la formation des enseignants: mise en œuvre de la méthode Huffman par python
J'ai essayé la détection d'objets en utilisant Python et OpenCV
Analyse des données par regroupement à l'aide de la méthode k-means (python) ([High school information department information II] pédagogique pour la formation des enseignants)
[Information I / Information II du Département d'Information du Lycée] Résumé du matériel pédagogique pour la formation des enseignants par python
Exploration de texte par word2vec etc. par python ([High School Information Department Information II] matériel pédagogique pour la formation des enseignants)
Classification binar par arbre de décision par python ([High school information department information II] pédagogique pour la formation des enseignants)
Classification par méthode k-voisinage (kNN) par python ([High school information department information II] matériel pédagogique pour la formation des enseignants)
[Information du département d'information du lycée I] Matériel pédagogique pour la formation des enseignants: Format des données et visualisation (python)
[Informations sur les lignes directrices d'apprentissage du lycée I] Matériel pédagogique pour la formation des enseignants: mise en œuvre de la méthode Huffman par python
Analyse des données par regroupement à l'aide de la méthode k-means (python) ([High school information department information II] pédagogique pour la formation des enseignants)
[Information I / Information II du Département d'Information du Lycée] Résumé du matériel pédagogique pour la formation des enseignants par python
Exploration de texte par word2vec etc. par python ([High School Information Department Information II] matériel pédagogique pour la formation des enseignants)
Classification binar par arbre de décision par python ([High school information department information II] pédagogique pour la formation des enseignants)
Classification par méthode k-voisinage (kNN) par python ([High school information department information II] matériel pédagogique pour la formation des enseignants)
[Information du département d'information du lycée I] Matériel pédagogique pour la formation des enseignants: Format des données et visualisation (python)
Analyse des composants principaux avec python (version Scikit-learn, version pandas et numpy) ([High school information department information II] didacticiel pour la formation des enseignants)
[Informations sur les lignes directrices d'apprentissage du lycée I] Matériel pédagogique pour la formation des enseignants: mise en œuvre de la méthode Huffman par python
J'ai essayé la détection d'objets en utilisant Python et OpenCV
Défiez l'analyse des composants principaux des données textuelles avec Python
Analyse des composants principaux à l'aide de python de nim avec nimpy
2. Analyse multivariée expliquée dans Python 3-1. Analyse en composantes principales (scikit-learn)
Méthode de confirmation de la pratique / des données [Pandas] facile à comprendre pour les diplômés du secondaire
Python pour l'analyse des données Chapitre 4
Classer les données par la méthode k-means
Python pour l'analyse des données Chapitre 2
Analyse de données à l'aide de pandas python
Python pour l'analyse des données Chapitre 3