自建數(shù)據(jù)分析系統(tǒng)怎么玩覆履?

這段時間陸續(xù)把過往一兩年的工作經(jīng)歷都寫出來栖雾,今天寫曾經(jīng)對我挑戰(zhàn)比較大的一個 --- 自建網(wǎng)站分析系統(tǒng)凳厢。也是一年多前的事兒了治泥。

要說是自建,其實也不完全是准脂,畢竟利用了開源WA工具Piwik。Piwik是MySQL+PHP架構(gòu)的網(wǎng)站分析工具,類似于Google Analytics院塞,但是它的界面,功能太萧求。。。不好用了耗帕,而且有些指標(biāo)計算好像也有問題仿便。不過窑业,它從JS標(biāo)簽收集數(shù)據(jù)到把數(shù)據(jù)發(fā)送到服務(wù)器處理后寫到MySQL數(shù)據(jù)庫里的部分,還是很不錯的。

我們要做的部分,是把mysql的表先進(jìn)行處理品姓,處理成需要的數(shù)據(jù)植酥,再展現(xiàn)到界面上。

技術(shù)棧

先說下技術(shù)棧。其實這部分也糾結(jié)很久,畢竟淤毛,我連專業(yè)的開發(fā)都不是蔗蹋,更別說怎么搞技術(shù)架構(gòu)。開始想的很天真,用SQL把數(shù)據(jù)提出來,并且存成想要的表。后來就成了這樣:每段SQL長達(dá)好幾行,并且各種join掂器,各種concat乃摹,各種group by,還有字段的各種運算,這也就算了,問題是,SQL數(shù)據(jù)運算的效率和支持量級都不行,于是最后改成了這樣:后端部分: 先用python把數(shù)據(jù)提出來,pandas處理后,形成幾張大表,以mongoDB的形式存入,再用pandas取出mongodb的表,處理成需要展現(xiàn)的數(shù)據(jù)的API。這樣的好處是,以后提取數(shù)據(jù)都可以只從mongoDB中來,從而不會動到原始的mysql數(shù)據(jù)源。

想著后端用了python,界面也用python吧,畢竟python有數(shù)據(jù)可視化庫胞谈,并且?guī)讉€web框架也不錯径密,可以有自帶的登錄惧眠,比如django秀存,flask等档押。這樣,這套網(wǎng)站分析系統(tǒng)又成了MVC模式。。。后來,界面部分改用了VueJS,也就是說,無論是數(shù)據(jù)改變,用戶交互,渲染都在前端,而后端的python讼呢,只需要做到JSON API就可以了础爬,整個架構(gòu)也就變成了RESTful API+mvvm。其實這部分本不需要這么糾結(jié)音诫,因為只要當(dāng)時多看看類似工具香罐,比如某io港令,就可以看到 json都寫到了html 里淋淀。袍辞。。

前后端分離

我自己開發(fā)就是前后端分開做的,寫前端的時候,數(shù)據(jù)接口都是用的 mock data隐岛,前端開發(fā)的差不多了妒牙,再把mock data拿下來摩瞎,以此作為后端需要的JSON格式上渴,開發(fā)接口次兆。最后是前后端再調(diào)試园蝠。所以大概可以想到善延,在企業(yè)內(nèi)部也是這樣進(jìn)行豆茫,前端后端各干各的,最后聯(lián)調(diào)。

功能規(guī)劃

其實功能很簡單,說是為了易用性祖很,其實我自己覺得很大一部分原因是受開發(fā)能力所累姜钳,畢竟一個新手判呕,做第一個項目,很多東西實現(xiàn)不出來的功能愧哟,就不會去做。不得不實現(xiàn)的抵代,才會去努力研究做。功能上访递,主要涉及了這些工作:

規(guī)劃一共需要多少報表,每張報表以什么樣的圖表展現(xiàn),都需要哪些字段灾炭。(這些決定了至少需要多少個API蜈出,每張報表有一個ID燕刻,當(dāng)傳這個ID給接口的時候过蹂,須返回相應(yīng)報表的數(shù)據(jù))

規(guī)劃有哪些交互的地方,因為每次交互潜的,都意味著報表數(shù)據(jù)會在前端重新渲染,需要重新調(diào)接口下硕。主要有 報表導(dǎo)航丁逝,數(shù)據(jù)導(dǎo)出,選擇日期的datepicker等梭姓,datepicker還需要注意的是霜幼,需要在前后端都做邏輯判斷:起始日期/結(jié)束日期缺失,起始日期晚于結(jié)束日期 這些情況應(yīng)該怎么處理誉尖。

還有就是一些布局上的規(guī)劃罪既。

重點和難點

后端的重點就是數(shù)據(jù)處理:Piwik存入數(shù)據(jù)庫的有十幾張表,但是真正用到的也就那么5,6張... visit(主要記錄每個訪問Session)铡恕,link visit action (主要記錄所有events和pageviews)琢感,conversion (記錄訂單),conversion items(具體的商品信息)探熔,goal(目標(biāo))驹针,action(具體的事件名稱以及page的title等),每個表都有些不同的字段祭刚,所以要使用pandas 根據(jù)需要merge起來牌捷,并且計算所需要的字段,這里面其實特別容易出錯涡驮。

前端相對好很多暗甥。主要一個登錄的user auth,不過因為vue當(dāng)時在國內(nèi)突然火起來了捉捅,所以也是參考了別人的代碼的撤防,當(dāng)然這一部分涉及了要新建個用戶數(shù)據(jù)庫(順便膜拜下vuejs的作者尤雨溪,復(fù)旦附中畢業(yè)后出國的文科生~~~在大楊浦生活了10年的人表示從小就對這所學(xué)校十分向往棒口,無奈自己是學(xué)渣~~~)寄月,另外,前端部分還用了當(dāng)時還不是那么有名的element UI无牵,也就是類似于bootstrap的一套東西(再給餓了么出品的element打個call漾肮,真的很省事,簡化了好多工作茎毁,導(dǎo)航克懊,datepicker忱辅,表格,按鈕等都是現(xiàn)成的 )谭溉,以及圖表庫chartjs(其實這類圖表庫有很多墙懂,比如hichart,echart扮念,還有比較高深的淘寶D3等)损搬。

還有一些學(xué)到的東西

其實現(xiàn)在想想,Python據(jù)說主要用于單純的數(shù)據(jù)分析柜与,以科研領(lǐng)域居多巧勤,真正的用在軟件中的,處理大批量數(shù)據(jù)的可能會需要分布式的計算引擎旅挤,比如這種架構(gòu)hadoop+java踢关。單純用python,可能數(shù)據(jù)量一上來粘茄,就不行了。

不過這一次經(jīng)歷還是很棒的秕脓,幫助我對很多東西有了更深入的理解柒瓣。比如網(wǎng)站架構(gòu),開發(fā)吠架,以及類似Google Analytics這樣的數(shù)據(jù)分析系統(tǒng)原理等芙贫。

那段時間也真的是痛并快樂著,那時候周末和平時晚上要去上JS和Java課傍药,同時研究python和vue磺平,每天早起跑步,然后又長了濕疹坐立難安~~但越是這種狀態(tài)成長的越快拐辽,并且養(yǎng)成了一種迷之自信~~~以后工作中很多東西雖然沒做過拣挪,但是知道只要研究幾小時,幾天肯定就能上手搞出來俱诸,或許這就是在創(chuàng)業(yè)公司的好處吧菠劝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市睁搭,隨后出現(xiàn)的幾起案子赶诊,更是在濱河造成了極大的恐慌,老刑警劉巖园骆,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舔痪,死亡現(xiàn)場離奇詭異,居然都是意外死亡锌唾,警方通過查閱死者的電腦和手機(jī)锄码,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人巍耗,你說我怎么就攤上這事秋麸。” “怎么了炬太?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵灸蟆,是天一觀的道長。 經(jīng)常有香客問我亲族,道長炒考,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任霎迫,我火速辦了婚禮斋枢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘知给。我一直安慰自己瓤帚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布涩赢。 她就那樣靜靜地躺著戈次,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筒扒。 梳的紋絲不亂的頭發(fā)上怯邪,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音花墩,去河邊找鬼悬秉。 笑死,一個胖子當(dāng)著我的面吹牛冰蘑,可吹牛的內(nèi)容都是我干的和泌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼懂缕,長吁一口氣:“原來是場噩夢啊……” “哼允跑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搪柑,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤聋丝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后工碾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弱睦,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年渊额,在試婚紗的時候發(fā)現(xiàn)自己被綠了况木。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垒拢。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖火惊,靈堂內(nèi)的尸體忽然破棺而出求类,到底是詐尸還是另有隱情,我是刑警寧澤屹耐,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布尸疆,位于F島的核電站,受9級特大地震影響惶岭,放射性物質(zhì)發(fā)生泄漏寿弱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一按灶、第九天 我趴在偏房一處隱蔽的房頂上張望症革。 院中可真熱鬧,春花似錦鸯旁、人聲如沸噪矛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摩疑。三九已至,卻和暖如春畏铆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吉殃。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工辞居, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛋勺。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓瓦灶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抱完。 傳聞我的和親對象是個殘疾皇子贼陶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容