数据分析都在用的诀窍:用Python做数据探索

作者:

翻译:放飞梦想

校对:魔都斯卡

作为一个数据分析人员,如何开始数据分析?怎么开始?是一个很多初学者都很烦恼的事情。

想要知道怎么办,这篇文章以实例给出了答案。

在这篇文章中简要介绍了如何在Python中利用pandas和matplotlib做探索性数据分析(EDA)。

什么是探索性数据分析?

维基百科是这么解释的

在统计学中,探索性数据分析(EDA)是一种分析数据集以总结其主要特征的方法,通常采用可视方法。可以使用或不使用统计模型,但主要是EDA用于查看数据在正式建模或假设检验任务之外可以告诉我们的内容。

你可以说EDA是统计学家的故事讲述方式,你可以在哪里探索数据,找到模式并讲述见解。通常,您会遇到一些问题,尝试通过执行EDA来验证这些问题。

数据分析都在用的诀窍:用Python做数据探索

Python中的EDA

很多Python库可以支持基本的EDA,本文使用和matplotlib,加上Jupyter notebook来做EDA。Jupyter notebook是一种用于数据分析和数据科学处理的工具,这是一个基于Web的平台,可以将Python,html和Markdown混合在一起来形成数据探索报告。

可以将Python,html和Markdown混合在一起来形成数据探索报告

这个例子使用的数据属于一个虚构的超级商店。目标是 通过探索数据,找到一些问题的答案,例如销售方面的最佳日期,最适合的时间,以便相应地安排员工。

如果您没有安装jupyter,请通过运行该命令进行安装 pip install jupyter

如果你使用的是Anaconda版本的Python,那么Jupyter和Pandas就已经存在了。我强烈建议使用它,因为它专用于数据分析或数据科学的用户。

通过运行命令启动Jupyter Note book jupyter-notebook,它将在您的默认浏览器中打开一个界面。创建一个新笔记本并命名,你会看到如下所示:

可以在单元格中以Markdown格式添加文本,在下一个单元格中,可以开始编写代码。Jupyter笔记本有*.pynb扩展。

在第一个单元格中,刚刚添加了一个要做什么的标题。你可以在这里添加任何东西,甚至是你的私人笔记。

首先需要获取数据。数据以CSV格式提供。导入后,用 read_csv的方法pandas来读取CSV文件。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

如果你注意到添加了%matplotlib inline。它的作用是在页面上呈现内联图。你很快就会看到它是如何发生的。接下来,在必要时阅读CSV和数据清理。

df = pd.read_csv('data.csv') 
df ['Amount'] = df ['Amount']。str.replace('$','')。str.replace(',','')
df ['Amount'] = pd.to_numeric(df ['Amount'])

来解释下这段代码。

首先删除了数据中的$符号,然后将字符串字段转换为数字,为什么要转为数字呢?

因为我们要在这个float字段上执行数学运算。一旦完成,数据就预处理好了。点击Shift+Enter运行,将出现如下结果:

通过数据探索,发现BranchName字段不必要,因为我们只有一个商店的数据!

所以让我们删除它!

df.drop('BranchName',axis=1, inplace=True) 
df

它将删除列,inpace=True使其在现有的DataFrame情况下删除而不重新分配。再次运行,显示如下数据:

OK !操作清理完成后,让我们深入了解数据并找到更多的数据特征!

要做的第一件事就是找出记录数量和功能或列数。为此,将执行df.shape。当我这样做时,会发现以下结果:

(4100,9)

这是什么意思?它实际上是行x列。所以这里有4100条记录和9列,因为您也可以计算上面的列数。

除了需要了解到有多少记录和列,但是,更需要了解这个数据的详细摘要,因为将要运行df.describe(),当我这样做时输出:

好的,这里给出一些有趣的信息 如果你看到count它告诉你4100这里的记录数相同。您可以看到所有列具有相同的计数,这意味着那里没有丢失的字段。您也可以查看单个列数,例如,Units我所要做的就是:

df['Units'].count()

您将了解数据的可用性,平均值,最小值和最大值以及标准偏差和中位数。百分位数也在那里。标准偏差是一个非常有用的工具,可以确定数据如何在均值之上或之下传播。值越高,可靠性越低,反之亦然。举例std的Amount是183.5,而平均大约是35。另一方面,Units是12.7和的意思std是17.85。

让我们看看分布 Amount

num_bins = 10

plt.hist(df ['Amount'],num_bins,normed = 1,facecolor ='blue',alpha = 0.5)

plt.show()

它输出:

注意数据基线变动非常大,从+ -1000到不等1000

下面再让我们按月,日和小时查找销售情况。

按月销售

sales_by_month = df.groupby('Month').size()
print(sales_by_month)
#Plotting the Graph
plot_by_month = sales_by_month.plot(title='Monthly Sales',xticks=(1,2,3,4,5,6,7,8,9,10,11,12))
plot_by_month.set_xlabel('Months')
plot_by_month.set_ylabel('Total Sales')

您可以使用.size()仅获取特定列的聚合值或.count()每列的聚合值。因为我们只需要Month这样,所以我使用了它。绘制图表,你会发现:

如图所示,生活很美好,但直到七月,随后发生了一些事情,8月急剧下降,然后工作人员在接下来的3个月里努力工作,然后情况急剧恶化。

让我们看看日销售情况。

按日销售

# By Day
sales_by_day = df.groupby('Day').size()
plot_by_day = sales_by_day.plot(title='Daily Sales',xticks=(range(1,31)),rot=55)
plot_by_day.set_xlabel('Day')
plot_by_day.set_ylabel('Total Sales')

输出是:

本月底销售额大幅下降,否则持续不断上涨,第18天相当不错。

按小时销售

sales_by_hour = df.groupby('Hour').size()
plot_by_hour = sales_by_hour.plot(title='Hourly Sales',xticks=(range(5,22)))
plot_by_hour.set_xlabel('Working Hours')
plot_by_hour.set_ylabel('Total Sales')

输出:

从图中可以看到,好像中午之后客户访问的时间比关闭和开放时间更多。

结论

当然,数据探索远远不止这些,可以继续下去,找到更多的数据规律,但这应该足以让您了解如何利用EDA从数据中找到规律。

作为一个小练习

作为一个小练习,在数据中有一个字段Transaction Type,您的任务是找出每种交易类型的销售额。请把你的解答发到后面。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();