iT邦幫忙

DAY 3
7

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

用python抓網頁data,及做圖表之三:橫軸(x軸為日期datetime)

  • 分享至 

  • xImage
  •  

昨天的練習,有提到內建模組datetime的練習,卻沒有說明其用途。
datetime是個既熟悉又陌生的用語,大家都知道datetime型別其實是number(float or integer)也行,但是筆者在實務上,其實把它當字串比較多。像oracle裏下select 時,就當用
todate('2013-09-18','yyyy-mm-dd'),把字串換成時間。

在畫圖時,其實每個點都是橫軸/縱軸上的x, y座標,一對數組來表示。不管這麼樣,你不能用字串來當x座標來畫圖,所以先把data裏的時間欄位化成數字,畫成圖,再把時間欄位格式化成字串標在軸上。原理大概是這樣。

舉股票為例,股價是和時間息息相關,會參考過去多少錢?最近多少錢?推測未來多少錢?所以和錢有關的圖表,幾乎免不了有一欄是時間。

假如某家公司的2012年各月營收是

月分    營收   
2012-01	626592
2012-02	651427
2012-03	640711
2012-04	595366
2012-05	706369
2012-06	533270
2012-07	568666
2012-08	672728
2012-09	1005325
2012-10	1310415
2012-11	837757
2012-12	897076

首先是把年月換成數字,為了好計算,就把2012-01改成2012-01-01(日期)
昨天的練習,快速產生日期型別的方式,就是

i=2010;j=8;k=6
d2=datetime.date(i,j,k)
d2
Out[71]: datetime.date(2010, 8, 6)

然後,利用繪圖庫matplotlib裏的函數,轉成數字

import matplotlib.dates as md
import datetime

d1=datetime.date(2012,1,1)
n1=md.date2num(d1)
n1

734503.0

批次做法是把日期欄位裏的年月日擷取出來,然後產生日期型別,再把日期型別換成數字。
對於在工作上並不用python的筆者,可以利用這個機會,練習list, for, function的語法。

import datetime
import matplotlib.dates as md
s=('2012-01','2012-02','2012-03','2012-04','2012-05','2012-06','2012-07','2012-08','2012-09','2012-10','2012-11','2012-12')
n=[]
for a in s:
    y=a[0:4]
    m=a[-2:]
    print int(y),int(m)
    dt=datetime.datetime(int(y),int(m),1)
    n.append(md.date2num(dt))
    
n
輸出為:
[734503.0,
 734534.0,
 734563.0,
 734594.0,
 734624.0,
 734655.0,
 734685.0,
 734716.0,
 734747.0,
 734777.0,
 734808.0,
 734838.0]

可能有人會有疑問,為什麼s是tuple(小括號()包起來),而n是list(中括號[]包起來),筆者本來也是用tuple,可是tuple沒有append方法(秀error:AttributeError: 'tuple' object has no attribute 'append'),所以改用list。因為舉的日期格式很簡單,就用算位置的方式來切出年和月。複雜的,就要別的方式,python的 index允許負數(m=a[-2:]),這是比較特別的(常常看不懂python程式,都是一些小地方,python這類的小地方還蠻多的!!)。

接著繪圖,

from pylab import figure, show
y=[626592,651427,640711,595366,706369,533270,568666,672728,1005325,1310415,837757,897076] #補上月營收金額
fig = figure()
ax = fig.add_subplot(111)
ax.plot_date(n, y, '-')  #將日期及營收傳入繪圖函式
fig.autofmt_xdate()
show()

結語:如上圖的顯示,IPython的作業方式,允許user可以邊寫code邊看結果,
這本是科學計算軟體工具的專長,所以IPython的原始開發者大多是某些需要大量計算及繪圖領域的科學家,可能不是計算機或寫程式專家,這工具經過實地動手做,覺得還真不錯,以前不是這樣寫程式,理想的互動語言,比文字指令介面的
>>>還親和,因為可以回去之前程式片段修修改改,這個可以回去
不可回去,讓親和力更強。

到第三篇才真正畫一個圖,應該有不少人會質疑說,用excel VBA早就做完了,且不用了解這些有的沒有的。有些時候,MIS從業人員還真有快速完成的壓力。

ps:試一下這張圖會不會大一點,IPython上畫的圖,可直接按右鍵存檔


上一篇
用python抓網頁data,及做圖表之二:用到的模組練習
下一篇
用python抓網頁data,及做圖表之四:統計圖的加強,以月營收及月成交資訊為例
系列文
用python擷取網頁上的開放資訊(數據資料),分析及畫出圖表22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

我要留言

立即登入留言