10分でPythonの科学計算環境構築(anaconda+ Visual Studio Code)
10分で科学計算+pythonのコーディング環境構築(自動補完)まで。
anacondaとVisual Studio Codeの組み合わせになる。
Visual Studio Code(VScode)はMS製のIDEだがmac、linuxでも動く。
Markdownでも優秀なツールであり、少しマイナーだがお勧め。
環境構築10分はダウンロード時間を除く。
確認はWindows10だが、mac、linuxも同じ手順、時間で行ける。
1.anacondaのインストール
Download Anaconda Now! | Continuum
2.Visual Studio Code(VScode)のインストール
3.Visual Studio Codeの設定
① python用設定のインストール (下図のようこそ→pythonをクリック→はい)
② フォルダに移動(どこでも良い)
③ 設定を選ぶ
④ 図の通りに書き換える
1) python.pythonpathで検索
2) “python.pythonPath"を選ぶ
3) ワークスペース設定を選ぶ
4) ワークスペースの"python.pythonPath"に下記内容を記載
"python.pythonPath”: “C:\ProgramData\Anaconda3\python.exe”
“python.autoComplete.extraPaths”: [“C:\ProgramData\Anaconda3\Lib\site-packages”
],"
⑤ (゚д゚)ウマー(実行はctrl+F5)
Code runnerという拡張を入れると右クリックから実行可能。
便利な世の中になったものだ。
Python3.6にOpenCVをインストール(windows10)
忘れそうなのでメモ書き。
(現状のOpenCVはpython3.5までしか対応していない)
1.Anacondaでpython3.6を入れる。
Download Anaconda Now! | Continuum
2.conda-forge/opencv-feedstockを入れる
github.com
手順(コマンドプロンプト)
conda config --add channels conda-forge conda install opencv
普通に使えて(゚д゚)ウマー
conda-forgeの皆様に感謝
Pythonで株・為替・先物解析 その1
Pythonで株・為替・先物解析の解析をしてみる。
そのままmatplotlibで描画すると土日祝日が空欄になるため、軸を別設定した。
import jsm import datetime import pandas as pd import matplotlib.dates as mdate import matplotlib.finance import pylab as plt import numpy as np import sqlite3 import pandas.io.sql as psql ################## #set stock number ################## stock_name = 8411 #SQLlite con = sqlite3.connect("data.db") c = con.cursor() try: c.execute("""create table all_sort(name integer ,date integer ,open integer ,high integer ,low integer ,close integer ,volume integer);""") except: sql = 'select name,date from all_sort' a = c.execute(sql) for i, j in a: print i,j #JSMによる日足習得 d = datetime.datetime.today() q = jsm.Quotes() start_date = datetime.date(2015, 1, 1) yesterday = datetime.date.today() - datetime.timedelta(1) end_date = yesterday this_year = q.get_historical_prices(stock_name, jsm.DAILY, start_date, end_date) #SQLに格納後Pandasへ移す quotes = [] days=[] colums_sql= u"insert into all_sort values(?,?,?,?,?,?,?)" for i,each_day in enumerate(this_year): day =mdate.date2num(each_day.date) days.append(tuple([day])) quotes.append([i,each_day.open,each_day.close,each_day.high,each_day.low]) for_sql = [stock_name,each_day.date,each_day.open,each_day.close,each_day.high,each_day.low,each_day.volume] c.execute(colums_sql,for_sql) sql = 'select * from all_sort' df = psql.read_sql(sql,con) df2 = df[df['name'] == stock_name] df2['date'] = df2['date'].apply(pd.to_datetime) ascend_df = df2.sort_index(by='date',ascending=True) #con.commit() ############################ #plot ############################ # SMA EMA sma5 = pd.rolling_mean(df['close'], window=5) sma5 = sma5.dropna() ewma = pd.stats.moments.ewma ewma5 = ewma(df['close'], span=5) ewma25 = ewma(df['close'], span=25) #ewma25 = ewma25.dropna() #ロウソク足で描画 fig = plt.figure() fig.subplots_adjust(bottom=0.2) ax = fig.add_subplot(111) ax.set_xticks(range(0,len(quotes),5)) ax.set_xticklabels([mdate.num2date(days[index][0]).strftime('%y %b %d') for index in ax.get_xticks()]) matplotlib.finance.candlestick(ax, quotes,colorup='red',colordown='blue') ax.xaxis_date() ax.autoscale_view() plt.plot(sma5,label="SMA5") plt.plot(ewma5,label="EMA5") plt.plot(ewma25,label="EMA25") plt.setp( plt.gca().get_xticklabels(),rotation=90, horizontalalignment='left') plt.legend(loc="best") ax.invert_xaxis() plt.show()
後日修正予定。
次回はコマ足(平均足)を検討する予定
参考
How do I plot only weekdays using Python's matplotlib candlestick? – | Mauricio
VBAでソート
とりあえず書いてみた。
以下のようなデータがあるとして
pos cur lots price Buy USD 10,000,000 120.5 Buy USD 10,000,000 119.5 Buy EUR 1,000,000 132.5 Buy EUR 1,000,000 130.5 Sell USD 10,000,000 121.5 Buy USD 10,000,000 118.5 Sell USD 10,000,000 122.5
posやcur、up or down指定で並べ替え後、行頭に移動
pos cur lots price Buy USD 10,000,000 120.5 Buy USD 10,000,000 119.5 Buy USD 10,000,000 118.5 Sell USD 10,000,000 121.5 Sell USD 10,000,000 122.5 Buy EUR 1,000,000 132.5 Buy EUR 1,000,000 130.5
VBAのコード
Sub sort_cur_pos() Dim first_row As Long Dim last_row As Long Dim row_counts As Long Dim cur As String Dim pos As String Dim up_or_down As String 'ソートする項目と方法を指定 cur = "USD" pos = "Sell" up_or_down = "up" '全体選択 cells(1, 1).Select Selection.CurrentRegion.Select '行数のカウント all_row_end = ActiveWindow.RangeSelection.End(xlDown).Row '全体を選択してプレソート cells_area = ActiveWindow.RangeSelection.Address Worksheets("Sheet1").Range(cells_area) _ .Sort Key1:=cells(1, 2), order1:=xlDescending, _ Key2:=cells(1, 1), order2:=xlAscending '指定項目の範囲を調査して格納 For i = 1 To all_row_end Step 1 If cells(i, 2) = cur Then If cells(i, 1) = pos Then If first_row = 0 Then first_row = i last_row = i Else last_row = i End If End If End If Next '指定項目を指定方向にソート If up_or_down = "up" Then Worksheets("Sheet1").Range(cells(first_row, 1), cells(last_row, 4)) _ .Sort Key1:=cells(first_row, 4), order1:=xlAscending End If If up_or_down = "down" Then Worksheets("Sheet1").Range(cells(first_row, 1), cells(last_row, 4)) _ .Sort Key1:=cells(first_row, 4), order1:=xlDescending End If '指定項目の位置を切り出して先頭に挿入 Rows(first_row & ":" & last_row).Cut Rows("1:1").Insert Shift:=xlShiftDown '指定項目の範囲を選択 row_counts = last_row - first_row + 1 Range(cells(1, 1), cells(row_counts, 4)).Select End Sub
リストを昇順、降順にする関数がないため、今回のように1)ワークシート内に記入した内容でソートする、
以外だと、2)自分でソートを実装する、3).netのArraylistを利用する事になる。
PyQt(PySide)とOpenCVで画像処理その7(日本語処理)
OSを判定して日本語対応させる。 os.nameがntならcp932、それ以外ならutf-8でエンコードする。
import os import PySide from PySide import QtCore,QtGui import cv2 #OSチェック def os_check(): #windows if os.name is 'nt': code = 'cp932' return code #Unix、Mac if os.name is not 'nt': code = 'utf-8' return code def open_file(code): filename = QtGui.QFileDialog.getOpenFileName(filter="Image Files (*.png *.bmp *jpg)") #日本語をエンコードして文字化け回避 filename = filename[0].encode(code) im = cv2.imread(filename) cv2.imshow("",im) cv2.waitKey(0) cv2.destroyAllWindows() if __name__ == '__main__': code = os_check() open_file(code)
PyQt(PySide)とOpenCVで画像処理その6(サブウィンドウ)
久しぶりの更新。以下の続き
PyQt(PySide)とOpenCVで画像処理その5(イベントフィルター) - tataboxの備忘録
PyQt(PySide)でサブウィンドウを呼び出したり、ウィジットを追加してみる。
1.QtDesigner で下のように作る
Main window (ファイル名:main.ui objectname: main)
Widget (ファイル名:widget.ui objectname:widget)
Dialog (ファイル名:dialog.ui objectname:dialog)
2.フォルダに移動し、コマンドライン上でpythonのコードに変換
pyside-uic -o main.py main.ui pyside-uic -o widget.py widget.ui pyside-uic -o dialog.py dialog.ui
3.同一フォルダに以下の内容で作成し、実行
import PySide from PySide import QtCore,QtGui import sys from main import Ui_main from dialog import Ui_dialog from widget import Ui_widget class Main(QtGui.QMainWindow,Ui_main): def __init__(self, parent = None): super(Main, self).__init__(parent) self.ui = Ui_main() self.setupUi(self) self.button.clicked.connect(self.pushButton) QtCore.QObject.connect(self.actionLoad_Dialog, QtCore.SIGNAL("triggered()"), self.pushMenu) def pushButton(self): self.widget = Widget(self) self.widget.show() def pushMenu(self): self.dialog = Dialog(self) self.dialog.show() class Dialog(QtGui.QDialog,Ui_dialog): def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) class Widget(QtGui.QWidget,Ui_widget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setupUi(self) if __name__ == '__main__': app = QtGui.QApplication(sys.argv) dmw = Main() dmw.show() sys.exit(app.exec_())
menu 中のload Dialogを押す
load widgetボタンを押す
Widgetは内部、Dialogは別窓で表示される。
参考
python - How to create new PyQt4 windows from an existing window? - Stack Overflow
python+Opencvによる画像処理10(線や文字の書き込み)
画像にスケールを書き込む必要があり、線や文字の書き込み法を調べたのでメモ。
(1) 線の書き込み
cv2.line(image,(start_x,start_y),(end_x,end_y),color,thickness)
(2)文字の書き込み
cv2.putText(image,text,(start_x,start_y),font, font size,color)
フォントの種類(これのみ、日本語は多分不可)
FONT_HERSHEY_COMPLEX FONT_HERSHEY_COMPLEX_SMALL FONT_HERSHEY_DUPLEX FONT_HERSHEY_PLAIN FONT_HERSHEY_SCRIPT_COMPLEX FONT_HERSHEY_SCRIPT_SIMPLEX FONT_HERSHEY_SIMPLEX FONT_HERSHEY_TRIPLEX FONT_ITALIC
実行結果
参考
Drawing Functions in OpenCV — OpenCV 3.0.0-dev documentation