Datenanalyse durch Clustering mit der k-means-Methode (Python) ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)

Einführung

Eine der nicht hierarchischen Clustering-Methoden ist die k-means-Methode (k-means-Methode). Die Beschreibung von "Kapitel 3 Informations- und Datenwissenschaft, zweite Hälfte des Lernens 16. Klassifizierung durch Clustering" im Lehrmaterial wird zitiert, weil es leicht zu verstehen ist.

Bei der k-means-Methode wird das Clustering gemäß dem folgenden Verfahren durchgeführt.

  1. Bestimmen Sie die Anzahl der Cluster, die im Voraus geteilt werden sollen, und bestimmen Sie zufällig die repräsentativen Punkte (Zentroide).
  2. Ermitteln Sie den Abstand zwischen den Daten und jedem repräsentativen Punkt und klassifizieren Sie ihn in den Cluster der nächstgelegenen repräsentativen Punkte.
  3. Berechnen Sie den Durchschnitt für jeden Cluster und verwenden Sie ihn als neuen repräsentativen Punkt.
  4. Wenn sich die Position des repräsentativen Punkts geändert hat, kehren Sie zu 2 zurück. Wenn sich nichts ändert, endet die Klassifizierung. Durch zufällige Bestimmung der repräsentativen Punkte gemäß 1) unterscheiden sich die Ergebnisse erheblich, was zu einer angemessenen Clusterbildung führt. Es darf nicht sein. Sie kann verbessert werden, indem die Analyse mehrmals wiederholt wird oder die Methode k-means ++ verwendet wird.

1 ') Wählen Sie zufällig einen repräsentativen Punkt aus den Daten aus und wählen Sie die verbleibenden repräsentativen Punkte mit einer Wahrscheinlichkeit aus, die proportional zum Quadrat der Entfernung von diesem Punkt ist.

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

In dem Abschnitt "Kapitel 3 Informations- und Datenwissenschaft, zweite Hälfte des Lernens 16. Klassifizierung durch Clustering", in dem die Erklärung zum Clustering von Lehrmaterialien geschrieben ist, wurde dies bereits anhand des Implementierungsbeispiels von Python erläutert. Dieses Mal wird in "Kapitel 5 Erforschung der Problemerkennung / -lösung unter Verwendung von Informations- und Informationstechnologie, Aktivitätsbeispiel 3. Verwendung von Informationstechnologie zur Nutzung von Daten" ein in R geschriebenes Implementierungsbeispiel in Python verwendet. Durch das Ersetzen möchte ich die Datenanalyse durch Clustering mit der k-means-Methode bestätigen.

Lehrmaterial

[Informationsabteilung der High School "Information II" Lehrmaterialien für Lehrer (Hauptband): Ministerium für Bildung, Kultur, Sport, Wissenschaft und Technologie](https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/mext_00742.html "Informationsabteilung der High School Unterrichtsmaterialien "Information II" für die Lehrerausbildung (Hauptteil): Ministerium für Bildung, Kultur, Sport, Wissenschaft und Technologie ") Kapitel 5 Erforschung der Problemerkennung und -lösung unter Verwendung von Information und Informationstechnologie, Ende des Buches (PDF: 4,1 MB)

Umgebung

ipython Colaboratory - Google Colab

Teile, die in den Unterrichtsmaterialien aufgenommen werden sollen

Aktivitätsbeispiel 3 Nutzung der Informationstechnologie zur Nutzung von Daten

Implementierungsbeispiel und Ergebnis in Python

Vor der Analyse

Dieses Mal verwenden die Unterrichtsmaterialien Japanisch zum Zeichnen von Grafiken. Daher muss im Voraus festgelegt werden, damit Japanisch im Diagrammplot (matplotlib) verwendet werden kann.

!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

Löschen Sie den alten Schriftcache fontlist-v310.json basierend auf den Informationen des Befehls ls.

#Löschen Sie den Cache.
!rm /root/.cache/matplotlib/fontlist-v310.json #Cache gelöscht werden
!ls -ll /root/.cache/matplotlib/
#Löschen Sie den Cache.
!rm /root/.cache/matplotlib/fontlist-v310.json #Cache gelöscht werden
!ls -ll /root/.cache/matplotlib/

Starten Sie jetzt die Laufzeit von Google Colab. Als nächstes setzen Sie matplotlib auf Japanisch.

import matplotlib

#Japanische Anzeige
matplotlib.rcParams['font.family'] = "IPAGothic"

Vorverarbeitung

Laden Sie die folgenden Excel-Daten als "Umfrage zur tatsächlichen Situation der Computerisierung der Schulbildung" herunter.

["Aktuelle Bedingungen für" Computerinstallationsstatus "und" Internetverbindungsstatus "nach Präfektur (Gymnasium)"](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 = Datensatz & stat_infid = 000031898768 & metadata = 1 & data = 1 "Nach Präfektur" Computerinstallationsstatus "Und die aktuelle Situation des" Internetverbindungsstatus "(Gymnasium)" ")

Führen Sie wie bei den Unterrichtsmaterialien eine Datenbereinigung in Excel durch, bevor Sie zuerst mit Python analysieren. Die Daten, die organisiert und geformt wurden, sind wie folgt.

pc_sjis.csv

Die durchgeführte Verarbeitung ist wie folgt.

Basierend auf diesen werden die Daten gelesen.

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

Die Unterrichtsmaterialien sind wie folgt.

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

In den Unterrichtsmaterialien scheint es einen Fehler zu geben, dass die Gesamtzahl der Lern-PCs liest, wo die Gesamtzahl der Lern-PCs gelesen werden sollte.

Datenanalyse und Visualisierung

Um zu verstehen, welche Trends gelesen werden können, zeigen wir zunächst die Streudiagrammmatrix an. Dieses Mal werde ich das Seaborn-Modul verwenden.

import seaborn as sns

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

seaborn_pairplot (1).png

Aus den Unterrichtsmaterialien

Diejenigen, deren lineare Tendenz deutlich sichtbar ist, wie die Anzahl der Schüler und die Anzahl der Klassenzimmer, unterliegen dem Korrelationskoeffizienten und der einfachen Regressionsanalyse, die in "Information I" gelernt wurden. Dieses Mal werden wir uns nicht mit der linearen Tendenz befassen. Betrachten wir also wlan (WLAN) und spp (Anzahl der Schüler pro PC).

Da dies der Fall ist, nehmen Sie die Werte von wlan (WLAN) und spp (Anzahl der Schüler pro PC) heraus und skalieren Sie.

Insbesondere haben wir standardisiert.

from sklearn.preprocessing import StandardScaler

#Wertextraktion(wlan spp)
pc_ws = pc[['wlan', 'spp']]

#Standardisierung(Verwendung von Standard Scaler)
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

Da die Arten der behandelten Daten unterschiedlich sind, standardisieren wir sie wie Lehrbücher. Für die Standardisierung sind frühere Artikel hilfreich. https://qiita.com/ereyester/items/b78b22a76a8f50006880

Erstellen und klassifizieren Sie als Nächstes das Modell.

from sklearn.cluster import KMeans

#Modell erstellen
km = KMeans(init='random', n_clusters=2 , random_state=0)
#Prognose
pc_cluster = km.fit_predict(pcs_df)
cluster_df = pd.DataFrame(pc_cluster, columns=['cluster'])

#Wertextraktion(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

Ich möchte das Ergebnis mit einem Streudiagramm bestätigen.

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

Insgesamt scheint das WLAN (wlan) anhand der Informationen klassifiziert zu sein. Auch die Präfekturen Chiba und Saga scheinen außerhalb des Zentrums der Gruppe zu liegen.

Weitere Analyse

Als nächstes zeichnen wir das Diagramm der Anzahl der Schüler und der Anzahl der Lern-PCs, für die eine eindeutige positive Korrelation gelesen werden kann, die im vorherigen Cluster farbcodiert ist.

#Wertextraktion(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

Wenn das Verhältnis von PCs (Gesamtzahl der PCs für Lernende) zu Schülern (Anzahl der Schüler) groß ist, weist die Gruppe tendenziell eine hohe Wartungsrate von wlan (WLAN-Wartungsrate von normalen Klassenzimmern) auf, andernfalls wlan (normale Klassenräume). Es scheint, dass die Gruppe tendenziell eine niedrige Wartungsrate aufweist (WLAN-Wartungsrate). In der Präfektur Saga ist das Verhältnis von PCs (Gesamtzahl der Lerner-PCs) zu Studenten (Anzahl der Studenten) sehr groß, während in der Präfektur Chiba das Verhältnis von PCs (Gesamtzahl der Lernenden-PCs) zu Studenten (Anzahl der Studenten) sehr gering ist. Sie können die Eigenschaften von sehen.

Quellcode

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

Recommended Posts

Datenanalyse durch Clustering mit der k-means-Methode (Python) ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
Klassifizierung nach der k-Nachbarschaftsmethode (kNN) nach Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
[Informationen I / Information II der Informationsabteilung der High School] Zusammenfassung der Unterrichtsmaterialien für die Lehrerausbildung durch Python
Text Mining von word2vec usw. von Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
Binäre Klassifizierung nach Entscheidungsbaum nach Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
[Informationen der High School Information Department I] Unterrichtsmaterialien für die Lehrerausbildung: Datenformat und Visualisierung (Python)
[Informationen zu Richtlinien für das Lernen an Gymnasien I] Unterrichtsmaterialien für die Lehrerausbildung: Implementierung der Huffman-Methode durch Python
Datenanalyse durch Clustering mit der k-means-Methode (Python) ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
[Informationen I / Information II der Informationsabteilung der High School] Zusammenfassung der Unterrichtsmaterialien für die Lehrerausbildung durch Python
Text Mining von word2vec usw. von Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
Binäre Klassifizierung nach Entscheidungsbaum nach Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
Klassifizierung nach der k-Nachbarschaftsmethode (kNN) nach Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
[Informationen der High School Information Department I] Unterrichtsmaterialien für die Lehrerausbildung: Datenformat und Visualisierung (Python)
Hauptkomponentenanalyse mit Python (Scikit-Lernversion, Pandas & Numpy-Version) ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
[Informationen zu Richtlinien für das Lernen an Gymnasien I] Unterrichtsmaterialien für die Lehrerausbildung: Implementierung der Huffman-Methode durch Python
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Datenanalyse durch Clustering mit der k-means-Methode (Python) ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
[Informationen I / Information II der Informationsabteilung der High School] Zusammenfassung der Unterrichtsmaterialien für die Lehrerausbildung durch Python
Text Mining von word2vec usw. von Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
Binäre Klassifizierung nach Entscheidungsbaum nach Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
Klassifizierung nach der k-Nachbarschaftsmethode (kNN) nach Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
[Informationen der High School Information Department I] Unterrichtsmaterialien für die Lehrerausbildung: Datenformat und Visualisierung (Python)
[Informationen zu Richtlinien für das Lernen an Gymnasien I] Unterrichtsmaterialien für die Lehrerausbildung: Implementierung der Huffman-Methode durch Python
Datenanalyse durch Clustering mit der k-means-Methode (Python) ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
[Informationen I / Information II der Informationsabteilung der High School] Zusammenfassung der Unterrichtsmaterialien für die Lehrerausbildung durch Python
Text Mining von word2vec usw. von Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
Binäre Klassifizierung nach Entscheidungsbaum nach Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
Klassifizierung nach der k-Nachbarschaftsmethode (kNN) nach Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
[Informationen der High School Information Department I] Unterrichtsmaterialien für die Lehrerausbildung: Datenformat und Visualisierung (Python)
Hauptkomponentenanalyse mit Python (Scikit-Lernversion, Pandas & Numpy-Version) ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
[Informationen zu Richtlinien für das Lernen an Gymnasien I] Unterrichtsmaterialien für die Lehrerausbildung: Implementierung der Huffman-Methode durch Python
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus
Hauptkomponentenanalyse mit Python von nim mit nimpy
2. Multivariate Analyse in Python 3-1. Hauptkomponentenanalyse (Scikit-Learn)
Leicht verständliche [Pandas] -Praxis / Datenbestätigungsmethode für Abiturienten
Python für die Datenanalyse Kapitel 4
Klassifizieren Sie Daten nach der k-means-Methode
Python für die Datenanalyse Kapitel 2
Datenanalyse mit Python-Pandas
Python für die Datenanalyse Kapitel 3