今天是4.26號迅诬。
自從自己3月17號決定開始在這里記錄學(xué)習(xí)開始腋逆,一晃就是一個月零十天了。這些天里進(jìn)步了嗎侈贷,有一點(diǎn)惩歉,其他情況也有了一點(diǎn)好轉(zhuǎn),但談不上令自己喜笑顏開俏蛮。晚上8點(diǎn)多的時候撑蚌,投的yy實(shí)習(xí)有了回音,讓與相關(guān)人員進(jìn)一步溝通搏屑。加上qq聯(lián)系方式后問了幾句工作的相關(guān)內(nèi)容争涌,然后那邊突然問道,你現(xiàn)在是研究生吧辣恋?這份實(shí)習(xí)的工作都是一些基礎(chǔ)的亮垫,難道你不準(zhǔn)備找一個專業(yè)性更強(qiáng)一點(diǎn)的實(shí)習(xí)崗位嗎?我一下愣住了伟骨,說實(shí)話自己被戳到痛點(diǎn)了饮潦,沒有核心競爭力,現(xiàn)在要想找一個專業(yè)性強(qiáng)一點(diǎn)的實(shí)習(xí)根本找不到携狭,如實(shí)給那邊說了一下情況继蜡。但又能怎樣,多多學(xué)校多多實(shí)踐吧。
還有昨天下午稀并,來到實(shí)驗(yàn)室發(fā)現(xiàn)去年買的鞋穿了不到一年壞了仅颇,該死的,便宜總是沒有好貨稻轨,搞的自己現(xiàn)在完全不敢在網(wǎng)上買鞋灵莲。
今天學(xué)習(xí)jupyter notebook的相關(guān)知識,即以前的ipython notebook殴俱。其主要內(nèi)容是根據(jù)相應(yīng)要求對mongodb中的數(shù)據(jù)實(shí)現(xiàn)可視化政冻。
(1)導(dǎo)入之前抓取下來的json數(shù)據(jù),方法見學(xué)習(xí)日記6中的第6點(diǎn)线欲。
(2)明確要求明场,要求繪制指定日期段(2015.12.27-2016.1.17),指定區(qū)域('海淀'李丰,'朝陽'等)的每天的發(fā)帖量苦锨。
(3)分析思路:先得到起始和截止日期之間的所有日期,以作為繪制折線圖時的橫坐標(biāo)趴泌。再根據(jù)日期舟舒,和地區(qū),使用find函數(shù)找到相應(yīng)記錄嗜憔,并統(tǒng)計(jì)發(fā)帖量秃励。
(4)難點(diǎn)在于:
a). 數(shù)據(jù)庫中日期是以字符串格式而不是日期型格式儲存的,而且不能使用date(s)直接將字符串s轉(zhuǎn)化為日期類型吉捶。因此要from datetime import date,timedelta夺鲜,然后設(shè)計(jì)相應(yīng)函數(shù),返回起始日期到結(jié)束日期之間的所有天數(shù)呐舔。
def get_all_date(date1,date2):
start_date=date(int(date1.split('.')[0]),int(date1.split('.')[1]),int(date1.split('.')[2])) #把字符串形式日期轉(zhuǎn)為真正的日期型
end_date=date(int(date2.split('.')[0]),int(date2.split('.')[1]),int(date2.split('.')[2]))
days=timedelta(days=1)
while start_date <= end_date:
yield (start_date.strftime('%Y.%m.%d'))
start_date = start_date+days
其中date币励,timedelta的用法為:
b=date(2015,2,16)
print(b)結(jié)果為:2015-2-16,而不能是a='2015-2-16',date(a)這是錯誤的珊拼。
timedelta代表兩個datetime之間的時間差食呻,
由于date類型數(shù)據(jù)是不支持直接相加減的,但可以利用timedelta進(jìn)行操作杆麸,如上面的 start_date = start_date+days搁进。
此外strftime('%Y.%m.%d')后面的('%Y.%m.%d')其中的大小寫要注意,否則會導(dǎo)致錯誤昔头。
b).在jupyter 中經(jīng)常涉及到生成器yield()的使用饼问,他的作用是生成所有()里的值,不管是列表還是字典揭斧。注意它只生成但并不返回莱革,所以要調(diào)用生成的數(shù)據(jù)時峻堰,可以用for i in xxx(),其中xxx()為包含yield的函數(shù)盅视。而要讓生成的數(shù)據(jù)轉(zhuǎn)換成列表中數(shù)據(jù)捐名,可以用[i for i in xxx()],不能直接用list(xxx())闹击,也是因?yàn)閤xx()并不返回?cái)?shù)據(jù)
c).根據(jù)相應(yīng)的要求生成相應(yīng)的圖表
options={
'chart':{'zoomtype':'xy'},
'title':{'text':'北京地區(qū)二手物品發(fā)帖量'},
'subtitle':{'text':'統(tǒng)計(jì)分析表'},
'xAxis':{'categories':[i for i in get_all_date('2015.12.24','2016.01.09')]},
'yAxis':{'title':{'text':'數(shù)量'}}
}
charts.plot(series,options,show='inline')
一般帶有日期型的數(shù)據(jù)展示時用折線圖镶蹋,不帶日期型的可以用直方圖或者餅圖。不同的圖表類型通過data中的type來進(jìn)行設(shè)置赏半。
data={
'name':area,
'data':area_day_posts, #注意data必須是list類型贺归,即使只有一個數(shù)據(jù),如[]
'type':'line'
}
最后的結(jié)果如下圖所示: