python数据分析过程示例_第1页
python数据分析过程示例_第2页
python数据分析过程示例_第3页
python数据分析过程示例_第4页
python数据分析过程示例_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

python数据分析过程示例引言

几年后发生了。在使用SAS工作超出5年后,我决定走出自己舒适区。作为一个数据科学家,我寻找其余有用工具旅程开始了!幸运是,没过多久我就决定,Python作为我开胃菜。

我总是有一个编写代码倾向。这次我做是我真正喜欢。代码。原来,写代码是如此轻易!

我一周内学会了Python基础。而且,从那时起,我不但深度探索了这门语言,而且也帮助了许多人学习这门语言。Python是一个通用语言。不过,多年来,具备强大小区支持,这一语言已经有了专门数据分析和预测模型库。

因为Python缺乏数据科学资源,我决定写这篇教程来帮助他人更加快地学习Python。在本教程中,我们将讲授一点关于怎样使用Python进行数据分析信息,咀嚼它,直到我们以为舒适并能够自己去实践。

目录1.数据分析Python基础为何学Python用来数据分析Python2.7v/s3.4怎样安装Python在Python上运行一些简单程序2.Python库和数据结构Python数据结构Python迭代和条件结构Python库3.在Python中使用Pandas进行探索性分析序列和数据框介绍分析Vidhya数据集——贷款预测问题

4.在Python中使用Pandas进行数据再加工5.使用Python中建立预测模型逻辑回归决议树随机森林让我们开始吧1.数据分析Python基础为何学Python用来数据分析

很多人都有兴趣选择Python作为数据分析语言。这一段时间以来,我有比较过SAS和R。这里有一些原因来支持学习Python:开源——无偿安装极好在线小区很轻易学习能够成为一个通用语言,用于基于Web分析产品数据科学和生产中。

不用说,它依然有几个缺点:它是一个解释性语言,而不是编译语言,所以可能占用更多CPU时间。然而,因为它节约了程序员时间(因为学习方便),它可能依然是一个很好选择。Python2.7v/s3.4

这是关于Python一个最具争议话题。你可能总是不能防止碰到,尤其是假如你是一个初学者。这里没有正确/错误选择。它完全取决于详细情况和你需要。我会尝试给你一些提议,以帮助你做出明智选择。为何选择Python2.7极好小区支持!这是你在早期需要东西。Python2发行于末,已经被使用超出。很多第三方库!即使许多库已经提供了3.X支持,但依然有大量模块只工作在2.X。假如你计划将Python用于详细应

用,如Web开发这种高度依赖外部模块,你选择2.7可能会愈加好。3.X版本一些特征有向后兼容性,能够使用2.7版本。为何选择Python3.4更整齐和更加快!Python开发者修正了一些固有问题和小缺点,以此为未来建立一个强大基础。这些可能不是很相关,但最终会很主要。这是未来!2.7是2.X族公布最终一个版本,而且最终每个人都要转移到3.X版本。Python3在过去5年已经公布稳定版本,并将继续。

没有明确赢家,但我想,底线是,你应该专注于学习Python语言。版本之间转换应该只是一个时间问题。敬请期待,很快未来一个专门对比Python2.X和3X文章!怎样安装Python有两种方法安装Python你能够直接从项目网站下载Python,然后单独安装你想要组件和库或者,你能够下载并安装一个包,它附带了预装库。我提议您下载Anaconda。另一个选择是EnthoughtCanopyExpress。第二种方法提供了一个防止麻烦安装,所以我会推荐给初学者。这种方法是你必须等候整个包进行升级,

即使你只是对一个单一库最新版本感兴趣。它应该不主要,直到和除非,直到和除非,你正在做尖端统计研究。选择开发环境

一旦你已经安装了Python,选择环境能够有很多个选择。这里是3个最常见选择:终端/基于ShellIDLE(默认环境)iPythonnotebook——类似于Rmarkdown

而环境权取决于你需要,我个人更喜欢iPythonnotebook一点。它提供了许多良好功效,编写代码同时还能够用于统计,你能够选择在上面运行代码块(而不是一行一行执行)。我们在整个教程中将使用Ipython环境热身:跑第一个Python程序

你能够使用Python作为一个简单计算器来开始:

有一些事情需要注意:你能够在你终端/CMD键入“IPythonnotebook”来开启IPythonnotebook,这取决于你工作在操作系统你能够经过简单地点击上面截图中名字来对IPythonnotebook命名界面显示In[*]代表输入和Out[*]代表输出。你能够经过按“Shift+Enter”或“ALT+Enter”来执行代码,假如你后面还想插入一行。

在我们深入挖掘怎样处理问题之前,让我们退后一步,了解Python基本知识。当我们知道数据结构和迭代和条件结构是形成任何语言关键。在Python中,这些包含列表、字符串、元组、字典、for循环,while循环,if-else等等,让我们来看看下面原因。2.在Python上运行一些简单程序Python数据结构

以下是Python中使用一些数据结构。你应该熟悉他们,方便恰当使用它们。列表——列表是在Python中最通用数据结构。列表能够这么简单定义:就是在方括号中一系列用逗号来分隔值。列表可能包含不一样类型项,但它们通常都有相同类型。Python列表是可变,列表中单个元素是能够改变。

这里是一个快速例子,定义了一个列表,然后访问它:字符串——字符串能够简单使用单引号(")、双引号(”)或三引号(’’’)来定义。字符串封闭三引号(’’’)中能够跨越多行代码,在文档字符串中是很惯用(统计功效Python方式)。作为一个转义字符。请注意,Python中字符串是不可变,所以你不能改变字符串部分。元组——元组由一系列由逗号分隔值表示。元组是不可变,输出用括号包围,目标是嵌套结构能够被正确处理。另外,尽管元组是不可变,但它们能够在必要是含有可变数据。

因为元组是不可变,不可改变,他们相对列表来说能够处理更加快。所以,假如你清单是不可能改变,你应该使用元组,而不是列表。字典——字典是键:值对一个无序集合,要求键是唯一(在一个字典里)。一对大括号创建一个空字典:{}。

Python迭代和条件结构

和大多数语言一样,Python也有一个FOR循环,这是最广泛使用迭代方法。它有一个简单语法:

这里“Python迭代能够是列表、元组或其余先进数据结构,我们将在后面章节中探讨。让我们来看看一个简单例子,确定一个数字因子。

来看看条件语句,它们是用来基于条件执行代码片段。最惯用结构是if-else,有以下语法:

比如,假如我们想打印出某个数字n是偶数还是奇数:

既然你熟悉了Python基础,我们来更近一步。假如你像完成以下任务:乘2矩阵求二次方程根绘制条形图和直方图建立统计模型访问网页

假如你想从零开始写代码,它将是一场噩梦,你使用Python不会超出2天!但不要担心这些。值得庆幸是,有许多预定义库,我们能够直接导入到我们代码,使我们生活很轻易。比如,考虑我们刚才看到因子例子。我们能够一步就完成:

当然,为了这么我们需要导入math库。让我们探索下一个不一样库。Python库

在开始我们学习Python之旅之前,让我们先一步,了解一些有用python库。第一步显然是要学会将它们导入到我们环境中。在Python中有以下几个方法:

在第一个方式中,我们已经为math库定义了一个别名m。现在我们能够使用数学库各种功效(比如阶乘,经过引用别名m.factorial())。

第二方式,你需要导入math整个命名空间,你能够直接使用factorial(),而不用提到math。提醒:谷歌推荐您使用第一个方式导入库,因为您将知道函数来自何处。

下面是一个库列表,你将在任何科学计算和数据分析中用到:NumPy代表数值Python。NumPy最强大功效是n维数组。该库还包含基本线性代数函数,傅里叶变换,高级随机数功效,以及集成其余低级语言如Fortran,C和C++工具。SciPy代表科学Python。SciPy是基于NumPy。它是最有用库之一,具备各种高层次科学和工程模块,如离散傅立叶变换,线性代数,优化和稀疏矩阵。Matplotlib用于绘制各种各样图表,从直方图到线图,再到热图。你能够在IPythonnotebook中使用PyLab(IPythonnotebook–PyLab=inline)以此使用这些绘图功效inline。假如你忽略inline选项,PyLab会将IPythonnotebook环境转换成类似于Matlab环境。你也能够使用Latex命令将math库添加到您绘图中。Pandas对于结构化数据操作和控制。它广泛用于数据再加工和数据准备。Pandas说最近一直在推进对PythonPython使用数据科学家共同体工具。ScikitLearn机器学习库。建立在NumPy、SciPy和matplotlib基础上,这个库包含了机器学习和统计模型包含分类、回归、聚类和降维等很多有效工具。Statsmodels用于统计建模。statsmodels是一个Python模块,允许用户探索数据,估量统计模型,并进行统计检验。一个广泛描述性统计,统计检验列表。绘图功效,和结果统计可用于不一样类型数据和每个估量。Seaborn用于统计数据可视化。Seaborn是Python中用来绘制让人喜欢并能提供大量信息统计图形库。它是基于matplotlib。Seaborn意在使可视化成为探索和了解数据关键部分。Bokeh创建交互式图、仪表盘和当代Web浏览器上数据应用。它允许用户生成优雅和简练d3.js格调图形。另外,在非常大或流媒体数据集上,它具备高性能交互性能力。Blaze扩展NumPy和Pandas分布式和流媒体数据集。它能够用来访问来自多个起源数据,包含bcolz,MongoDB,SQLAlchemy,ApacheSpark,PyTables等等,结合Bokeh,Blaze能够作为一个非常强大工具,用于对大规模数据创建高效可视化和仪表板。Scrapy用于网络爬虫。它是用于获取特定数据模式一个非常有用框架,。它能够经过开始一个网站主页网址,然后经过挖掘网页内网站搜集信息。SymPy用于符号计算。它具备广泛功效,从基本符号运算到微积分,代数,离散数学和量子物理学。另一个有用功效是将计算结果格式化为LaTeX码能力。Requests用于访问网络。它工作原理类似于Python标准库urllib2,不过更轻易编码。但对于初学者,你会发觉和urllib2细微差异,Requests可能更方便。

其它库,你可能需要:os用于操作系统和文件操作networkx和igraph基于数据操作绘制图形regularexpressions用于在文本数据中查找模式BeautifulSoup将探索Web。它不如Scrapy,它一次运行将从一个单一网页中提取信息。

现在我们已经熟悉Python基础和更多库,让我们深入到经过Python处理问题。是,我意思是做一个预测模型!在这个过程中,我们使用了一些强大库,也碰到了下一级数据结构。我们将带你经过这3个关键阶段:数据探索—从我们所拥有数据中发觉更多数据修改—清理数据和并修改它使它更适适用来统计建模预测建模—运行实际算法,自得其乐3.在Python中使用Pandas进行探索性分析

为了深入探索我们数据,让我把你介绍给另一个动物(好像Python是不够!)––Pandas

Pandas是Python最有用一个数据分析库我知道这些名字听起来很奇怪,但坚持下去!)它们对于增加一直在增加Python在数据科学界使用量起了很大作用。我们现在将使用Pandas从AnalyticsVidhya竞赛中读数据集,进行探索性分析,建立我们第一个基本分类算法来处理这一问题。

在加载数据之前,让我们了解Pandas中2个关键数据结构——序列和数据框序列和数据框介绍

序列能够被了解为一个1维标识/索引数组。你能够经过这些标签访问这个序列各个元素。

一个数据框类似于Excel工作簿–你能够使用列名来引用列,能够经过行号来访问行数据,本质区分是,在数据帧中,列名和行号是列和行索引。

More:10MinutestoPandas实践数据集——贷款预测问题

您能够从这里下载数据集。这里是变量描述:

让我们从数据探索开始

开始,经过在你你终端/Windows命令提醒符键入下面代码,来以InlinePylab模式开启IPython界面:

这在PyLab环境下打开IPythonnotebook,其中有几个有用库已经导入。另外,你将能够绘制您数据内联,这对于互动数据分析是一个非常好环境。你能够经过键入以下命令,检验环境是否正确加载了(并取得以下列图所表示输出):plot(arange(5))

我现在在Linux上工作,并已将数据集存放在以下位置:

/home/kunal/Downloads/Loan_Prediction/train.csv导入库和数据集:下面是我们将在本教程中使用库:numpymatplotlibpandas

请注意,你不需要导入matplotlib和NumPy,因为是在PyLab环境下。但我依然在代码中保留了它们,以防你在不一样环境中使用代码。

导入库以后,你能够使用read_csv()函数读数据集。这是直到这个阶段代码:快速数据探索

一旦你读取了数据,能够经过使用head()函数查看一下前几行数据:

这应该打印10行。或者,您也能够经过打印数据集来查看更多行。

接下来,你能够使用describe()函数来查看数值字段概要:

describe()功效将提供计数、平均、标准差(STD),最小值,分位数值和最大值(读这篇文章来更新基本统计数据了解人口分布)

这里有几个结论,你能够经过查看describe()函数输出得出:LoanAmount有(614–592)22个缺失值Loan_Amount_Term有(614–600)14个缺失值Credit_History有(614–564)50个缺失值我们还能够看到84%申请者有credit_history,怎么样,credit_history均值为0.84(记住,credit_history将那些有信用历史值设置为1,没有设置为0)ApplicantIncome分布似乎和expectation呈线性关系,CoapplicantIncome也是。

请注意,我们经过比较平均值和中位数,即50%位数,来得到偏差概念。

对于非数值(比如property_area,credit_history等),我们能够看看频率分布,了解他们是否有意义。频率表能够经过以下命令打印:

一样地,我们能够看看信用卡历史唯一值。注意,dfname["column_name]是一个基本索引技术,来访问一个数据框特定列。它也能够是列列表。想要了解更多信息,参考上面“Pandas10分钟教程”资源共享。分布分析

现在我们熟悉了基本数据特征,让我们研究不一样变量分布情况。让我们从数字变量开始–即applicantincome和LoanAmount

我们经过绘制applicantincome直方图开始,使用下面命令:

在这里,我们观察到,有几个极端值。这也是分箱值为50原因,就是为了清楚地描述它分布。

下一步,我们看箱线图,了解分布。fare箱图能够使用下面代码绘制:

这证实了大量离群值/极值存在。这能够归因于社会上收入差距。部分原因源于这么一个事实:我们正在查看不一样教育水平人。让我们依照他们所受教育进行分组:

我们能够看到,硕士和非毕业生平均收入之间没有实质性区分。不过毕业生中高收入人群更多,它们出现在异常值点中。

现在,让我们使用下面命令看看LoanAmount直方图和箱线图:

再次,有一些异常值。显然,applicantincome和LoanAmount都需要进行一定数据处理。LoanAmount有一些缺失值以及一些异常值,而applicantincome有一些异常值,需要更深入了解。我们将在即将到来部分完成这些。分类变量分析

现在我们了解了applicantincome和loanincome分布,让我们了解更多关于分类变量细节。我们将使用Excel数据透视表和交叉制表格调。比如,让我们看看基于信用统计,能够取得贷款可能性。这能够在微软Excel上使用一个透视表实现:

注:这里贷款情况已被编码,使用1代表yes,而0代表no,所以,所以均值代表了取得贷款概率。

现在我们将看看使用Python产生类似效果所需要步骤。请参考这篇文章,以使用Pandas取得不一样数据操纵技术。

现在我们能够观察到,我们得到一个像微软Excelpivot_table。这能够使用matplotlib库绘制成条形图,使用下面代码:

这表明,假如申请人有一个有效信用统计,取得贷款机会是没有信用统计人八倍。你能够依照Married,Self-Employed,Property_Area等绘制类似图。

或着,这两个图能够进行组合以后可视化,使用堆叠图表示:

你还能够再上图中加入性别变量(类似于Excel中数据透视表)

假如你还没有意识到,我们刚才在这里创建了两个基本分类算法,一个基于信用历史,而另一个基于2个分类变量(包含性别)。你能够在AVDatahacks上很快编写代码来创建首次提交。

我们只看到我们怎样使用Python中Pandas做探索性分析。我希望你对大熊猫(动物)爱现在增加了——给予一些帮助,这个库能够为你提供分析数据集。

接下来让我们深入探讨applicantincome和loanstatus变量,进行数据修改和创建一个数据集并应用各种建模技术。我强烈要求你采取另一个数据集和习题,并在深入阅读之前完成一个独立例子。在Python中使用Pandas进行数据再加工4.数据修改–翻新需要

对于那些一直跟下来人来说,这时你必须穿上鞋才能开始跑。

在我们探索数据期间,我们发觉了数据集一些问题,在数据准备好建立一个好模型之前需要处理。这个练习通常被称为“数据修改”。这里是问题,我们已经意识到:在一些变量中有缺失值。我们应该基于丢失值数量明智地估量这些值并评定该变量主要性。当我们查看数据分布时,我们看到,applicantincome和LoanAmount似乎在两端都含有极端值。即使他们可能有直观感觉,但应适当处理。

除了数值领域这些问题,我们也应该看看非数值领域Gender,Property_Area,Married,Education和Dependents这些变量,看看它们是否包含任何有用信息。

假如你是Pandas新手,我提议在继续前进之前阅读这篇文章。它详细介绍了一些有用数据处理技术。检验数据集中缺失值

让我们看看全部变量中缺失值,因为大多数模型不能处理有缺失值数据,即使他们能够,输入它们往往不能帮助更多。所以,让我们看看数据集中空值/NAN值数量:

这个命令告诉我们每一列中缺失值数量,因为假如值为缺失值isnull()返回1。

即使缺失值数量不是很多,但许多变量都有缺失值,它们中每一个都应该被估量和补充。经过这篇文章对不一样插值技术进行详细了解。

注:记住,缺失值可能并不总是NaN。比如,假如loan_amount_term是0,它是有意义或者你认为是缺失?我想你答案是缺失,你是正确。所以我们应该检验那些不切实际值。怎样填补LoanAmount缺失值?

有许多方法来填补价值贷款金额缺失值,最简单就是使用均值来替换,能够经过以下代码实现:另一个极端是能够建立一个监督学习模型来基于其余变量预测贷款金额,然后使用年纪以及其余变量来预测。

既然,现在目标是讲述数据修改步骤,我宁愿采取一个方法,它介于这2个极端方法之间。一个关键假设是,一个人是否受教育或是否自雇人士能够结合起来,提供一个很好贷款金额估量。

首先,让我们看看箱线图看是否有某种趋势存在:

所以我们看到在每一组中贷款金额中位数一些改变而这能够用来估量值。但首先,我们必须确保每个self_employed和Education变量不应该有缺失值。

如我们先前所说,self_employed有缺失值。让我们看看频率表:

因为~86%值是“No”,将缺失值估量为“No”是比较可靠,有很高成功概率。这能够用下面代码来完成:

现在,我们将创建一个数据透视表,它提供了我们全部Education和self_employed变量唯一值分组中位数。接下来,我们定义了一个函数,它返回这些单元格值,并应用它来填充丢失贷款金额值:

这应该给你提供了一个估量贷款金额缺失值好方法。怎样处理在LoanAmount和applicantincome分布中极值?

让我们先分析LoanAmount。因为极端值可能是现实,即一些人可能会因为特定需求,申请高额贷款,。所以,不把它们当做离群点对待,让我们尝试对数据转换从而发挥它们作用:

再看直方图:

现在分布看起来更靠近标准,极端值影响已经显着消退。

来看看applicantincome。一个直觉能够是一些申请人有较低收入,但有一个有力支持,共同申请者。所以将二者收入结合起来作为总收入可能是一个好主意,并采取相同对数变换。

现在我们看到,分布比以前好多了。我会把Gender,Married,Dependents,Loan_Amount_Term,Credit_History等缺失值估量留给你。另外,我激励你考虑可能额外信息,能够来自数据。比如,创建一个LoanAmount/TotalIncome列可能会有意义,因为它能给你一个关于申请人怎样偿还他贷款好想法。

下一步,我们将研究预测模型。5.使用Python中建立预测模型

之后,我们已经使数据能够用于建模,现在让我们来看看Python代码,来在我们数据集上创建一个预测模型。Skicit-kearn(sklearn)是Python中最惯用于此目标库,我们将跟随这条小径。我提议你经过这篇文章来复习进修sklearn。

因为,sklearn要求全部输入都是数字,我们应该经过编码类别将我们全部分类变量转换为数值型。这能够用下面代码来完成:

下一步,我们将导入所需模块。然后,我们将定义一个通用分类函数,它需要一个模型作为输入,并确定准确性度和交叉验证分数。因为这是一篇介绍性文章,我将不会进入编码细节。请参考这篇文章得到详细算法以及R和Python代码。另外,经过本文复习一下交叉验证会愈加好,因为它是一个非常主要性能测量方法。逻辑回归

让我们做我们第一个逻辑回归模型。一个方法就是把全部变量都加入模型,这可能会造成过分拟合(假如你还不知道这个术语,不要担心)。简单说,考虑全部变量可能会造成模型了解出比较复杂关系,对于详细数据,不能很好概括。阅读更多关于逻辑回归。

我们能够很轻易地作出一些直观假设来设定开启资金。取得贷款机会将更高:有信用统计申请人(记得我们在探索时观察到?)申请人或着共同申请人具备较高收入申请申请人具备较高教育水平属性在具备高增加前景城市地域

让我们使用credit_history建立我们第一个模型。

准确度:80.946%

交叉验证得分:80.945%

准确度:80.946%

交叉验证得分:80.945%

通常来说,我们期望经过增加变量来提升准确度。但这是一个更具挑战性案例。准确度和交叉验证得分不受那些影响较小变量影响。credit_history主导模式。我们现在有两个选择:工程特征:导出新信息并试图预测。我将把这留给你创造力。愈加好建模技术。让我们探索这个下一个。决议树

决议树是建立预测模型另一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论