SparkSQL數據分析項目---數據可視化
本篇是「SparkSQL數據分析項目---數據統計工作」之後的,
本篇主要講的是可視化分析展示
可視化分析首先是框架,除了框架還有一些很方便的分析軟體比如Tableau
首先看看可視化框架。
常見的可視化工具
框架類
1)echarts
2)chart.js
3)highcharts
4)D3.js
5)HUE
6)Zeppelin
軟體工具類
Tableau
平台搭建類
Superset
這裡我就使用框架類的echarts、chart.js和Tableau結合使用,然後再演示一下Superset的搭建方法。
首先針對echarts和chart.js框架需要利用後台數據交互,也就是動態數據。這裡我就用python+django+django rest framework+echarts+chart.js來做這個可視化。
對於django,就不再多說,這是python開發web必備框架之一,當然使用flask這些也是可以的。關於django安裝和新建Django項目就不說了,google一大把。當然對於django還是需要有一些使用經驗的。這次主要是針對後台數據如何通過ajax方式傳遞到圖表格之中。可能有人會覺得這多麻煩吶,直接tableau不就好了,確實,tableau就夠了。但是這裡以代碼開發的形式展示是因為可能會有web項目和統計分析功能結合起來的需求嘛。比如我爬了成百上千萬的數據,我想要用這個數據做一個搜索引擎項目,同時我想把數據的變化以及我搜索的情況統計出來展示到搜索引擎網頁,那這個就很好用了。
好了,下面就開始,這個項目我是先做好了的,沒有像以前的文章一邊寫一邊做。
後面我會放出源碼的GitHub地址。
首先回顧一下上一篇說的那幾個需求。
項目需求:
1、IP地址
註:IP地址提取地理區域
2、瀏覽量PageView
3、訪問網站的不同獨立 IP 個數
4、註冊用戶數
5、跳出率Bounce Rate
6、統計訪問量最高的url topN訪問次數
7、按照地理區域統計訪問量最高的url topN訪問次數
8、按照網路流量統計最高的url topN訪問次數
首先第1點的ip地址提取地理區域這個很簡單了,在統計的階段利用開源項目就已經搞定了。
第2點的瀏覽量這個和6、7、8結合在一起做餅圖或者直方圖就可以了,選取top6就好了。
3、4、5就更簡單,不需要做圖來展示,在mysql中計算一下就好了。
1、python+django+django rest framework+echarts+chart.js和tableau的使用
首先看看django這個項目的結構
我們需要哪些東西呢?chart.js和echarts的介面還有bootstrap做響應式還有jquery也是必須的,當然你也可以把js文件直接下載下來,我沒有下載,我是直接引用網址了。在jss_css這個文件夾中。打開看看吧。
然後就是html文件,這個也比較簡單,只是用來展示圖表,所以html也很好寫,但是要注意首頁和子頁面繼承,也就是{% extends html/base.html %},這樣節省很多不必要的代碼。使用過django的肯定知道的。打開看看html代碼吧。
這是base頁面,很簡單。
看看頁面展示是什麼樣子。
就是一個標題拖上兩個圖片,這兩個圖片分別跳轉到圖表展示頁。
再來看看圖表頁面代碼。
這是chart.js的。echarts和他也基本大同小異。
看著是不是好像很多,其實很少的,都是複製粘貼,去chart.js官網複製下來自己改寫data添加動態數據就好了,官網有各式各樣的圖表。
我們看看官網上面。
官網上面都有詳細的代碼示例,看看官網就好了。
然後再來看看自己的圖表詳情頁。
這是chart.js的。
這是echarts的
這些都是動態數據,這些數據在網頁端其實也能看得到。這也是django rest framework的一個功能所在。
我們看看。
看到沒有,django rest framework把mysql數據傳送到了前端。
那這些肯定是後台實現的。我們在去後台看看。
這是url的配置。
最下面的charts就是我們django rest framework的url。也是數據獲取的主要類。
那就進到後台看看。
看著多,其實寫好一個表的提取,其餘的複製。都差不多的套路。
代碼是完整的,配置好django1.9,python2,安裝好django rest framework。就可以運行了。django rest framework在你的虛擬環境下pip install djangorestframework就可以安裝好了。提供源碼地址:GitHub
那麼上面說完了框架,再來說說tableau,用tableau來完成按照地理區域統計訪問量最高的url topN訪問次數這個需求。首先你要下載一個tableau,這個軟體蠻貴的,但是國內最不缺的就是破解大神,百度就能找得到
首先打開tableau。
然後我們要鏈接msyql去拿數據。看到mysql這個按鈕,點擊。連接的時候mysql確保是打開的。第一次鏈接需要下載驅動,tableau會提示你去oracle下載一個驅動,一共需要下載兩個東西就好了。
連接成功些之後選取一個資料庫,再選擇資料庫下面的某一張表。
數據就看到了有沒有。
然後點擊下面橙色的工作表按鈕就進入了圖表製作頁面。
在這裡面就可以做圖表了,接下來就做按照地理區域統計訪問量的圖。
因為這張表數據在Scala做統計的時候只選取了hdfs上面總數據中每個城市訪問量top3的數據,所以首先按照每個城市top3的訪問量的和來做一個圖。
很清楚有沒有。你也可以做這樣的圖,超級簡單。
我們把url加上,看看每個城市top3數據情況。
很清晰明了,每個城市top3訪問量的url就出來了有沒有。
接下來看看這些圖表。就只展示chart.js的了,因為都一樣的知識echarts和chart.js風格不一樣罷了。
1)、按照網路流量統計最高的url topN訪問次數
2)、統計訪問量最高的url topN訪問次數
3)、按照網路流量統計最高的ip topN訪問次數
4)、按照瀏覽量統計最高的ip topN訪問次數
5)、按照地理區域統計訪問量最高的url topN訪問次數
2、Superset的搭建
Superset是Airbnb的數據部門開源的。項目基於Python框架,看看長什麼樣子。
還是很不錯的,界面設計的還是可以的。
接下來就是安裝了,安裝一種是python建立virtualenv虛擬環境配置py3,再用過pip來安裝。這是一種,還有一種更加簡單的,anaconda,這是真的簡單。
就這個綠圈圈,去官網下載安裝,然後你打開它。
在環境這一欄,選中。然後點擊下面的create你就創建好一個虛擬環境了,是不是超級方便。然後你就可以進入終端,進入環境。conda進入環境和virtualenvwrapper有點區別,這個anaconda進入環境是:
source activate 環境名稱n
比如我創建的superset進入就是:
source activate supersetn
是不是簡單極了!進入虛擬環境之後,安裝,也很簡單。直接pip安裝:
pip install supersetn
如果慢就用豆瓣源。
安裝過程會有點慢,需要等一會。
安裝好了之後,需要配置一個用戶,怎麼配置呢?也是在終端配置:
fabmanager create-admin --app supersetn
輸入之後會自動提示你怎麼填寫。
好了之後,就可以連接了,但是還有一件事不要忘記了,我們的數據在mysql裡面,superset是基於python的,那麼mysqlclient或者pymysql肯定少不了啊。
這兩個都可以的,我就以mysqlclient為驅動安裝一下。
pip install mysqlclientn
安裝好了以後,按照下面步驟一直到runserver就可以了。
# 初始化數據源nsuperset db upgradenn# 載入默認數據(世界衛生組織的數據)nsuperset load_examplesnn# 初始化用戶nsuperset initnn# 運行superset(runserver後面跟-p xxx可以改埠)nsuperset runservern
打開之後就到微博,輸入http://localhost:8088 打開superset
然後輸入之前設置好的用戶名和密碼。這是登陸界面。
清晰脫俗啊有沒有。下面要做的事情就是從mysql裡面拿數據。這個要新建一個連接。點擊Sources選擇Database
進入之後點擊+號來新建連接。
然後就跳轉到新建連接的頁面。
這裡第一行和第二行一定要填寫,還有下面的Expose in SQL Lab要購選上。
第一行名字不用說了,愛咋起咋起。第二個要注意,這麼來寫:
mysql://mysql用戶名:mysql用戶密碼@localhost:3306/資料庫名稱?charset=utf8n
配置完點擊i一下灰色按鈕測試一下,出現seems ok就可以報錯了,否則會報錯,python的報錯提示很友好,要麼是資料庫驅動出問題要麼就是密碼什麼的寫錯了,會提示你的。
看看我配置的。
配置好了之後保存,然後點擊上面的SQL Lab按鈕,然後進去選擇資料庫選擇表,就看到慢慢的數據啦!並且你可以直接輸入sql語句!是不是很酷。sql查詢到的數據還可以保存csv到本地,爽歪歪啊!
下面就要開始做圖了。有的人做圖的時候有可能會報錯,一會說。這是源碼的一個小問題。
首先我們按照要求寫sql查詢相應數據。
因為只需要top6嘛,所以就這樣了,然後點擊這個數據表上面CSV左邊的按鈕,就會進入繪圖。
讓你選擇要展示的數據,他會匹配支持的圖表,條形圖,餅圖這些。下面的選項是定義維度,我們將traffic_sums page_view avg都勾選為維度。agg_func是聚合,把url改為計數count,就可以點擊生成條形圖。我們看看。
哎!他報錯了!看到沒?是不是,之前有說過,這裡會報錯。可能有的人不會報,但也有人會報這個錯。這個錯是源碼的一點問題,怎麼修改呢?不難,看到上面提示的錯誤嗎?python提示很友好,他告訴你是models.py這個函數的520行出錯了。
怎麼改呢?就把520行附近的三行源代碼刪除就可以了。直接把路徑拷貝去找就好了。我用pycharm改了一下,我們看看。
就是這三行,刪除就可以了或者你注釋掉也一樣。
我們看看刪除之後的運行情況。
看到沒有,很酷炫!好了,下面就把那幾張圖一起做出來吧,這一張圖是按照網路流量統計最高的url topN訪問次數的條形圖,你也可以改成別的圖。
下面是剩下的幾張圖。
統計訪問量最高的url topN訪問次數
按照網路流量統計最高的ip topN訪問次數
按照瀏覽量統計最高的ip topN訪問次數
按照地理區域統計訪問量最高的url topN訪問次數
到這裡圖表就展示完了,在做可視化的同時這幾個需求點也就完成了:
6、統計訪問量最高的url topN訪問次數7、按照地理區域統計訪問量最高的url topN訪問次數
8、按照網路流量統計最高的url topN訪問次數
這幾個完成了,1和2一個ip也解決了,2是瀏覽量,這個圖標也反映了,要總瀏覽量也簡單。
把每一個ip地址的瀏覽量相加就可以了。如圖所示
總的page_view是312041,也就是說這幾個小時的page_view是312041。
對於剩下的需求:
3、訪問網站的不同獨立 IP 個數
4、註冊用戶數
5、跳出率Bounce Rate
首先3怎麼求?獨立的ip個數,也使用sql求。
訪問網站的不同獨立 IP 個數是10158個。
註冊用戶數怎麼求?也是sql嘛,註冊用戶要找到訪問註冊頁面的page_view個數。
用戶註冊頁面為member.php,而當用戶點擊註冊時請求的又是member.php?mod=register的url。因此,這裡我們只需要統計出日誌中訪問的URL是member.php?mod=register的即可.
一共28個。那麼註冊用戶數就知道了,這幾個小時28歌用戶註冊。
跳出率Bounce Rate怎麼算?首先跳出是指:訪問者只訪問一個頁面後離開網站被紀錄為一次跳出。那麼跳出率是指:某一範圍內跳出數量/同一範圍內總訪問量*100%
那麼首先計算跳出數,肯定在ip_statistics這張表裡面計算了。還是sql。
一共3667個跳出。總的訪問量前面已經計算出來了312041。
那麼跳出率:(3667/312041)*100% = 1.175%
到這裡全部需求都搞定了。
-------------------------------------------------------------------------------------------
至此SparkSQL數據分析項目---數據可視化就寫到這裡!
至此還剩下
*Spark on Yarn
*性能調優
所以下一篇就是:SparkSQL數據分析項目---性能調優
------------------------------------------------------------------------------------------
更新:SparkSQL數據分析項目---性能調優
推薦閱讀:
※我用Python分析了42萬字的歌詞,為了搞清楚民謠歌手們在唱些什麼
※R語言之矩陣操作
※數據分析師會被演算法取代么?
※中國的獨角獸和那些聰明的投資者