Ejemplo n.º 1
0
 def craw(date: str) -> pd.DataFrame:
     d = get_dict(date)
     if 'stat' in d and d['stat'] == '很抱歉,沒有符合條件的資料!':
         raise crawler.NoData('很抱歉,沒有符合條件的資料!')
     data = d['data1']
     fields = d['fields1']
     date = d['date'][0:4] + '-' + d['date'][4:6] + '-' + d['date'][6:]
     df = pd.DataFrame(data, columns=fields).replace(',', '',
                                                     regex=True).replace(
                                                         '--', np.nan)
     df.insert(0, '年月日', date)
     df['年月日'] = pd.to_datetime(df['年月日']).astype(str)
     df['漲跌(+/-)'] = df['漲跌(+/-)'].replace(
         "<p style= color:red>+</p>",
         1).replace("<p style= color:green>-</p>",
                    -1).replace('X', np.nan).replace(' ', 0)
     df['牛熊證觸及限制價格'] = df['牛熊證觸及限制價格'].replace('',
                                               0).replace('*', 1).replace(
                                                   '*', 1).fillna(np.nan)
     df['本益比'] = df['本益比'].replace('', np.nan).fillna(np.nan)
     intColumns = ['成交股數', '成交筆數', '最後揭示買量', '最後揭示賣量']
     floatColumns = [
         '成交金額', '開盤價', '最高價', '最低價', '收盤價', '漲跌(+/-)', '漲跌價差', '最後揭示買價',
         '最後揭示賣價', '本益比', '牛熊證觸及限制價格', '標的證券收盤價/指數'
     ]
     floatColumns = [col for col in floatColumns if col in list(df)]
     df[intColumns + floatColumns] = df[intColumns + floatColumns].replace(
         '', 0).fillna(np.nan)
     df = ast.to_int(intColumns, df)
     df = ast.to_float(floatColumns, df)
     return df
Ejemplo n.º 2
0
def extendedCallableBear(date: str, fields: List[str],
                         data: List[List[str]]) -> None:

    date = date[0:4] + '-' + date[4:6] + '-' + date[6:]
    df = pd.DataFrame(data, columns=fields).replace(',', '',
                                                    regex=True).replace(
                                                        '--', np.nan)
    df.insert(0, '年月日', date)
    df['年月日'] = pd.to_datetime(df['年月日']).astype(str)
    df['漲跌(+/-)'] = df['漲跌(+/-)'].replace(
        "<p style= color:red>+</p>",
        1).replace("<p style= color:green>-</p>",
                   -1).replace('X', np.nan).replace(' ', 0).replace(
                       '<p> </p>', 0).replace('<p>X</p>', np.nan)
    df['牛熊證觸及限制價格'] = df['牛熊證觸及限制價格'].replace('', 0).replace('*', 1).replace(
        '*', 1).fillna(np.nan)
    df['本益比'] = df['本益比'].replace('', np.nan).fillna(np.nan)
    intColumns = ['成交股數', '成交筆數', '最後揭示買量', '最後揭示賣量']
    floatColumns = [
        '成交金額', '開盤價', '最高價', '最低價', '收盤價', '漲跌(+/-)', '漲跌價差', '最後揭示買價',
        '最後揭示賣價', '本益比', '牛熊證觸及限制價格', '標的證券收盤價/指數'
    ]
    floatColumns = [col for col in floatColumns if col in list(df)]
    df[intColumns + floatColumns] = df[intColumns + floatColumns].replace(
        '', 0).fillna(np.nan)
    df = ast.to_int(intColumns, df)
    df = ast.to_float(floatColumns, df)

    saver.lite('可展延牛證', df)
Ejemplo n.º 3
0
def composite(date: str, fields: List[str], data: List[List[str]]) -> None:

    date = date[0:4] + '-' + date[4:6] + '-' + date[6:]
    df = pd.DataFrame(data, columns=fields).replace(',', '',
                                                    regex=True).replace(
                                                        '--', np.nan)
    df.insert(0, '年月日', date)
    df['年月日'] = pd.to_datetime(df['年月日']).astype(str)
    floatColumns = ['成交金額(元)', '成交股數(股)', '成交筆數']
    df = ast.to_float(floatColumns, df)

    saver.lite('大盤成交統計', df)
Ejemplo n.º 4
0
 def craw(date: str) -> pd.DataFrame:
     d = get_dict(date)
     if 'stat' in d and d['stat'] == '很抱歉,沒有符合條件的資料!':
         raise crawler.NoData('很抱歉,沒有符合條件的資料!')
     data = d['data3']
     fields = d['fields3']
     date = d['date'][0:4] + '-' + d['date'][4:6] + '-' + d['date'][6:]
     df = pd.DataFrame(data, columns=fields).replace(',', '',
                                                     regex=True).replace(
                                                         '--', np.nan)
     df.insert(0, '年月日', date)
     df['年月日'] = pd.to_datetime(df['年月日']).astype(str)
     floatColumns = ['成交金額(元)', '成交股數(股)', '成交筆數']
     df = ast.to_float(floatColumns, df)
     return df
Ejemplo n.º 5
0
def market(date: str, fields: List[str], data: List[List[str]]) -> None:

    date = date[0:4] + '-' + date[4:6] + '-' + date[6:]
    df = pd.DataFrame(data,
                      columns=fields).replace(',', '', regex=True).replace(
                          '--', np.nan).replace('---', np.nan)
    df['漲跌(+/-)'] = df['漲跌(+/-)'].replace(
        "<p style ='color:red'>+</p>",
        1).replace("<p style ='color:green'>-</p>",
                   -1).replace('X', 0).replace(' ', 0).replace('', 0)
    df.insert(0, '年月日', date)
    df['年月日'] = pd.to_datetime(df['年月日']).astype(str)
    floatColumns = ['收盤指數', '漲跌(+/-)', '漲跌點數', '漲跌百分比(%)']
    df = ast.to_float(floatColumns, df)

    saver.lite('大盤統計資訊', df)
Ejemplo n.º 6
0
 def craw(date: str) -> pd.DataFrame:
     d = get_dict(date)
     if 'stat' in d and d['stat'] == '很抱歉,沒有符合條件的資料!':
         raise crawler.NoData('很抱歉,沒有符合條件的資料!')
     data = d['data2']
     fields = d['fields2']
     date = d['date'][0:4] + '-' + d['date'][4:6] + '-' + d['date'][6:]
     df = pd.DataFrame(data, columns=fields).replace(',', '',
                                                     regex=True).replace(
                                                         '--', np.nan)
     df['漲跌(+/-)'] = df['漲跌(+/-)'].replace(
         "<p style ='color:red'>+</p>",
         1).replace("<p style ='color:green'>-</p>",
                    -1).replace('X', 0).replace(' ', 0)
     df.insert(0, '年月日', date)
     df = df.rename(columns={'報酬指數': '指數'})
     df['年月日'] = pd.to_datetime(df['年月日']).astype(str)
     floatColumns = ['收盤指數', '漲跌(+/-)', '漲跌點數', '漲跌百分比(%)']
     df = ast.to_float(floatColumns, df)
     return df
Ejemplo n.º 7
0
def close(date: str, fields: List[str], data: List[List[str]]) -> None:

    date = date[0:4] + '-' + date[4:6] + '-' + date[6:]
    df = pd.DataFrame(data,
                      columns=fields).replace(',', '', regex=True).replace(
                          '--', np.nan).replace('', np.nan)
    df['漲跌(+/-)'] = df['漲跌(+/-)'].replace(
        '<p style= color:red>+</p>',
        1).replace('<p style= color:green>-</p>', -1).replace('X', 0).replace(
            ' ', 0).replace('<p> </p>', 0).replace('<p>X</p>', np.nan)
    df.insert(0, '年月日', date)
    df['年月日'] = pd.to_datetime(df['年月日']).astype(str)
    floatColumns = [
        '成交股數', '成交筆數', '成交金額', '開盤價', '最高價', '最低價', '收盤價', '漲跌(+/-)', '漲跌價差',
        '最後揭示買價', '最後揭示買量', '最後揭示賣價', '最後揭示賣量', '本益比'
    ]

    df = ast.to_float(floatColumns, df)

    saver.lite('每日收盤行情(全部(不含權證、牛熊證))', df)
Ejemplo n.º 8
0
 def craw(date: str) -> pd.DataFrame:
     d = get_dict(date)
     if 'stat' in d and d['stat'] == '很抱歉,沒有符合條件的資料!':
         raise crawler.NoData('很抱歉,沒有符合條件的資料!')
     data = d['data5']
     fields = d['fields5']
     date = d['date'][0:4] + '-' + d['date'][4:6] + '-' + d['date'][6:]
     df = pd.DataFrame(data,
                       columns=fields).replace(',', '', regex=True).replace(
                           '--', np.nan).replace('', np.nan)
     df['漲跌(+/-)'] = df['漲跌(+/-)'].replace(
         '<p style= color:red>+</p>',
         1).replace('<p style= color:green>-</p>',
                    -1).replace('X', 0).replace(' ', 0)
     df.insert(0, '年月日', date)
     df['年月日'] = pd.to_datetime(df['年月日']).astype(str)
     floatColumns = [
         '成交股數', '成交筆數', '成交金額', '開盤價', '最高價', '最低價', '收盤價', '漲跌(+/-)',
         '漲跌價差', '最後揭示買價', '最後揭示買量', '最後揭示賣價', '最後揭示賣量', '本益比'
     ]
     df = ast.to_float(floatColumns, df)
     return df
Ejemplo n.º 9
0
# --財務分析--

# read from sqlite
tablename = '財務分析'
sql = "SELECT * FROM '{}'"
ac = pd.read_sql_query(sql.format(tablename), conn_lite).replace(
    '--',
    np.nan).replace('NA',
                    np.nan).replace('None',
                                    np.nan).replace('*****',
                                                    np.nan).fillna(np.nan)
ac.dtypes
columns = list(ac)
varcharColumns = ['年', '公司代號', '公司簡稱']
realColumns = list(filter(lambda x: x not in varcharColumns, columns))
dtypes = {'str': varcharColumns, 'float': realColumns}
ast.to_float(realColumns, ac)
ac = ast.as_type(dtypes, ac)

cols = varcharColumns + realColumns

# create table
if mode == 'create':
    fieldTypes = ['varchar'
                  for col in varcharColumns] + ['real' for col in realColumns]
    primaryKeys = ['年', '公司代號', '公司簡稱']
    sqlc.createTablePostgre(tablename, cols, fieldTypes, primaryKeys, conn_pg)

# insert data
dftosql.i_pg(conn_pg, tablename, ac[cols])