探索性数据分析(EDA)是数据分析中的关键步骤,它帮助最大化洞察力。EDA对于提取重要变量、检测异常值和异常现象至关重要。尽管机器学习中有许多算法,但EDA被认为是理解和推动业务的最关键部分之一。
在各种平台上执行EDA有多种方法,如Python(matplotlib,seaborn)、R(ggplot2),网络上也有许多优秀资源,例如John W. Tukey的《Exploratory Data Analysis》和Roger D. Peng的《Exploratory Data Analysis with R》等。
Elasticsearch是一个开源的、基于RESTful的分布式可扩展搜索引擎。Elasticsearch在处理大量数据(PB级)的简单或复杂查询时速度极快,这得益于其简单的设计和分布式特性。与传统数据库不同,Elasticsearch不受模式、表格的限制,提供了一个分布式、多租户的全文搜索引擎,具有HTTP Web接口和无模式的JSON文档。
安装和初始化非常简单,步骤如下:
如果使用默认配置,Elasticsearch实例应在http://localhost:9200/上运行。请保持终端打开,以便实例继续运行。也可以使用nohup模式在后台运行实例。
Kibana是一个基于Elasticsearch构建的开源数据探索和可视化工具,帮助更好地理解数据。它在Elasticsearch集群上索引的内容之上提供可视化功能。用户可以在大量数据上创建条形图、折线图、散点图、饼图和地图。
Kibana的安装和初始化与Elasticsearch类似:
如果使用默认配置,Kibana实例应在http://localhost:5601/上运行。请保持终端打开,以便实例继续运行。也可以使用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)
Elasticsearch将数据索引到其内部数据格式,并以类似于JSON对象的基本数据结构存储它们。以下是将数据插入ES的Python代码。请安装pyelasticsearch库,如下所示,以便通过Python进行索引。
注意:代码假设Elasticsearch以默认配置运行。
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!, skipping chunk!")
pass
index_data(train_data_path, CHUNKSIZE, index_name_train, doc_type_train)
# 索引训练数据
index_data(test_data_path, CHUNKSIZE, index_name_test, doc_type_test)
# 索引测试数据
DELETE /loan_prediction_train [status:404 request:0.010s] DELETE /loan_prediction_test [status:404 request:0.009s]
现在将浏览器指向http://localhost:5601/,进入Management。点击Index Patterns,点击Add new。如果数据索引包含时间戳,请勾选复选框。这里,不勾选。输入用于将数据索引到Elasticsearch的相同索引(例如:loan_prediction_train)。点击创建。重复上述4个步骤,为loan_prediction_test创建。现在Kibana已与Elasticsearch中存在的训练和测试数据链接。
点击Visualize > Create a Visualization > 选择可视化类型 > 选择索引(训练或测试)> 构建。
示例1:选择垂直条形图,选择训练索引以绘制Loan_status分布。选择y轴为计数,x轴为Loan status。保存可视化图表。添加仪表板 > 选择索引 > 添加刚刚保存的可视化图表。看!仪表板已创建。
示例2:点击visualize > Create a visualization > 选择可视化类型 > 选择索引(训练或测试)> 构建。选择垂直条形图,选择训练索引以绘制Married分布。选择y轴为计数,x轴为Married。保存可视化图表。重复上述步骤,为测试索引创建。打开已创建的仪表板。添加这些可视化图表。
示例3:类似地,对于Gender分布。这次将使用饼图。点击visualize > Create a visualization > 选择可视化类型 > 选择索引(训练或测试)> 构建。选择饼图,并选择训练索引以绘制Married分布。选择切片大小为计数,并按Married列拆分切片。保存可视化图表。重复上述步骤,为测试索引创建。打开已创建的仪表板。添加这些可视化图表。
最后,包含所有创建的可视化图表的仪表板看起来像这样!漂亮!不是吗?
现在,让在这里探索更多的Elasticsearch和Kibana,并创建各种可视化图表。