重點摘要
1. 我的第一支Python程式,特此紀念。
2. 程式教學就免了,網路上有太多好手了
3. 主要是學習了如何調用SQLite的資料,以及採用bokeh套件來產生HTML輸出
1. 心得 (與Excel VBA相比)
- 強制用縮排來處理迴圈、條件式等,很是欣賞。因為本身在寫Excel VBA也是用縮排來處理,有助於未來閱讀與除錯。但是,用了很久的For...Next,突然沒有了Next,If...End If 少了 End If,覺得人生好像少了一半。怪怪的。
- List (串列) 的使用,是在Excel VBA中沒有用過的變數類型。還不是頂習慣。尤其它是用 [ ] 表達,與Excel VBA用 ( ) ,所以頂不習慣的。
- 好像沒有陣列、矩陣 (Array),除非引用Numpy套件的樣子,不太確定。
- 路徑要用"\\"來代表
- 字串的屬性 .format,可以把字串的設定參數化
- 困擾很久的是如何從二維串列中,只取出一維的資料。仍未解決,但想說未來應該會採用Numpy套件、Pandas套件等來處理大量的金融數據,就先不再深入。
- 幾行程式碼,就可以產出HTML檔,再看看其龐大的套件支援,終於放心地踏出離開Excel VBA的第一步。距離我買進第一本Python的書,大概有二年囉。
- 推薦一下 "Python初學特訓班",鄧文淵,碁峰出版。因為最近買了這本書,才讓我對Python有個較清楚的理解,有助於我踏出Python的第一步。雖然在寫這第一支程式時,仍得時不時的上網google一下,但整體來說,對初學者幫助頗大。
2. 程式碼範例
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 23 20:58:01 2017
"""
def big_ReadByTicker(my_ticker,my_field,my_recordno):
#
# 根據 my_ticker, my_field 返回最近的 my_recordno 筆資料
#
my_dbpath='D:\\my_temp\\' + my_ticker + '.db3'
my_conn=sqlite3.connect(my_dbpath)
my_sql='Select * from blp_data where blp_field=\"'+my_field+'\" order by blp_y desc, blp_m desc, blp_d desc limit {}' .format(my_recordno)
my_cursor=my_conn.execute(my_sql)
my_rows=my_cursor.fetchall()
my_conn.close()
my_data=[]
for my_row in my_rows:
# my_data1=str(my_row[0])+"-"+str(my_row[1])+"-"+str(my_row[2])
my_data1=datetime.datetime(my_row[0],my_row[1],my_row[2])
my_data2=my_row[5]
my_data.append([my_data1,my_data2])
return my_data
"""
Main Prog
"""
import datetime
import sqlite3
from bokeh.plotting import figure,show,output_file
my_data=big_ReadByTicker('SPX Index','BS_CUR_LIAB',5000)
output_file('D:\\my_temp\\my_lineout.html')
my_p=figure(x_axis_type="datetime",width=800,height=400)
my_p.xaxis.axis_label = 'Date'
my_p.yaxis.axis_label = 'Value'
my_date=[]
my_value=[]
for my_line in my_data:
my_date.append(my_line[0])
my_value.append(my_line[1])
listx=my_date
listy=my_value
my_p.line(listx,listy)
show(my_p)
3. 產出HTML檔,以下為由瀏覽器開啟的截圖