質問編集履歴

3

コード修正

2022/05/28 10:48

投稿

tayler
tayler

スコア0

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(self.data.column_name)
148
+ data_list.append(data.column_name)
149
149
 
150
150
  return data_list
151
151
 

2

コードの修正

2022/05/28 10:46

投稿

tayler
tayler

スコア0

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(database_datas.estimate_proxy_size)
98
+ calculate_eps = Calclate(estimate_proxy_size)
99
- calculate_dh = Calclate(database_datas.development_hours)
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
- for data in self.datas:
157
+ data_list = self.retrun_datalist()
147
- length += 1
148
- sum1 += data.estimate_proxy_size
158
+ sum_result = sum(data_list)
149
- sum2 += data.development_hours
159
+
150
-
151
- return sum1, sum2, length
160
+ return sum_result
152
161
 
153
162
  # 平均の計算
154
- def calc_avg(self, sum1, sum2, length):
163
+ def calc_avg(self):
155
- avg1, avg2 = 0, 0
164
+ data_list = self.retrun_datalist()
156
165
  try:
157
- avg1 = sum1 / length
166
+ avg = self.calc_sum() / len(data_list)
158
- avg2 = sum2 / length
159
167
 
160
168
  except ZeroDivisionError:
161
- avg1 = None
169
+ avg = None
162
- avg2 = None
170
+
163
-
164
- return avg1, avg2
171
+ return avg
165
-
166
172
  # 標準偏差の計算
167
- def calc_sd(self, avg1, avg2, length):
173
+ def calc_sd(self):
174
+ source_sd = []
168
- source_sd_x, source_sd_y, sd1, sd2, sd1_2, sd2_2 = 0, 0, 0, 0, 0, 0
175
+ data_list = self.retrun_datalist()
176
+ avg = self.calc_avg()
177
+ if avg == None:
169
- try:
178
+ try:
170
- for data in self.datas:
179
+ for i in range(len(data_list)):
171
- source_sd_x += ((data.estimate_proxy_size - avg1) ** 2)
172
- source_sd_y += ((data.development_hours - avg2) ** 2)
180
+ source_sd.append((data_list[i] - avg) ** 2)
181
+
173
- sd1_2 = source_sd_x / length
182
+ sd_2 = sum(source_sd) / len(source_sd)
174
- sd2_2 = source_sd_y / length
175
- sd1 = round(sqrt(sd1_2), 2)
183
+ sd = round(sqrt(sd_2), 2)
176
- sd2 = round(sqrt(sd2_2), 2)
184
+
177
-
178
- except ZeroDivisionError:
185
+ except ZeroDivisionError:
179
- sd1 = None
186
+ sd = None
180
- sd2 = None
187
+
181
-
182
- return sd1, sd2
188
+ return sd
183
189
  ```
184
190
  ```models.py
185
191
  from datetime import datetime

1

実際のコード添付

2022/05/28 10:25

投稿

tayler
tayler

スコア0

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の値の計算をしたいと考えています。