作者:
翻译:放飞梦想
校对:魔都斯卡
作为一个数据分析人员,如何开始数据分析?怎么开始?是一个很多初学者都很烦恼的事情。
想要知道怎么办,这篇文章以实例给出了答案。
在这篇文章中简要介绍了如何在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,您的任务是找出每种交易类型的销售额。请把你的解答发到后面。