回答編集履歴
10
コメント修正
    
        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
不要リスト化削除
    
        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( 
     | 
| 
      
 71 
     | 
    
         
            +
                exp = list(zip(*calculate()))
         
     | 
| 
       72 
72 
     | 
    
         | 
| 
       73 
73 
     | 
    
         
             
                # 定数項、偏回帰係数の算出
         
     | 
| 
       74 
74 
     | 
    
         
             
                obj = np.array(z)    # 目的変数
         
     | 
8
関数名変更
    
        answer	
    CHANGED
    
    | 
         @@ -58,7 +58,7 @@ 
     | 
|
| 
       58 
58 
     | 
    
         
             
                z = list(map(float, z)) 
         
     | 
| 
       59 
59 
     | 
    
         | 
| 
       60 
60 
     | 
    
         
             
                # 変数の計算
         
     | 
| 
       61 
     | 
    
         
            -
                def  
     | 
| 
      
 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(* 
     | 
| 
      
 71 
     | 
    
         
            +
                exp = list(map(list, zip(*calculate())))
         
     | 
| 
       72 
72 
     | 
    
         | 
| 
       73 
73 
     | 
    
         
             
                # 定数項、偏回帰係数の算出
         
     | 
| 
       74 
74 
     | 
    
         
             
                obj = np.array(z)    # 目的変数
         
     | 
7
不要変数削除
    
        answer	
    CHANGED
    
    | 
         @@ -59,7 +59,7 @@ 
     | 
|
| 
       59 
59 
     | 
    
         | 
| 
       60 
60 
     | 
    
         
             
                # 変数の計算
         
     | 
| 
       61 
61 
     | 
    
         
             
                def variables():
         
     | 
| 
       62 
     | 
    
         
            -
                    for xi, yi 
     | 
| 
      
 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
変数名誤記訂正
    
        answer	
    CHANGED
    
    | 
         @@ -16,7 +16,7 @@ 
     | 
|
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
            def cut_out(csv):
         
     | 
| 
       18 
18 
     | 
    
         
             
                """座標データ切り出し"""
         
     | 
| 
       19 
     | 
    
         
            -
                _, x, y, z = zip(* 
     | 
| 
      
 19 
     | 
    
         
            +
                _, x, y, z = zip(*csv)
         
     | 
| 
       20 
20 
     | 
    
         
             
                return x[1:], y[1:], z[1:]
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         | 
5
変数名修正
    
        answer	
    CHANGED
    
    | 
         @@ -8,16 +8,15 @@ 
     | 
|
| 
       8 
8 
     | 
    
         
             
            import numpy as np
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
            def  
     | 
| 
      
 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  
     | 
| 
      
 17 
     | 
    
         
            +
            def cut_out(csv):
         
     | 
| 
       18 
     | 
    
         
            -
                """データ 
     | 
| 
      
 18 
     | 
    
         
            +
                """座標データ切り出し"""
         
     | 
| 
       19 
     | 
    
         
            -
                _, x, y, z = zip(* 
     | 
| 
      
 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 
     | 
    
         
            -
                 
     | 
| 
      
 48 
     | 
    
         
            +
                csv = read_csv()
         
     | 
| 
       50 
49 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                # データ 
     | 
| 
      
 50 
     | 
    
         
            +
                # 座標データ切り出し
         
     | 
| 
       52 
     | 
    
         
            -
                x, y, z =  
     | 
| 
      
 51 
     | 
    
         
            +
                x, y, z = cut_out(csv)
         
     | 
| 
       53 
52 
     | 
    
         | 
| 
       54 
53 
     | 
    
         
             
                # 文字列を削除した分のデータ数補正
         
     | 
| 
       55 
54 
     | 
    
         | 
4
データ数変数削除
    
        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( 
     | 
| 
      
 17 
     | 
    
         
            +
            def val_cut(data):
         
     | 
| 
       24 
18 
     | 
    
         
             
                """データの切り分け"""
         
     | 
| 
       25 
19 
     | 
    
         
             
                _, x, y, z = zip(*val2)
         
     | 
| 
       26 
     | 
    
         
            -
                #  
     | 
| 
      
 20 
     | 
    
         
            +
                # ヘッダ行削除
         
     | 
| 
       27 
     | 
    
         
            -
                return x[1: 
     | 
| 
      
 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( 
     | 
| 
      
 52 
     | 
    
         
            +
                x, y, z = val_cut(data)
         
     | 
| 
       62 
53 
     | 
    
         | 
| 
       63 
54 
     | 
    
         
             
                # 文字列を削除した分のデータ数補正
         
     | 
| 
       64 
55 
     | 
    
         | 
3
処理変更
    
        answer	
    CHANGED
    
    | 
         @@ -20,11 +20,11 @@ 
     | 
|
| 
       20 
20 
     | 
    
         
             
                    return list(csv.reader(f))
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
            def val_cut( 
     | 
| 
      
 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
処理修正
    
        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
一部変更
    
        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 
     | 
    
         
            -
                 
     | 
| 
      
 27 
     | 
    
         
            +
                return x[1:], y[1:], z[1:]
         
     | 
| 
       28 
     | 
    
         
            -
                return x, y, z
         
     | 
| 
       29 
28 
     | 
    
         | 
| 
       30 
29 
     | 
    
         | 
| 
       31 
30 
     | 
    
         
             
            def stat(o, e):
         
     |