2018-01-05

Python《財經資料庫程式設計》2018-01-11 期末考

Python《財經資料庫程式設計》期末考題目內容如下…
祝大家考試順利!



請至 TWSE 臺灣證券交易所下載 2002、2006、2013 這3檔股票 106年10、11月兩個月份的個股日成交資訊 CSV檔,共6個檔案,請以 Python 撰寫程式運用 CSV 完成不同股票6個日資料檔案合併,並執行以下動作:
1. 以 Matplotlib 繪出這三檔股票 106.10.1 ~ 106.10.16 (要包含16日) 的收盤價走勢圖,繪製在同一張圖上,請標註 x軸 (Date)、 y軸 (End Price)、用股票代碼標示那一條線是那個股票、圖形標題 (title) 請用自己的學號
2. 將 2002 股票106年10月的每日收盤價加總取到小數點下第1位,以"結果A= "顯示,再將結果以:學號(字串型態)(myid)、股票代碼(字串型態)(stockid)、計算結果(數值型態)(data)格式存入雲端資料庫中。
3. 取得 2006 股票106年10月的最高收盤價,以"結果B= "顯示,再將結果以:學號(字串型態)(myid)、股票代碼(字串型態)(stockid)、計算結果(數值型態)(data)格式存入雲端資料庫中。
4. 將 2013 股票106年11月最高三筆成交筆數加總,以"結果C= "顯示,再將結果以:學號(字串型態)(myid)、股票代碼(字串型態)(stockid)、計算結果(數值型態)(data)格式存入雲端資料庫中。
5. 請將完成的程式、繪圖及顯示答案截圖存成 自己的學號.py自己的學號-1.png自己的學號-2.png 上傳至數位學習平台。
6. 上傳資料庫是加分題,請盡力完成喔!若有上傳資料庫的同學,請執行最下方的程式,將第一行「yourid=''」 字串中輸入你/妳的學號後執行,檢查答案是否正確。如果都正確就表示輸入資料庫成功且資料正確,顯示答案截圖 自己的學號-2.png 請改用這個畫面!
※ pymongo 非 Anaconda 預設安裝套件,必須自行安裝。開啟「Anacoda Prompt」輸入指令 conda install -c anaconda pymongo,按 y 執行安裝後,就可以使用。
※ pymongo 的 mongoDB 資料庫連線請使用這個 myClient = MongoClient("mongodb://mongouser:mongouser@ds135537.mlab.com:35537/trymongodb"),資料表請使用 finaltest ,連線方式如下:

#---------------------連接 mongoDB mLab 雲端資料庫---------------------
import pymongo
from pymongo import MongoClient
myClient = MongoClient("mongodb://mongouser:mongouser@ds135537.mlab.com:35537/trymongodb")  # MongoDB URI
myDB = myClient.trymongodb  # 資料庫 trymongodb object
myColl_stock = myDB.finaltest  # 資料表(collection)-finaltest

※ 請注意處理資料的欄位位置,並一定要按照學號(字串型態)(myid)、股票代碼(字串型態)(stockid)、計算結果(數值型態)(data)欄位代碼、大小寫、資料型態存入資料庫。
※ 切勿執行 myResult = myColl_stock.delete_many({}) 刪除指令,會刪掉資料表中其它同學的存入結果。
※ 檢查資料庫答案程式:

yourid=''  # 輸入你/妳的學號字串檢查答案是否正確

#---------------------連接 mongoDB mLab 雲端資料庫---------------------
import pymongo
from pymongo import MongoClient
myClient = MongoClient("mongodb://mongouser:mongouser@ds135537.mlab.com:35537/trymongodb")  # MongoDB URI
myDB = myClient.trymongodb  # 資料庫 trymongodb object
myColl_test = myDB.finaltest  # 資料表(collection)-finaltest
myColl_answer = myDB.answer  # 資料表(collection)-answer

#-----測試 mongoDB 資料庫連接
if myColl_answer.count() >= 0:
    print('mongoDB(trymongodb)資料庫連接成功!')
else:
    print('mongoDB(trymongodb)資料庫連接失敗!')
    
#-----取出答案
ans_a=myColl_answer.find_one({'myid':'A','stockid':'2002'},{'_id':0,'data':1})
ans_b=myColl_answer.find_one({'myid':'A','stockid':'2006'},{'_id':0,'data':1})
ans_c=myColl_answer.find_one({'myid':'A','stockid':'2013'},{'_id':0,'data':1})

#----比對答案
dataRows=myColl_test.count({'myid':yourid})
checkA=0
checkB=0
checkC=0
checkCount=0

if dataRows==0:
    print(yourid,'你/妳尚未將結果存入資料庫喔!')
else:
    print('{0} 已存入 {1} 筆結果在資料庫,開始檢查…'.format(yourid,str(dataRows)))
    
    for i in myColl_test.find({'myid':yourid,'stockid':'2002'},{'_id':0,'data':1}):
        if i['data']==ans_a['data']:
            checkA=1
            
    for i in myColl_test.find({'myid':yourid,'stockid':'2006'},{'_id':0,'data':1}):
        if i['data']==ans_b['data']:
            checkB=1
    
    for i in myColl_test.find({'myid':yourid,'stockid':'2013'},{'_id':0,'data':1}):
        if i['data']==ans_c['data']:
            checkC=1
    
    if checkA==1:
        checkCount+=1
        print('結果A --> 正確!',ans_a['data'])
    else:
        print('結果A --> 不正確!')
    
    if checkB==1:
        checkCount+=1
        print('結果B --> 正確!',ans_b['data'])
    else:
        print('結果B --> 不正確!')
    
    if checkC==1:
        checkCount+=1
        print('結果C --> 正確!',ans_c['data'])
    else:
        print('結果C --> 不正確!')
    
    import datetime
    finTime=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    if checkCount==3:
        print(yourid,'恭禧你/妳都答對了,祝期末順利,寒假愉快喔!')
        myColl_answer.insert_one({'myid':yourid,'stockid':finTime,'data':checkCount})
    elif checkCount>0:
        print('{0} 已答對了 {1} 題,繼續加油喔!'.format(yourid,checkCount))
        myColl_answer.insert_one({'myid':yourid,'stockid':finTime,'data':checkCount})
    else:
        print('{0} 都沒答對耶,繼續加油喔!'.format(yourid))

    print('完成時間',str(finTime))