iT邦幫忙

DAY 4
7

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

用python抓網頁data,及做圖表之四:統計圖的加強,以月營收及月成交資訊為例

  • 分享至 

  • xImage
  •  

圖上加上一些說明,及資料整合。



之前算是手工抓資料來繪圖,
現在把http://white5168.blogspot.tw/2012/08/blog-post_11.html#.UjnMKN98pNC的抓月營收資料程式,產生12個月的csv檔(sii_201201.csv...sii_201212.csv),
寫個小迴圈,一囗氣寫入sqlite3, 方便下WHERE篩選。

mon=('02','03','04','05','06','07','08','09','10','11','12')
for i in range(len(mon)):
	path='/home/timloo/Revenue/sii_2012'+mon[i]+'.csv'
	with open(path, 'rb') as csvfile:
		rvnreader = csv.reader(csvfile, delimiter=',', quotechar='"')
	    	for row in rvnreader:
			ym='2012'+mon[i]
	        	rvnlst=(ym,row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],
	        		row[9],row[10])
	        	c.execute('INSERT INTO rvn VALUES (?,?,?,?,?, ?,?,?,?,?, ?,?)', rvnlst)
	conn.commit()

把csv檔的路徑用變數path替代,資料表第一個欄位,用ym變數代替年月。
試一下搜尋一整年的月營收,

for row in c.execute("SELECT * FROM rvn where cpy='4958'"):
    print row[0],row[1].encode('utf8'),row[3].encode('utf8'),row[4],row[5]
output:
201201 電子零組件業 F-臻鼎 3907573.0 4190713.0
201201 電子工業 F-臻鼎 3907573.0 4190713.0
201202 電子零組件業 F-臻鼎 4210239.0 3907573.0
201202 電子工業 F-臻鼎 4210239.0 3907573.0
201203 電子零組件業 F-臻鼎 4392057.0 4210239.0
201203 電子工業 F-臻鼎 4392057.0 4210239.0
.............................................

這時候發現,同家公司出現兩次,回源頭的csv檔查看,確實是兩筆。
那就加上一個WHERE條件,濾掉即可

for row in c.execute(u"SELECT * FROM rvn where cpy='4958' AND cls='電子工業'"):
    print row[0],row[1].encode('utf8'),row[3].encode('utf8'),row[4],row[5]

記得字串左邊加個u(u"SELECT ...."),
iInfo先生抓的資料中,有"當月營收","去年當月營收",如果可以一起呈現,就可以看一家公司,兩年(2012/2011)的營收情況。

我們把資料整理出來吧,x表x軸,時間,去年1月到12月,y表y軸,y1是"當月營收",y2是"去年當月營收"

import datetime
import matplotlib.dates as md 
x=[];y1=[];y2=[]
for row in c.execute(u"SELECT date,monr,lyrmonr FROM rvn where cpy='4958' AND cls='電子工業'"):
    y=row[0][0:4]
    m=row[0][4:6]
    dt=datetime.datetime(int(y),int(m),1) 
    x.append(md.date2num(dt))
    y1.append(row[1])
    y2.append(row[2])
    
x,y1,y2

接著把圖畫出來

from pylab import figure, show

fig = figure()
ax = fig.add_subplot(111)
ax.set_title('Stock No.4958')
ax.plot_date(x, y1, '-', label='Revenue  2012')  #將日期及營收傳入繪圖函式
ax.plot_date(x, y2, '-', label='Last Rev 2011')  #將日期及營收傳入繪圖函式
fig.autofmt_xdate()
legend = ax.legend(loc='upper center', shadow=True)
show()

畫兩條線,就是呼叫ax.plot_date兩次,所以畫很多線是沒問題的。
這次多了label 和title屬性的介紹。應該可以望碼生義吧。

補上額外的練習:一般可從台灣証交所http://www.twse.com.tw/下載月成交資訊csv檔(201209_F3_1_10_3149.csv),
內容如下:

"101年 3149 正達 月成交資訊(元,股)"
年度,月份,最高價,最低價,加權(A/B)平均價,成交筆數,成交金額(A),成交股數(B),週轉率(%)
101,1,89.30,61.40,72.70,"44,316","5,470,762,050","75,245,634",31.94
101,2,98.10,84.00,90.96,"62,824","8,464,842,783","93,060,192",39.51
.......................................................
101,12,81.10,72.50,76.72,"52,657","6,621,160,391","86,292,192",32.49
說明: 1. 本統計資訊含一般、零股、盤後定價、鉅額交易,不含拍賣、標購。

去掉用不到的中文說明資訊,抓年度,月份,最高價,最低價,加權(A/B)平均價來製圖。

import datetime
import matplotlib.dates as md 
x=[];y1=[];y2=[];y3=[]
i=0
with open('/home/timloo/201209_F3_1_10_3149.csv', 'rb') as csvfile:
    rvnreader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in rvnreader:
        i=i+1
        j=rvnreader.line_num #行數
        if i>2 and j<15:    #頭兩行,尾一行用不到 
            y=int(row[0])+2011 #轉西元年
            m=int(row[1])
            dt=datetime.datetime(y,m,1) 
            x.append(md.date2num(dt))
            y1.append(float(row[2]))
            y2.append(float(row[3]))
            y3.append(float(row[4]))
            
x,y1,y2,y3  

接著繪圖

from pylab import figure, show

fig = figure()
ax = fig.add_subplot(111)
ax.set_title('Stock No.3149')
ax.plot_date(x, y1, '-', label='High ')  #將日期及營收傳入繪圖函式
ax.plot_date(x, y2, '-', label='Low  ')  #將日期及營收傳入繪圖函式
ax.plot_date(x, y3, '-', label='Mean ')  #將日期及營收傳入繪圖函式
fig.autofmt_xdate()
legend = ax.legend(loc='right center', shadow=True)
show()

圖在簡述裏!!
**小結:**基本上,傳入任一個股票代號,畫出2012/2011年的營收應該沒問題了。
中文的tilte和label之後會介紹。這次參加COSCUP 2013, 有g0v的組織成員分享很多資料正義的例子,有一個先生寫了一個求職小幫手app,讓求職人方便查詢他將要去面試的公司是否有違反勞工法規的案例。讓他爆紅,因為下載數爆量,被媒體採訪。

其中有一句毛澤東的話,自己動手,豐衣足食
令我印象深刻。數據一直都存在,為何不自己動手取用?


上一篇
用python抓網頁data,及做圖表之三:橫軸(x軸為日期datetime)
下一篇
用python抓網頁data,及做圖表之五:抓網頁內建庫urllib及第三方庫BeautifulSoup的使用
系列文
用python擷取網頁上的開放資訊(數據資料),分析及畫出圖表22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
0
timloo
iT邦研究生 2 級 ‧ 2013-09-19 12:17:44

上國中的小女兒也在旁邊唸書,剛好唸次余光中前輩詩人的鄉愁四韻。
放youtube 上殷正洋先生的版本來聽。

我要留言

立即登入留言