雑多な技術系メモ

自分用のメモ。内容は保証しません。よろしくお願いします。

pytestについてのメモ

PyTestの階層問題

以下のようなディレクトリ構成の時、

.
├── main.py
└── tests
    └── test_main.py

ルートディレクトリから

pytest

を行うためには、tests/に"init"ファイルを置いておくと 上記のコードを実行できる

つまり、以下のようになる。

.
├── main.py
└── tests
    ├── __init__.py  # new
    └── test_main.py

簡単なテストサンプル

main.py

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/", methods=["GET"])
def index():
    if request.method == "GET":
        return render_template("index.html")


if __name__ == "__main__":
    app.run(threaded=True)

test_main.py

import unittest
import sys
import main


class TestMain(unittest.TestCase):

    def setUp(self):
        self.app = main.app.test_client()

    def test_index(self):
        response = self.app.get('/')
        assert response.status_code == 200

if __name__ == '__main__':
    unittest.main()

djangoのメモ

django mysql

pip install django==2.1.7
pip install pymysql

manage.pyかsetting.pyの一番上に

import pymysql
pymysql.install_as_MySQLdb()

setting.pyに

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 変更
        'NAME': 'database_name', # プロジェクトで使用するデータベース名
        'USER': 'root', # パソコンにインストールしたMySQLのユーザー名
        'PASSWORD': '', # 同上。そのパスワード
    }
}

django shell

>>> python manage.py shell

from myapps.models import MyModel 

credentials

https://www.django-rest-framework.org/api-guide/testing/

test

jwtで単体テストをする時のメモ

jwtでテストユーザーを作成してからテストを始める

サンプルコード

参考文献

https://stackoverflow.com/questions/47576635/django-rest-framework-jwt-unit-test

jsonで返す

from django.http import JsonResponse

def hogeView(request):
    hoge = {}

    # データのセットとか
 
    return JsonResponse(hoge)

test時

エラー

django.urls.exceptions.NoReverseMatch: Reverse for 'insert_memo' not found. 'insert_memo' is not a valid view function or pattern name.

testしたいappのurlsの urls.pyにapp_nameとurlpatternsにnameの追加する必要がある

urlpatterns = [
    path('', views.ListMemo.as_view()),
    path('<int:pk>/', views.DetailMemo.as_view()),
    path('insert_memo/', views.insert_memo, name="insert_memo"),
    path('get_memos/', views.get_memos, name="get_memos"),
]

app_name = "memos"

Metaクラス

以下、参照 メタクラスは「「class文の持つ定義する機能」を定義する機能」があるのです。 「「定義する機能」を定義する機能」というのがメタと名付けられている所以です。 https://teratail.com/questions/87695

ユーザーを作る時のメモ

Django Login/Logout Tutorial (Part 1) - William Vincent

djangoの自作ライブラリの場所について

  • すべてのアプリ全体で使うならsetting, urlsと同じところに
  • 各アプリで使うなら各アプリのディレクトリ配下

https://teratail.com/questions/5316

djangoのテストについて

https://docs.djangoproject.com/ja/3.0/intro/tutorial05/

djangoの設定

https://qiita.com/okoppe8/items/e60d35f55188c0ab9ecc

pandasかどうかの確認(testのページにつくる)

https://qiita.com/hatorijobs/items/8246e90db6b18d75338c

mysqlについてのメモ

mysqlのインストールなど

sudo apt-get --purge remove mysql-server mysql-common mysql-client
sudo apt update && sudo apt dist-upgrade && sudo apt autoremove
sudo apt-get install -y mysql-server mysql-client
sudo service mysqld start
sudo mysql_secure_installation
sudo mysql -u root -p

sql文の読み込み

mysqlにログインして

source xxx.sql

ログイン中のユーザーの確認

mysql>select USER();

ユーザーの確認

mysql>use mysql;
mysql>select * from user;

確率に関してのメモ

点推定

具体的な数値を推定すること

区間推定

母数がある区間に収まることを推定すること

不変性

定量の期待値が母数に一致すること

$$\begin{aligned} E[\hat{\theta}] = \theta \end{aligned}$$

一致性

標本の数が増加するにつれて、推定量は母数にに近づくこと。 具体的には以下の式で定義する

$$\begin{aligned} \lim{N\to \infty} P(|\hat{\theta}N-\theta| < \epsilon|) = 1 \end{aligned}$$ 上記のような状態に成る推定値(\hat{\theta})を一致推定量という

標本平均は一致推定量。それは

$$\begin{aligned} E[(\hat{\mu}-\mu)2] = \frac{1}{N}\sigma ^2 \end{aligned}$$ Nを無限に飛ばすと0となるので一致するので一致性推定量

信頼区間(Confidence interval)

(1-\alpha )の確率で、新の母数の値が区間([L, U])に入る区間のこと。

$$\begin{aligned} P(L \leq \theta \leq U) = (1-\alpha) \end{aligned}$$

  • L:下側信頼限界(Lower confidence limit)
  • U:上側信頼限界(Upper confidence limit)
  • (1-\alpha):信頼度
  • 区間([L, U])を(100(1-\alpha))信頼区間

scikit-learnについてのメモ

二乗誤差

>>> from sklearn.metrics import mean_squared_error
>>> y_true = [3, -0.5, 2, 7]
>>> y_pred = [2.5, 0.0, 2, 8]
>>> mean_squared_error(y_true, y_pred)

scikit-learn.org

クロスバリデーション

scikit-learn.org

訓練データとテストデータの分離

scikit-learn.org

backtesting.pyについてのメモ

Strategy

Strategy.data

  • Priceのdata。close等の値を取得できる
  • data.Close[-1]) is always the most recent value.

Strategy.sell

  • Let the strategy close any current position and use all available funds to short sell the asset for p

Strategy.buy

  • Let the strategy close any current position and use all available funds to buy the asset for price

Strategy.position

  • ポジションの確認

参考文献

https://kernc.github.io/backtesting.py/doc/backtesting/backtesting.html#backtesting.backtesting.Strategy.data