【杭州網(wǎng)站建設(shè)】 數(shù)據(jù)可視化之美——《紐約時(shí)報(bào)》的一天
分享 2011.08.04 瀏覽次數(shù):6807次
【杭州網(wǎng)站建設(shè)】 數(shù)據(jù)可視化之美——《紐約時(shí)報(bào)》的一天
你是否曾經(jīng)想過《紐約時(shí)報(bào)》網(wǎng)站的讀者會(huì)涵蓋什么類型的人?我們想過。我們還在想他們傾向于在一天之中的什么時(shí)候來訪問網(wǎng)站,使用什么工具訪問以及他們都來自哪里?從他們是誰(shuí)到在什么時(shí)候、以什么方式以及為什么等,所有這些問題都在我們的思考范圍之內(nèi)。
本文將要介紹的這個(gè)可視化項(xiàng)目源于在《紐約時(shí)報(bào)》研發(fā)試驗(yàn)室一次午餐時(shí)就這個(gè)話題開展的一次簡(jiǎn)單討論。正如你將看到的,從非常簡(jiǎn)單的基于地理的數(shù)據(jù)集合開始,很快就深入到海量數(shù)據(jù)和潛在可視化。最終,我們創(chuàng)建了一個(gè)可視化用于顯示每天《紐約時(shí)報(bào)》Web站點(diǎn)和手機(jī)站點(diǎn)在世界和美國(guó)的流量。
收集一些數(shù)據(jù)
為了對(duì)Web站點(diǎn)和手機(jī)站點(diǎn)24小時(shí)的流量進(jìn)行可視化,我們需要?jiǎng)?chuàng)建一個(gè)可以從《紐約時(shí)報(bào)》的訪問日志中抽取和清洗數(shù)據(jù)的程序。考慮到我們想要?jiǎng)?chuàng)建一個(gè)可以顯示在一天內(nèi)網(wǎng)站的訪問次數(shù)的可視化并且是一個(gè)基于地理信息進(jìn)行展示的可視化,我們需要的數(shù)據(jù)包括:
在24小時(shí)內(nèi),用戶每次訪問Web站點(diǎn)或手機(jī)站點(diǎn)的時(shí)間戳。每個(gè)用戶每次訪問時(shí)所處位置的經(jīng)度和緯度。
原始的訪問日志包含了人們?cè)L問Web站點(diǎn)和手機(jī)站點(diǎn)的很多有用的信息(比如每個(gè)訪問者使用什么瀏覽器);但其中有很多信息對(duì)我們而言是沒有用的,因此需要把它們從日志信息中過濾掉。此外,日志中并不包括每個(gè)用戶每次訪問時(shí)的經(jīng)緯度信息,因此這是我們?cè)谌罩?ldquo;清洗”過程中需要添加的信息。
《紐約時(shí)報(bào)》Web站點(diǎn)月獨(dú)立訪問讀者約2000萬(wàn)。這意味著,在任何一天Web站點(diǎn)和手機(jī)站點(diǎn)上都有幾百萬(wàn)次的頁(yè)面瀏覽(或點(diǎn)擊);這是我們準(zhǔn)備為可視化收集的基礎(chǔ)數(shù)據(jù)。
數(shù)據(jù)清洗
對(duì)于可視化以及其他日志數(shù)據(jù)的分析,我們只對(duì)來自人們的在Web站點(diǎn)和手機(jī)站點(diǎn)的點(diǎn)擊數(shù)感興趣——而不是來自網(wǎng)絡(luò)爬蟲、機(jī)器人或抓取程序。為了過濾這些不必要的數(shù)據(jù),我們實(shí)現(xiàn)了一段Java代碼用于識(shí)別出非人工的訪問日志并將其從日志中刪除。
每天Web站點(diǎn)原始的日志數(shù)據(jù)訪問量大約有500MB~700MB(壓縮格式),手機(jī)站點(diǎn)的訪問量約80MB~100MB(壓縮格式)。在數(shù)據(jù)清洗過程中,我們執(zhí)行了IP到經(jīng)緯度的轉(zhuǎn)換,從而得到每個(gè)訪問用戶的精確位置。原始訪問日志中已經(jīng)包含了用戶的IP地址,然后我們使用商業(yè)數(shù)據(jù)庫(kù)把IP轉(zhuǎn)換成地理位置信息。有很多公司提供GeoIP(地理位置IP)數(shù)據(jù)庫(kù),用于實(shí)現(xiàn)該轉(zhuǎn)換。
一旦數(shù)據(jù)被清洗完畢并準(zhǔn)確地進(jìn)行了地理位置編碼,只需要對(duì)數(shù)據(jù)再做最后一輪處理。由于原始的訪問日志的收集、存儲(chǔ)和清理方式,新清洗完的數(shù)據(jù)是存放在多個(gè)文件中的,需要對(duì)它們排序之后合并到一個(gè)結(jié)果文件中去,該文件將包含可視化所需的數(shù)據(jù),即一天訪問數(shù)據(jù)。
每天“清洗”后的網(wǎng)站日志數(shù)據(jù)被存儲(chǔ)到360個(gè)文件中,每個(gè)文件大小約30MB~40MB(壓縮格式)。由于每行中增加了一些額外的字段,如GeoIP 信息,“清洗”后的日志文件要大于原始文件。手機(jī)站點(diǎn)數(shù)據(jù)集小得多,因此清洗后的數(shù)據(jù)存儲(chǔ)在一個(gè)文件中,大約70MB(壓縮格式)。我們每天需要整理當(dāng)天的每個(gè)清洗后的日志文件,并創(chuàng)建按照對(duì)Web站點(diǎn)和手機(jī)站點(diǎn)的訪問時(shí)間戳以及訪問者所在的經(jīng)緯度排序的單個(gè)文件(Web站點(diǎn)和手機(jī)站點(diǎn)分別生成一個(gè)文件)。
Python、Map/Reduce和Hadoop
我們用Python語(yǔ)言創(chuàng)建了一個(gè)簡(jiǎn)單的map/reduce腳本,可以從清洗后的日志文件中過濾掉所有不需要的數(shù)據(jù),并輸出以逗號(hào)作為分隔符的數(shù)據(jù),最后還會(huì)對(duì)數(shù)據(jù)進(jìn)行排序。我們使用Amazon的彈性MapReduce Web服務(wù),它允許我們?cè)诤芏嗷贖adoop的EC2的運(yùn)行實(shí)例中運(yùn)行Python實(shí)現(xiàn)的map/reduce。Amazon的EC2運(yùn)行實(shí)例的“配置”不同(低配、中配和高配),不同的配置會(huì)提供不同的RAM、CPU核數(shù)和內(nèi)存,因此我們?cè)诤芏郋C2實(shí)例中試驗(yàn)運(yùn)行map/reduce代碼,從而找到性價(jià)比最好的配置。數(shù)據(jù)處理需要約10~20分鐘(價(jià)值幾美元),具體所耗時(shí)間會(huì)依賴于機(jī)器的數(shù)量(我們從4~10臺(tái)都嘗試了一遍)和EC2實(shí)例的配置(我們嘗試了低配和中配)。
map/reduce(Hadoop)Job的輸出結(jié)果是很多有序的文件,這些文件保存在Amazon的S3桶(buckets)中。為了在可視化中把數(shù)據(jù)放到一個(gè)文件中(與前述方式相同,Web站點(diǎn)和手機(jī)站點(diǎn)分別存儲(chǔ),各自有一個(gè)獨(dú)立文件),我們從S3下載結(jié)果文件到本地,然后按照傳統(tǒng)的方法進(jìn)行排序和歸并?,F(xiàn)在,數(shù)據(jù)已經(jīng)按照期望的方式保存在一個(gè)文件中了,可視化的準(zhǔn)備工作已經(jīng)完成。
可視化的第一步
我們?cè)诳梢暬献龅牡谝粋€(gè)嘗試是創(chuàng)建了一個(gè)簡(jiǎn)單的世界地圖,將一天之中對(duì)《紐約時(shí)報(bào)》Web站點(diǎn)的每次訪問用一個(gè)小的黃色圓圈表示,對(duì)移動(dòng)站點(diǎn)的每次訪問用一個(gè)小的藍(lán)色圓圈表示。除了全球范圍的視圖,我們還希望創(chuàng)建一個(gè)聚焦(或縮放)于美國(guó)的視圖。
Processing
Processing(面向設(shè)計(jì)的開源編程語(yǔ)言和集成開發(fā)環(huán)境)被選作可視化工具,有幾個(gè)原因。首先,《紐約時(shí)報(bào)》研發(fā)小組中有些人已經(jīng)有使用Processing完成小的數(shù)據(jù)可視化的項(xiàng)目經(jīng)驗(yàn),他們還擁有使用傳感器作為數(shù)據(jù)收集設(shè)備進(jìn)行探索的經(jīng)驗(yàn)。此外,我們都是Casey Reas(Processing創(chuàng)始人)、Ben Fry和Aaron Koblin使用該工具所創(chuàng)造的作品的超級(jí)粉絲,我們認(rèn)為Processing將會(huì)成為對(duì)海量數(shù)據(jù)進(jìn)行可視化的理想工具。
對(duì)于該可視化,我們需要做的第一件事是將網(wǎng)站的訪問用戶的經(jīng)緯度信息映射到Processing中的二維可視化圖形中。Aaron Koblin友情提供了一些他在前一個(gè)項(xiàng)目中實(shí)現(xiàn)該功能的代碼——很不錯(cuò)的、緊湊的Java類,可以把經(jīng)緯度組轉(zhuǎn)換成x、y坐標(biāo)。我們需要做的就是向Java庫(kù)傳遞數(shù)據(jù)文件中的經(jīng)緯度元組,Java庫(kù)就會(huì)返回x、y坐標(biāo)。然后,我們把這些坐標(biāo)值傳給Processing的繪圖API來定位《紐約時(shí)報(bào)》Web站點(diǎn)和手機(jī)站點(diǎn)的每個(gè)用戶的位置。
基礎(chǔ)層地圖
創(chuàng)建基礎(chǔ)層地圖所需的時(shí)間會(huì)遠(yuǎn)遠(yuǎn)超過你的想象。首先,我們需要對(duì)美國(guó)和世界做出準(zhǔn)確的表示。經(jīng)過大量的數(shù)據(jù)探索后,我們最終使用加州大學(xué)洛杉磯分校的CENS組數(shù)據(jù)集,它描繪了世界上每座城市的經(jīng)緯度坐標(biāo)。
在使用該數(shù)據(jù)集的初始階段,每當(dāng)程序啟動(dòng)時(shí),直接在Processing集成環(huán)境中進(jìn)行渲染,但這個(gè)渲染花費(fèi)的時(shí)間比我們期望的要多很多;因?yàn)橹涝摂?shù)據(jù)不會(huì)變,最后,我們創(chuàng)建了一個(gè)JPEG地圖,向背景地圖中加載一個(gè)非常小的文件。這種方式給我們節(jié)省了好幾分鐘的渲染時(shí)間(當(dāng)解析大數(shù)據(jù)集時(shí),這部分工作所需的時(shí)間會(huì)更長(zhǎng))和處理能力,并且成為所有后續(xù)的數(shù)據(jù)輸出和視頻的背景。
剛剛處理的數(shù)據(jù)哪去了
有了緯經(jīng)度投影代碼和地圖輪廓,我們開始在地圖上描繪交通數(shù)據(jù)圖。在可視化初期,我們使用不包含重大新聞的任意一天的數(shù)據(jù)(2009年2月15日)。這一天的Web站點(diǎn)和手機(jī)站點(diǎn)的流量/訪問次數(shù)和平均值一致。
我們之前已經(jīng)對(duì)數(shù)據(jù)進(jìn)行過清洗、排序和添加地理位置編碼,包含了時(shí)間戳、Web站點(diǎn)和手機(jī)站點(diǎn)上給定一天的用戶每次查看/點(diǎn)擊時(shí)所處的緯度/經(jīng)度值。現(xiàn)在到了創(chuàng)建一個(gè)Processing應(yīng)用程序的時(shí)刻了,它可以掃描Web站點(diǎn)和手機(jī)站點(diǎn)的日志文件,對(duì)于用戶的每次查看/點(diǎn)擊,會(huì)在地圖上描繪一個(gè)基于用戶點(diǎn)擊時(shí)所在位置而生成的點(diǎn)。
場(chǎng)景1,步驟1
Processing應(yīng)用在絕大多數(shù)情況下由兩部分組成:?jiǎn)?dòng)(setup)和循環(huán)繪制(draw)。在Processing應(yīng)用的setup()函數(shù)中,你可以執(zhí)行應(yīng)用需要的任何工作,比如變量初始化、打開輸入文件、字體加載等。循環(huán)繪制是Processing代碼的根本。Processing應(yīng)用中的draw()函數(shù)通常每秒鐘會(huì)被調(diào)用30~60次(這是時(shí)間幀速率)。
我們第一次嘗試的代碼盡管存在一些問題,但能夠生成一些可以在屏幕上觀看的畫面??梢远啻芜\(yùn)行該應(yīng)用程序,查看圖片中描繪的點(diǎn),這些點(diǎn)表示《紐約時(shí)報(bào)》Web站點(diǎn)和手機(jī)站點(diǎn)一天的流量。隨時(shí)間變化的流量的模式讓人難以置信——畫面看起來似乎是活生生的,閃爍的燈光散布在整個(gè)地球上,如圖1所示。
這是偉大的第一步,但我們的代碼和方法都需要做些修改。以下是需要改進(jìn)的三個(gè)方面。
圖1 原始可視化顯示了《紐約時(shí)報(bào)》Web站點(diǎn)和手機(jī)站點(diǎn)在全世界的流量——黃色圓圈表示W(wǎng)eb站點(diǎn)的流量,藍(lán)色圓圈表示手機(jī)站點(diǎn)的流量
沒有具體比例
首先,該可視化沒有顯示來自每個(gè)用戶位置的Web站點(diǎn)和手機(jī)站點(diǎn)的流量的比例。比如,在一天的某個(gè)時(shí)刻,可能有很多Web站點(diǎn)和手機(jī)站點(diǎn)的用戶是來自相同的地方,比如紐約,可以看到有非常高的流量。有時(shí),可能有成千上萬(wàn)用戶來自同一個(gè)地理位置。同樣,假如是紐約!
在該應(yīng)用程序的最初版本中,日志文件中出現(xiàn)的每個(gè)地理位置(一組經(jīng)緯度值)在地圖上都使用相同大小的點(diǎn)表示。為了能夠表示比例,需要基于與某個(gè)位置關(guān)聯(lián)的用戶量來調(diào)整每個(gè)位置的可視化表示(地圖上的藍(lán)色和黃色點(diǎn))。
其次,因?yàn)辄S色(表示W(wǎng)eb站點(diǎn)流量)和藍(lán)色(表示手機(jī)站點(diǎn)流量)點(diǎn)大小相同,而我們(在繪制循環(huán)中)先畫表示W(wǎng)eb站點(diǎn)的點(diǎn),再畫表示手機(jī)站點(diǎn)的點(diǎn),當(dāng)兩種點(diǎn)擊類型位于同一個(gè)地理位置時(shí),藍(lán)色點(diǎn)會(huì)覆蓋黃色點(diǎn)。這對(duì)可視化而言不是一個(gè)好的選擇。
沒有考慮時(shí)間
在可視化的第一階段,我們沒有考慮人們?cè)赪eb站點(diǎn)或手機(jī)站點(diǎn)上每次訪問或頁(yè)面查看所花費(fèi)的時(shí)間,只是簡(jiǎn)單地在地圖上為每次訪問畫了一個(gè)點(diǎn),在可視化的整個(gè)過程中都不再管它了。這樣,就沒有人會(huì)注意到在某些大城市《紐約時(shí)報(bào)》有持續(xù)較大的流量,而在一些小的偏遠(yuǎn)地區(qū)我們可能一天只有幾次查看,這種表示方式會(huì)使我們錯(cuò)誤地認(rèn)為這些地區(qū)整天都有流量。
我們需要解決這個(gè)問題,并結(jié)合比例表示問題,也就是說,我們需要提出一種新的方法,可以精確地表示從任何一個(gè)位置有多少人訪問該網(wǎng)站,以及他們?cè)谀称恼律贤A袅硕嚅L(zhǎng)時(shí)間,或者在整個(gè)網(wǎng)站上停留的時(shí)間。
定時(shí)拍攝
最后,我們選擇將整天的數(shù)據(jù)流量創(chuàng)建成為一個(gè)定時(shí)拍攝視頻,從而使我們能夠在整個(gè)《紐約時(shí)報(bào)》公司內(nèi)共享該可視化。為了解決這個(gè)問題,我們決定使用Processing的一個(gè)內(nèi)置的視頻庫(kù),它能夠?qū)⒀h(huán)繪制生成的時(shí)間幀保存到視頻文件中,進(jìn)而創(chuàng)建出很清晰的電影形式的輸出。
場(chǎng)景1,步驟2
在第一個(gè)版本代碼基礎(chǔ)之上,我們?cè)黾恿送ㄟ^Processing的MovieMaker庫(kù)將可視化捕獲并保存到一個(gè)文件中的功能。我們還增加了應(yīng)用支持,能夠使一對(duì)Web站點(diǎn)或手機(jī)站點(diǎn)的每次點(diǎn)擊的可視化都能夠體現(xiàn)該次訪問的生命周期。平均來說,Web站點(diǎn)和手機(jī)站點(diǎn)這兩個(gè)站點(diǎn)的一次訪問時(shí)間是歷時(shí)3~4分鐘。因此,在迭代過程中,不再是在地圖上畫一個(gè)點(diǎn)并在后面整整24小時(shí)都不管它,我們嘗試慢慢地每3分鐘淡出消減一個(gè)點(diǎn)。當(dāng)然,一個(gè)獨(dú)立用戶不是每3分鐘對(duì)Web站點(diǎn)或手機(jī)站點(diǎn)執(zhí)行一次點(diǎn)擊——日志文件中顯示的很多點(diǎn)擊都是來自同一批用戶,或者是用了更長(zhǎng)的時(shí)間瀏覽了網(wǎng)站的很多頁(yè)面的用戶。但是為了避免可視化的最初版本過于復(fù)雜,我們就籠統(tǒng)地認(rèn)為每次對(duì)網(wǎng)站的訪問都是“3分鐘訪問”。
對(duì)于這種簡(jiǎn)化的表示,我們需要保存一天內(nèi)的每次查看/點(diǎn)擊淡出3分鐘以上的點(diǎn)。這意味著需要在內(nèi)存中存儲(chǔ)很多對(duì)象。對(duì)于每秒鐘內(nèi)Web站點(diǎn)和手機(jī)站點(diǎn)上的每次點(diǎn)擊,我們都會(huì)在Processing應(yīng)用程序中創(chuàng)建一個(gè)對(duì)象,它的任務(wù)是保存該點(diǎn)擊的“生命周期”,也就是說,這個(gè)點(diǎn)需要在屏幕上停留多長(zhǎng)時(shí)間(3分鐘),使用這些對(duì)象來幫助我們?cè)诳梢暬恼麄€(gè)周期內(nèi)對(duì)點(diǎn)實(shí)現(xiàn)淡出效果。
因此,再回過來看Processing的繪制循環(huán)。我們還是每秒鐘從Web和手機(jī)站點(diǎn)的日志文件中讀取數(shù)據(jù),但對(duì)于每次單擊,創(chuàng)建一個(gè)Hit(單擊)對(duì)象,其初始生命周期設(shè)置為3分鐘,初始不透明度是100%(這些值在迭代循環(huán)的每次繪制中不斷減少)。讀完日志數(shù)據(jù)后,遍歷內(nèi)存中Hit對(duì)象集合。對(duì)于每個(gè)Hit對(duì)象,重新描繪表示該單擊的點(diǎn),其透明度是基于該單擊剩余的生命周期,在3分鐘時(shí)間內(nèi)把它淡出。當(dāng)每個(gè)Hit對(duì)象達(dá)到生命周期時(shí),把它從內(nèi)存中刪除,并從地圖上刪除相應(yīng)點(diǎn)(即不再重新描繪它)。
因?yàn)槊棵腌姶蠹s需要對(duì)400~500次點(diǎn)擊進(jìn)行可視化,這種方法意味著任何時(shí)刻都需要在內(nèi)存中存儲(chǔ)很多對(duì)象,來保存所有點(diǎn)擊軌跡。
可視化的第二步
為了實(shí)現(xiàn)想要的可視化,除增加支持能夠顯示每個(gè)地理位置的流量比例,需要對(duì)應(yīng)用程序進(jìn)行優(yōu)化,還需要重新思考如何收集數(shù)據(jù)。
重新回到比例問題
每秒鐘顯示每次點(diǎn)擊并不能顯示任何比例。在第一版的應(yīng)用程序中,來自加拿大農(nóng)村地區(qū)的少量的點(diǎn)擊和來自紐約的成千上萬(wàn)的點(diǎn)擊,其可視化權(quán)重是一樣的。此外,從內(nèi)存和處理器對(duì)可視化進(jìn)行渲染的處理能力而言,每秒鐘顯示所有的點(diǎn)擊代價(jià)太高。
想清楚后,我們認(rèn)為答案是對(duì)每分鐘每個(gè)地理位置的點(diǎn)擊次數(shù)進(jìn)行可視化,而不是每秒鐘進(jìn)行可視化。對(duì)于訪問日志文件中的每分鐘的數(shù)據(jù),我們會(huì)累加每個(gè)地理位置的點(diǎn)擊總數(shù)。這種方式使得可視化結(jié)果可以顯示每個(gè)地理位置的流量比例,而且會(huì)極大地減少Processing應(yīng)用程序的原始數(shù)據(jù)輸入。但是,這種方式意味著我們需要改變數(shù)據(jù)處理和map/reduce作業(yè)。
進(jìn)一步處理數(shù)據(jù)
之前用Python實(shí)現(xiàn)的map/reduce腳本,其目的是從原始訪問日志中解析出我們需要的數(shù)據(jù),并基于時(shí)間對(duì)數(shù)據(jù)進(jìn)行排序,因此,需要做些修改。現(xiàn)在,該腳本需要對(duì)每分鐘、每個(gè)地理位置(一組緯度/經(jīng)度值)的所有點(diǎn)擊進(jìn)行計(jì)數(shù),輸出結(jié)果數(shù)據(jù)并根據(jù)訪問時(shí)間進(jìn)行排序。
從根本上說,map/reduce是一個(gè)編程模型,支持海量數(shù)據(jù)處理。其處理過程分成兩個(gè)任務(wù):mapping(映射)和reducing(規(guī)約)。Mapper通常是接收一些輸入(在我們的例子中是日志文件),對(duì)數(shù)據(jù)做一些較小的處理,然后以鍵/值(key/value)對(duì)的方式輸出數(shù)據(jù)。Reducer的任務(wù)是接收Mapper的輸出結(jié)果數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行歸并或規(guī)約,通常生成較小的數(shù)據(jù)集。在我們的應(yīng)用程序中,Mapper腳本讀入原始的訪問日志文件,對(duì)于每一行,以如下格式輸出鍵/值對(duì):
Timestamp of the access (in HH:MM format),latitude,longitude 1
在這個(gè)例子中,key是以逗號(hào)作為分隔符,包含了日志文件中每次點(diǎn)擊的時(shí)間戳、緯度、經(jīng)度,而value是1(表示一次點(diǎn)擊計(jì)數(shù)值)。
然后,Reducer逐行讀取Mapper的輸出,保存每分鐘每個(gè)地理位置的點(diǎn)擊計(jì)數(shù)值。因此,它把Mapper輸出的每個(gè)“key”存儲(chǔ)到一個(gè)Python字典中,每次遇到Mapper的輸出有相同的“key”,就把其在字典中的計(jì)數(shù)值增加1。Python字典看起來大概如下:
{
“12:00,40.7308,-73.9970″: 128,
“12:00,37.7791,-122.4200″: 33,
“12:00,32.7781, -96.7954″: 17,
# cut off for brevity…
“12:01,40.7308,-73.9970″: 119,
“12:01,37.7791,-122.4200″: 45,
“12:01,32.7781, -96.7954″: 27,
# …
}
一旦Reducer讀取了Mapper的所有的數(shù)據(jù)輸入,它對(duì)數(shù)據(jù)進(jìn)行排序(基于key),然后輸出排序的結(jié)果。
新的數(shù)據(jù)格式
在原始訪問數(shù)據(jù)上運(yùn)行完新的map/reduce腳本后,我們得到了一組更準(zhǔn)確的數(shù)據(jù)集。這個(gè)過程不僅減少了總的數(shù)據(jù)量(Web站點(diǎn)的訪問數(shù)據(jù),從3000萬(wàn)行左右減少到300萬(wàn)行),而且為我們生成了每個(gè)地理位置的計(jì)數(shù)值?,F(xiàn)在,我們需要確定比例因子。以下是新的結(jié)果數(shù)據(jù)的樣本——注意時(shí)間戳、緯度、經(jīng)度和(每分鐘的)點(diǎn)擊計(jì)數(shù)值。
12:00,039.948,-074.905,128
12:00,039.949,-082.057,1
12:00,039.951,-105.045,3
12:00,039.952,-074.995,1
12:00,039.952,-075.164,398
12:00,039.960,-075.270,1
12:00,039.963,-076.728,4
12:00,039.970,-075.832,2
12:00,039.970,-086.160,4
12:00,039.975,-075.048,23
可視化比例和其他可視化優(yōu)化
有了新形式的數(shù)據(jù),我們不再是每秒鐘為每次點(diǎn)擊畫一個(gè)點(diǎn),而是可以每分鐘為每個(gè)地理位置的點(diǎn)擊數(shù)值畫一個(gè)圓圈,并根據(jù)點(diǎn)擊數(shù)計(jì)算圓圈大小。這種方式可以生成期望的比例顯示,使得可視化的讀者可以輕松地區(qū)分來自加拿大農(nóng)村和紐約市的不同的流量差別。
這種方式也極大地減少了應(yīng)用程序需要的內(nèi)存量。我們還是需要在內(nèi)存中保存Web站點(diǎn)和手機(jī)站點(diǎn)的所有點(diǎn)擊(這樣我們才能消隱去時(shí)間超過3分鐘的點(diǎn)擊),但是因?yàn)槲覀儸F(xiàn)在保存的是每分鐘每個(gè)地理位置的點(diǎn)擊數(shù),極大地減少了需要的Hit對(duì)象數(shù)量。對(duì)于任一分鐘,來自全世界的流量通常包含2000~3500個(gè)不同的地理位置。每個(gè)位置的Hit對(duì)象必須存儲(chǔ)在內(nèi)存中;每個(gè)Hit對(duì)象生命期是3分鐘,因此對(duì)于任一時(shí)刻,內(nèi)存中可能有6000~12 000個(gè)對(duì)象——數(shù)量還是很多,但是已經(jīng)遠(yuǎn)遠(yuǎn)小于前一版本的對(duì)象數(shù)量。
現(xiàn)在,需要更新Processing應(yīng)用程序,從而可以實(shí)時(shí)保存每個(gè)位置在任一時(shí)刻的點(diǎn)擊數(shù),而且圓圈大小比例可以根據(jù)點(diǎn)擊數(shù)調(diào)整。
使定時(shí)拍攝能夠正常工作
對(duì)Processing應(yīng)用程序進(jìn)行升級(jí)使其能夠處理新的數(shù)據(jù)格式和方法,在此之后,我們創(chuàng)建了一個(gè)完整的歷時(shí)24小時(shí)的定時(shí)拍攝視頻。我們新的代碼每次能夠正常運(yùn)行幾個(gè)小時(shí),不存在之前遇到的內(nèi)存和整體機(jī)器延時(shí),現(xiàn)在是生成完整的定時(shí)拍攝視頻的時(shí)候了。不再像第一次那樣嘗試在地圖上為歷時(shí)24小時(shí)定時(shí)拍攝渲染W(wǎng)eb站點(diǎn)和手機(jī)站點(diǎn)數(shù)據(jù),我們只使用手機(jī)站點(diǎn)的數(shù)據(jù)(其數(shù)據(jù)量大約是Web站點(diǎn)數(shù)據(jù)量的10%)。這樣,我們就可以比同時(shí)渲染W(wǎng)eb站點(diǎn)和手機(jī)站點(diǎn)數(shù)據(jù)更快地查看到結(jié)果或者發(fā)現(xiàn)可能存在的問題。
圖2 《紐約時(shí)報(bào)》手機(jī)站點(diǎn)在2009年6月25日這一天在美國(guó)的流量
圖3 《紐約時(shí)報(bào)》手機(jī)站點(diǎn)在2009年6月25日這一天在全球的流量
圖4 《紐約時(shí)報(bào)》Web站點(diǎn)在2009年6月25日這一天在美國(guó)的流量
圖5 《紐約時(shí)報(bào)》Web站點(diǎn)在2009年6月25日這一天在全球的流量
由于不確定應(yīng)該對(duì)24小時(shí)的定時(shí)拍攝進(jìn)行多大程度的收縮,我們決定測(cè)試一下,采用10分鐘。該項(xiàng)目最激動(dòng)人心的時(shí)刻之一是當(dāng)我們首次嘗試渲染24小時(shí)的手機(jī)站點(diǎn)數(shù)據(jù)時(shí),點(diǎn)擊Processing的運(yùn)行(Run)按鈕那一刻。把數(shù)據(jù)在一臺(tái)MacBook Pro機(jī)上渲染成10分鐘的定時(shí)拍攝視頻花了約2個(gè)小時(shí)。結(jié)果生成了!
大家互相擊拳祝賀后,開始觀看視頻。看了大約兩分鐘,我們意識(shí)到視頻時(shí)間太長(zhǎng)了——感覺視頻太慢了!開始重新裝載數(shù)據(jù),創(chuàng)建一個(gè)歷時(shí)接近1.5分鐘的視頻。經(jīng)過幾次嘗試以及對(duì)代碼和幀速率的調(diào)整,我們生成了新的視頻。對(duì)較小規(guī)模的手機(jī)站點(diǎn)數(shù)據(jù)集進(jìn)行渲染可以正常工作后,我們開始在Web站點(diǎn)和手機(jī)站點(diǎn)的混合數(shù)據(jù)集上嘗試。由于數(shù)據(jù)量比之前大得多,渲染花費(fèi)的時(shí)間也長(zhǎng)很多——之前是2個(gè)小時(shí),這次渲染花了24~36個(gè)小時(shí),這取決于其所用的機(jī)器的性能。
半自動(dòng)化
最后,我們希望能夠?qū)φ麄€(gè)過程實(shí)現(xiàn)自動(dòng)化,這樣程序接收到輸入命令后,可以執(zhí)行任何一天的定時(shí)拍攝渲染。該過程現(xiàn)在是半自動(dòng)化的,我們可以很容易為同一天渲染多個(gè)定時(shí)拍攝的視頻。舉個(gè)例子,我們可以針對(duì)以下任何一種情況進(jìn)行渲染:
世界地圖的Web站點(diǎn)和手機(jī)站點(diǎn)的數(shù)據(jù)。美國(guó)地圖的Web站點(diǎn)和手機(jī)站點(diǎn)的數(shù)據(jù)。世界地圖和美國(guó)地圖的Web站點(diǎn)的數(shù)據(jù)。世界地圖和美國(guó)地圖的手機(jī)站點(diǎn)數(shù)據(jù)。
每種類型的數(shù)據(jù)需要花多長(zhǎng)時(shí)間渲染?這取決于日期以及那一天是否是重大新聞日(即是否有很大流量)。
渲染定時(shí)拍攝視頻的數(shù)據(jù)計(jì)算
在Processing應(yīng)用程序內(nèi),我們每秒鐘捕獲15幀的視頻。對(duì)于每一幀,在屏幕上繪制了1 分鐘的日志量。對(duì)于24小時(shí)的數(shù)據(jù)量,需要捕獲1440分鐘的數(shù)據(jù)。把每15分鐘的數(shù)據(jù)渲染成時(shí)間長(zhǎng)度為一秒的視頻,則1440分鐘的數(shù)據(jù)會(huì)生成96秒鐘的視頻(約1.5分鐘)。
生成的視頻有什么用
在紐約時(shí)報(bào)大廈28層的走廊上掛著10臺(tái)監(jiān)視器,播放著我們所做的一些可視化視頻,包括這些流量圖。其中有6臺(tái)監(jiān)視器自動(dòng)播放本章介紹的定時(shí)拍攝視頻;其他4臺(tái)屏幕上顯示的是《紐約時(shí)報(bào)》Web站點(diǎn)和手機(jī)站點(diǎn)當(dāng)天全部流量的快照(美國(guó)和全球)。我們開始在公司內(nèi)分享這些視頻,并且探索更多的可視化來查看一天內(nèi)可以發(fā)現(xiàn)哪些模式。我們還觀察“重大新聞日”和“平常日”中,用戶使用模式的差異。
結(jié)束語(yǔ)
我們從目前創(chuàng)建的可視化中觀察到了一些有趣的模式,絕大多數(shù)如圖2~圖5所示。
第一個(gè)模式是手機(jī)站點(diǎn)的流量在美國(guó)約早上5點(diǎn)或6點(diǎn)開始暴漲,該時(shí)段人們醒來開始去上班(尤其是在東海岸)。在約8點(diǎn)半或9點(diǎn)人們到達(dá)辦公室前,手機(jī)站點(diǎn)流量一直很大;而當(dāng)人們到達(dá)辦公室時(shí),Web站點(diǎn)流量開始第一次大增。Web站點(diǎn)的流量在一整天都很大(尤其是午飯時(shí)間),下午稍有點(diǎn)下降,很可能是人們?cè)谙掳嗦飞?,而這時(shí)手機(jī)站點(diǎn)的流量又開始增加。這個(gè)觀察和我們開始研究前的預(yù)期相同,但是該可視化進(jìn)一步證實(shí)了我們的猜想。
數(shù)據(jù)可視化之美
另一個(gè)有趣的模式是Web和手機(jī)站點(diǎn)的國(guó)際流量都很大,非洲、中國(guó)、印度和日本某些地區(qū)的手機(jī)站點(diǎn)流量也很大。
標(biāo)簽:杭州網(wǎng)站建設(shè) 杭州網(wǎng)站制作 杭州網(wǎng)站設(shè)計(jì) 杭州網(wǎng)站建設(shè)公司 杭州網(wǎng)站制作公司 杭州網(wǎng)站設(shè)計(jì)公司 杭州精品網(wǎng)站建設(shè) 杭州精品網(wǎng)站設(shè)計(jì) 杭州精品網(wǎng)站設(shè)計(jì)公司 杭州精典網(wǎng)站設(shè)計(jì) 杭州精典網(wǎng)站建設(shè) 杭州精典網(wǎng)站設(shè)計(jì)公司 杭州精典網(wǎng)站制作 杭州精品網(wǎng)站制作
-
杭州網(wǎng)站設(shè)計(jì)公司:品牌網(wǎng)站開發(fā)助力企業(yè)成長(zhǎng)
日期:2024-12-20瀏覽次數(shù):177次
-
杭州網(wǎng)站建設(shè)公司:商城網(wǎng)站建設(shè)的六大關(guān)鍵步驟
日期:2024-12-18瀏覽次數(shù):286次
-
杭州網(wǎng)站制作:醫(yī)院網(wǎng)站設(shè)計(jì)與域名備案的復(fù)雜性探討
日期:2024-12-18瀏覽次數(shù):292次
-
杭州網(wǎng)站制作公司:打造安全可靠的醫(yī)院網(wǎng)站
日期:2024-12-11瀏覽次數(shù):545次
-
杭州網(wǎng)站設(shè)計(jì)公司:數(shù)據(jù)庫(kù)在高端網(wǎng)站制作中的關(guān)鍵作用
日期:2024-12-11瀏覽次數(shù):515次
相關(guān)新聞
整合同類新聞,相關(guān)新聞一手掌握
-
杭州網(wǎng)站優(yōu)化公司:企業(yè)IP打造與全網(wǎng)霸屏推廣
日期:2024-12-20瀏覽次數(shù):117次
-
杭州APP定制:選擇合適開發(fā)公司的重要性
日期:2024-12-20瀏覽次數(shù):170次
-
杭州app開發(fā):如何選擇專業(yè)開發(fā)公司?
日期:2024-12-20瀏覽次數(shù):159次
-
杭州定制小程序公司:小程序行業(yè)的未來趨勢(shì)
日期:2024-12-20瀏覽次數(shù):164次
-
杭州網(wǎng)站設(shè)計(jì)公司:品牌網(wǎng)站開發(fā)助力企業(yè)成長(zhǎng)
日期:2024-12-20瀏覽次數(shù):177次
最新新聞
與互聯(lián)網(wǎng)同行,實(shí)時(shí)掌握網(wǎng)建行業(yè)最新動(dòng)態(tài)
-
IT網(wǎng)站建設(shè)行業(yè)資訊之Flash 之死
日期:2012-01-14瀏覽次數(shù):8079次
-
如何合理規(guī)劃杭州高端網(wǎng)站制作
日期:2020-08-25瀏覽次數(shù):4370次
-
肇慶app開發(fā)常常會(huì)遇到的困擾
日期:2020-10-12瀏覽次數(shù):1989次
-
論杭州外貿(mào)企業(yè)的杭州營(yíng)銷推廣
日期:2021-07-08瀏覽次數(shù):3809次
-
商城網(wǎng)站建設(shè)需要做到哪些基本流程?
日期:2022-05-12瀏覽次數(shù):3538次
隨機(jī)新聞
新聞新動(dòng)態(tài),您需要的新聞管家
洞悉市場(chǎng)趨勢(shì)演變讓傳播回歸社會(huì)
免費(fèi)獲取網(wǎng)站建設(shè)與網(wǎng)絡(luò)推廣方案報(bào)價(jià)
-
關(guān)于我們
杭州帷拓科技有限公司,是一家新型的全案網(wǎng)絡(luò)開發(fā)公司,作為以互聯(lián)網(wǎng)高端網(wǎng)站建設(shè)、APP開發(fā)、小程序開發(fā)為核心的專業(yè)網(wǎng)絡(luò)技術(shù)服務(wù)供應(yīng)商,帷拓科技致力于全面分析市場(chǎng)環(huán)境、衡量與預(yù)測(cè)市場(chǎng)需求、整合區(qū)別于行業(yè)競(jìng)爭(zhēng)對(duì)手的絕對(duì)優(yōu)勢(shì),結(jié)合品牌理念深度挖掘項(xiàng)目?jī)?yōu)勢(shì)和產(chǎn)品價(jià)值,提升客戶品牌認(rèn)知、認(rèn)可度。
-
我們的客戶
帷拓科技?xì)v經(jīng)十年沉淀,與國(guó)內(nèi)外上千家客戶達(dá)成合作關(guān)系,其中穩(wěn)定合作的公司有:浙江華為、浙江移動(dòng)、浙江5G產(chǎn)業(yè)聯(lián)盟、浙江省社科院、綠城足球俱樂部、娃哈哈雙語(yǔ)學(xué)校、健康中國(guó)杭州峰會(huì)、科雷機(jī)電等,帷拓科技始終堅(jiān)持“帷有專業(yè),才能拓展無限”的服務(wù)理念,堅(jiān)持“認(rèn)真堅(jiān)持細(xì)節(jié)”的優(yōu)質(zhì)服務(wù)理念,不斷完善自身,成就企業(yè),最終實(shí)現(xiàn)共贏。
-
我們的業(yè)務(wù)
帷拓科技主營(yíng)業(yè)務(wù)范圍包含互聯(lián)網(wǎng)高端網(wǎng)站建設(shè)、APP開發(fā)、小程序開發(fā)、商城網(wǎng)站建設(shè)、公眾號(hào)運(yùn)營(yíng)以及數(shù)字營(yíng)銷等,涵蓋了服務(wù)、房產(chǎn)、數(shù)碼、服裝、物流貿(mào)易等行業(yè),根據(jù)品牌現(xiàn)狀,為每個(gè)客戶量身定制項(xiàng)目整體服務(wù)方案,以敏銳的市場(chǎng)洞察力、創(chuàng)新的市場(chǎng)策劃能力,全面把握市場(chǎng)變化,為客戶實(shí)現(xiàn)從企業(yè)到消費(fèi)者的價(jià)值轉(zhuǎn)換。