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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

554閲覧

float関数で整数を浮動小数点数に変換できない

suugaku_nyumon

総合スコア37

Python 3.x

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

0グッド

0クリップ

投稿2022/07/23 16:23

編集2022/07/23 16:24

情報

使用しているバージョンはPython3.7.1です。

質問

pythonでcsvを読み込んで数値データを読み込もうとしましたが、何故か読み込めずエラーが発生します。20行目でプログラムはエラーで停止していると思います。整数が恐らく読み込めていないと思われますが、どのようにすれば読み込んでくれるでしょうか。

Traceback (most recent call last): File "AIC2.py", line 20, in <module> x_train = [float(value) for value in r1] File "AIC2.py", line 20, in <listcomp> x_train = [float(value) for value in r1] ValueError: could not convert string to float:

該当のソースコード

python3.7

1# AICのコード 2from sklearn import linear_model 3import numpy as np 4import matplotlib.pyplot as plt 5import math 6import csv 7 8# データの読み込み 9with open('D:\python\test2.csv') as f: 10 data_file = csv.reader(f) 11 row = [cell for cell in data_file] 12 13 r1 = row[0] 14 r2 = row[1] 15 r3 = row[2] 16 r4 = row[3] 17 18 f.close() 19 20x_train = [float(value) for value in r1] 21y_train = [float(value) for value in r2] 22x_test = [float(value) for value in r3] 23y_test = [float(value) for value in r4] 24 25x1 = np.array(x_train) 26y1 = np.array(y_train) 27x2 = np.array(x_test) 28y2 = np.array(y_test) 29 30# 最大次数の設定 31N = 18 32p = len(y_train) 33q = len(y_test) 34 35AIC_list = [] 36 37# N次までの多項式回帰モデルのAICを導出 38for n in range(0,N+1): 39 40 if n == 0: 41 termlist = np.array([]) 42 testlist = np.array([]) 43 44 termlist = np.concatenate([np.array([x1**0 + 1])],axis=0) 45 testlist = np.concatenate([np.array([x2**0 + 1])],axis=0) 46 47 X_1 = termlist.reshape(-1,1) 48 X_2 = testlist.reshape(-1,1) 49 50 model_AIC = linear_model.LinearRegression() 51 model_AIC.fit(X_1,y1) 52 53 y1_pred = model_AIC.predict(X_1) 54 mse = ((y1 - y1_pred) ** 2).sum() / len(y1) 55 L = 2 * math.pi * mse 56 AIC = len(y1_pred) * (math.log(L) + 1) + 2 * (n + 2) 57 print('AIC_' + str(n) + '=' + str(AIC)) 58 59 print('訓練用:' + str(model_AIC.score(X_1,y1)) + ' ' + 'テスト用:' + str(model_AIC.score(X_2,y2))) 60 AIC_list.append(AIC) 61 62 else: 63 termlist = np.array([]) 64 testlist = np.array([]) 65 66 for m in range(0,p): 67 termlist = np.concatenate([termlist,np.array([x1[m]**k for k in range(1,n+1)])],axis=0) 68 for m in range(0,q): 69 testlist = np.concatenate([testlist,np.array([x2[m]**k for k in range(1,n+1)])],axis=0) 70 71 X_1 = termlist.reshape(-1,n) 72 X_2 = testlist.reshape(-1,n) 73 74 model_AIC = linear_model.LinearRegression() 75 model_AIC.fit(X_1,y1) 76 77 y1_pred = model_AIC.predict(X_1) 78 mse = ((y1 - y1_pred) ** 2).sum() / len(y1) 79 L = 2 * math.pi * mse 80 AIC = len(y1_pred) * (math.log(L) + 1) + 2 * (n + 2) 81 print('AIC_' + str(n) + '=' + str(AIC)) 82 83 print('訓練用:' + str(model_AIC.score(X_1,y1)) + ' ' + 'テスト用:' + str(model_AIC.score(X_2,y2))) 84 AIC_list.append(AIC) 85 86# AICが最小となる次数の多項式回帰モデルを選択 87Minimum = np.min(AIC_list) 88 89for m in range(0,N+1): 90 if AIC_list[m] == Minimum: 91 print('AIC最小の次数は:{}次'.format(m)) 92 s = m 93 94# 上で選択した多項式回帰モデルのAIC,決定係数を導出 95if s == 0: 96 termlist = np.array([]) 97 testlist = np.array([]) 98 99 termlist = np.concatenate([np.array([x1**0 + 1])],axis=0) 100 testlist = np.concatenate([np.array([x2**0 + 1])],axis=0) 101 102 X_1 = termlist.reshape(-1,1) 103 X_2 = testlist.reshape(-1,1) 104 105 model_AIC = linear_model.LinearRegression() 106 model_AIC.fit(X_1,y1) 107 108 y1_pred = model_AIC.predict(X_1) 109 mse = ((y1 - y1_pred) ** 2).sum() / len(y1) 110 L = 2 * math.pi * mse 111 AIC = len(y1_pred) * (math.log(L) + 1) + 2 * (s + 2) 112 print('AIC_min' + ' = ' + str(AIC)) 113 print('訓練用:' + str(model_AIC.score(X_1,y1)) + ' ' + 'テスト用:' + str(model_AIC.score(X_2,y2))) 114 115else: 116 termlist = np.array([]) 117 testlist = np.array([]) 118 119 for m in range(0,p): 120 termlist = np.concatenate([termlist,np.array([x1[m]**(s+1-k) for k in range(1,s+1)])],axis=0) 121 for m in range(0,q): 122 testlist = np.concatenate([testlist,np.array([x2[m]**(s+1-k) for k in range(1,s+1)])],axis=0) 123 124 X_1 = termlist.reshape(-1,s) 125 X_2 = testlist.reshape(-1,s) 126 127 model_AIC = linear_model.LinearRegression() 128 model_AIC.fit(X_1,y1) 129 130 y1_pred = model_AIC.predict(X_1) 131 mse = ((y1 - y1_pred) ** 2).sum() / len(y1) 132 L = 2 * math.pi * mse 133 AIC = len(y1_pred) * (math.log(L) + 1) + 2 * (s + 2) 134 print('AIC_min' + ' = ' + str(AIC)) 135 print('訓練用:' + str(model_AIC.score(X_1,y1)) + ' ' + 'テスト用:' + str(model_AIC.score(X_2,y2))) 136 137# 選択した多項式回帰モデルの式とグラフを表示 138p = np.poly1d(np.polyfit(x1,y1,s)) 139xp = np.linspace(-2,2,100) 140 141print(p) 142print(model_AIC.coef_) 143print(model_AIC.intercept_) 144 145plt.subplot(1,2,1) 146plt.plot(xp,p(xp),color='red',label='Regression Curve(AIC)') 147plt.scatter(x1,y1,marker='+',label='Sample Data',s=60) 148plt.title("TRAINING",fontsize=20) 149plt.legend(loc="upper left",fontsize = 20) 150plt.tick_params(labelsize=18) 151 152plt.subplot(1,2,2) 153plt.plot(xp,p(xp),color='red',label='Regression Curve(AIC)') 154plt.scatter(x2,y2,marker='*',label='Test Data',s=60) 155plt.title('TESTING',fontsize=20) 156plt.legend(loc="upper left",fontsize = 20) 157plt.tick_params(labelsize=18) 158 159plt.show()

CSVの画像

イメージ説明

試したこと

x_train = [float(value) for value in r1]

の部分を

x_train = [float(value.replace(',', '')) for value in r1]

と変えてみましたが無駄でした。また、空白をスキップするために

data_file = csv.reader(f)

data_file = csv.reader(f, delimiter=' ', skipinitialspace=True)

としたところ、

Traceback (most recent call last): File "AIC2.py", line 20, in <module> x_train = [float(value) for value in r1] File "AIC2.py", line 20, in <listcomp> x_train = [float(value) for value in r1] ValueError: could not convert string to float: '1,2,3,4,5,6,7,8,9,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,'

とエラーメッセージが若干変わっていました。

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

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

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

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

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

melian

2022/07/23 16:31

空欄があることが原因なので、 x_train = [float(value) for value in r1 if value] としてみて下さい。おそらく r2 も同様かと思います。
suugaku_nyumon

2022/07/23 17:04

r1からr4まで「if value」を加えてみたところ、しっかり動作しました。 ありがとうございます。
guest

回答1

0

自己解決

melian様からのコメントで解決いたしました。

投稿2022/07/23 17:04

suugaku_nyumon

総合スコア37

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問