旅好きエンジニアのメモ

旅のこと映画、統計、会計、プログラミングなど、気の向くままに語ります

pythonで配列追加の処理速度の違い

pythonで配列追加の処理速度を比べてみました。

"append"を使う方法
import time
def process():
    result = []
    start_time = time.time()
    for _ in range(10000000):
        result.append("test")
    processing_time = time.time() - start_time
    return processing_time

In [5]: process()
Out[5]: 0.8140008449554443
"+="を使う方法
import time
def process():
    result = []
    start_time = time.time()
    for _ in range(10000000):
        result += "test"
    processing_time = time.time() - start_time
    return processing_time
In [8]: process()
Out[8]: 1.365239143371582

rubyとか普段使っていたら記号とか使いがちですが、 ここはスタンダードにappendを使うほうが倍ぐらい早い感じでした。

pythonのリスト内包表記と普通のfor文どちらが早いか

リスト内包表記と普通のfor文どちらが早いかを確かめてみました。

普通のfor文
import time
def process():
    start_time = time.time()
    result = []
    for i in range(30000000):
        result += [i]

    processing_time = time.time() - start_time
    return processing_time
In [97]:  process()
Out[97]: 4.502268075942993
リスト内包表記
import time
def process():
    start_time = time.time()
    result = [i for i in range(3000000)]
    processing_time = time.time() - start_time
    return processing_time
In [91]: process()
Out[91]: 1.3883929252624512

結果的にリスト内包表記のほうが3倍早かったです。

pythonの標準入力で気をつける

pythonの標準入力

なんか色んな記事を見ていると、

import sys
sys.stdin.read()
sys.stdin.readline()
sys.stdin.readlines()

rau_input()

などがありますが rau_input()はpython2なので

python3は下記を使いましょう。

input()

それにしてもpythonの記事を書くときはバージョンの明記は必要な気がします。 (まぁ、自分も全部できていないですが。。。)

djangoでjupyter notebookを使う方法

djangoでjupyter notebookを使おう

pythonicでデータ分析をする方ならjupyetrを使う方は多いのではないでしょうか?

ただ、web開発で何かしらのフレームワーク使っていたらjupyter使うって感じにならないですよね。。。 (自分だけかもしれないですが)

しかし、web開発でデータ分析している所があったら、そこはDB通してjupyterでやったほうが楽な気がします。

なので、今回はdjangoでjupyterを使う方法書いていきます。

まずは djangoのextensionをインストールしましょう!

pip install django-extensions
次にsetting.pyに以下のように追加しましょう
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',
    'django_extensions',  # この行を追加
)
jupyter起動

そしてあとはshell_plusに以下のようにoptionを追加しましょう。

python manage.py shell_plus --notebook

これでjupyter使えちゃいます! 便利!!

25日の移動平均線をpythonで求める方法

亀のような遅さでトレードの自動売買システムを作成しています。。。 djangoで作ろうとしているので完成が見えない。。。(フロントなくそうかな。。。bottleにしようか。。。)

今回は25日の移動平均線を求めてみました。

はい、下のコードで終わりです!!(pandasすごく便利です)

import pandas as pd
moving_average_list = pd.rolling_mean(daily_bars, 25, 1)

まぁ、実際はここから色々な指標を作成していますがここでは書かないです(笑)

pythonでseleniumでブラウザ自動で動かしてみた(mac)

運営しているサイトを全画面自動でとりあえずたくさん開きたい時ってないですか? (アプリケーションエラーは拾ってくれるようにしてるので、とりあえずページ開いちゃってバグを洗い出すとな感じです。)

今回はとりあえずyahoo finance(米)で試してみます。

pythonselenium を入れてみよう!

pip install selenium

次にchrome用のドライバを入れてください Chrome用ドライバーのインストール

https://sites.google.com/a/chromium.org/chromedriver/downloads

なお、自分はmacですので、下記コマンドで入れました。(こっちのほうがpathとか気にしなくていいので楽です)

brew install chromedriver

以下、6つのyahoo financeの銘柄を開くコードです。 from selenium import webdriver

def start_site_open_test():
    #chrome開きます
    driver = webdriver.Chrome()
    #画面おっきくします
    driver.maximize_window()
    #行きたいページのurl打ち込みます(今回はyahoo)
    url_a = 'https://finance.yahoo.com/quote/'
    url_b = '/history'
    site_open(driver,url_a, url_b)
    driver.close()

def site_open(driver, url_a, url_b):
    #とりあえず6つの銘柄だけ(任意で変えてください)
    stock = ['FB','SNAP','AAPL','NVDA','MSFT','GOOG']
    for i in stock:
        url = url_a + i + url_b
        driver.get(url)

start_site_open_test()

djangoのORMでwhere文の大なり(>)を書きたい時

例えば、昨日の日付から現在までのデータを取得したい時

 

yesterday = datetime.date.today() - datetime.timedelta(1)
example_table.objects.all().values().filter(registeredDateTime__gt=yesterday)

 

filterでいつもの"="の前に

"__gt"をつけてやればいいだけです。

 

> は __gt=

= は =