一小時建立數據分析平台

今天教大家如何搭建一套數據分析平台。

它可能是最簡單的搭建教程,有一點Python基礎都能完成。比起動輒研發數月的成熟系統,藉助開源工具,整個時間能壓縮在一小時內完成。

優秀的數據分析平台,首先要滿足數據查詢、統計、多維分析、數據報表等功能。可惜很多分析師,工作的第一年,都是埋葬在SQL語句中,以SQL+Excel的形式完成工作,卻用不上高效率的工具。

說Excel也很好用的同學,請先迴避一下。

另外一方面,以互聯網為代表的公司越來越重視數據,數據獲取不再是難點,難點是怎樣敏捷分析獲得洞察。

市面上已經有不少公司推出企業級的分析平台和BI,可惜它們都是收費的。我相信不少讀者聽說過,但一直沒有機會體驗,或者老闆們囊中羞澀。現在,完完全全能免費建立一套BI系統,即可以單機版用以分析,也能私有化部署到伺服器,成為自家公司的分析工具。

這一切,只需要一小時。

Superset

Superset是一款輕量級的BI工具,由Airbnb的數據部門開源。整個項目基於Python框架,不是Python我也不會推薦了,它集成了Flask、D3、Pandas、SqlAlchemy等。

這是官網的案例,想必設計界面已經能秒殺一批市面上的產品了,很多BI真的是濃烈的中國式報表風......因為它的前端基於D3,所以絕大部分的可視化圖表都支持,甚至更強大。

Superset本身集成了數據查詢功能,查詢對分析師那是常有的事。它支持各類主流資料庫,包括MySQL、PostgresSQL、Oracle、Impala、SparkSQL等,深度支持Druid。

後台支持許可權分配管理,針對數據源分配賬戶。所以它在部署伺服器後,分析師們可以通過它查詢數據,也能通過數據建立Dashboard報表。

介紹了這麼多,想必大家已經想要安裝了吧

安裝

Superset同時支持Python2和Python3, 我這裡以Python3作為演示。它支持pip形式的下載,不過我不建議直接安裝,因為Superset的依賴包較多,如果直接安裝,很容易和現有的模塊產生衝突。

這裡需要先搭建Python的虛擬環境。虛擬環境可以幫助我們在單機上建立多個版本的Python。簡而言之,即可以Python2和Python3共存,也能Python3.3、3.4、3.5共濟一堂,彼此間互相獨立。

虛擬環境的安裝方式很多,pyenv和virtualenv等。這裡用Anaconda自帶的conda工具。打開電腦終端/cmd,輸入以下命令。

conda create -n superset python=3.4

conda create是創建虛擬環境的命令。-n是環境的命名參數,在這裡,我們創建了名為superset的環境,它安裝在Anaconda的envs目錄下。python版本為3.4(superset暫時不支持3.6)。

該命令只會安裝基礎包,如果需要額外安裝其他包,在命令行後加上想要的包名字即可,如python=3.4 numpy pandas。

安裝很迅速,完成後,我們的Python環境還是默認版本,現在需要激活虛擬環境。

source activate superset

source activate是激活命令,superset為想要激活的虛擬環境名。windows和mac的命令不一樣,win只要activate superset 。如果要退出,則是source deactivate或者deactivate。

激活成功後,命令行前面會多出一個前綴(superset),表明切換到了新的虛擬環境。接下來安裝superset。

pip install superset

pip會自動安裝所有的依賴,速度可能有點慢,建議更改pip源。

命令行後加上 -i pypi.douban.com/simple ,我這裡用了豆瓣的鏡像源,速度嗖嗖的。

如果安裝過程中報錯,是部分程序缺失,像系統比較老舊的win用戶,需要安裝新版的visual c++,網上搜索教程即可。在官網的教程中,還要求pip install cryptography==1.7.2,我沒有安裝也沒有影響,供大家參考。其他報錯,都可以通過搜索解決。

安裝成功後,需要進行初始化配置,也是在命令行輸入。

fabmanager create-admin --app superset

首先用命令行創建一個admin管理員賬戶,也是後續的登陸賬號。會依次提示輸入賬戶名,賬戶使用者的first name、last name、郵箱、以及確認密碼。fabmanager是flask的許可權管理命令,如果大家忘了密碼,也能重新設立。

superset db upgrade

初始化數據源。

superset load_examples

載入案例數據,這裡的案例數據是世界衛生組織的數據,也是上文演示的各類可視化圖表,大家登陸後能夠直接看到。下載速度還行。

superset init

初始化默認的用戶角色和許可權。

superset runserver

最後一步驟,啟動Superset服務。因為我們是本地環境,所以在瀏覽器輸入 http://localhost:8088 即可。在runserver後面添加 -p XXXX 可更改為其他埠。

進入登陸界面,輸入登陸密碼,大功告成。

使用

先別急著使用,因為Superset是英文,我們先把它漢化了。Superset自身支持語言切換。

進入到Superset所在目錄文件,按我之前的步驟,應該在anaconda/envs/superset/lib/python3.4/site-packages/superset中,路徑視各位情況可能有差異。

在目錄下有一個叫config.py的文件,打開它,找到Setup default language這一行,修改變數。

BABEL_DEFAULT_LOCALE調整為zh,這樣界面默認為中文。languages字典中zh前面的注釋#去掉。保存後退出。

接下來還是在Superset的目錄下新創建文件夾,按translations/zh/LC_MESSAGES的路徑依次創建三個。Superset官網提供了漢化包,在最大的同性交友網站github上下載,目錄為:

github.com/apache/incub

網址路徑有點長,下載後把mo文件放在LC_MESSAGES文件下。清除瀏覽器的緩存,重新登陸localhost。

搞定!

需要注意的是,它並非完全漢化,而是漢化了superset相關的部分。部分文字被寫入在flask app的文件中,漢化起來比較麻煩。

Superset分為多個模塊,安全模塊是賬號管理相關,包括角色列表,視圖許可權控制,操作日誌等。管理模塊沒什麼用,主要是設計元素。

數據源可以訪問和連接資料庫,切片是各類數據可視化,均是單圖;看板即為Dashboard,是切片的集合,Superset提供了三個初始案例,SQL工具箱是數據查詢平台。

麻雀雖小,五臟俱全,對於大部分中小型的企業,Superset足以應付數據分析工作。

先學習連接資料庫,這裡以我電腦中的資料庫為準,如果大家學習過早前的教程,那麼資料庫中都應該有數據分析師的練習數據,我這裡不重複了,可以看歷史文章。也可用自帶的衛生數據照著練習。

Superset使用了sqlalchemy框架,使用前需要安裝資料庫驅動程序,先退出runserver,進入superset虛擬環境,安裝Python中的MySQL驅動程序。

pip install pymysql

MySQL的驅動程序很多,除了pymysql,還有mysqlclient等。安裝好後,進入數據源,新建一個database連接。

在SQLAlchemy URL中加入資料庫的地址,格式為:

mysql+pymysql://root:xxxx@localhost:3306/qin?charset=utf8

mysql是資料庫類型,pymysql是驅動程序,表示用pymysql連接mysql資料庫,+號不能省略。

另外,root是資料庫登陸賬號,xxxx為密碼,這個按大家自己設立的來。localhost是資料庫地址,因為我的是本地環境,所以localhost即可,也可以是127.0.0.1。3306是埠,一般默認這個。qin是需要連接的資料庫,也是我自己設的名字。後面帶參數charset=utf8,表示編碼,因為表裡面有中文。

其他資料庫的連接大同小異,圖中綠色的連接是相關教程。

如果大家在公司網路,擁有內網訪問資料庫的許可權,也可以嘗試連接,應該是可以的,這樣就能在個人電腦上實行敏捷的BI分析。

格式命名好後,點擊測試,出現seems ok,表示成功訪問。在選項下面還有個Expose in SQL Lab,允許我們在SQL工具箱查詢,要打上勾。

進入到SQL工具箱,左邊選擇table為DataAnalyst。

直接出來了資料庫的數據預覽。連查詢平台的顏值都那麼高。大家的SQL技能應該都很不錯,有興趣可以在這裡練習一下,語法和MySQL一致。其他資料庫則是其他資料庫的語法。

執行一段SQL語句,它支持下載為CSV,我沒試過支持最大文件的大小,但作為日常的查詢平台是綽綽有餘了。

選擇Visualize,進入切片繪圖模式。

這裡自動匹配支持的圖表選項,包括Bar Chart條形圖,Pir Chart餅圖等。下面的選項是定義維度,我們將city,education,postitionName,salary,workYear都勾選為維度。agg_func是聚合功能,這裡將職位ID求和,改成count(),點擊生成圖表。

這裡按城市生成了各職位ID求和獲得的條形圖,也就是不同城市的分析師人數。

左邊Chart Options可以調整分析需要的維度。Metrics是分析的度量,這裡是count(positionId),Series是條形圖中的類別,Breakdowns可以認為是分組或者分桶。這裡將Series改成workYear,Breakdowns改成city,點擊Query執行。

條形圖變更為按工作年限和城市細分的多維條形圖。點擊Stacked Bars,則切換成堆積柱形圖。操作不難。

左側的選項欄還有其他功能,這裡就不多做介紹了,和市面上常見的BI沒有多大區別,琢磨一下也就會了。

Superset支持的圖表很豐富,如果具備開發能力,也能以D3和Flask為基礎做二次開發。Airbnb官方也會不斷加入新的圖表。不同圖表,其左側的操作選項也不同。

上圖是以數據分析師職位名稱為基礎繪製的詞雲圖,生成的速度會比較慢。我們選擇save保存。完成的圖表均存放在切片下。

Dashboard通過多個切片組合完成,每個切片連接不同的數據源,這是BI的基本邏輯。進入看板界面,新建一個Dashboard。

設置看板相應的配置選項,因為我偷懶了,所以只做了兩個切片,大家有興趣可以繼續增加。其他選項忽略,都是自動生成的。點擊save,到這一步,BI最重要的Dashboard就完成了。

瀏覽一下最終的成果吧。

關於Superset的新手教學結束了,要是部署到公司,賬號和許可權多研究下。它和市面上的其他BI沒有太多區別,不過它是我們用Python從零到有一手建立,這個感覺可比用Excel爽不少。雖然我的演示以單機版為主,將其建立在linux伺服器上大同小異。

從零開始搭建到現在,排除掉下載花費的時間,大家可以計算是不是真的只用一個小時就搭建好一個數據分析平台?沒騙你們吧。

通過搭建Superset,數據分析新手對BI應該也有一個大概的了解,市面上的BI大同小異,只是側重點不同。在Superset的基礎上,往底層完成埋點採集和數據ETL,往上拓展報表監控,CRM等,這些也有不少開源軟體可用。至於機器學習,以及Hadoop和Spark更是一個大生態,把這些都算上,則是真正完整的大數據分析平台了。

Superset也有缺陷,它使用的是ORM框架,雖然它能連接眾多的資料庫,但是它有一個關係映射過程,將SQL數據轉化為Python中的對象,這也造成它在大數據量的處理效率不如專業的BI軟體。在使用SQL工具箱時,應該盡量避免超大表之間的關聯,以及複雜的group by。

我個人的建議是,它只是一款輕量級的BI,複雜的數據關聯,應該在ETL過程中完成,Superset只需要執行最終結果表的讀取即可。它足夠支撐TB級別的數據源讀取。技術比較成熟的團隊,也能嘗試將Superset和Kylin整合,這樣OLAP的能力又能上一個台階。

另外,Superset中的表都是獨立的,所以多圖表間的複雜聯動並不支持,僅支持過濾,這點比較可惜。不知道Airbnb後續會不會支持。

好消息是,這個開源項目一直在更新,github什麼也有很多新的功能特性待開發,比如dashboard上加入tab切換欄等。可以star一下關注。

window的用戶,可能坑比較多,增加了一篇踩坑解答,Superset的各種疑難解答。可以移步到這裡,解決安裝過程中的一些卡點。

————

歡迎關注我的個人公眾號:tracykanc


推薦閱讀:

民法通則和大寶劍的故事
MaxCompute Studio使用心得系列3——可視化分析作業運行
4-Hbase複製表方法(導入導出、跨集群)
分析處理幾十萬條以上的數據excel會很慢,也會出現數據不準的情況,請問處理這類數據大家一般都用什麼軟體?

TAG:数据分析 | 数据化运营 | 大数据 |