如何搭建一套數(shù)據(jù)分析平臺?
文章分享了一個簡單的數(shù)據(jù)分析平臺搭建教程,希望能夠?qū)δ銕硇椭?/p>
今天教大家如何搭建一套數(shù)據(jù)分析平臺。
它可能是最簡單的搭建教程,有一點Python基礎(chǔ)都能完成。比起動輒研發(fā)數(shù)月的成熟系統(tǒng),借助開源工具,整個時間能壓縮在一小時內(nèi)完成。
優(yōu)秀的數(shù)據(jù)分析平臺,首先要滿足數(shù)據(jù)查詢、統(tǒng)計、多維分析、數(shù)據(jù)報表等功能。可惜很多分析師,工作的第一年,都是埋葬在SQL語句中,以SQL+Excel的形式完成工作,卻用不上高效率的工具。
說Excel也很好用的同學,請先回避一下。
另外一方面,以互聯(lián)網(wǎng)為代表的公司越來越重視數(shù)據(jù),數(shù)據(jù)獲取不再是難點,難點是怎樣敏捷分析獲得洞察。
市面上已經(jīng)有不少公司推出企業(yè)級的分析平臺和BI,可惜它們都是收費的。我相信不少讀者聽說過,但一直沒有機會體驗,或者老板們囊中羞澀?,F(xiàn)在,完完全全能免費建立一套BI系統(tǒng),即可以單機版用以分析,也能私有化部署到服務(wù)器,成為自家公司的分析工具。
這一切,只需要一小時。
Superset
Superset是一款輕量級的BI工具,由Airbnb的數(shù)據(jù)部門開源。整個項目基于Python框架,不是Python我也不會推薦了,它集成了Flask、D3、Pandas、SqlAlchemy等。
這是官網(wǎng)的案例(本來是動圖的,可惜壓縮后也超過微信圖片大小限制,吐槽下),想必設(shè)計界面已經(jīng)能秒殺一批市面上的產(chǎn)品了,很多BI真的是濃烈的中國式報表風……因為它的前端基于D3,所以絕大部分的可視化圖表都支持,甚至更強大。
Superset本身集成了數(shù)據(jù)查詢功能,查詢對分析師那是常有的事。它支持各類主流數(shù)據(jù)庫,包括MySQL、PostgresSQL、Oracle、Impala、SparkSQL等,深度支持Druid。
后臺支持權(quán)限分配管理,針對數(shù)據(jù)源分配賬戶。所以它在部署服務(wù)器后,分析師們可以通過它查詢數(shù)據(jù),也能通過數(shù)據(jù)建立Dashboard報表。
介紹了這么多,想必大家已經(jīng)想要安裝了吧。
安裝
Superset同時支持Python2和Python3, 我這里以Python3作為演示。它支持pip形式的下載,不過我不建議直接安裝,因為Superset的依賴包較多,如果直接安裝,很容易和現(xiàn)有的模塊產(chǎn)生沖突。
這里需要先搭建Python的虛擬環(huán)境。虛擬環(huán)境可以幫助我們在單機上建立多個版本的Python。簡而言之,即可以Python2和Python3共存,也能Python3.3、3.4、3.5共濟一堂,彼此間互相獨立。
虛擬環(huán)境的安裝方式很多,pyenv和virtualenv等。這里用Anaconda自帶的conda工具。打開電腦終端/cmd,輸入以下命令。
conda create -n superset python=3.4
conda create是創(chuàng)建虛擬環(huán)境的命令。-n是環(huán)境的命名參數(shù),在這里,我們創(chuàng)建了名為superset的環(huán)境,它安裝在Anaconda的envs目錄下。python版本為3.4(superset暫時不支持3.6)。
該命令只會安裝基礎(chǔ)包,如果需要額外安裝其他包,在命令行后加上想要的包名字即可,如python=3.4 numpy pandas。
安裝很迅速,完成后,我們的Python環(huán)境還是默認版本,現(xiàn)在需要激活虛擬環(huán)境。
source activate superset
source activate是激活命令,superset為想要激活的虛擬環(huán)境名。windows和mac的命令不一樣,win只要activate superset 。如果要退出,則是source deactivate或者deactivate。
激活成功后,命令行前面會多出一個前綴(superset),表明切換到了新的虛擬環(huán)境。接下來安裝superset。
pip install superset
pip會自動安裝所有的依賴,速度可能有點慢,建議更改pip源。
命令行后加上 -i?https://pypi.douban.com/simple?,我這里用了豆瓣的鏡像源,速度嗖嗖的。
如果安裝過程中報錯,是部分程序缺失,像系統(tǒng)比較老舊的win用戶,需要安裝新版的visual c++,網(wǎng)上搜索教程即可。在官網(wǎng)的教程中,還要求pip install cryptography==1.7.2,我沒有安裝也沒有影響,供大家參考。其他報錯,都可以通過搜索解決。
安裝成功后,需要進行初始化配置,也是在命令行輸入。
fabmanager create-admin –app superset
首先用命令行創(chuàng)建一個admin管理員賬戶,也是后續(xù)的登陸賬號。會依次提示輸入賬戶名,賬戶使用者的first name、last name、郵箱、以及確認密碼。fabmanager是flask的權(quán)限管理命令,如果大家忘了密碼,也能重新設(shè)立。
superset db upgrade
初始化數(shù)據(jù)源。
superset load_examples
載入案例數(shù)據(jù),這里的案例數(shù)據(jù)是世界衛(wèi)生組織的數(shù)據(jù),也是上文演示的各類可視化圖表,大家登陸后能夠直接看到。下載速度還行。
superset init
初始化默認的用戶角色和權(quán)限。
superset?runserver
最后一步驟,啟動Superset服務(wù)。因為我們是本地環(huán)境,所以在瀏覽器輸入?http://localhost:8088?即可。在runserver后面添加 -p XXXX 可更改為其他端口。
進入登陸界面,輸入登陸密碼,大功告成。
使用
先別急著使用,因為Superset是英文,我們先把它漢化了。Superset自身支持語言切換。
進入到Superset所在目錄文件,按我之前的步驟,應(yīng)該在anaconda/envs/superset/lib/python3.4/site-packages/superset中,路徑視各位情況可能有差異。
在目錄下有一個叫config.py的文件,打開它,找到Setup default language這一行,修改變量。
BABEL_DEFAULT_LOCALE調(diào)整為zh,這樣界面默認為中文。languages字典中zh前面的注釋#去掉。保存后退出。
接下來還是在Superset的目錄下新創(chuàng)建文件夾,按translations/zh/LC_MESSAGES的路徑依次創(chuàng)建三個。Superset官網(wǎng)提供了漢化包,在最大的同性交友網(wǎng)站github上下載,目錄為:
網(wǎng)址路徑有點長,下載后把mo文件放在LC_MESSAGES文件下。清除瀏覽器的緩存,重新登陸localhost。
搞定!
需要注意的是,它并非完全漢化,而是漢化了superset相關(guān)的部分。部分文字被寫入在flask app的文件中,漢化起來比較麻煩。
Superset分為多個模塊,安全模塊是賬號管理相關(guān),包括角色列表,視圖權(quán)限控制,操作日志等。管理模塊沒什么用,主要是設(shè)計元素。
數(shù)據(jù)源可以訪問和連接數(shù)據(jù)庫,切片是各類數(shù)據(jù)可視化,均是單圖;看板即為Dashboard,是切片的集合,Superset提供了三個初始案例,SQL工具箱是數(shù)據(jù)查詢平臺。
麻雀雖小,五臟俱全,對于大部分中小型的企業(yè),Superset足以應(yīng)付數(shù)據(jù)分析工作。
先學習連接數(shù)據(jù)庫,這里以我電腦中的數(shù)據(jù)庫為準,如果大家學習過早前的教程,那么數(shù)據(jù)庫中都應(yīng)該有數(shù)據(jù)分析師的練習數(shù)據(jù),我這里不重復了,可以看歷史文章。也可用自帶的衛(wèi)生數(shù)據(jù)照著練習。
Superset使用了sqlalchemy框架,使用前需要安裝數(shù)據(jù)庫驅(qū)動程序,先退出runserver,進入superset虛擬環(huán)境,安裝Python中的MySQL驅(qū)動程序。
?pip install pymysql
MySQL的驅(qū)動程序很多,除了pymysql,還有mysqlclient等。安裝好后,進入數(shù)據(jù)源,新建一個database連接。
在SQLAlchemy URL中加入數(shù)據(jù)庫的地址,格式為:
mysql+pymysql://root:xxxx@localhost:3306/qin?charset=utf8
mysql是數(shù)據(jù)庫類型,pymysql是驅(qū)動程序,表示用pymysql連接mysql數(shù)據(jù)庫,+號不能省略。
另外,root是數(shù)據(jù)庫登陸賬號,xxxx為密碼,這個按大家自己設(shè)立的來。localhost是數(shù)據(jù)庫地址,因為我的是本地環(huán)境,所以localhost即可,也可以是127.0.0.1。3306是端口,一般默認這個。qin是需要連接的數(shù)據(jù)庫,也是我自己設(shè)的名字。后面帶參數(shù)charset=utf8,表示編碼,因為表里面有中文。
其他數(shù)據(jù)庫的連接大同小異,圖中綠色的連接是相關(guān)教程。
如果大家在公司網(wǎng)絡(luò),擁有內(nèi)網(wǎng)訪問數(shù)據(jù)庫的權(quán)限,也可以嘗試連接,應(yīng)該是可以的,這樣就能在個人電腦上實行敏捷的BI分析。
格式命名好后,點擊測試,出現(xiàn)seems ok,表示成功訪問。在選項下面還有個Expose in SQL Lab,允許我們在SQL工具箱查詢,要打上勾。
進入到SQL工具箱,左邊選擇table為DataAnalyst。
直接出來了數(shù)據(jù)庫的數(shù)據(jù)預覽。連查詢平臺的顏值都那么高。大家的SQL技能應(yīng)該都很不錯,有興趣可以在這里練習一下,語法和MySQL一致。其他數(shù)據(jù)庫則是其他數(shù)據(jù)庫的語法。
執(zhí)行一段SQL語句,它支持下載為CSV,我沒試過支持最大文件的大小,但作為日常的查詢平臺是綽綽有余了。
選擇Visualize,進入切片繪圖模式。
這里自動匹配支持的圖表選項,包括Bar Chart條形圖,Pir Chart餅圖等。下面的選項是定義維度,我們將city,education,postitionName,salary,workYear都勾選為維度。agg_func是聚合功能,這里將職位ID求和,改成count(),點擊生成圖表。
這里按城市生成了各職位ID求和獲得的條形圖,也就是不同城市的分析師人數(shù)。
左邊Chart Options可以調(diào)整分析需要的維度。Metrics是分析的度量,這里是count(positionId),Series是條形圖中的類別,Breakdowns可以認為是分組或者分桶。這里將Series改成workYear,Breakdowns改成city,點擊Query執(zhí)行。
條形圖變更為按工作年限和城市細分的多維條形圖。點擊Stacked Bars,則切換成堆積柱形圖。操作不難。
左側(cè)的選項欄還有其他功能,這里就不多做介紹了,和市面上常見的BI沒有多大區(qū)別,琢磨一下也就會了。
Superset支持的圖表很豐富,如果具備開發(fā)能力,也能以D3和Flask為基礎(chǔ)做二次開發(fā)。Airbnb官方也會不斷加入新的圖表。不同圖表,其左側(cè)的操作選項也不同。
\
上圖是以數(shù)據(jù)分析師職位名稱為基礎(chǔ)繪制的詞云圖,生成的速度會比較慢。我們選擇save保存。完成的圖表均存放在切片下。
Dashboard通過多個切片組合完成,每個切片連接不同的數(shù)據(jù)源,這是BI的基本邏輯。進入看板界面,新建一個Dashboard。
設(shè)置看板相應(yīng)的配置選項,因為我偷懶了,所以只做了兩個切片,大家有興趣可以繼續(xù)增加。其他選項忽略,都是自動生成的。點擊save,到這一步,BI最重要的Dashboard就完成了。
瀏覽一下最終的成果吧。
關(guān)于Superset的新手教學結(jié)束了,要是部署到公司,賬號和權(quán)限多研究下。它和市面上的其他BI沒有太多區(qū)別,不過它是我們用Python從零到有一手建立,這個感覺可比用Excel爽不少。雖然我的演示以單機版為主,將其建立在linux服務(wù)器上大同小異。
從零開始搭建到現(xiàn)在,排除掉下載花費的時間,大家可以計算是不是真的只用一個小時就搭建好一個數(shù)據(jù)分析平臺?沒騙你們吧。
通過搭建Superset,數(shù)據(jù)分析新手對BI應(yīng)該也有一個大概的了解,市面上的BI大同小異,只是側(cè)重點不同。在Superset的基礎(chǔ)上,往底層完成埋點采集和數(shù)據(jù)ETL,往上拓展報表監(jiān)控,CRM等,這些也有不少開源軟件可用。至于機器學習,以及Hadoop和Spark更是一個大生態(tài),把這些都算上,則是真正完整的大數(shù)據(jù)分析平臺了。
Superset也有缺陷,它使用的是ORM框架,雖然它能連接眾多的數(shù)據(jù)庫,但是它有一個關(guān)系映射過程,將SQL數(shù)據(jù)轉(zhuǎn)化為Python中的對象,這也造成它在大數(shù)據(jù)量的處理效率不如專業(yè)的BI軟件。在使用SQL工具箱時,應(yīng)該盡量避免超大表之間的關(guān)聯(lián),以及復雜的group by。
我個人的建議是,它只是一款輕量級的BI,復雜的數(shù)據(jù)關(guān)聯(lián),應(yīng)該在ETL過程中完成,Superset只需要執(zhí)行最終結(jié)果表的讀取即可。它足夠支撐TB級別的數(shù)據(jù)源讀取。技術(shù)比較成熟的團隊,也能嘗試將Superset和Kylin整合,這樣OLAP的能力又能上一個臺階。
另外,Superset中的表都是獨立的,所以多圖表間的復雜聯(lián)動并不支持,僅支持過濾,這點比較可惜。不知道Airbnb后續(xù)會不會支持。
好消息是,這個開源項目一直在更新,github什么也有很多新的功能特性待開發(fā),比如dashboard上加入tab切換欄等??梢詓tar一下關(guān)注。
如果搭建過程有疑問,歡迎留言。
#專欄作家#
秦路,微信公眾號ID:tracykanc,人人都是產(chǎn)品經(jīng)理專欄作家。
本文由 @秦路?原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
老師 我安裝完了后,到了登錄那邊后 我初始出來的賬號和密碼輸入進去總是提示無效的賬號,就是上面會出現(xiàn)一個黃條提示賬號無效,我不知道是啥問題,我看控制臺顯示200 其實已經(jīng)請求成功了但是就是登錄不上去,求指點啊 不知道為什么
找我們吧 我們公司主負責軟件定制開發(fā) 希望能幫到你 ww520buli
求教大佬,為什么運行第一條命令就報錯 我的python版本是3.2
Solving environment: failed
CondaHTTPError: HTTP 404 NOT FOUND for url
Elapsed: 00:00.016626
The remote server could not find the noarch directory for the
requested channel with url: https://pypi.tuna.tsinghua.edu.cn/simple
As of conda 4.3, a valid channel must contain a `noarch/repodata.json` and
associated `noarch/repodata.json.bz2` file, even if `noarch/repodata.json` is
empty. please request that the channel administrator create
`noarch/repodata.json` and associated `noarch/repodata.json.bz2` files.
$ mkdir noarch
$ echo ‘{}’ > noarch/repodata.json
$ bzip2 -k noarch/repodata.json
You will need to adjust your conda configuration to proceed.
Use `conda config –show channels` to view your configuration’s current state.
Further configuration help can be found at .
這種分析用tableau豈不更好
靴靴
寫的很好
在運行sql編輯器出現(xiàn)“module” object has no attribute ‘SIGALRM’這個問題怎么解決,我是在win7系統(tǒng)安裝的,我按照網(wǎng)上的說法把utils文件里面的signal所在行都注釋,下面再加一個pass,但是還是有錯誤,急求解決辦法
大神,我在設(shè)置mysql+pymysql://root:xxxx@localhost:3306/qin?charset=utf8時 測試鏈接提示錯誤,請問該怎么辦呢?錯誤代碼“ERROR: {“error”: “Connection failed!\n\nThe error message returned was:\n(_mysql_exceptions.OperationalError) (1049, \”Unknown database ‘qin’\”)”}” 求指導
這個錯誤不就是告訴連接失敗嗎?沒有這個數(shù)據(jù)庫qin
額 這個有什么用啊。。。
測的