2017年7月26日 星期三

Python - Hello, World

重點摘要
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一下,但整體來說,對初學者幫助頗大。

Image result for Python初學特訓班",鄧文淵,碁峰出版




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檔,以下為由瀏覽器開啟的截圖