手把手教學(xué):使用Elastic search和Kibana進(jìn)行數(shù)據(jù)探索(Python語(yǔ)言)
探索性數(shù)據(jù)分析(EDA)幫助我們認(rèn)識(shí)底層的數(shù)據(jù)基結(jié)構(gòu)及其動(dòng)力學(xué),以此來(lái)最大限度發(fā)掘出數(shù)據(jù)的可能性。EDA是提取重要變量和檢測(cè)異常值的關(guān)鍵。盡管存在著很多種機(jī)器學(xué)習(xí)算法,但EDA仍被視為理解和推動(dòng)業(yè)務(wù)的最關(guān)鍵算法之一。
其實(shí)有很多種方式都能夠執(zhí)行實(shí)現(xiàn)EDA,例如Python的matplotlib、seaborn庫(kù),R語(yǔ)言的ggplot2,而且網(wǎng)絡(luò)上有很多很好的資源,例如John W. Tukey的“探索性數(shù)據(jù)分析”, Roger D. Peng 的“用R進(jìn)行探索性數(shù)據(jù)分析”等,不勝枚舉。
在本文中,我主要講解下如何使用Elastic search和Kibana實(shí)現(xiàn)EDA。
目錄:
1. Elastic search
2. Kibana
3. 創(chuàng)建數(shù)據(jù)表
- 數(shù)據(jù)索引
- 鏈接Kibana
- 可視化
4. 搜索欄
1. Elastic Search (ES)
Elastic Search是一個(gè)開(kāi)放源碼,RESTful分布式和可擴(kuò)展的搜索引擎。由于其簡(jiǎn)單的設(shè)計(jì)和分布式特性,Elastic Search從大量級(jí)數(shù)據(jù)(PB)中進(jìn)行簡(jiǎn)單或復(fù)雜的查詢、提取結(jié)果都非常迅速。另外相較于傳統(tǒng)數(shù)據(jù)庫(kù)被模式、表所約束,Elastic Search工作起來(lái)也更加容易。
Elastic Search提供了一個(gè)具有HTTP Web界面和無(wú)模式JSON文檔的分布式、多租戶的全文搜索引擎。
ES安裝
安裝和初始化是相對(duì)簡(jiǎn)單的,如下所示:
- 下載并解壓Elasticsearch包
- 改變目錄到Elasticsearch文件夾
- 運(yùn)行bin/ Elasticsearch(或在Windows上運(yùn)行bin \elasticsearch.bat)
Elasticsearch實(shí)例在默認(rèn)配置的瀏覽器中進(jìn)行本地運(yùn)行http://localhost:9200。
2.Kibana
Kibana是一個(gè)基于Elasticsearch的開(kāi)源數(shù)據(jù)挖掘和可視化工具,它可以幫助用戶更好地理解數(shù)據(jù)。它在Elasticsearch集群索引的內(nèi)容之上提供可視化功能。
安裝
安裝和初始化的過(guò)程與Elasticsearch類(lèi)似:
- 下載并解壓Kibana包
- 用編輯器打開(kāi)config/ Kibana.yml,配置elasticsearch.url指向本地ElasticSearch實(shí)例所在位置
- 更改目錄到Kibana文件夾
- 運(yùn)行bin/ Kibana(或在Windows上運(yùn)行bin \ kibana.bat)
Kibana實(shí)例在默認(rèn)配置的瀏覽器中進(jìn)行本地運(yùn)行http://localhost:5601.
將運(yùn)行Kibana的終端保持打開(kāi)狀態(tài),可以保證實(shí)例不斷的運(yùn)行。你也可以使用nohup模式在后臺(tái)運(yùn)行實(shí)例。
3. 創(chuàng)建數(shù)據(jù)表
使用ES和Kibana創(chuàng)建儀表板主要有三個(gè)步驟。接下來(lái)我將會(huì)用貸款預(yù)測(cè)的實(shí)際問(wèn)題的數(shù)據(jù)來(lái)示例如何創(chuàng)建一個(gè)儀表板。請(qǐng)注冊(cè)該問(wèn)題,以便能夠下載數(shù)據(jù)。請(qǐng)檢查數(shù)據(jù)字典以獲得更多詳細(xì)信息。
注:在本文中,我將使用python讀取數(shù)據(jù)并將數(shù)據(jù)插入到Elasticsearch中,并通過(guò)Kibana進(jìn)行可視化。
讀取數(shù)據(jù)
- import pandas as pd
- train_data_path = '../loan_prediction_data/train_u6lujuX_CVtuZ9i.csv'
- test_data_path = '../loan_prediction_data/test_Y3wMUE5_7gLdaTN.csv'
- train = pd.read_csv(train_data_path); print(train.shape)
- test = pd.read_csv(test_data_path); print(test.shape)
結(jié)果:
- (614, 13)
- (367, 12)
3.1 數(shù)據(jù)索引
Elasticsearch將數(shù)據(jù)索引到其內(nèi)部數(shù)據(jù)格式,并將其存儲(chǔ)在類(lèi)似于JSON對(duì)象的基本數(shù)據(jù)結(jié)構(gòu)中。請(qǐng)找到下面的Python代碼,將數(shù)據(jù)插入到ES當(dāng)中。
請(qǐng)如下所示安裝pyelasticsearch庫(kù)以便通過(guò)Python索引。
- pip install pyelasticsearch
- from time import time
- from pyelasticsearch import ElasticSearch
- CHUNKSIZE=100
- index_name_train = "loan_prediction_train"
- doc_type_train = "av-lp_train"
- index_name_test = "loan_prediction_test"
- doc_type_test = "av-lp_test"
- def index_data(data_path, chunksize, index_name, doc_type):
- f = open(data_path)
- csvfile = pd.read_csv(f, iterator=True, chunksize=chunksize)
- es = ElasticSearch('http://localhost:9200/')
- try :
- es.delete_index(index_name)
- except :
- pass
- es.create_index(index_name)
- for i,df in enumerate(csvfile):
- records=df.where(pd.notnull(df), None).T.to_dict()
- list_records=[records[it] for it in records]
- try :
- es.bulk_index(index_name, doc_type, list_records)
- except :
- print("error!, skiping chunk!")
- pass
- index_data(train_data_path, CHUNKSIZE, index_name_train, doc_type_train) # Indexing train data
- index_data(test_data_path, CHUNKSIZE, index_name_test, doc_type_test) # Indexing test data
- DELETE /loan_prediction_train [status:404 request:0.010s]
- DELETE /loan_prediction_test [status:404 request:0.009s]
3.2 鏈接Kibana
- 在瀏覽器上訪問(wèn) http://localhost:5601
- 去管理模塊中選取索引模式,點(diǎn)擊添加。
- 如果你的索引數(shù)據(jù)中包含時(shí)間戳,則選復(fù)選框。否則,取消選中該框。
- 將之前用于數(shù)據(jù)索引到ElasticSearch中的索引輸入。 (例如:loan_prediction_train)。
- 點(diǎn)擊新建。
對(duì)loan_prediction_test重復(fù)上述4個(gè)步驟。 現(xiàn)在kibana已經(jīng)與訓(xùn)練數(shù)據(jù)鏈接,并測(cè)試數(shù)據(jù)是否已經(jīng)存在于elastic search中。
3.3可視化
- 單擊 可視化>創(chuàng)建可視化>選擇可視化類(lèi)型>選擇索引(訓(xùn)練或測(cè)試)>構(gòu)建
例一
選擇垂直條形圖,并選擇繪制Loan_status分布的訓(xùn)練索引。
將y軸作為計(jì)數(shù),x軸代表貸款狀態(tài)
- 保存可視化
- 添加儀表板>選擇索引>添加只保存的可視化。
Voila!! Dashboard 生成啦!
例二
- 單擊可視化>創(chuàng)建可視化>選擇可視化類(lèi)型>選擇索引(訓(xùn)練或測(cè)試)>構(gòu)建
- 選擇垂直條形圖,并選擇訓(xùn)練索引繪制已婚分布。
- 選擇y軸為計(jì)數(shù),x軸為已婚
- 保存可視化。
- 重復(fù)上述步驟進(jìn)行索引測(cè)試。
- 打開(kāi)已創(chuàng)建的儀表板添加這些可視化
例三
類(lèi)似的性別分布。這一次我們將使用餅圖。
- 單擊可視化>創(chuàng)建可視化>選擇可視化類(lèi)型>選擇索引(訓(xùn)練或測(cè)試)>構(gòu)建
- 選擇餅圖并選擇列車(chē)索引繪制已婚分布。
- 按“已分隔”列選擇切片大小作為計(jì)數(shù)和分割片段
- 保存可視化。
- 重復(fù)上述步驟進(jìn)行索引測(cè)試。
- 打開(kāi)已創(chuàng)建的儀表板添加這些可視化
最后,創(chuàng)建所有可視化的儀表板將如下所示!
是不是很漂亮!
剩下將由你來(lái)探索更多的elasticsearch和Kibana了,并創(chuàng)建多種多樣的可視化效果。
4.搜索欄
搜索欄允許用戶通過(guò)字符串來(lái)搜索來(lái)數(shù)據(jù),這便有助于我們理解數(shù)據(jù)中的更改,并在一個(gè)特定屬性中進(jìn)行更改,這對(duì)于可視化來(lái)說(shuō)是不容易的。
舉例
- 轉(zhuǎn)到發(fā)現(xiàn)>添加Loan_Status和Credit_History
- 使用搜索欄僅選擇Credit_History為0.(Credit_History:0)
- 現(xiàn)在可以查看Loan_Status列中的更改記錄。
觀點(diǎn):大多數(shù)信用記錄為0的客戶沒(méi)有收到貸款(貸款狀態(tài)為N = 92.1%)
以上為全文。