顯示具有 python 標籤的文章。 顯示所有文章
顯示具有 python 標籤的文章。 顯示所有文章

2019年9月16日 星期一

One-Hot Encoding簡介與keras中用法

One-Hot Encoding又稱為一位有效編碼
在keras中可用以下程式碼進行
from keras.utils import np_utils
y_train_label_OneHot=np_utils.to_categorical(y_train_label)
y_test_label_OneHot=np_utils.to_categorical(y_test_label)
從下圖可看到
把原本的y_train_label原本是0~9不等的數字
轉換後存入y_train_label_OneHot
原本是[6]就變成[0., 0., 0., 0., 0., 0., 1., 0., 0., 0.]
[9]就變成[0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]
轉換後有兩個優點
1.能夠處理非連續型的分類變量。
2.在一定程度上也擴充了特徵,讓特徵之間更稀疏。


2019年5月30日 星期四

"程式教學"簡單入門python預測股價-使用stocker套件(更新版教學上)

一直以來對於寫這種文章我是有疑慮的

預測證券市場走勢是一項非常有誘惑力的事情,但是一旦稍有不慎或是過度相信程式,很有可能在黑天鵝事件來臨時,粉身碎骨。

我個人認為,與其努力的在每日獲利上能夠跑贏大盤,不如好好享受在運用程式預測的練習中,學習資料視覺化,程式設計,模型訓練這些領域,說不定在這個領域所學應用在工作上提升的收入,會比投資炒股多很多XD

本篇文章會讓大家簡單地做出像下方的股價預測圖,以及調整參數,預測未來的股價


本文的示範資料集與程式碼我把他打包好放在雲端了
使用方式與雲端連結請點下方
https://hn28082251.blogspot.com/2019/05/python-stocker-data-code.html








本次環境使用anaconda裡面的jupyter
不會操作的請先參考這篇

https://hn28082251.blogspot.com/2019/02/python-mac-os-anaconda.html


我們先來建立個過去股價的資料
這裡用的方法是用google試算表抓資料
詳細方法請參考以下教學
https://hn28082251.blogspot.com/2019/04/google-spreadsheets-stock.html
https://hn28082251.blogspot.com/2018/12/google-k.html

我們在這裡用我在台股的唯一持股玉山金為例
程式碼先幫大家寫好
可以直接複製
={ArrayFormula(text({"Date";int(query(query(googlefinance("2884","ALL","1/1/2018",TODAY(),"daily" ) ,"Select Col1",1),"offset 1",0))},"YYYY-MM-DD")),query(googlefinance("2884","ALL","1/1/2018",TODAY(),"daily" ) ,"Select Col4,Col2,Col5,Col3",1)}
以上是從2018年開始抓
詳細的抓取步驟可以參照下方這篇
https://hn28082251.blogspot.com/2019/04/python-stocker.html





再來說說我們要用的stocker套件

如果大家有照著下方的教學打開程式碼後
https://hn28082251.blogspot.com/2019/05/python-stocker-data-code.html


可以開始按上方run那個鍵


導入Stocker:

 from stocker import Stocker


這部分可能有些第一次使用的人會出現很多錯誤
通常是因為缺少相關套件
所需套件如下
quandl==3.3.0
matplotlib==2.1.1
numpy==1.14.0
fbprophet==0.2.1
pystan==2.17.0.0
pandas==0.22.0

pytrends==4.3.0

通常anaconda會預載matplotlib、numpy、pandas、pytrends

所以缺少的套件quandl、pystan、fbprophet就需要手動安裝

mac的使用者直接進終端機,然後依序輸入下方程式並執行
pip install quandl
pip install pystan
pip install fbprophet

windows的使用者則去開始功能表打開anaconda資料夾
找到裡面一個長得像命令提示字元,名稱叫做Anaconda Prompt的程式執行,然後依序輸入下方程式並執行

pip install quandl
conda install pystan
conda install -c conda-forge fbprophet


如果以上執行成功代表我們有抓到package了

再來把股價資料讀取進來
import pandas as pd

### 讀入series
df = pd.read_csv('price2884.csv', index_col='date', parse_dates=['date'])
price = df.squeeze()


price.head()

確定資料格式沒有問題

再來讀取價格資料放進一個變數中

from stocker import Stocker


esun = Stocker(price)



確定時間沒問題後,就可以開始初步預測了

預測的程式如下 
model, model_data = esun.create_prophet_model(days=10)


#days代表要預測幾天後的股價




由此可見這裡預測的十天後(6/7)玉山金的股價為26.62

是不是很簡單呢?


預測結果的綠線包含了相對應的信賴區間,這代表在模型預測的不確定性。在這種情況下,如果將信賴區間寬度設置為80%,這意味著我們預計這個範圍將包含實際值的可能性為80%。信賴區間將隨著時間推移會越來越大,這是因為隨著預測時間距離現有數據的時間越來越遠,預測值將面臨更多的不確定性,就像預測天氣一樣。




教的是如何使用Changepoint Prior,來進行模型調整
官方說明如後
Changepoints represent where a time series goes from increasing to decreasing or from increasing slowly to increasingly rapidly (or vice versa). They occur at the places with the greatest change in the rate of the time series. The changepoint prior scale represents the amount of emphasis given to the changepoints in the model. This is used to control overfitting vs. underfitting (also known as the bias vs. variance tradeoff).

簡單的來說就是控制overfitting(過擬和) 跟 underfitting(欠擬和)

overfitting(過擬和)是指,使用過多參數,以致太適應資料,太適應資料可能會在未來預測的時候失準
underfitting(欠擬和)是使用太少參數,以致於不適應資料



在上方教學中,我們已經學會如何快速建模,不過我們要來評估模型的預測效果如何,就用下方的程式碼來用過去資料來看看三個月前開始預測效果如何


esun.evaluate_prediction(start_date='2019-02-04', end_date='2019-05-28')

執行後如下

紅線之前代表訓練集的數據,紅線後代表開始預測,可以看得出來,並不是很理想!!!
但不要因此放棄,因為一開始全部都使用默認的參數,所以我們要開始去調整我們的模型,


趨勢變化過度擬合(靈活性太大)或不足(靈活性不夠),我們可以使用輸入參數調整稀疏之前的強度changepoint_prior_scale。默認情況下,此參數預設為0.05。增加它將使趨勢更加靈活

我們輸入下方這行程式碼並且執行

esun.changepoint_prior_analysis(changepoint_priors=[0.001, 0.05, 0.1, 0.2]) 

可以得到下方這張圖


可以看到在不同的changepoint_priors下,擬合的狀況也不太相同


接下來我們在更詳細的比較不同的changepoint_priors下,一些其他的參考值
程式碼如下
esun.changepoint_prior_validation(start_date='2018-01-04', end_date='2019-01-03', changepoint_priors=[0.001, 0.05, 0.1,0.15, 0.2, 0.25,0.4, 0.5, 0.6])





基於不同changepoint_priors下,訓練和測試準確性曲線和不確定性曲線


大致上可以看得出來,在changepoint_priors=0.1的時候效果較好


於是我們就把changepoint_prior_scale設成0.1吧!請加入下方的程式碼並執行

esun.changepoint_prior_scale = 0.1

然後再去看我們的模型

一樣用下方的程式碼
esun.evaluate_prediction(start_date='2019-02-04', end_date='2019-05-28')


可以發現預測的走勢比較貼近我們的現實數據了,這顯示了模型優化​​的重要性。使用默認值可以初步預測,但是我們需要調整模型的設定,來讓模型效果更好。

下一篇會講講比較參考模型進行買進賣出或者是單純持有之間的差異,以及用修正後的模型進行預測


本文章並沒有推薦任何投資標的,單純是個人的一些觀察與見解,為作者自行查看相關資料後整理而成,資料之正確性以各官方公告為主,任何人觀看本文之後,而有投資該股票基金或ETF之行為,自行對所有後果負責。 


歡迎分享轉載文章,願每一個人都能夠衣食無虞。 


我將思想傳授他人,他人之所得,亦無損於我之所有;猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。湯瑪斯‧傑弗遜(Thomas Jefferson)



2019年5月21日 星期二

"程式教學"簡單入門python預測股價-使用stocker套件(predict_future)預測未來股價

沒有看過基礎概念的請先看這篇
http://hn28082251.blogspot.com/2019/04/python-stocker.html

沒有學過如何優化模型的請先看這篇
https://hn28082251.blogspot.com/2019/05/python-stocker-change-point-prior.html

本次資料以VTI(Vanguard Total Stock Market ETF)為例,這是我在美股的持股之一,資料集幫大家整理好了,請點選下方連結下載
https://drive.google.com/file/d/1gNPEnttLHBrbfUoiPU41ZMZmJsFy_Z8u/view?usp=sharing

現在我們有了一個優化後的模型,然後就可以使用predict_future()函數來對股票未來價格的進行預測。

關於這個函數的詳細說明如下
Makes a prediction for the specified number of days in the future using a prophet model trained on the assigned number of years of data. Printed output is the days on which the stock is expected to increase and the days when it is expected to decrease. A graph also shows these results with confidence intervals for the prediction. ​



然後我們輸入下方這個程式碼
vti.predict_future(days=10)

vti.predict_future(days=100)
分別預測10天後與100天後的股價
輸入之後按下執行
會跑出兩張圖


predict_future(days=10)

predict_future(days=100)
因為這個資料集收到最後的資料是貿易戰開打後,VTI代表的是全美市場,所以模型訓練出來的趨勢,是往下走的,然後隨著時間逐漸增加,不確定性會進一步增加。


現在你已經學會用Stocker預測股價了,事實上,如果我們想使用這個模型策略進行交易(我基本上是不建議啦),最好每天都更新資料,然後訓練新的模型,然後預測三天內的價格就好,這套系統的用法有點類似讓電腦去看懂趨勢,並且做預測,總結來說,我覺得這個模型的意義,在於讓大家能夠開心的玩轉python程式,而非拿來賺錢。

這系列文終於寫完了,雖然我們可能沒有辦法用Stocker賺大錢,但是我覺得重點在於coding的過程而不是有沒有賺錢的結果!就算最終失敗,也好過從不嘗試!

You can't connect the dots looking forward; you can only connect them looking backwards.--Steve Jobs

"你無法預先把點點滴滴串連起來;只有在未來回顧時,你才會明白那些點點滴滴是如何串在一起的"--賈伯斯

就像在國中時,我第一次接觸到程式,第一次用c++寫出了一台計算機的時候,我像在沙灘上撿到貝殼的孩子那樣的開心了一整天,我也從來沒想過,過去的那些嘗試與失敗,會讓現在的我走到這麼遠。

我也還在學習的路上,幸運的是身邊有許多大神不吝指導我,距離成功目標的路還很長,但只要開始走就不會遠,祝大家在coding and debug的路上不孤單~


本文章並沒有推薦任何投資標的,單純是個人的一些觀察與見解,為作者自行查看相關資料後整理而成,資料之正確性以各官方公告為主,任何人觀看本文之後,而有投資該股票基金或ETF之行為,自行對所有後果負責。 

歡迎分享轉載文章,願每一個人都能夠衣食無虞。 

我將思想傳授他人,他人之所得,亦無損於我之所有;猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。湯瑪斯‧傑弗遜(Thomas Jefferson)


2019年5月20日 星期一

"程式教學"簡單入門python預測股價-使用stocker套件(Changepoint Prior)模型優化

沒有看過基礎概念的請先看這篇
http://hn28082251.blogspot.com/2019/04/python-stocker.html


本次要教的是如何使用Changepoint Prior,來進行模型調整
官方說明如後
Changepoints represent where a time series goes from increasing to decreasing or from increasing slowly to increasingly rapidly (or vice versa). They occur at the places with the greatest change in the rate of the time series. The changepoint prior scale represents the amount of emphasis given to the changepoints in the model. This is used to control overfitting vs. underfitting (also known as the bias vs. variance tradeoff).

簡單的來說就是控制overfitting(過擬和) 跟 underfitting(欠擬和)

overfitting(過擬和)是指,使用過多參數,以致太適應資料,太適應資料可能會在未來預測的時候失準
underfitting(欠擬和)是使用太少參數,以致於不適應資料


本次資料以VTI(Vanguard Total Stock Market ETF)為例,這是我在美股的持股之一,資料集幫大家整理好了,請點選下方連結下載
https://drive.google.com/file/d/1gNPEnttLHBrbfUoiPU41ZMZmJsFy_Z8u/view?usp=sharing


在基礎教學中,我們已經學會如何快速建模,不過我們要來評估模型的預測效果如何,就用下方的程式碼來用過去資料來看看三個月前開始預測效果如何

vti.evaluate_prediction(start_date='2019-02-04', end_date='2019-05-14')



紅線之前代表訓練集的數據,紅線後代表開始預測,可以看得出來,並不是很理想!!!
但不要因此放棄,因為一開始全部都使用默認的參數,所以我們要開始去調整我們的模型,


趨勢變化過度擬合(靈活性太大)或不足(靈活性不夠),我們可以使用輸入參數調整稀疏之前的強度changepoint_prior_scale。默認情況下,此參數預設為0.05。增加它將使趨勢更加靈活

我們輸入下方這行程式碼並且執行
vti.changepoint_prior_analysis(changepoint_priors=[0.001, 0.05, 0.1, 0.2]) 

可以看到在不同的changepoint_priors下,擬合的狀況也不太相同

接下來我們在更詳細的比較不同的changepoint_priors下,一些其他的參考值


vti.changepoint_prior_validation(start_date='2018-01-04', end_date='2019-01-03', changepoint_priors=[0.001, 0.05, 0.1,0.15, 0.2, 0.25,0.4, 0.5, 0.6])



基於不同changepoint_priors下,訓練和測試準確性曲線和不確定性曲線

大致上可以看得出來,在changepoint_priors=0.25的時候效果較好

於是我們就把changepoint_prior_scale設成0.25吧!請加入下方的程式碼並執行
vti.changepoint_prior_scale = 0.25

然後再去看我們的模型
一樣用下方的程式碼
vti.evaluate_prediction(start_date='2019-02-04', end_date='2019-05-14')

可以看得出來預測效果有比較好一些了,這顯示了模型優化​​的重要性。使用默認值可以提初步預測,但是我們需要調整模型的設定,來讓模型效果更好。

下一篇來談談用優化後的模型來進行預測



本文章並沒有推薦任何投資標的,單純是個人的一些觀察與見解,為作者自行查看相關資料後整理而成,資料之正確性以各官方公告為主,任何人觀看本文之後,而有投資該股票基金或ETF之行為,自行對所有後果負責。 


歡迎分享轉載文章,願每一個人都能夠衣食無虞。 

我將思想傳授他人,他人之所得,亦無損於我之所有;猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。湯瑪斯‧傑弗遜(Thomas Jefferson)







2019年5月2日 星期四

簡易理解python中的if __name__ == 'main' 的作用和原理

從學到python以來,常常看到很多函式(function)中出現以下的語句

if __name__ == '__main__':

雖然一直知道他是用來做甚麼的,但是卻不太能理解他的作動原理

舉個例子,我們創建一個test.py然後寫入以下程式:

print('我愛Python')

def love():
    print('我愛Python')
if __name__ == '__main__':
    love()

    print('天天寫扣的,越來越愛python')


然後執行程式


我們可以看到輸出結果如下





然後,在同一層的資料夾新建名稱為import_test.py的檔案,只輸入以下程式:
import test

最後我們打開anaconda Prompt來比較兩者的差異



兩者相比較,import_test.py,只有輸出我愛Python,也就是if __name__=="__main__": 之前的語句被執行,之後的沒有被執行。

這是為甚麼呢?

我們來用用萬用的print

我們在test.py檔案的if __name__=="__main__":之前加入print __name__,即將__name__列印出來









則最後執行結果如下:



可以看出,此時變數__name__的值為"__main__"

再執行import_test.py





此時,import_test.py中的__name__變數為test,不滿足__name__=="__main__"的條件,因此無法執行後面的程式。


簡而言之就是:__name__ 是當前檔案名,當檔案被直接運行時檔案名為__main__ 。

當檔案被直接運行時,程式將被運行,當檔案是被導入進來時,程式不被運行。

2019年2月19日 星期二

用python分析股票四大買賣點(twstock套件)(以2884玉山金為例)

還不知道怎麼安裝twstcok套件的請先看之前的教學文,前面也有講過如何運用realtime來抓取即時的資料。
用python抓取台股股價(twstock套件)(以2884玉山金為例)
https://hn28082251.blogspot.com/2018/12/pythontwstock2884.html
關於twstock在github的連結在此https://github.com/mlouielu/twstock


先複習一下如何使用 Stock 來取得歷史股票資訊
stock2884.price #回傳各日之收盤價
stock2884.high  # 回傳各日之最高價


在 Stock 之中的資料,愈前面之資料越舊,愈後面之資料愈新


也可以透過 date 取得各個資料集之中相對應的日期:
stock2884.date# 回傳資料之對應日期


也可以抓取指定日期或區間之資料



最後是今天主要要講的BestFourPoint
該功能是透過四大買賣點來判斷是否要買賣股票。
四個買賣點分別為:

  1. 量大收紅 / 量大收黑 
  2. 量縮價不跌 / 量縮價跌 
  3. 三日均價由下往上 / 三日均價由上往下 
  4. 三日均價大於六日均價 / 三日均價小於六日均價
操作範例如下
範例程式碼整理如下

import twstock
stock2884 = twstock.Stock('2884')

BestFourPoint = twstock.BestFourPoint(stock2884)
BestFourPoint.best_four_point_to_buy()# 判斷是否為四大買點
BestFourPoint.best_four_point_to_sell()# 判斷是否為四大賣點
BestFourPoint.best_four_point() #指標綜合判斷


以上指標僅供教學使用,市場充滿許多複雜的因素,真的要買賣投資建議還是多參考其他比如基本面、籌碼面、技術面來做判斷,切勿盲目相信單一指標。

本文章並沒有推薦任何投資標的,單純是個人的一些觀察與見解,為作者自行查看相關資料後整理而成,資料之正確性以各官方公告為主,任何人觀看本文之後,而有投資該基金或ETF之行為,自行對所有後果負責。

簡單的操作教學如上,下一篇來寫寫如何將資料寫入excel繪製圖表。


如果大家有什麼想法也歡迎交流,想獲取第一手教學資訊的趕快按下訂閱吧!記得填完信箱後要收信按確認才有用喔~


歡迎分享轉載文章,願每一個人都能夠衣食無虞。

我將思想傳授他人,他人之所得,亦無損於我之所有;猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。湯瑪斯‧傑弗遜(Thomas Jefferson)


如果你覺得我寫的文章不錯
可以按讚給我支持與鼓勵
https://www.facebook.com/IEPSYfinancenote/





新成立的ig歡迎追蹤:iepsyfinancenote
https://www.instagram.com/iepsyfinancenote/
 

2019年2月15日 星期五

python 新手救星--Mac OS 環境下Anaconda簡介與安裝教學

人常說,工欲善必先利其器,尤其是python 新手 那我強烈建議你可以安裝 Anaconda 包來學習python,因為python 最強大的就是有許多package可以安裝,省下自己自幹一堆工具的時間,而且新手學程式常常卡在一開始的開發環境架設,使用Anaconda真的可以幫你省下很多的時間走冤枉路。


以下的環境為Mac OS,首先到Anaconda的官方網站
https://www.anaconda.com/




點選Download


選了mac OS後出現下載版本的選單,因為接下來的開發教學皆會以3.7版本為主,所以請大家下載3.7版。

安裝好後會出現這個圖示


點選之後就會執行程式了
然後會出現anaconda的視覺化介面


點選jupyter下的Launch
進入畫面之後選擇自己要建立檔案的資料夾
按下右上角的New>Python3,就可以建立我們要開發的檔案,開始寫Code了。


是不是很簡單呢?










將探吉帶去日本系列-1(赫曼陸龜Testudo hermanni)

 因為接下來要去日本唸書 所以也要把探吉帶去日本 赫曼陸龜(學名:Testudo hermanni) 目前把北部能查的到的代辦寵物移民的問了一圈 得到的回覆是都沒有代辦陸龜 所以得開始研究自己辦理了 (或者有大大知道台灣誰有代辦陸龜出國的可以私訊我,感恩) 孟恭帶邱口去歐洲那間我...