質問編集履歴
3
コード修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -95,8 +95,8 @@
|
|
95
95
|
global sum_result, avg_eps, avg_dh, sd_eps, sd_dh, r
|
96
96
|
|
97
97
|
database_datas = control_database.get_alldata()
|
98
|
-
calculate_eps = Calclate(estimate_proxy_size)
|
98
|
+
calculate_eps = Calclate(database_datas, estimate_proxy_size)
|
99
|
-
calculate_dh = Calclate(development_hours)
|
99
|
+
calculate_dh = Calclate(database_datas, development_hours)
|
100
100
|
|
101
101
|
# 平均の計算
|
102
102
|
avg_eps = calculate_eps.calc_avg()
|
@@ -145,7 +145,7 @@
|
|
145
145
|
data_list = []
|
146
146
|
column_name = self.column_name
|
147
147
|
for data in self.datas:
|
148
|
-
data_list.append(
|
148
|
+
data_list.append(data.column_name)
|
149
149
|
|
150
150
|
return data_list
|
151
151
|
|
2
コードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -95,8 +95,8 @@
|
|
95
95
|
global sum_result, avg_eps, avg_dh, sd_eps, sd_dh, r
|
96
96
|
|
97
97
|
database_datas = control_database.get_alldata()
|
98
|
-
calculate_eps = Calclate(
|
98
|
+
calculate_eps = Calclate(estimate_proxy_size)
|
99
|
-
calculate_dh = Calclate(d
|
99
|
+
calculate_dh = Calclate(development_hours)
|
100
100
|
|
101
101
|
# 平均の計算
|
102
102
|
avg_eps = calculate_eps.calc_avg()
|
@@ -136,50 +136,56 @@
|
|
136
136
|
|
137
137
|
class Calclate:
|
138
138
|
|
139
|
-
def __init__(self, datas):
|
139
|
+
def __init__(self, datas, column_name):
|
140
140
|
|
141
141
|
self.datas = datas
|
142
|
+
self.column_name = column_name
|
143
|
+
|
144
|
+
def retrun_datalist(self):
|
145
|
+
data_list = []
|
146
|
+
column_name = self.column_name
|
147
|
+
for data in self.datas:
|
148
|
+
data_list.append(self.data.column_name)
|
149
|
+
|
150
|
+
return data_list
|
151
|
+
|
152
|
+
def select_data_column(self):
|
153
|
+
pass
|
142
154
|
|
143
155
|
# 総和の計算
|
144
156
|
def calc_sum(self):
|
145
|
-
length, sum1, sum2 = 0, 0, 0
|
146
|
-
|
157
|
+
data_list = self.retrun_datalist()
|
147
|
-
length += 1
|
148
|
-
|
158
|
+
sum_result = sum(data_list)
|
149
|
-
|
159
|
+
|
150
|
-
|
151
|
-
return sum
|
160
|
+
return sum_result
|
152
161
|
|
153
162
|
# 平均の計算
|
154
|
-
def calc_avg(self
|
163
|
+
def calc_avg(self):
|
155
|
-
a
|
164
|
+
data_list = self.retrun_datalist()
|
156
165
|
try:
|
157
|
-
avg
|
166
|
+
avg = self.calc_sum() / len(data_list)
|
158
|
-
avg2 = sum2 / length
|
159
167
|
|
160
168
|
except ZeroDivisionError:
|
161
|
-
avg
|
169
|
+
avg = None
|
162
|
-
|
170
|
+
|
163
|
-
|
164
|
-
return avg
|
171
|
+
return avg
|
165
|
-
|
166
172
|
# 標準偏差の計算
|
167
|
-
def calc_sd(self
|
173
|
+
def calc_sd(self):
|
174
|
+
source_sd = []
|
168
|
-
|
175
|
+
data_list = self.retrun_datalist()
|
176
|
+
avg = self.calc_avg()
|
177
|
+
if avg == None:
|
169
|
-
try:
|
178
|
+
try:
|
170
|
-
for
|
179
|
+
for i in range(len(data_list)):
|
171
|
-
source_sd_x += ((data.estimate_proxy_size - avg1) ** 2)
|
172
|
-
source_sd
|
180
|
+
source_sd.append((data_list[i] - avg) ** 2)
|
181
|
+
|
173
|
-
sd
|
182
|
+
sd_2 = sum(source_sd) / len(source_sd)
|
174
|
-
sd2_2 = source_sd_y / length
|
175
|
-
sd
|
183
|
+
sd = round(sqrt(sd_2), 2)
|
176
|
-
|
184
|
+
|
177
|
-
|
178
|
-
except ZeroDivisionError:
|
185
|
+
except ZeroDivisionError:
|
179
|
-
sd
|
186
|
+
sd = None
|
180
|
-
|
187
|
+
|
181
|
-
|
182
|
-
return sd
|
188
|
+
return sd
|
183
189
|
```
|
184
190
|
```models.py
|
185
191
|
from datetime import datetime
|
1
実際のコード添付
test
CHANGED
File without changes
|
test
CHANGED
@@ -46,3 +46,154 @@
|
|
46
46
|
どのようにコードを変更すれば自分のやりたいことが実現できるのでしょうか?
|
47
47
|
また、自分のやりたい引数にカラム名を指定するということはできないのでしょうか?
|
48
48
|
ご回答よろしくお願いします。
|
49
|
+
|
50
|
+
追記
|
51
|
+
実際に実行したいコードを添付しておきます。
|
52
|
+
```views.py
|
53
|
+
from flask import (
|
54
|
+
Blueprint,
|
55
|
+
render_template,
|
56
|
+
request,
|
57
|
+
redirect,
|
58
|
+
url_for,
|
59
|
+
send_from_directory,
|
60
|
+
current_app,
|
61
|
+
make_response,
|
62
|
+
jsonify
|
63
|
+
)
|
64
|
+
from math import sqrt
|
65
|
+
import uuid
|
66
|
+
from apps.calc.forms import InputDataForm, CalcDataForm, DeleteDataForm
|
67
|
+
from pathlib import Path
|
68
|
+
from apps.calc.models import Data
|
69
|
+
from apps.app import db
|
70
|
+
import pandas as pd
|
71
|
+
import os
|
72
|
+
import matplotlib.pyplot as plt
|
73
|
+
from apps.calc.classes.input import Input
|
74
|
+
from apps.calc.classes.control_database import ControlDatabase
|
75
|
+
from apps.calc.classes.calculate2 import Calclate
|
76
|
+
|
77
|
+
|
78
|
+
calc = Blueprint(
|
79
|
+
"calc",
|
80
|
+
__name__,
|
81
|
+
template_folder="templates",
|
82
|
+
static_folder="static",
|
83
|
+
)
|
84
|
+
|
85
|
+
avg_esp, avg_dh = 0, 0
|
86
|
+
sd_esp, sd_dh = 0, 0
|
87
|
+
sd_2 = 0
|
88
|
+
r, csd = 0, 0
|
89
|
+
|
90
|
+
|
91
|
+
control_database = ControlDatabase(Data)
|
92
|
+
|
93
|
+
@calc.route('/result', methods=["GET", "POST"])
|
94
|
+
def calc_result():
|
95
|
+
global sum_result, avg_eps, avg_dh, sd_eps, sd_dh, r
|
96
|
+
|
97
|
+
database_datas = control_database.get_alldata()
|
98
|
+
calculate_eps = Calclate(database_datas.estimate_proxy_size)
|
99
|
+
calculate_dh = Calclate(database_datas.development_hours)
|
100
|
+
|
101
|
+
# 平均の計算
|
102
|
+
avg_eps = calculate_eps.calc_avg()
|
103
|
+
avg_dh = calculate_dh.calc_avg()
|
104
|
+
|
105
|
+
# 標準偏差の計算
|
106
|
+
sd_eps = calculate_eps.calc_sd()
|
107
|
+
sd_dh = calculate_dh.calc_sd()
|
108
|
+
|
109
|
+
|
110
|
+
return render_template("calc/result.html", avg1=avg_eps, avg2=avg_dh, sd1=sd_eps, sd2=sd_dh)
|
111
|
+
```
|
112
|
+
```caluclate.py
|
113
|
+
from flask import (
|
114
|
+
Blueprint,
|
115
|
+
render_template,
|
116
|
+
request,
|
117
|
+
redirect,
|
118
|
+
url_for,
|
119
|
+
send_from_directory,
|
120
|
+
current_app,
|
121
|
+
make_response,
|
122
|
+
jsonify
|
123
|
+
)
|
124
|
+
from math import sqrt
|
125
|
+
import uuid
|
126
|
+
from apps.calc.forms import InputDataForm, CalcDataForm, DeleteDataForm
|
127
|
+
from pathlib import Path
|
128
|
+
from apps.calc.models import Data
|
129
|
+
from apps.app import db
|
130
|
+
import pandas as pd
|
131
|
+
import os
|
132
|
+
import matplotlib.pyplot as plt
|
133
|
+
from apps.calc.classes.input import Input
|
134
|
+
from apps.calc.classes.control_database import ControlDatabase
|
135
|
+
|
136
|
+
|
137
|
+
class Calclate:
|
138
|
+
|
139
|
+
def __init__(self, datas):
|
140
|
+
|
141
|
+
self.datas = datas
|
142
|
+
|
143
|
+
# 総和の計算
|
144
|
+
def calc_sum(self):
|
145
|
+
length, sum1, sum2 = 0, 0, 0
|
146
|
+
for data in self.datas:
|
147
|
+
length += 1
|
148
|
+
sum1 += data.estimate_proxy_size
|
149
|
+
sum2 += data.development_hours
|
150
|
+
|
151
|
+
return sum1, sum2, length
|
152
|
+
|
153
|
+
# 平均の計算
|
154
|
+
def calc_avg(self, sum1, sum2, length):
|
155
|
+
avg1, avg2 = 0, 0
|
156
|
+
try:
|
157
|
+
avg1 = sum1 / length
|
158
|
+
avg2 = sum2 / length
|
159
|
+
|
160
|
+
except ZeroDivisionError:
|
161
|
+
avg1 = None
|
162
|
+
avg2 = None
|
163
|
+
|
164
|
+
return avg1, avg2
|
165
|
+
|
166
|
+
# 標準偏差の計算
|
167
|
+
def calc_sd(self, avg1, avg2, length):
|
168
|
+
source_sd_x, source_sd_y, sd1, sd2, sd1_2, sd2_2 = 0, 0, 0, 0, 0, 0
|
169
|
+
try:
|
170
|
+
for data in self.datas:
|
171
|
+
source_sd_x += ((data.estimate_proxy_size - avg1) ** 2)
|
172
|
+
source_sd_y += ((data.development_hours - avg2) ** 2)
|
173
|
+
sd1_2 = source_sd_x / length
|
174
|
+
sd2_2 = source_sd_y / length
|
175
|
+
sd1 = round(sqrt(sd1_2), 2)
|
176
|
+
sd2 = round(sqrt(sd2_2), 2)
|
177
|
+
|
178
|
+
except ZeroDivisionError:
|
179
|
+
sd1 = None
|
180
|
+
sd2 = None
|
181
|
+
|
182
|
+
return sd1, sd2
|
183
|
+
```
|
184
|
+
```models.py
|
185
|
+
from datetime import datetime
|
186
|
+
|
187
|
+
from apps.app import db
|
188
|
+
from werkzeug.security import generate_password_hash
|
189
|
+
|
190
|
+
|
191
|
+
class Data(db.Model):
|
192
|
+
__tablename__ = "datas"
|
193
|
+
id = db.Column(db.Integer, primary_key=True)
|
194
|
+
estimate_proxy_size = db.Column(db.Float)
|
195
|
+
development_hours = db.Column(db.Float)
|
196
|
+
created_at = db.Column(db.DateTime, default=datetime.now)
|
197
|
+
```
|
198
|
+
|
199
|
+
このコードで、Dataモデルのestimate_proxy_sizeやdevelopment_hoursの値の計算をしたいと考えています。
|