質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

0回答

1812閲覧

python3を用いて因子分析を実行したい!!

yamayamaki

総合スコア4

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/11/04 04:00

使用している言語

Python3

前提・実現したいこと

因子分析を実行したい!!
のですが、その際に、因子得点、共通性、独自性、因子負荷行列もデータフレームとして出力したいのですが、どうすればよいのか見当が付きません。。。

言い換えると、
◆”def my_scaler(X, df_columns)”と、”def my_fa(X_sc, Y, n)”の関数の中で行われている操作を解読できないので、各行でそのような操作が実行されているのかを教えていただきたいです。
◆因子得点、共通性、独自性、因子負荷行列もデータフレームとして出力したい

※なお、以下のコートは
https://hk29.hatenablog.jp/entry/2018/06/09/010424
を参考に書きました。

該当のソースコード

import pandas as pd import numpy as np import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.patches as patches from sklearn import datasets from sklearn import linear_model from sklearn.preprocessing import StandardScaler from sklearn.decomposition import FactorAnalysis as FA def my_load_dataset(): # データセットを読み込みXとYで返す boston = datasets.load_boston() boston_df=pd.DataFrame(boston.data) # 説明変数Xをpandas形式に変換 boston_df.columns = boston.feature_names # カラム名を挿入 boston_df['PRICE'] = pd.DataFrame(boston.target) # 目的変数Yをカラム名PRICEで追記 x_df = boston_df.drop("PRICE", axis=1) # Xデータのみ抽出。pandas形式で列名有り #Y_df = boston_df.loc[:,['PRICE']] # Yデータのみ抽出。pandas形式で列名有り y = boston_df.PRICE # Yデータのみ抽出。カラム名を指定して抽出のため、列名はない df_columns = boston.feature_names return x_df, y, df_columns # XYデータをタプルで返す。[]を付けた場合はリストとなる。 def my_scaler(X, df_columns): # 説明変数Xを標準化 scaler = StandardScaler() x_sc = scaler.fit_transform(X) ### plot # sklearnの上記のようなfit関連の実行後、データの書式がnumpy形式となりカラム(列)名が無くなる。 # そのため、再度、pandas形式に変換する(次の2行)。これはグラフの軸名で使用するため。 x_sc = pd.DataFrame(x_sc) x_sc.columns = df_columns return x_sc def my_fa(X_sc, Y, n): # 因子分析 fa = FA(n_components=n, max_iter=500) fa.fit(X_sc) print("fa.components_") print(fa.components_) x_fa = fa.fit_transform(X_sc) ### plot x_data = x_fa[:,0] y_data = x_fa[:,1] fa0 = fa.components_[0] fa1 = fa.components_[1] plt.figure(figsize=(20,20)) plt.scatter(x_data, y_data, c=Y/len(set(Y)), marker=".") for i in range(fa0.shape[0]): plt.arrow(0, 0, fa0[i]*1.5, fa1[i]*1.5, color='r', width=0.0005, head_width=0.07, alpha=0.8) plt.text(fa0[i]*1.8, fa1[i]*1.8, X_sc.columns.values[i], color='r', fontsize = 18) plt.xlim([-2.5,2.5]) plt.ylim([-2.5,2.5]) plt.xlabel('Factor 1', fontsize = 20) plt.ylabel('Factor 2', fontsize = 20) plt.title(str(n)+" factor", fontsize = 20) plt.tick_params(labelsize = 18) plt.grid() c = patches.Circle(xy=(0, 0), radius=1, ec='r', fill=False) plt.axes().add_patch(c) #plt.show() plt.savefig("FA_" + str('%02g' %n) + '.png') if __name__ == '__main__': # データセットを読み込み次のの3つを返す。X, Y, 説明変数Xのカラム(列)名 data = my_load_dataset() X = data[0] Y = data[1] df_columns = data[2] print(X) # 説明変数Xを標準化 X_sc = my_scaler(X, df_columns) print(X_sc) # 因子分析 mycheck_Num=[2,3,12,13] for i in mycheck_Num: print(i) my_fa(X_sc, Y, i)

補足情報(FW/ツールのバージョンなど)

Python3
Anaconda navigator 1.9.12
Spyder3.3.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問