お世話になりました。
https://qiita.com/kotai2003/items/0c96143b7d6e84629d99
https://zadig.akeo.ie/
https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h/windows
流行の科学技術を勝手に追いかけるブログ 人工知能 仮想現実 ブロックチェーン
東洋インタレスト出版
Python関係です
お世話になりました。
https://qiita.com/kotai2003/items/0c96143b7d6e84629d99
https://zadig.akeo.ie/
https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h/windows
datetimeで作った時刻データでは、秒よりも細かい6桁の数字が含まれています。
単位はマイクロ秒 なので ミリ秒で出したいときは下記のように出せます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import datetime import time # 1秒のsleep時間を正確に測定する time_init = datetime.datetime.now() time.sleep(1.0) time_delta = datetime.datetime.now() - time_init # 確認 print(time_delta) print(time_delta.seconds, "sec") print(time_delta.microseconds, "micro sec") print(time_delta.seconds * 1000 + time_delta.microseconds / 1000, 'msec') |
1 2 3 4 |
0:00:01.000511 1 sec 511 micro sec 1000.511 msec |
センサーから時系列で入ってくるデータを変数に格納したい時、ありますよね。
普段はlistとしてli = []のような空リストを作ってからli.append(入ってくるデータ) でどんどんリストの要素として追加していましたが、時間方向の分解能を高めるために、numpyを使おうとすると、直感ではうまくできなかったので、メモしておきます。
numpyのappendは破壊的でないため、変数に再代入しなくてはappendの結果が反映されません。注意点はここだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import numpy as np import datetime ar = [] li = [] for i in range(3): time_init = datetime.datetime.now() time.sleep(1.0) time_delta = datetime.datetime.now() - time_init ar = np.append(ar, time_delta.microseconds) li.append(time_delta.microseconds) print('ar : ', ar) print('li : ', li) |
今日はflaskが実行されているサーバーのIPアドレス127.0.0.1:5000に対して、クライアントからPOSTするやりかたを見ていきます。
flaskのメインスクリプトに下記の関数を追加します。
1 2 3 4 5 6 7 |
# get post put deleteを使う場合 @app.route('/post', methods=['GET', 'POST', 'PUT', 'DELETE']) def show_post(): # 送られてきたデータは flask.request.values に格納されている。 return str(request.values) |
これをVScode右上の再生ボタンでRUNさせておきます。
127.0.0.1:5000でRUNし始めたはずです。
これに対して、クライアント側からPOSTするために、pythonファイルを新規作成してrequestsモジュールのpostメソドを使ってアクセスしてみます。
1 2 3 4 5 6 7 8 9 10 11 |
import requests # flaskサーバーにrequestsモジュールを使用して # アクセスしてみる url = 'http://127.0.0.1:5000/post' # ディクショナリ形式でデータを渡してみる r = requests.post(url, data={'username': 'mike'}) # 返ってきたデータを確認する print(r.text) |
で、これをVScode上ではなくて、cmdを開いてそこから実行すると。
1 2 3 |
C:\Users\omoiy\scripts\flask_test>python show_post_test.py CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('username', 'mike')])]) |
以上、GET, PUT, DELETEも同じやり方です。
IPアドレスは127.0.0.1:5000がデフォルトとのこと。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
from flask import Flask #クラスを作る from flask import g # グローバルな値を入れる from flask import render_template from flask import request from flask import Response # グローバル宣言 app = Flask(__name__) # トップページを作成する @app.route('/') def toppage(): return 'this is the toppage!' # トップページ以下にpage1を作成する @app.route('/page1') def page1(): return 'this is the page1' # 引数usernameを入れる場合 # 入れない場合も考慮して2個作る @app.route('/page2') @app.route('/page2/<username>') def page2(username=None): # デフォルトにNoneを入れておく return 'user :{}'.format(username) # メイン関数(flaskの実行) def main(): app.debug = True app.run(host='127.0.0.1', port=5000) # メイン実行スクリプト if __name__ == '__main__': main() |
同層にディレクトリtemplatesを作成して、その中に下記のようなhtmlファイルを作成します。{% ○○ %} を使うとif文が使用できたりします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>hello</title> </head> <body> {% if username %} Hello {{username}} {% else %} Hello {% endif %} </body> </html> |
pythonファイルにはrender_templateを使用して下記のようにhtmlファイルを呼び出します。
1 2 3 4 5 |
# テンプレートを使う場合 flask.render_template() @app.route('/page3') @app.route('/page3/<username>') def page3(username=None): return render_template('hello.html', username=username) |
次回は、get, post, ,put, delete をやっっていきます。
一定の時間間隔でプログラムを実行する方法を考える必要がありましたので、考えたスクリプトをメモしておきます。
これを使えば、OpenCVを使っているときに、while文の中で動画を取得し処理している最中に、任意のインターバルで時刻や分析データをファイルに保存することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# ---- 一定の時間間隔でプログラムを実行する方法 ---- # interval_test.py import datetime import numpy as np initial_time = datetime.datetime.now() time_cnt = 0 # sec 初期値 time_interval = 1 # sec 定期実行の時間間隔 while True: # 現在時間 sec current_time = (datetime.datetime.now() - initial_time).total_seconds() # time_interval毎に実行する if current_time >= time_cnt : # 定期実行の内容 print('if文の中に入りました', time_cnt, current_time) # 次回、定期実行する時刻 time_cntを更新 time_cnt += time_interval # sec |
0.001sec つまり 0~1msec程度の遅れがあります。
私の用途では、十分許容できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
if文の中に入りました 0 0.0 if文の中に入りました 1 1.0 if文の中に入りました 2 2.000031 if文の中に入りました 3 3.0 if文の中に入りました 4 4.0 if文の中に入りました 5 5.001031 if文の中に入りました 6 6.000024 if文の中に入りました 7 7.000025 if文の中に入りました 8 8.000025 if文の中に入りました 9 9.00003 if文の中に入りました 10 10.001025 if文の中に入りました 11 11.000001 if文の中に入りました 12 12.001025 if文の中に入りました 13 13.0 if文の中に入りました 14 14.0 if文の中に入りました 15 15.001025 if文の中に入りました 16 16.0 if文の中に入りました 17 17.0 if文の中に入りました 18 18.0 if文の中に入りました 19 19.0 if文の中に入りました 20 20.000024 |
以上
チャットボット用の訓練データをクリーニングするために、正規表現を使ってルビを削除する方法をメモしておきます。
1 2 3 4 5 6 7 |
import re s = 'ペガサス【ぺがさす】に乗って、空【そら】を飛翔【ひしょう】する英雄【えいゆう】ペルセウス' print(s) s = re.sub('【[^】]+】', '', s) print(s) |
詳しくは↓↓↓
こんにちはKeita_Nakamoriです。
Scipyのおさらいをしました。
科学技術用モジュールというだけあって、
補間 スプライン補間 interplate linalg
特異値分解 LU分解 コレスキー分解
数値積分 微分方程式 integrate
最適化 二分法 ブレント法 ニュートン法 optimize
高速フーリエ変換 信号処理 画像処理
などなど、盛りだくさんです。
線形代数関係は、さっぱりなところもありましたので、必要になったときに再び掘り下げて学習しなおそうと思います。
こんにちは Keita_Nakamorです。
Numpyをおさらいしました。
pythonに慣れている人であればNumpyは普段から使用するのでサラッと流す程度で良いでしょう。
data_scientist_chapter_5_numpy