探索性資料分析(eda)幫助我們認識底層的資料基結構及其動力學,以此來最大限度發掘出資料的可能性。eda是提取重要變量和檢測異常值的關鍵。盡管存在着很多種機器學習算法,但eda仍被視為了解和推動業務的最關鍵算法之一。
其實有很多種方式都能夠執行實作eda,例如python的matplotlib、seaborn庫,r語言的ggplot2,而且網絡上有很多很好的資源,例如john w. tukey的“探索性資料分析”, roger d. peng 的“用r進行探索性資料分析”等,不勝枚舉。
在本文中,我主要講解下如何使用elastic search和kibana實作eda。
目錄:
1. elastic search
2. kibana
3. 建立資料表
資料索引
連結kibana
可視化
4. 搜尋欄
1. elastic search (es)
elastic search是一個開放源碼,restful分布式和可擴充的搜尋引擎。由于其簡單的設計和分布式特性,elastic search從大量級資料(pb)中進行簡單或複雜的查詢、提取結果都非常迅速。另外相較于傳統資料庫被模式、表所限制,elastic search工作起來也更加容易。
elastic search提供了一個具有http web界面和無模式json文檔的分布式、多租戶的全文搜尋引擎。
es安裝
安裝和初始化是相對簡單的,如下所示:
改變目錄到elasticsearch檔案夾
運作bin/ elasticsearch(或在windows上運作bin \elasticsearch.bat)
2.kibana
kibana是一個基于elasticsearch的開源資料挖掘和可視化工具,它可以幫助使用者更好地了解資料。它在elasticsearch叢集索引的内容之上提供可視化功能。
安裝
安裝和初始化的過程與elasticsearch類似:
用編輯器打開config/ kibana.yml,配置elasticsearch.url指向本地elasticsearch執行個體所在位置
更改目錄到kibana檔案夾
運作bin/ kibana(或在windows上運作bin \ kibana.bat)
将運作kibana的終端保持打開狀态,可以保證執行個體不斷的運作。你也可以使用nohup模式在背景運作執行個體。
使用es和kibana建立儀表闆主要有三個步驟。接下來我将會用貸款預測的實際問題的資料來示例如何建立一個儀表闆。請注冊該問題,以便能夠下載下傳資料。請檢查資料字典以獲得更多詳細資訊。
注:在本文中,我将使用python讀取資料并将資料插入到elasticsearch中,并通過kibana進行可視化。
讀取資料
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)
結果:
(614, 13)
(367, 12)
3.1 資料索引
elasticsearch将資料索引到其内部資料格式,并将其存儲在類似于json對象的基本資料結構中。請找到下面的python代碼,将資料插入到es當中。
請如下所示安裝pyelasticsearch庫以便通過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
去管理子產品中選取索引模式,點選添加。
如果你的索引資料中包含時間戳,則選複選框。否則,取消選中該框。
将之前用于資料索引到elasticsearch中的索引輸入。 (例如:loan_prediction_train)。
點選建立。
對loan_prediction_test重複上述4個步驟。 現在kibana已經與訓練資料連結,并測試資料是否已經存在于elastic search中。
3.3可視化
單擊 可視化>建立可視化>選擇可視化類型>選擇索引(訓練或測試)>建構
例一
選擇垂直條形圖,并選擇繪制loan_status分布的訓練索引。
将y軸作為計數,x軸代表貸款狀态
儲存可視化
添加儀表闆>選擇索引>添加隻儲存的可視化。
voila!! dashboard 生成啦!
例二
單擊可視化>建立可視化>選擇可視化類型>選擇索引(訓練或測試)>建構
選擇垂直條形圖,并選擇訓練索引繪制已婚分布。
選擇y軸為計數,x軸為已婚
儲存可視化。
重複上述步驟進行索引測試。
打開已建立的儀表闆添加這些可視化
例三
類似的性别分布。這一次我們将使用餅圖。
選擇餅圖并選擇列車索引繪制已婚分布。
按“已分隔”列選擇切片大小作為計數和分割片段
最後,建立所有可視化的儀表闆将如下所示!
是不是很漂亮!
剩下将由你來探索更多的elasticsearch和kibana了,并建立多種多樣的可視化效果。
4.搜尋欄
搜尋欄允許使用者通過字元串來搜尋來資料,這便有助于我們了解資料中的更改,并在一個特定屬性中進行更改,這對于可視化來說是不容易的。
舉例
轉到發現>添加loan_status和credit_history
使用搜尋欄僅選擇credit_history為0.(credit_history:0)
現在可以檢視loan_status列中的更改記錄。
觀點:大多數信用記錄為0的客戶沒有收到貸款(貸款狀态為n = 92.1%)
本文作者:佚名
來源:51cto