前提・実現したいこと
現在、重回帰分析を利用したコードを作成しており、statsmodelsを使用して開発をしています。
問題は、model.fit()の段階で以下のエラーが起きてしまったことです。
調べてもあまり正解がつかめず、手詰まり状態です。おかしな点や間違っている点などがありましたら、ご教授して頂けると幸いです。
前提として。
①データは、小数点の数値が格納されています。(+,ーを含む(標準化済み))
②カラムは、英字です。
③「説明変数の削除」での、float型以外の削除では文字を含むデータを削除するために記述しました。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "c:/Users/UserName/Desktop/Test/test.py", line 93, in <module> result = model.fit() File "C:\Users\UserName\anaconda3\lib\site-packages\statsmodels\regression\linear_model.py", line 313, in fit beta = np.dot(self.pinv_wexog, self.wendog) File "<__array_function__ internals>", line 5, in dot TypeError: can't multiply sequence by non-int of type 'float'
該当のソースコード
python
1# -*- coding: utf-8 -*- 2from sklearn.preprocessing import StandardScaler 3import numpy as np 4import pandas as pd 5import statsmodels.api as sm 6 7 8#>-------------------------------------------------------------------------------< 9# データ読み込み と ノイズの削除 10#>-------------------------------------------------------------------------------< 11df = pd.read_csv("c:\Users\UserName\Desktop\Test\csv\sheet1.csv", encoding='UTF-8', sep=",") 12# print(df) 13 14x = 5 # ヘッダーの行をxに入力 15header = df.iloc[x-2] # ヘッダー情報 16# print(header) 17 18y = 8 # データ開始の行をyに入力 19deta_df = df.iloc[y-2:] # データ情報 20deta_df = pd.DataFrame(deta_df) # DF化 21# print(deta_df) 22 23deta_df.columns = header # ヘッダーを追加 24# print(df) 25 26 27#>-------------------------------------------------------------------------------< 28#欠損値の処理 29#>-------------------------------------------------------------------------------< 30dammy_df = deta_df.dropna(how='all').dropna(how='all', axis=1) # 行列のすべてがNaNの部分を削除 31df = dammy_df.dropna(how='any') # 行にNaNが含まれていたら削除 32df = df.reset_index(drop=True) # indexの振り直し 33# print(df) 34 35 36#>-------------------------------------------------------------------------------< 37# 変数の格納 (col:説明変数, res:目的変数) 38#>-------------------------------------------------------------------------------< 39res_col = 'rate' # 目的変数(カラム名)を入力 40# 説明変数と目的変数を格納 41res = np.array(df[res_col]) 42col_name = [item for item in df.columns if item != res_col] 43# print(col_name) 44 45 46#>-------------------------------------------------------------------------------< 47# 説明変数の削除 48#>-------------------------------------------------------------------------------< 49# 削除するカラムリスト 50to_remove = [] 51 52# float型以外の削除(文字情報のデータは未対応) 53for col, item in df.iteritems(): 54 try: 55 df[col].astype('float64') 56 except: 57 to_remove.append(col) 58# print(to_remove) 59 60for r in to_remove: 61 df = df.drop(r, axis=1) 62 col_name.remove(r) 63# print(df) 64# print(col_name) 65 66 67#>-------------------------------------------------------------------------------< 68# 標準化 69#>-------------------------------------------------------------------------------< 70scaler = StandardScaler() 71scaler.fit(np.array(df)) 72df_std = scaler.transform(np.array(df)) 73df_std = pd.DataFrame(df_std, columns=df.columns) 74# print(df_std) 75 76 77#>-------------------------------------------------------------------------------< 78# 学習 と 結果 79#>-------------------------------------------------------------------------------< 80x = np.array(sm.add_constant(df_std[col_name])) 81model = sm.OLS(res, x) 82result = model.fit() 83print(result.summary()) 84
回答3件
あなたの回答
tips
プレビュー