python memo
jupyter note book
自动提示
1 #安装 2 打开Anaconda Prompt窗口,执行第一个命令,用于安装nbextensions: 3 pip install jupyter_contrib_nbextensions 4 再执行第二个命令,用于安装 javascript and css files 5 jupyter contrib nbextension install --user 6 最后执行,用于安装configurator 7 pip install jupyter_nbextensions_configurator 8 9 #卸载 10 pip uninstall jupyter_contrib_nbextensions 11 pip uninstall jupyter_nbextensions_configurator
安装opencv
pip install opencv-python
pyqt
pip install PyQt5 pip install pyqt5-tools C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\envs\machine\Lib\site-packages\pyqt5_tools
open ai gym 安装
1 $ pip install gym #最小化安装 2 or 3 $ pip install gym[all] #全部安装 但是安装有问题
https://keras-gym.readthedocs.io
https://github.com/KristianHolsheimer/keras-gym
keras强化学习库
https://github.com/keras-rl/keras-rl/
https://github.com/quantylab/rltrader https://pypi.org/project/fix-yahoo-finance/ linux:pip install ta-lib
https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib 下载相应版本的 ta-lib windows 64bit: pip install TA_Lib-0.4.10-cp36-cp36m-win_amd64.whl conda install pandas-datareader pip install fix_yahoo_finance 画图 pip install https://github.com/matplotlib/mpl_finance/archive/master.zip conda install bokeh
pip install jupyterlab
需要安装node.js 以后 重新打开 anaconda prompt jupyter labextension install jupyterlab_bokeh conda install BeautifulSoup4
https://pyecharts.org/#/zh-cn/rectangular_charts
jupyter notebook 发表在blog
转HTML
ipython nbconvert --to html --template basic filename.ipynb
需要头部添加CSS
1 <style type="text/css"> 2 .highlight{background: #f8f8f8; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .1em;padding:0em .5em;border-radius: 4px;} 3 .k{color: #338822; font-weight: bold;} 4 .kn{color: #338822; font-weight: bold;} 5 .mi{color: #000000;} 6 .o{color: #000000;} 7 .ow{color: #BA22FF; font-weight: bold;} 8 .nb{color: #338822;} 9 .n{color: #000000;} 10 .s{color: #cc2222;} 11 .se{color: #cc2222; font-weight: bold;} 12 .si{color: #C06688; font-weight: bold;} 13 .nn{color: #4D00FF; font-weight: bold;} 14 </style>
或者转成MarkDown 放在Github
ipython nbconvert --to markdown filename.ipynb
量化书籍
https://wizardforcel.gitbooks.io/python-quant-uqer/19.html
http://baostock.com/baostock/index.php/%E9%A6%96%E9%A1%B5
移动窗口
1 import numpy as np 2 arr=np.arange(0,5) 3 print("arr=",arr)#arr= [0 1 2 3 4] 4 arr1=np.roll(arr,2)#移动窗口 5 print("arr1=",arr1)#arr1= [3 4 0 1 2]
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools
解决:
https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/?rr=https%3A%2F%2Fdololak.tistory.com%2F520
下载安装:Microsoft 生成工具 2015 更新 3
zipline 创建python3.5 环境 不能使用3.6 按下面顺序安装
1.安装上面的 “Microsoft 生成工具 2015 更新 3”
2.pip install zipline
3.pip install quandl
quandl API key:s3aGDwjM8DCn6LQFSeCW
安装sqlite3
conda install -c anaconda sqlite
1.创建/打开数据库
1 import sqlite3 2 conn = sqlite3.connect('my_sql3.db')
2.创建表
1 import sqlite3 2 conn = sqlite3.connect('my_sql3.db') 3 c = conn.cursor() 4 c.execute('''CREATE TABLE COMPANY 5 (ID INT PRIMARY KEY NOT NULL, 6 NAME TEXT NOT NULL, 7 AGE INT NOT NULL, 8 ADDRESS CHAR(50), 9 SALARY REAL);''') 10 print("创建成功") 11 conn.commit() 12 conn.close() 13 #创建成功
3.添加 INSERT
1 import sqlite3 2 conn = sqlite3.connect('my_sql3.db') 3 c = conn.cursor() 4 c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 5 VALUES (1, 'Paul', 32, 'California', 20000.00 )"); 6 7 c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 8 VALUES (2, 'Allen', 25, 'Texas', 15000.00 )"); 9 10 c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 11 VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )"); 12 13 c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \ 14 VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )"); 15 conn.commit() 16 print("添加成功") 17 conn.close() 18 #添加成功
4.查询SELECT
1 import sqlite3 2 3 conn = sqlite3.connect('my_sql3.db') 4 c = conn.cursor() 5 cursor = c.execute("SELECT id, name, address, salary from COMPANY") 6 for row in cursor: 7 print('ID =%d NAME=%s ADDRESS=%s SALARY=%d '%(row[0],row[1],row[2],row[3])) 8 conn.close() 9 10 """ 11 ID =1 NAME=Paul ADDRESS=California SALARY=20000 12 ID =2 NAME=Allen ADDRESS=Texas SALARY=15000 13 ID =3 NAME=Teddy ADDRESS=Norway SALARY=20000 14 ID =4 NAME=Mark ADDRESS=Rich-Mond SALARY=65000 15 """
5.修改 UPDATE
1 import sqlite3 2 3 conn = sqlite3.connect('my_sql3.db') 4 c = conn.cursor() 5 c.execute("UPDATE COMPANY set SALARY = 25000.00 where ID=1") 6 conn.commit() 7 print("更改数:",conn.total_changes) 8 9 #查询显示 10 cursor = conn.execute("SELECT id, name, address, salary from COMPANY") 11 for row in cursor: 12 print('ID =%d NAME=%s ADDRESS=%s SALARY=%d '%(row[0],row[1],row[2],row[3])) 13 conn.close() 14 """ 15 更改数: 1 16 ID =1 NAME=Paul ADDRESS=California SALARY=25000 17 ID =2 NAME=Allen ADDRESS=Texas SALARY=15000 18 ID =3 NAME=Teddy ADDRESS=Norway SALARY=20000 19 ID =4 NAME=Mark ADDRESS=Rich-Mond SALARY=65000 20 """
6.删除
1 import sqlite3 2 3 conn = sqlite3.connect('my_sql3.db') 4 c = conn.cursor() 5 c.execute("DELETE from COMPANY where ID=2;") 6 conn.commit() 7 print("总共删除行:",conn.total_changes) 8 9 #查询显示 10 cursor = conn.execute("SELECT id, name, address, salary from COMPANY") 11 for row in cursor: 12 print('ID =%d NAME=%s ADDRESS=%s SALARY=%d '%(row[0],row[1],row[2],row[3])) 13 conn.close() 14 """ 15 总共删除行: 1 16 ID =1 NAME=Paul ADDRESS=California SALARY=25000 17 ID =3 NAME=Teddy ADDRESS=Norway SALARY=20000 18 ID =4 NAME=Mark ADDRESS=Rich-Mond SALARY=65000 19 """
1 #pip install sqlalchemy 2 from sqlalchemy import create_engine 3 engine = create_engine(r'sqlite:///G:\python\Prj\04.Proj\KRX_Date\foo.db')#这样也行 4 engine = create_engine('sqlite:///G:\\python\\Prj\\04.Proj\\KRX_Date\\foo1.db')#这样也行 5 6 7 #添加数据 8 df1 = pd.DataFrame({'name' : ['User 4', 'User 5']}) 9 df1.to_sql('users', con=engine, if_exists='append') #if_exists='append'追加 replace:替换 10 engine.execute("SELECT * FROM users").fetchall() 11 12 #代替数据 13 df1.to_sql('users', con=engine, if_exists='replace',index_label='id') 14 engine.execute("SELECT * FROM users").fetchall() 15 16 #读取数据 17 df = pd.read_sql_query("select * from users where id < 10", engine) 18 print(df)
python 模拟鼠标 键盘
pip install pywinauto
1 process:进程id 2 app = Application().connect(process=2341) 3 handle:应用程序的窗口句柄 4 app = Application().connect(handle=0x010f0c) 5 path:进程的执行路径(GetModuleFileNameEx 模块会查找进程的每一个路径并与我们传入的路径去做比较) 6 app = Application().connect(path='C:\\Windows\\System32\\notepad.exe')# 可能权限问题 7 参数组合(传递给pywinauto.findwindows.find_elements()这个函数) 8 app = Application().connect(title_re=".*Notepad", class_name=“Notepad”) 9 10 2. 隐式等待 11 a) wait(wait_for, timeout = None, retry_interval = None) 12 wait_for可传入五种参数, 可以组合传参,但要以空格隔开: 13 exists: 窗口变成有效的句柄 14 visible: 窗口可见,没有隐藏 15 enabled: 窗口没有disable 16 ready: visible + enable 17 active: active 18 timeout:设置超时时间,若在n秒内没有等到窗口在wait_for中传入的几种状态,则会抛出TimeoutError。 19 retry_interval:超时后,间隔n秒再次重试。 20 Dlg.wait(“exists ready”, timeout = 5, retry_interval = 3) 21 22 b) wait_not(wait_for_not,timeout = None,retry_interval = None) 23 等待窗口不处于某种状态时。参数与wait传参一致。 24 25 26 层级定位 27 app.window(class_name = ’Notepad’).window(class_name = ‘#32770’) 28 app.window(class_name = ‘Notepad’).child_window(class_name = ‘#32770’) 29 30 wpath定位 31 若元素值为空,或不是唯一的情况下,可使用类似selenium中xpath的定位方式,根据查子元素的序号去定位元素。 32 app_window = app.window(class_name=‘Qt5QWindowIcon’) #定位登录窗口 33 app_window.children()[1].children()[0].children()[0] .children()[2] #定位用户名输入框控件(序号从0开始查) 34 35 3. 输入框输入 36 Dlg.control.type_keys(“xxxxx”) 37 38 4. 菜单栏 39 app.window.menu_select(Edit -> Replace) 40 41 5. 鼠标点击 42 a)click() 点击Button控件 43 b)check_by_click() 通过click()方法勾选checkbox 44 c)uncheck_by_click() 通过click()方法取消勾选checkbox 45 d)get_check_state() 返回checkbox的勾选状态(0没勾选,1勾选,2不定) 46 e)is_checked(勾选返回true,为勾选返回false,不定返回None) 47 f)check() 勾选checkbox 48 g)uncheck() 不勾选checkbox 49 h)invoke() 点击(uia mode) 50 i)toggle () 勾选checkbox(uia mode) 51 52 6. 键盘操作 53 “+”:Shift 54 “^”:Control 55 “%”:Alt
1 from pywinauto.application import Application 2 3 # 打开一个记事本(如果已经打开,可以忽略) 4 app = Application().start("notepad.exe") 5 6 # 绑定进程,class_name和title是可选的,可以灵活使用,如果找到多个货没有找到该程序,程序会报错 7 app = Application().connect(class_name="Notepad",title="无标题 - 记事本") 8 9 # 得到可操作的窗口,可以传入标题,类名,或者将标题传入键值 10 win = app.window(title="无标题 - 记事本") 11 # 或者(通常使用此方法) 12 win = app["无标题 - 记事本"] 13 14 # 可以使用Edit对可编辑区进行编辑 15 win.Edit.type_keys('test.txt') 16 win.menu_select("文件->保存") 17 # 当弹出新的窗口时,窗口标题变化,因此需要重新确定可操作窗口 18 win = app['另存为'] 19 win.Edit.type_keys('test.txt') 20 # 窗口内含有的按钮等名称,同样可以作为键值传入,从而得到控件 21 win['保存'].click()