teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

10

コメント修正

2019/12/30 07:00

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -2,14 +2,12 @@
2
2
  動作確認できてませんが、ざっと見直してみました。
3
3
 
4
4
  ```
5
- # csvの操作用にインポート
6
5
  import csv
7
- # csvの数値計算用のライブラリをインポート
8
6
  import numpy as np
9
7
 
10
8
 
11
9
  def read_csv():
12
- """データ入力"""
10
+ """データ入力"""
13
11
  with open('C:/Users/.spyder-py3/191224~/testdataXYZ.csv') as f:
14
12
  return list(csv.reader(f))
15
13
 
@@ -21,13 +19,13 @@
21
19
 
22
20
 
23
21
  def stat(o, e):
24
- """定数項、偏回帰係数算出"""
22
+ """定数項、偏回帰係数算出"""
25
23
  e = np.vstack([np.ones(e.shape[1]), e]) # 定数項, 説明変数
26
24
  return np.linalg.lstsq(e.T, o)[0] # 偏回帰係数
27
25
 
28
26
 
29
27
  def output(a):
30
- # 結果表示
28
+ """結果表示"""
31
29
  print('算出式')
32
30
  print('z=(6*x^3)+(5*x^2*y)+(0*x*y^2)+(4*x*y)+3*x+2*y+0*x^2+0*y^2+y^3+100')
33
31
  print('答え合わせ')
@@ -44,14 +42,12 @@
44
42
 
45
43
 
46
44
  def main():
47
- # データ入力
45
+ # データ入力
48
46
  csv = read_csv()
49
47
 
50
48
  # 座標データ切り出し
51
49
  x, y, z = cut_out(csv)
52
50
 
53
- # 文字列を削除した分のデータ数補正
54
-
55
51
  # 数字の数値化
56
52
  x = list(map(float, x))
57
53
  y = list(map(float, y))

9

不要リスト化削除

2019/12/30 07:00

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -68,7 +68,7 @@
68
68
  y2 = yi**2
69
69
  xy = xi*yi
70
70
  yield x3, x2y, xy2, y3, x2, y2, xy
71
- exp = list(map(list, zip(*calculate())))
71
+ exp = list(zip(*calculate()))
72
72
 
73
73
  # 定数項、偏回帰係数の算出
74
74
  obj = np.array(z) # 目的変数

8

関数名変更

2019/12/30 06:55

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -58,7 +58,7 @@
58
58
  z = list(map(float, z))
59
59
 
60
60
  # 変数の計算
61
- def variables():
61
+ def calculate():
62
62
  for xi, yi in zip(x, y):
63
63
  x3 = xi**3
64
64
  x2y = xi**2*yi
@@ -68,7 +68,7 @@
68
68
  y2 = yi**2
69
69
  xy = xi*yi
70
70
  yield x3, x2y, xy2, y3, x2, y2, xy
71
- exp = list(map(list, zip(*variables())))
71
+ exp = list(map(list, zip(*calculate())))
72
72
 
73
73
  # 定数項、偏回帰係数の算出
74
74
  obj = np.array(z) # 目的変数

7

不要変数削除

2019/12/30 06:51

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -59,7 +59,7 @@
59
59
 
60
60
  # 変数の計算
61
61
  def variables():
62
- for xi, yi, zi in zip(x, y, z):
62
+ for xi, yi in zip(x, y):
63
63
  x3 = xi**3
64
64
  x2y = xi**2*yi
65
65
  xy2 = xi*yi**2

6

変数名誤記訂正

2019/12/30 06:49

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  def cut_out(csv):
18
18
  """座標データ切り出し"""
19
- _, x, y, z = zip(*data)
19
+ _, x, y, z = zip(*csv)
20
20
  return x[1:], y[1:], z[1:]
21
21
 
22
22
 

5

変数名修正

2019/12/30 06:46

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -8,16 +8,15 @@
8
8
  import numpy as np
9
9
 
10
10
 
11
- def csv_in():
11
+ def read_csv():
12
12
  """データの入力"""
13
13
  with open('C:/Users/.spyder-py3/191224~/testdataXYZ.csv') as f:
14
14
  return list(csv.reader(f))
15
15
 
16
16
 
17
- def val_cut(data):
17
+ def cut_out(csv):
18
- """データ切り分け"""
18
+ """座標データ切り出し"""
19
- _, x, y, z = zip(*val2)
19
+ _, x, y, z = zip(*data)
20
- # ヘッダ行削除
21
20
  return x[1:], y[1:], z[1:]
22
21
 
23
22
 
@@ -46,10 +45,10 @@
46
45
 
47
46
  def main():
48
47
  # データの入力
49
- data = csv_in2()
48
+ csv = read_csv()
50
49
 
51
- # データ切り分け
50
+ # 座標データ切り出し
52
- x, y, z = val_cut(data)
51
+ x, y, z = cut_out(csv)
53
52
 
54
53
  # 文字列を削除した分のデータ数補正
55
54
 

4

データ数変数削除

2019/12/30 06:40

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -9,28 +9,22 @@
9
9
 
10
10
 
11
11
  def csv_in():
12
- """データ数のカウント"""
13
- with open('C:/Users/.spyder-py3/191224~/testdataXYZ.csv') as f:
14
- return np.shape(list(csv.reader(f)))[0]
15
-
16
-
17
- def csv_in2():
18
12
  """データの入力"""
19
13
  with open('C:/Users/.spyder-py3/191224~/testdataXYZ.csv') as f:
20
14
  return list(csv.reader(f))
21
15
 
22
16
 
23
- def val_cut(k, data):
17
+ def val_cut(data):
24
18
  """データの切り分け"""
25
19
  _, x, y, z = zip(*val2)
26
- # 文字の削除
20
+ # ヘッダ行削除
27
- return x[1:k], y[1:k], z[1:k]
21
+ return x[1:], y[1:], z[1:]
28
22
 
29
23
 
30
24
  def stat(o, e):
31
25
  """定数項、偏回帰係数の算出"""
32
26
  e = np.vstack([np.ones(e.shape[1]), e]) # 定数項, 説明変数
33
- return np.linalg.lstsq(e.T, o)[0] # 偏回帰係数
27
+ return np.linalg.lstsq(e.T, o)[0] # 偏回帰係数
34
28
 
35
29
 
36
30
  def output(a):
@@ -51,14 +45,11 @@
51
45
 
52
46
 
53
47
  def main():
54
- # データ数の受け渡し
55
- k = csv_in()
56
-
57
48
  # データの入力
58
49
  data = csv_in2()
59
50
 
60
51
  # データの切り分け
61
- x, y, z = val_cut(k, data)
52
+ x, y, z = val_cut(data)
62
53
 
63
54
  # 文字列を削除した分のデータ数補正
64
55
 

3

処理変更

2019/12/30 06:35

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -20,11 +20,11 @@
20
20
  return list(csv.reader(f))
21
21
 
22
22
 
23
- def val_cut(j, val2):
23
+ def val_cut(k, data):
24
24
  """データの切り分け"""
25
25
  _, x, y, z = zip(*val2)
26
26
  # 文字の削除
27
- return x[1:], y[1:], z[1:]
27
+ return x[1:k], y[1:k], z[1:k]
28
28
 
29
29
 
30
30
  def stat(o, e):
@@ -60,6 +60,8 @@
60
60
  # データの切り分け
61
61
  x, y, z = val_cut(k, data)
62
62
 
63
+ # 文字列を削除した分のデータ数補正
64
+
63
65
  # 数字の数値化
64
66
  x = list(map(float, x))
65
67
  y = list(map(float, y))

2

処理修正

2019/12/30 06:31

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -60,9 +60,6 @@
60
60
  # データの切り分け
61
61
  x, y, z = val_cut(k, data)
62
62
 
63
- # 文字列を削除した分のデータ数補正
64
- del x[0], y[0], z[0]
65
-
66
63
  # 数字の数値化
67
64
  x = list(map(float, x))
68
65
  y = list(map(float, y))

1

一部変更

2019/12/30 06:25

投稿

shiracamus
shiracamus

スコア5406

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  無駄な変数の初期化はやめましょう。
2
- 動作確認できてませんが、ざっと。
2
+ 動作確認できてませんが、ざっと見直してみました
3
3
 
4
4
  ```
5
5
  # csvの操作用にインポート
@@ -24,8 +24,7 @@
24
24
  """データの切り分け"""
25
25
  _, x, y, z = zip(*val2)
26
26
  # 文字の削除
27
- del x[0], y[0], z[0]
27
+ return x[1:], y[1:], z[1:]
28
- return x, y, z
29
28
 
30
29
 
31
30
  def stat(o, e):