2010年12月2日

Python programming tips

一些實用的小技巧,可減少多餘的動作

  1. Swap
  2. //C++和Java的寫法:
    temp = x
    x = y
    y = temp

    #Python建議使用
    x, y= y, x

  3. 讀dict時避免判斷key的存在
  4. d = { 'key': 'value' }
    #一般寫法
    if 'key' in d: print d['key']
    else: print 'not find'

    #建議寫法
    print d.get('key', 'not find')

  5. 尋找最小值和對應位置
  6. s = [ 4,1,8,3 ]
    #一般寫法
    mval, mpos = MAX, 0
    for i in xrange(len(s)):
    if s[i] < mval: mval, mpos = s[i], i

    #建議寫法
    mval, mpos = min([ (s[i], i) for i in xrange(len(s)) ])

  7. 讀取檔案
  8. #一般寫法
    line = ''
    fp = open('text.txt', 'r')
    for line in fp: text += line

    #建議寫法1
    text = string.join([ line for line in open('text.txt')], '']

    #建議寫法2
    text = ''.join([ line for line in open('text.txt')])

    #建議寫法3
    text = file('text.txt').read()

  9. Python使用三元式
  10. #一般寫法,C++會使用?:來處理
    if n >= 0: print 'positive'
    else: print 'negitive'

    #建議寫法1, 但後面式子為None會有問題
    print (n >= 0) and 'positive' or 'negitive'

    #建議寫法2, 解決了None的問題
    print (n >= 0 and ['positive'] or ['negitive])[0]

    #建議寫法3
    print ('negitive', 'positive')[n >= 0]

  11. Dict成員是複雜類別時的初使用
  12. #一般寫法
    if not y in d: d[y] = { }
    d[y][x] = 3

    #建議寫法
    d.setdefault(y, { })[x] = 3

    #如果為list時
    d.setdefault(key, []).append(val)

Python好用的數值計算套件

在別的地方看到的,順便整理一下, Numpy, Scipy, matplotlib是必備套件,三個套件已經有matlab基本的運算功能。

  1. xlrd - Library for developers to extract data from Microsoft Excel spreadsheet files 
  2. RPy2 - A simple Python interface for R
  3. NetworkX -For analyzing network data
  4. SymPy - SymPy contains nearly all of the same functionality (algebraic evaluation, differentiation, expansion, complex numbers, etc.) as SimPy, but is contained in a pure Python distribution.
  5. SimPy - Short for “Simulation in Python”, an object-oriented, process-based discrete-event simulation language, making it a wholesale agent-based modeling environment written entirely in Python.
  6. Boost.Python - This C++ library enables seamless interoperability between C++ and Python
  7. PyMC - PyMC implements the Metropolis-Hastings algorithm as a Python class.
  8. Pycluster - It contains implementations of hierarchical and k-means clustering
  9. NLTK - Natural Language Toolkit is a suite of libraries and programs for symbolic and statistical natural language processing (NLP) 

2010年11月30日

Linux回到上一次目錄

有的時候在console模式下,進到了一個目錄,但是必須和另外一個目錄切換來切換去,這個時候除了再開一個console外,有個指令可以快速回到上一次到達的目錄。
cd -
#效果等同於在bash下的
cd $OLDPWD

2010年11月15日

LibSVM 3.0使用G++與Intel compiler加OpenMP效能的比較

由於Intel的compiler在non-commercial的條件下可以免費使用(下載),所以就抓下來安裝和g++比較看看效能上的差異。

首先要照官方網站上FAQ內使用OpenMP前要對svm.cpp修改。

此時g++版本內的Makefile參數應該如下:

CXX ?= g++
CFLAGS = -Wall -Wconversion -O3 -fPIC -fopenmp

而intel compiler(icpc)的Makefile參數如下:

CXX = icpc
CFLAGS = -Wall -Wconversion -O3 -fPIC -openmp

其它部份參數都一樣。

我的執行平台是Ubuntu 10.04, CPU為Intel(R) Core(TM)2 Quad CPU Q8300, g++版本為4.4.3, icpc版本為v12.0.0, OpenMP使用4個核心運算,使用官方網站上的a9a範例做training, 執行時間如下:

g++:
real:  0m50.562s
user: 3m8.672s
sys: 0m0.588s
icpc:
real: 0m47.233s
user: 2m58.003s
sys: 0m2.220s

2010年11月7日

台灣股市緩漲急跌的性質

今天把股票和大盤的歷年漲跌比例算出來,果然是有很明顯的緩漲急跌的性質,以大盤為例:

年份上漲總點數上漲天數平均上漲點數上漲天數比例下跌總點數下跌天數平均下跌點數下跌天數比例
20017807.6911766.7347.95%-8473.88127-66.7252.05%
20026355.6710858.8543.55%-9393.82140-67.1056.45%
20034306.0713033.1252.21%-6396.92119-53.7647.79%
20045543.3313142.3252.40%-7264.76119-61.0547.60%
20053122.1912325.3849.80%-4837.25124-39.0150.20%
20064506.0413732.8955.24%-6218.88111-56.0344.76%
20075251.7913937.7856.28%-9058.73108-83.8843.72%
20089280.7411382.1345.38%-11677.17136-85.8654.62%
20096048.5415738.5362.55%-8574.9294-91.2237.45%

>不過這是大盤總體的表現,如果看個股狀態不一定如此,以下是台GG在同期下的表現:

年份上漲總點數上漲天數平均上漲點數上漲天數比例下跌總點數下跌天數平均下跌點數下跌天數比例
200168.351100.6245.08%-56.62134-0.4254.92%
200255.69940.5937.90%-59.77154-0.3962.10%
200348.671150.4246.18%-43.4134-0.3253.82%
200442.891030.4241.20%-45.17147-0.3158.80%
200549.191170.4247.37%-33.97130-0.2652.63%
200654.571250.4450.40%-57.55123-0.4749.60%
200755.451200.4648.58%-59.52127-0.4751.42%
200888.61060.8442.57%-80.9143-0.5757.43%
200962.121270.4950.60%-79.64124-0.6449.40%

2010年11月6日

libsvm使用多核心

libsvm要支援多核心,依照官方網站的FAQ說明修改後,即可發揮CPU多核的功能。

但是若要使用python呼叫修改多核心功能的libsvm,除了FAQ內的修改外,還要再修改Makefile,加上-lgomp的選項:

lib: svm.o
$(CXX) -lgomp -shared -dynamiclib svm.o -o libsvm.so.$(SHVER)

TEJ的台灣上市股票資料

今天在校對TEJ未調整和調整後的台灣上市公司股價資料,未調整的資料(收盤價...)和證交所查到的資料一樣, 上市公司資料(2010/11/05)總共有782筆(含ETF, TDR, 不含特別股(1312A, 2002A, 2833A, 2887C),受益憑證(01001T~01008T))。

而調整後的股價,依TEJ的說明大致上如下:
除權調整因子:

  • 調整後股價=原始股價*調整因子
  • 調整因子=當日之後所有"調整係數"累乘
  • 調整係數=除權參考價/(除權前收盤價-現金股息)

除權息調整因子:

  • 調整後股價=原始股價*調整因子
  • 調整因子=當日之後所有"調整係數"累乘
  • 調整係數=除權參考價/(除權前收盤價)

2010年9月1日

Machine learning data set

常在paper中見到的machine learning data set

data set

2010年8月28日

投資績效

今天睡不著,把這三年來股票、期貨、基金的投資報酬率算一算,發現居然接近0%,真是太沒有效率了,

果然我還是犯了投資人最大的兩個錯誤,1、不做功課,2、不知停損,要好好檢討了@@