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.
- Déterminez à l'avance le nombre de grappes à diviser et déterminez au hasard les points représentatifs (centroïdes).
- 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.
- Calculez la moyenne de chaque grappe et utilisez-la comme nouveau point représentatif.
- 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.
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 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)
ipython Colaboratory - Google Colab
Exemple d'activité 3 Utilisation des technologies de l'information pour utiliser les données
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"
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.
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())
Le matériel pédagogique est le suivant.
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.
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))
À 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())
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())
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()
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.
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()
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.
https://gist.github.com/ereyester/ce9370e3022f05f4d7548a8ccaed33cc
Recommended Posts