k-means법으로 그룹을 나누는 데이터 분석(python)([고등학교 정보과 정보Ⅱ] 교사 연수용 교재)
개시하다
비분층 집합의 방법 중 하나는 k-means법(k평균법)이다.
교재의'제3장 정보와 데이터 과학 후반학습 16. 조별 분류'에 따른 기술은 이해하기 쉬워 인용한다.
k-means 방법에서 다음과 같은 절차에 따라 분류를 진행한다.
1) 분할할 집단수를 미리 정하고 대표점(질심)을 무작위로 결정한다.
2) 데이터와 각 대표점 사이의 거리를 확인하고 이를 가장 가까운 대표점 집단으로 분류한다.
3) 각 클러스터의 평균을 계산하여 새로운 대표점으로 삼는다.
4) 대표점의 위치가 변경되면 2로 돌아간다.만약 변화가 없다면 분류는 끝날 것이다.
1) 대표점을 무작위로 결정하여 결과가 크게 다르고 적당한 집합을 형성한다
모르는 경우도 있다.몇 번을 반복적으로 분석하거나 k-means++법으로 개선할 수 있다.
1') 데이터에서 임의로 대표점을 선택하여 이 점의 거리의 제곱과 비례하는 확률로 나머지 대표점을 선택한다.
교재 집합에 대한 설명이 적힌 곳은'제3장 정보와 데이터 과학 후반 학습 16. 집합의 분류'는 이미 싸이훈의 실시례에서 설명되었다.
이번에'제5장 정보와 정보기술을 이용한 문제발견·해결의 탐구, 권말활동례3. 데이터를 활용한 정보기술의 활용'에서 R이 쓴 실시례를python으로 바꾸어 k-means법을 이용한 집계 데이터 분석을 확인한다.
교재.
고등학교 정보과 정보Ⅱ 교원 연수용 교재(정편): 문부과학성
제5장 정보와 정보 기술의 문제점을 활용하여 발견하고 해결하는 탐구, 권말(PDF: 4.1MB)
컨디션
ipython
Colaboratory - Google Colab
교재에서 언급해야 할 부분
이벤트3 데이터 활용 정보기술
python의 설치 예시와 결과
분석을 진행하기 전에
이번 교재는 도표를 그릴 때 일본어를 사용했다.
따라서 도표도(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
ls 명령의 정보를 바탕으로 구 글꼴 캐시 fontlist-v310입니다.json을 삭제합니다.# キャッシュを削除する。
!rm /root/.cache/matplotlib/fontlist-v310.json # 消すべきcache
!ls -ll /root/.cache/matplotlib/
# キャッシュを削除する。
!rm /root/.cache/matplotlib/fontlist-v310.json # 消すべきcache
!ls -ll /root/.cache/matplotlib/
Google colab의 운행 시간을 시작합니다.
다음에 matplotlib을 일본어로 사용할 수 있도록 설정합니다.import matplotlib
#日本語表示
matplotlib.rcParams['font.family'] = "IPAGothic"
프리 프로세싱
'학교 교육 정보화의 실태 등에 대한 조사'로 다음 엑셀 데이터를 다운로드한다.
"각 도도부현의'컴퓨터 설치 상황'및'인터넷 연결 상황'실태(고등학교)"
교재와 마찬가지로 처음python으로 분석하기 전에 Excel에서 데이터 세척을 한다.
정리하고 성형한 데이터는 다음과 같다.
pc_sjis.csv
처리는 다음과 같습니다.
고등학교 정보과 정보Ⅱ 교원 연수용 교재(정편): 문부과학성
제5장 정보와 정보 기술의 문제점을 활용하여 발견하고 해결하는 탐구, 권말(PDF: 4.1MB)
컨디션
ipython
Colaboratory - Google Colab
교재에서 언급해야 할 부분
이벤트3 데이터 활용 정보기술
python의 설치 예시와 결과
분석을 진행하기 전에
이번 교재는 도표를 그릴 때 일본어를 사용했다.
따라서 도표도(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
ls 명령의 정보를 바탕으로 구 글꼴 캐시 fontlist-v310입니다.json을 삭제합니다.# キャッシュを削除する。
!rm /root/.cache/matplotlib/fontlist-v310.json # 消すべきcache
!ls -ll /root/.cache/matplotlib/
# キャッシュを削除する。
!rm /root/.cache/matplotlib/fontlist-v310.json # 消すべきcache
!ls -ll /root/.cache/matplotlib/
Google colab의 운행 시간을 시작합니다.
다음에 matplotlib을 일본어로 사용할 수 있도록 설정합니다.import matplotlib
#日本語表示
matplotlib.rcParams['font.family'] = "IPAGothic"
프리 프로세싱
'학교 교육 정보화의 실태 등에 대한 조사'로 다음 엑셀 데이터를 다운로드한다.
"각 도도부현의'컴퓨터 설치 상황'및'인터넷 연결 상황'실태(고등학교)"
교재와 마찬가지로 처음python으로 분석하기 전에 Excel에서 데이터 세척을 한다.
정리하고 성형한 데이터는 다음과 같다.
pc_sjis.csv
처리는 다음과 같습니다.
이벤트3 데이터 활용 정보기술
python의 설치 예시와 결과
분석을 진행하기 전에
이번 교재는 도표를 그릴 때 일본어를 사용했다.
따라서 도표도(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
ls 명령의 정보를 바탕으로 구 글꼴 캐시 fontlist-v310입니다.json을 삭제합니다.# キャッシュを削除する。
!rm /root/.cache/matplotlib/fontlist-v310.json # 消すべきcache
!ls -ll /root/.cache/matplotlib/
# キャッシュを削除する。
!rm /root/.cache/matplotlib/fontlist-v310.json # 消すべきcache
!ls -ll /root/.cache/matplotlib/
Google colab의 운행 시간을 시작합니다.
다음에 matplotlib을 일본어로 사용할 수 있도록 설정합니다.import matplotlib
#日本語表示
matplotlib.rcParams['font.family'] = "IPAGothic"
프리 프로세싱
'학교 교육 정보화의 실태 등에 대한 조사'로 다음 엑셀 데이터를 다운로드한다.
"각 도도부현의'컴퓨터 설치 상황'및'인터넷 연결 상황'실태(고등학교)"
교재와 마찬가지로 처음python으로 분석하기 전에 Excel에서 데이터 세척을 한다.
정리하고 성형한 데이터는 다음과 같다.
pc_sjis.csv
처리는 다음과 같습니다.
!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
# キャッシュを削除する。
!rm /root/.cache/matplotlib/fontlist-v310.json # 消すべきcache
!ls -ll /root/.cache/matplotlib/
# キャッシュを削除する。
!rm /root/.cache/matplotlib/fontlist-v310.json # 消すべきcache
!ls -ll /root/.cache/matplotlib/
import matplotlib
#日本語表示
matplotlib.rcParams['font.family'] = "IPAGothic"
이를 바탕으로 데이터를 읽는다.
import pandas as pd
from IPython.display import display
pc = pd.read_csv('/content/pc_sjis.csv', encoding='shift_jis')
display(pc.head())
교재는 아래와 같다.
교재에서 교육용 PC 총 대수가 학습자용 PC 총 대수를 읽는 데 오류가 있는 것 같다.
데이터 분석, 시각화
어떤 경향을 읽을 수 있는지 파악하기 위해서는 먼저 산포도 행렬을 보여 보세요.
이번에는 seabrn 모듈을 사용해 보세요.
import seaborn as sns
pg = sns.pairplot(pc)
print(type(pg))
교재에 의거하다
학생 수와 교실 수처럼 직선적인 경향이 뚜렷한 것은'정보I'를 통해 배운 상관계수와 단회귀분석 등의 대상이다.이번에는 직선을 보는 경향이 아니기 때문에 wlan(무선랜)과 spp(PC당 학생 수)를 대상으로 고려해 보자.
따라서 wlan(무선랜)과 spp(컴퓨터당 학생 수)의 값을 뽑아 축소한다.
구체적으로 표준화되었다.
from sklearn.preprocessing import StandardScaler
# 値の抽出(wlan spp)
pc_ws = pc[['wlan', 'spp']]
# 標準化(StandardScalerを使用したやり方)
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())
처리된 데이터의 종류가 다르기 때문에 교과서와 마찬가지로 표준화되었다.
표준화에 관해서는 과거의 문장을 참고하시오.
https://qiita.com/ereyester/items/b78b22a76a8f50006880
다음에 모델을 만들고 분류합니다.
from sklearn.cluster import KMeans
#モデルの作成
km = KMeans(init='random', n_clusters=2 , random_state=0)
#予測
pc_cluster = km.fit_predict(pcs_df)
cluster_df = pd.DataFrame(pc_cluster, columns=['cluster'])
# 値の抽出(pref wlan spp cluster)
pcs_cluster_df = pd.concat([pc[['pref', 'wlan', 'spp']], cluster_df], axis=1)
display(pcs_cluster_df.head())
산포도로 결과를 확인하고 싶습니다.
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()
전체적으로 무선랜(wlan)을 바탕으로 분류된 것으로 보인다.
또 지바현과 사가현은 군의 중심에서 벗어난 것 같다.
한층 더 분석하다.
다음은 뚜렷한 상관관계를 읽을 수 있는 학생 수와 학습용 PC의 대수에 대한 도표를 아까 묶음으로 색을 구분해 도표를 그려보자.
# 値の抽出(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()
학생수(학생 수)에 컴퓨터(학습자용 PC 총 대수)의 비율이 크면 와이랜(일반교실 무선랜 정비율)의 정비율이 높은 그룹이 되는 경향이 있고, 그렇지 않으면 와이랜(일반교실 무선랜 정비율)의 정비율이 낮은 그룹이 있는 경향이 있다.
사가현의 컴퓨터(학습자용 PC 총 대수)는 학생수(학생수)에 비해 비율이 매우 크고, 반대로 지바현의 컴퓨터(학습자용 PC 총 대수)는 학생수(학생수)에 비해 비율이 매우 작다는 등 특징을 엿볼 수 있다.
소스 코드
Reference
이 문제에 관하여(k-means법으로 그룹을 나누는 데이터 분석(python)([고등학교 정보과 정보Ⅱ] 교사 연수용 교재)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ereyester/items/bc251ea3c329a38b5b82
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(k-means법으로 그룹을 나누는 데이터 분석(python)([고등학교 정보과 정보Ⅱ] 교사 연수용 교재)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ereyester/items/bc251ea3c329a38b5b82텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)