iT邦幫忙

DAY 18
0

用python擷取網頁上的開放資訊(數據資料),分析及畫出圖表系列 第 14

python抓網頁data,及做圖表之十八:自動化畫圖

  • 分享至 

  • xImage
  •  
我不投資科技股絕非迷信不迷信的問題,而是我對科技業並不具有獨到的眼光,因此我寧願投資我懂的東西。
巴菲特

今晚畫一下R3/R4/R5

自己看得圖,美觀不是第一要求,但目的,功能要有,且快速完成,不影響晚上睡眠及白天上班為主。

今天找上個月(2013/08),股票大於200元的個股。
這些公司,要變成where子句給財務分析數字用。

cpys=[]
for row in c.execute("SELECT * FROM m_prc_new WHERE mnp >200 and yr='102' and mon='8'"):  
range(100))
    cpys.append(row[0])
where="','".join(cpys)
where="('"+where+"')"
print(where)

output:
('1476','2207','2227','2454','2357','3008','2059','2707','2727','2912','9921')

這裏用了join函數的技巧。

然後用土法煉鋼的方式,把之前寫死的code, 盡量用陣列,變數替代。
就是不知道要google什麼關鍵字,把SELECT SQL出來的資料,換成
畫圖的資料格式。
這個是核心,之後就可以快速轉資料格式了。

import datetime
import matplotlib.dates as md 

R=7 #R01~R20指標
yrs=[92,93,94,95,96,97,98,99,100,101] #10年
x=[];y0=[0,0,0,0,0,0,0,0,0,0];y1=[0,0,0,0,0,0,0,0,0,0];y2=[0,0,0,0,0,0,0,0,0,0];
y3=[0,0,0,0,0,0,0,0,0,0];y4=[0,0,0,0,0,0,0,0,0,0];y5=[0,0,0,0,0,0,0,0,0,0];y6=[0,0,0,0,0,0,0,0,0,0];
y7=[0,0,0,0,0,0,0,0,0,0];y8=[0,0,0,0,0,0,0,0,0,0];y9=[0,0,0,0,0,0,0,0,0,0];yA=[0,0,0,0,0,0,0,0,0,0]; 
yB=[0,0,0,0,0,0,0,0,0,0] #x放年,y放各年的財務分析數字
where="','".join(cpys) #公司別
where="('"+where+"')"
ssql="SELECT * FROM fny where yr >=92 and cpyid in "+where+" order by 1,2"
for row in c.execute(ssql):   #每一列
    #print(row) 
    for k in range(0,10):  
        if row[0]==yrs[k]:   #每一年
            if row[1]==cpys[0]: #每一家公司
                y=int(row[0]+1911) #把年月日轉成數字
                dt=datetime.datetime(y,12,31)
                x.append(md.date2num(dt))
                y0[k]=(row[R])    #把財務指標放進陣列裏
            if row[1]==cpys[1]:
                y1[k]=(row[R])
            if row[1]==cpys[2]:
                y2[k]=(row[R])
            if row[1]==cpys[3]:
                y3[k]=(row[R])
            if row[1]==cpys[4]:
                y4[k]=(row[R])
            if row[1]==cpys[5]:
                y5[k]=(row[R])
            if row[1]==cpys[6]:
                y6[k]=(row[R])
            if row[1]==cpys[7]:
                y7[k]=(row[R])
            if row[1]==cpys[8]:
                y8[k]=(row[R])
            if row[1]==cpys[9]:
                y9[k]=(row[R])
            if row[1]==cpys[10]:
                yA[k]=(row[R])
                
                
x,y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,yA                
------------------------------
([731580.0,
  731946.0,
  732311.0,
  732676.0,
  733041.0,
  733407.0,
  733772.0,
  734137.0,
  734502.0,
  734868.0],
 [17.24, 24.96, 25.6, 29.76, 33.56, 14.7, 131.96, 209.22, 164.52, 1046.96],
 [28.2, 31.99, 41.18, 61.05, 122.65, 137.01, 313.34, 380.17, 295.38, 39.1],
 [0, 860.0, 0.0, 1138.97, 932.93, 347.25, 195.74, 2650.92, 3871.29, 3134.11],
 [377480.27, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3086.44, 9491.12],
------------------------------------------

這個寫法,雖然很遜,不過之後筆者只要換R財務指標,就可以,其他部分都不用更動。
再來,畫圖。

import matplotlib.pylab as plt

plt.figure()
ax=plt.gca()
ax.set_title('10 Companies')
ax.plot_date(x, y1, '-', label=cpys[0])  
ax.plot_date(x, y2, '-', label=cpys[1])  
ax.plot_date(x, y3, '-', label=cpys[2])  
ax.plot_date(x, y4, '-', label=cpys[3])  
ax.plot_date(x, y5, '-', label=cpys[4])  
ax.plot_date(x, y6, '-', label=cpys[5])  
ax.plot_date(x, y7, '-', label=cpys[6])  
ax.plot_date(x, y8, '-', label=cpys[7])  
ax.plot_date(x, y9, '-', label=cpys[8])  
ax.plot_date(x, yA, '-', label=cpys[9])  
#plt.autofmt_xdate()

legend = ax.legend(loc='upper left', shadow=True)
plt.show()


上一篇
python抓網頁data,及做圖表之十七:抓83年到目前的月均股價遭遇效能問題
下一篇
python抓網頁data,及做圖表之十九:介紹Pandas
系列文
用python擷取網頁上的開放資訊(數據資料),分析及畫出圖表22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言