2021年3月8日 星期一

CentOS Python 3.7 安裝方式

有些開發的程式在python 3.8的檔案套件不相容,例如pymssql,等。 所以如果不建置虛擬環境的話才特意安裝3.7版本的python 安裝流程如下
# 先進行yum套件的update
yum update -y

# 安裝相依性套件
yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel

# 下載python 3.7.9 source code
cd /usr/src
wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz

# 解壓縮,並開始安裝
tar xzf Python-3.7.9.tgz
cd Python-3.7.9
./configure --enable-optimizations
make altinstall

# 刪除下載的檔案
rm -rf /usr/src/Python-3.7.9.tgz

# 確認是否安裝成功
python3.7 -V

2021年3月4日 星期四

Vertica Division by Zero Error

最近剛接觸Vertica DB,有一些SQL語法跟MySQL、MSSQL又不太一樣,最近遇到一個問題是。 當分母為0時會出現Division by zero的錯誤,查了一下文件解法如下。

# 這樣會出現錯誤
SELECT 1 / 0;

# 解法
SELECT 1 / NULLIFZERO(0);

# 另一種解法
SELECT 1 / NULLIF(0, 0);

2021年3月2日 星期二

股票抽籤申購爬蟲

經過多次熱門上市或上櫃的股票公開抽籤過期才發現沒填單,就想要一個自動爬蟲通知的系統。 爬蟲簡易程式碼如下,這個爬蟲可以搭配自動發送Email或是line api或是telgram api

import requests
import time
import pandas as pd
from io import StringIO
from datetime import datetime

now = datetime.now()
now = now.strftime("%Y/%m/%d")
# 把要取資料的年份帶入
url = "https://www.twse.com.tw/announcement/publicForm?response=csv&yy={0}".format(now[0:4])
# 用request 套件抓取網頁
res = requests.get(url)
res.encoding='big5'
# 用pandas讀取csv檔案
df = pd.read_csv(StringIO(res.text), header=1)

select_df = pd.DataFrame(df)
select_df = select_df[:len(select_df)-5]

print(select_df)

msg = ""

for index,row in select_df.iterrows():
    try:
        ldate = row['抽籤日期']
        name = row['證券名稱']
        market = row['發行市場']
        begindate = row['申購開始日']
        enddate = row['申購結束日']
        dollor = row['承銷價(元)']

        ldate = ldate.replace(ldate[0:3],str(int(enddate[0:3]) + 1911 ))

        begindate = begindate.replace(begindate[0:3],str(int(begindate[0:3]) + 1911 ))
        enddate = enddate.replace(enddate[0:3],str(int(enddate[0:3]) + 1911 )) 
			
       # 組成要發送訊息的格式,如果申購時間還沒過期就可以準備要發送
        if(now < enddate):
            msg += """{0} {1} {2} {3} {4} {5}\n""".format(ldate, begindate, enddate, name, market, dollor)
        else:
            msg += ""
    except:
        print("error")

print(msg)

2021年2月26日 星期五

美金匯率黃金交叉買點分析

最近台幣走強,順勢來分析一下美金的SMA黃金交叉買點情形。 首先資料來自台灣銀行的3年美金歷史價格。網址如下;https://rate.bot.com.tw/xrt/quote/l3y/USD 程式碼如下:

import pandas as pd
import matplotlib.pyplot as plt
import datetime as dt
df = pd.read_csv('data.csv')
df.index = pd.to_datetime(df.index, format='%Y%m%d')
sma20 = df['現金'].rolling(20).mean()
sma60 = df['現金'].rolling(60).mean()

entries = (sma20 > sma60) & (sma20.shift() < sma60.shift())
exits = (sma20 < sma60) & (sma20.shift() > sma60.shift())

df['現金'].plot()
plt.plot(sma20)
plt.plot(sma60)
entries.astype(int).plot(secondary_y=True)
exits.astype(int).plot(secondary_y=True)
plt.show()

2021年2月25日 星期四

Python加密貨幣爬蟲實戰

# 套件安裝
pip install finlab_crypto

# 程式碼開始
import finlab_crypto
import matplotlib.pyplot as plt

# 初始化,會產生相關資料夾
finlab_crypto.setup()

# 取得歷史數據,設定時間頻率
ohlcv = finlab_crypto.crawler.get_all_binance('BTCUSDT', '4h')

# 取得收盤價
close = ohlcv.close

# 取出兩條均線

sma20 = close.rolling(20).mean()
sma60 = close.rolling(60).mean()

plt.plot(close)
plt.plot(sma20)
plt.plot(sma60)
plt.show()

2019年9月3日 星期二

新視窗關閉時 更新 主視窗

寫前端網頁常有需求是開啟的新視窗關閉時,主要視窗要重新取得資料。
有一段JavaScript做法如下,只要寫在子視窗:


 window.onunload = refreshParent;
 function refreshParent() {
  window.opener.location.reload();
 }


#同廠加映,母視窗開起子視窗的語法

$(function () {
  $("#divid").on('click',function(){
    var currentRow=$(this).closest("tr");
    var col1=currentRow.find("td:eq(0)").text();
    var col2=currentRow.find("td:eq(1)").text();
    var col3=currentRow.find("td:eq(2)").text();

    var col4=currentRow.find("input:eq(0)").val();
    // var data=col1+"\n"+col2+"\n"+col3+"\n"+col4;
    // alert(data);
    $.get("FunctionSnmp.php", {sid: col4, system: 'cctv'},
      function(data) {
          alert(data);
          // $.unblockUI();
    });
  });
})

2019年8月29日 星期四

sum 運算子的運算元資料類型 nvarchar 無效。

當我們要對SQL中進行運算,如MAX、MIN、SUM,等等。
而當預計算的欄位是NVARCHAR或VARCHAR就會出現類似以下錯誤訊息。
sum 運算子的運算元資料類型 nvarchar 無效。

調整SQL語法如下:

SELECT c1,c2,c3,sum(c4) from tb1 group by c1,c2,c3

##修改如下
SELECT c1,c2,c3,Sum(isnull(cast(c4 as float),0)) from tb1 group by c1,c2,c3

CentOS Python 3.7 安裝方式

有些開發的程式在python 3.8的檔案套件不相容,例如pymssql,等。 所以如果不建置虛擬環境的話才特意安裝3.7版本的python 安裝流程如下 # 先進行yum套件的update yum update -y # 安裝相依性套件 yum install gcc o...