質問編集履歴

2

誤字の修正

2020/06/11 08:45

投稿

orionM42
orionM42

スコア0

test CHANGED
@@ -1 +1 @@
1
- FlaskでCSVファイルの読み込んでグラフ化、日付と時間範囲を指定してグラフ化したい
1
+ FlaskでCSVファイルの読み込んでグラフ化、日付と時間範囲を指定してグラフ化したい
test CHANGED
File without changes

1

これまでのコードの掲示

2020/06/11 08:45

投稿

orionM42
orionM42

スコア0

test CHANGED
File without changes
test CHANGED
@@ -85,3 +85,241 @@
85
85
 
86
86
 
87
87
  つきましては、コメント・アドバイスいただければ幸いに存じます。どうぞよろしくお願い致します。
88
+
89
+
90
+
91
+
92
+
93
+ ### 追記(6/11)
94
+
95
+
96
+
97
+ 現在までに作成したコードをお示し致します。下記ページを参考にして、以下のフォルダ構成で作業を行なっています。
98
+
99
+ https://pythonprogramming.net/adding-js-plugins-flask-highcharts-example/
100
+
101
+
102
+
103
+ root
104
+
105
+ ├── app.py
106
+
107
+ ├── static
108
+
109
+ │ ├── graph.js
110
+
111
+
112
+
113
+ ├── templates
114
+
115
+ │ ├── index.html
116
+
117
+
118
+
119
+
120
+
121
+ 上の「root」「static」「templates」のいずれもフォルダです。そして、rootフォルダの直下にapp.pyを置いてあります。app.pyは以下の通りです。
122
+
123
+
124
+
125
+ ```python
126
+
127
+ from flask import Flask, render_template
128
+
129
+ from flask import request, jsonify, url_for, redirect
130
+
131
+ from process import format_for_highcharts
132
+
133
+ import pandas as pd
134
+
135
+
136
+
137
+ # ref. https://pythonprogramming.net/adding-js-plugins-flask-highcharts-example/
138
+
139
+
140
+
141
+ app = Flask(__name__)
142
+
143
+
144
+
145
+ @app.route('/')
146
+
147
+ def graph(chartID = 'chart_ID', chart_type = 'line', chart_height=500):
148
+
149
+ chart = {"renderTo": chartID, "type": chart_type, "height": chart_height,}
150
+
151
+ series = [{"name": 'Label1', "data": [1,2,3]}, {"name": 'Label2', "data": [4, 5, 6]}]
152
+
153
+ title = {"text": 'Sample data'}
154
+
155
+ xAxis = {"categories": ['xAxis Data1', 'xAxis Data2', 'xAxis Data3']}
156
+
157
+ yAxis = {"title": {"text": 'yAxis Label'}}
158
+
159
+
160
+
161
+ return render_template('index.html', chartID=chartID, chart=chart, series=series, title=title, xAxis=xAxis, yAxis=yAxis)
162
+
163
+
164
+
165
+ if __name__ == "__main__":
166
+
167
+ app.run(debug=True, host='127.0.0.1', port=8080, passthrough_errors=True)
168
+
169
+ ```
170
+
171
+
172
+
173
+ 「templates」に置いたindex.htmlは以下の通りです。
174
+
175
+
176
+
177
+ ```html
178
+
179
+ <html>
180
+
181
+ <link rel="stylesheet" media="screen" href = "{{ url_for('static', filename='bootstrap.min.css') }}">
182
+
183
+ <meta name="viewport" content = "width=device-width, initial-scale=1.0">
184
+
185
+ <head>
186
+
187
+ </head>
188
+
189
+
190
+
191
+ <body class = "body">
192
+
193
+
194
+
195
+ <body>
196
+
197
+ <h3>{{ title }}</h3>
198
+
199
+ {% for p in paragraph %}
200
+
201
+ <p>{{ p }}</p>
202
+
203
+ {% endfor %}
204
+
205
+
206
+
207
+ {% if pageType == 'about' %}
208
+
209
+ <p>Contact box thing is here</p>
210
+
211
+ {% else %}
212
+
213
+ <p>This is sample page.</p>
214
+
215
+ {% endif %}
216
+
217
+
218
+
219
+
220
+
221
+ <div id={{ chartID|safe }} class="chart" style="height: 500px; width: 500px"></div>
222
+
223
+ <script>
224
+
225
+ var chart_id = {{ chartID|safe }}
226
+
227
+ var series = {{ series|safe }}
228
+
229
+ var title = {{ title|safe }}
230
+
231
+ var xAxis = {{ xAxis|safe }}
232
+
233
+ var yAxis = {{ yAxis|safe }}
234
+
235
+ var chart = {{ chart|safe }}
236
+
237
+ </script>
238
+
239
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
240
+
241
+ <script src="http://code.highcharts.com/highcharts.js"></script>
242
+
243
+ <script src="../static/graph.js"></script>
244
+
245
+
246
+
247
+ </body>
248
+
249
+
250
+
251
+ <nav class="navbar navbar-default" role="navigation">
252
+
253
+
254
+
255
+ <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
256
+
257
+ <ul class="nav navbar-nav"></ul>
258
+
259
+ <form class="navbar-form navbar-left" role="search">
260
+
261
+ <div class="form-group">
262
+
263
+ <input type="text" class="form-control" placeholder="Date and Time">
264
+
265
+ </div>
266
+
267
+ <button type="submit" class="btn btn-default">Submit</button>
268
+
269
+ </form>
270
+
271
+ </div>
272
+
273
+ </div>
274
+
275
+ </nav>
276
+
277
+
278
+
279
+ </body>
280
+
281
+ <script type = "text/javascript" src = "/static/bootstrap.min.js"></script>
282
+
283
+ ```
284
+
285
+
286
+
287
+ そして、「static」に置いたgraph.jsは以下の通りです。
288
+
289
+
290
+
291
+ ```js
292
+
293
+ $(document).ready(function() {
294
+
295
+ $(chart_id).highcharts({
296
+
297
+ chart: chart,
298
+
299
+ title: title,
300
+
301
+ xAxis: xAxis,
302
+
303
+ yAxis: yAxis,
304
+
305
+ series: series
306
+
307
+ });
308
+
309
+ });
310
+
311
+ ```
312
+
313
+
314
+
315
+
316
+
317
+ 上記のapp.pyを実行して、「http://127.0.0.1:8080」にアクセスするとindex.htmlが表示されます。そして、app.pyの「def graph」中のseriesで入力したデータ「"data": [1,2,3]」がプロットされます。このseries中のデータを、(冒頭に申し上げた)実際の解析結果にCSVファイル内のデータにしていけば良いのだとは思うのですが、実装できずに困っております。
318
+
319
+
320
+
321
+ また、上記の「2」に関してですが、index.html中に、ユーザーが日付と時間の範囲を入力するためのフォームと送信ボタン2つ(始点用と終点用)を設置することはできたのですが、ここから先、どのようにコードを拡張していけば良いのかが分からず困っております。アドバイスいただけましたら幸甚です。
322
+
323
+
324
+
325
+ 本システムは最終的にはLinuxサーバー(OSはFreeBSD)での運用を目指しております。私自身、このようなWebアプリ作成やサーバー運用の経験はなく、今回もその都度調べながら試行錯誤を繰り返しながら作業しております。的外れなことを申すこともあると思いますが、どうぞよろしくお願い申し上げます。