2. 파이톤이 접미사된 다변수 해석 4-1.계수 분석(scikit-learn)

인자분석은 여러 변수 간의 공통된 인자를 탐색하여 이러한 공통된 인자를 이용하여 데이터를 평가하는 기술이다.
예를 들어 시장 조사에서 어떤 문제에 대한 응답 데이터(다중 선택형에서도 몇 십 가지 선택)를 인자 분석하여 수량이 비교적 적은 인자로 바꾸었다.이번에는 이를 데이터로 분류해 분조분석(인분), 즉 유형별로 분류해 분석한 것이다.각 집단의 성별, 연령의 구성비가 어떠한지, 어떤 특성이 있는 사람이 시장 전체에서 차지하는 비중이 얼마나 되는지 이렇게 하는 것이다.
그렇다면 12개 과목의 시험 점수는 1000명으로 이 위조 데이터는 인자 분석을 위한 것이다.
다음은 scikit-learn을 이용하여 인자 분석의 줄거리를 잡는다.

(1) 라이브러리 읽기

# 数値計算ライブラリ
import numpy as np
import pandas as pd
# 可視化ライブラリ
import matplotlib.pyplot as plt
%matplotlib inline

(2) 위조 데이터 읽기

url = 'https://raw.githubusercontent.com/yumi-ito/sample_data/master/subject_scores.csv'
df = pd.read_csv(url)
df.head()
GiitHub에 저장된 csv 파일subject_scores.csv을 읽고 다섯 줄의 확인 내용을 시작합니다.

(개술 데이터의 𐁹기본 통계량

df.describe().apply(lambda s: s.apply(lambda x: format(x, 'g')))
표본수(count), 평균치(mean), 표준 편차(std), 최소치(min), 4분위수(25%, 50%, 75%), 최대치(max).
또한 기본 통계량의 취득describe()은 충분하지만 이렇게 되면 소수점 이하 6자리 0으로 배열되어 잘 보이기.apply() 이하로 조정하기 어렵다.

② 데이터 개요 ② 배포도

# matplotlibを日本語表示に対応させるモジュール
!pip install japanize-matplotlib
import japanize_matplotlib

# pandasのplottingメソッドをインポート
from pandas import plotting

# 散布図行列を表示
plotting.scatter_matrix(df, figsize=(12, 12), alpha=0.8)
plaotting 방법은 일반적인 plaot 방법보다 더 높은 도표를 그릴 수 있다.
그건 그렇고 인자 분석을 위한 위조 데이터이기 때문에 사실상 불가능한 높은 연관성을 볼 수 있다(또는 이렇게 안배된 것이다).

등 데이터 표준화

# sklearnの標準化モジュールをインポート
from sklearn.preprocessing import StandardScaler

# データを変換する計算式を生成
sc = StandardScaler()
sc.fit(df)

# 実際にデータを変換
z = sc.transform(df)

print(z)
print(z.shape)
표준화는 데이터를 평균치 0, 방차 1로 바꾸는 것이다(표준 편차도 1).표준화는 다음과 같은 공식에 따라 진행된다.
$\displaystyle\frac{x-\bar{x}}{s}$
데이터의 각 값 $x$에서 변수열의 평균 $\bar{x}달러를 빼고 표준 편차 $s로 나눈다.
가령 어떤 학생의 점수가 일본 역사상 70점이고 윤리는 60점이라고 가정하면
$일본사:\displaystyle\racc {70-65.574} {4.31545} = 1.025617달러
$윤리:\displaystyle\rac {60-49.588} {9.04544} = 1.149938달러
점수만 보면 일본 역사는 더 높은 것 같지만 윤리는 더 높다는 얘기다.이렇게 하면 평균치, 표준 편차 또는 단위가 다른 변수 사이에서 크기를 평가할 수 있다.

이는 표준화 득점(standard score) 또는 z 득점 등으로 불리며, 행렬의 형상은 원래의 데이터와 마찬가지로 1000명이 있다×12개 변수(12개 과목).

하나의 모형을 만들어 인자 득점을 계산하다

# sklearnのFactorAnalysis(因子分析)クラスをインポート
from sklearn.decomposition import FactorAnalysis as FA

# 因子数を指定
n_components=3

# 因子分析の実行
fa = FA(n_components, max_iter=5000) # モデルを定義
fitted = fa.fit_transform(z) # fitとtransformを一括処理

print(fitted)
print(fitted.shape)
천 명이었구나.×12 변수의 데이터는 1000명이다×세 개의 인자로 변환되다.개개인의 시험 점수가 개개인의 인자 점수로 바뀐 것이다.

획득 인자 부하 매트릭스

fa.components_.T
생성된 모델fa에 대해components_ 방법으로 인자 부하량을 얻어.T에서 행렬을 바꾸어 나타낸다.

인자를 설명하기 편리하도록, 줄 이름, 열 이름을 데이터 상자에 추가합니다.
# 変数Factor_loading_matrixに格納
Factor_loading_matrix = fa.components_.T

# データフレームに変換
pd.DataFrame(Factor_loading_matrix, 
             columns=["第1因子", "第2因子", "第3因子"], 
             index=[df.columns])
인자 부하량은 공통 인자가 각 변수에 미치는 영향도를 나타낸다.어떤 공통 요소가 잠재적으로 작용하여 변수의 하나하나에 영향을 미치는데 이것은 시험의 득점에 반영된다는 관점이 있다.
𐁨인자부하량의 절대치의 크기, ②인자부하량의 양/음을 토대로 인자를 해석한다.
첫 번째 요소는 모든 변수가 플러스이기 때문에 이 인자가 높을수록 모든 변수의 보조가 일치한다.따라서'종합학력'또는'기초학력'등으로 명명할 수 있다.
두 번째 요인은 국어, 영어의 절대치가 크고 긍정적이며 윤리도 약간 높다는 것이다.그래서 그것을'언어 능력'이라고 명명하자.
제3인자는 수학, 물리의 절대치가 매우 크고 모두 정적이기 때문에 이 인자는'수리 능력'이라고 할 수 있다.


인자분석은 이렇게 프로그램 라이브러리를 사용하면 매우 신속하게 완성되지만 실제로는 많은 일을 했다.또 인자수를 결정하는 방법은 어떻게 할지, 회전은 어떻게 할지, 기여율 등 주의해야 할 점도 적지 않다.계산은 기계가 하지만 그 속에서 의미는 사람의 일이라는 것을 발견했다.

좋은 웹페이지 즐겨찾기