pythonpandas数据分析技术与编程方法讲座.ppt

上传人:xt****7 文档编号:2379211 上传时间:2019-11-22 格式:PPT 页数:106 大小:3.09MB
返回 下载 相关 举报
pythonpandas数据分析技术与编程方法讲座.ppt_第1页
第1页 / 共106页
pythonpandas数据分析技术与编程方法讲座.ppt_第2页
第2页 / 共106页
pythonpandas数据分析技术与编程方法讲座.ppt_第3页
第3页 / 共106页
点击查看更多>>
资源描述
Python Pandas 数据分析技术与编程方法,Python入门 开发环境IDE pandas数据分析库 数据规整化 数据聚合与分组 实例分析泰坦尼克之灾,目录,Python是自由软件丰硕成果之一 创始人 Guido van Rossum 时间地点 1989年圣诞节期间在阿姆斯特丹创造 名字来源 大蟒蛇飞行马戏团爱好者 渊源 从ABC发展而来 主要受Modula-3的影响 结合了Unix shell和C的习惯,Python的历史,Python是一种面向对象的解释性语言 免费的 可移植的 可扩展的 简单的 万能的,Python的语言特点,Python是一种语法简单的脚本语言 运行方式 命令行、交互式、图形集成环境 面向对象 甚至还支持异常处理 模块和包 与Java类似,还开发了JPython 语言扩展 可以用C/C+/Java编写新的语言模块 丰富的库 数据分析/科学计算/机器学习/GUI/ . .,Python的语法特点,它使程序员的生活更有趣 简单易学 功能丰富 谁在使用Python呢? Google NASA 豆瓣 ,Python的魅力,当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。,Python解释器,CPython 当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。 CPython是使用最广的Python解释器。,Python解释器,IPython IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。 CPython用作为提示符,而IPython用In 序号:作为提示符。,Python解释器,PyPy PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。 绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。,Python解释器,Jython Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。,Python解释器,IronPython IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。,Python解释器,OS: 64位 windows 7 Version:python-2.7.11.msi 注意: 1.安装时勾选add to environment,默认安装pip 2.添加pip环境变量 path = C:Python27Scripts PyPI (PythonPackageIndex)是python官方的第三方库的仓库,pip是一个安装和管理Python包的工具。,Windows下 Python 安装与配置,python shell IDLE(Python GUI) ipython Notepad+ PyCharm,Python开发环境,eclipse +PyDev IDE 配置PyDev Interpreter 打开 Window-Preferences.对话框,选择“ PyDev“-“Interpreter Python“, 点击New,从Python的安装路径下选择Python.exe。 也可以点Auto Config自动配置,会搜索安装好的python自动配置。,Python开发环境,Python开发环境,Python文件不支持中文注释问题: # coding= #!/usr/bin/python # -*- coding: -*- #!/usr/bin/python # vim: set fileencoding= : eg: # coding=utf-8,特别注意:Python文件编码声明,Python中行首的空白是重要的,它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。 if 0=1: print We are in a world of arithmetic pain print Thank you for playing 将输出Thank you for playing if 0=1: print We are in a world of arithmetic pain print Thank you for playing 将不会有输出,特别注意:缩进,可以使用空格或制表符产生缩进,两个空格或四个空格都是可以的,不过一般建议使用一个制表符TAB产生缩进,你的程序应该固定使用一种缩进规则。 Python代码缩进决定了代码的逻辑关系,而不仅仅是为了好看!,特别注意:缩进,pandas 数据分析 numpy 科学计算包 scipy 科学计算包 matplotlib 画图/表 scikit-learn 机器学习库 Seaborn 数据可视化工具包,常用扩展包,Python的一个数据分析包 AQR Capital Management于2008年4月开发 2009年底开源 目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。 约定俗成的导入惯例: In 1: from pandas import Series, DataFrame In 2: import pandas as pd,Pandas,1.Series Series是一维标记数组,可以存储任意数据类型,如整型、字符串、浮点型和Python对象等,轴标一般指索引。 Series Numpy中的一维array Python基本数据结构List 区别:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。,Pandas中的数据结构,2. DataFrame DataFrame是二维标记数据结构,列可以是不同的数据类型。它是最常用的pandas对象,像Series一样可以接收多种输入:lists、dicts、series和DataFrame等。初始化对象时,除了数据还可以传index和columns这两个参数。,Pandas中的数据结构,3. Panel Panel很少使用,然而是很重要的三维数据容器。Panel data源于经济学,也是pan(el)-da(ta)-s的来源。,Pandas中的数据结构,4. Panel4D Panel4D是像Panel一样的4维容器,作为N维容器的一个测试。 Panel4D是Panel的一个子集,因此Panel的大多数方法可用于4D,但以下方法不可用:join, to_excel, to_frame, to_sparse, groupby。,Pandas中的数据结构,5. PanelND PanelND是一个拥有factory集合,可以创建像Panel4D一样N维命名容器的模块。,Pandas中的数据结构,通过传递一个list对象来创建Series,默认创建整型索引; In 4: obj = Series(4, 7, -5, 3) 创建一个带有索引来确定每一个数据点的Series ; In 8: obj2 = Series(4, 7, -5, 3, index=d, b, a, c) 如果你有一些数据在一个Python字典中,你可以通过传递字典来创建一个Series; In 11: sdata = Ohio: 35000, Texas: 71000, Oregon: 16000, Utah: 5000 In 12: obj3 = Series(sdata) In 14: states = California, Ohio, Oregon, Texas In 15: obj4 = Series(sdata, index=states),Series相关操作创建,通过一个布尔数组过滤,纯量乘法,或使用数学函数,将会保持索引和值间的关联:,Series相关操作,Series是一个定长的,有序的字典,因为它把索引和值映射起来了。它可以适用于许多期望一个字典的函数:,Series相关操作,在pandas中用函数 isnull 和 notnull 来检测数据丢失: pd.isnull(obj4) pd.notnull(obj4) Series也提供了这些函数的实例方法: obj4.isnull(),Series相关操作,Series的一个重要功能是在算术运算中它会自动对齐不同索引的数据:,Series相关操作,Series对象本身和它的索引都有一个 name 属性,它和pandas的其它一些关键功能整合在一起:,Series相关操作,从坐标轴删除条目,drop 方法将会返回一个新的对象并从坐标轴中删除指定的一个或多个值:,Series相关操作,Series除了可以使用索引值,也可以仅使用整数来索引:,Series相关操作,直方图:,Series相关操作,字符串方法:,Series相关操作,通过传递一个NumPy array,时间索引以及列标签来创建一个DataFrame; 用一个相等长度列表的字典; 它的索引会自动分配,并且对列进行了排序; 如果设定了一个列的顺序,DataFrame的列将会精确的按照所传递的顺序排列;,DataFrame相关操作创建,通过一个嵌套的字典格式创建DataFrame: 外部键会被解释为列索引,内部键会被解释为行索引; 内部字典的键被结合并排序来形成结果的索引; 可以对结果转置:,DataFrame相关操作创建,DataFrame中的一列可以通过字典记法或属性来检索: 注意,返回的Series包含和DataFrame相同的索引,并它们的 name 属性也被正确的设置了。,DataFrame相关操作检索,为了使DataFrame可以 在行上进行标签索引, 将介绍特殊的索引字段 ix 。这使你可以从 DataFrame选择一个行 和列的子集,这也是一 种不是很冗长的重新索 引的方法。,DataFrame相关操作检索,对于DataFrame,有很多方法来选择和重排包含在pandas对象中的数据。,DataFrame相关操作检索,列可以通过赋值来修改。例如,空的debt列可以通过一个纯量或一个数组来赋值; 注意:通过列表或数组给一列赋值时,所赋的值的长度必须和DataFrame的长度相匹配。 使用Series来赋值,它会代替在DataFrame中精确匹配的索引的值,并在所有的空洞插入丢失数据NaN; 给一个不存在的列赋值,将会创建一个新的列;,DataFrame相关操作赋值,pandas的最重要的特性之一是在具有不同索引的对象间进行算术运算。当把对象加起来时,如果有任何索引对不相同的话,在结果中将会把各自的索引联合起来。,DataFrame相关操作算术运算,在不同索引对象间的算术运算,当一个轴标签在另一个对象中找不到时,你可能想要填充一个特定的值,如0。How to do it?,DataFrame相关操作,对于DataFrame,可以从任何坐标轴删除索引值: 像字典一样 del 关键字将会删除列:,DataFrame相关操作,写入excel文件: df.to_excel(foo.xlsx, sheet_name=Sheet1) 从excel文件中读取: pd.read_excel(foo.xlsx, Sheet1, index_col=None, na_values=NA) 写入csv文件: df.to_csv(foo.csv) 从csv文件中读取: pd.read_csv(foo.csv) 写入HDF5存储: df.to_hdf(foo.h5,df) 从HDF5存储中读取: pd.read_hdf(foo.h5,df),DataFrame相关操作导入和保存数据,首先,作为一个激发性的例子,考虑一个二维数组和它的一个行间的差分: 这被称为 广播 (broadcasting)。,DataFrame 和 Series 间的操作,在一个DataFrame和一个Series间的操作是类似的:,DataFrame 和 Series 间的操作,pandas的索引对象用来保存坐标轴标签和其它元数据(如坐标轴名或名称)。构建一个Series或DataFrame时任何数组或其它序列标签在内部转化为索引:,pandas的索引对象,索引对象是不可变的,不能由用户改变: 索引对象的不可变性非常重要,这样它可以在数据结构中结构中安全的共享:,pandas的索引对象,pandas中的主要索引对象:,pandas的索引对象,除了类似于阵列,索引也有类似固定大小集合一样的功能:,pandas的索引对象,每个索引都有许多关于集合逻辑的方法和属性,且能够解决它所包含的数据的常见问题。,pandas的索引对象,reindex,意味着使数据符合一个新的索引来构造一个新的对象。 在Series上调用 reindex 重排数据,使得它符合新的索引,如果那个索引的值不存在就引入缺失数据值:,pandas对象的一个关键方法重新索引,为了对时间序列这样的数据排序,当重建索引的时候可能想要对值进行内插或填充。 method 选项可以是你做到这一点,使用一个如 ffill 的方法来向前填充值: reindex 的 method(内插)选项:,pandas对象的一个重要功能重新索引,对于DataFrame, reindex 可以改变(行)索引,列或两者。当只传入一个序列时,结果中的行被重新索引了:,pandas对象的一个重要功能重新索引,使用 columns 关键字可以使列重新索引:,pandas对象的一个重要功能重新索引,一次可以对两个重新索引,可是插值只在行侧(0坐标轴)进行:,pandas对象的一个重要功能重新索引,使用带标签索引的 ix 可以把重新索引做的更简单:,pandas对象的一个重要功能重新索引,reindex 函数的参数:,pandas对象的一个重要功能重新索引,Pandas提供了大量的方法能够轻松的对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并操作。 Concat Merge (类似于SQL类型的合并) Append (将一行连接到一个DataFrame上),数据规整化合并,concat,数据规整化合并,merge 默认情况下,merge做的是“inner”连接,结果中的键是交集。其他方式还有“left”,“right”以及“outer”。,数据规整化合并,append,数据规整化合并,Stack/unstack,数据规整化重塑,数据透视表,数据规整化重塑,DataFrame中常常会出现重复行,DataFrame的duplicated方法返回一个布尔型Series,表示各行是否是重复行;还有一个drop_duplicated方法,它返回一个移除了重复行的DataFrame:,数据规整化清理,执行描述性统计:df.mean() 在其它轴上进行描述性统计:df.mean(1),数据聚合与分组,对数据应用函数:,数据聚合与分组,对于”group by”操作,我们通常是指以下一个或多个操作步骤: (Splitting)按照一些规则将数据分为不同的组; (Applying)对于每组数据分别执行一个函数; (Combining)将结果组合到一个数据结构中;,数据聚合与分组,分组并对每个分组执行sum函数: 通过多个列进行分组形成一个层次索引,然后执行函数:,数据聚合与分组,泰坦尼克号问题之背景: 就是大家都熟悉的Jack and Rose的故事,豪华游艇快沉了,大家都惊恐逃生,可是救生艇的数量有限,无法人人都上,副船长发话了lady and kid first!,所以是否获救其实并非随机,而是基于一些背景有rank先后的。 训练和测试数据是一些乘客的个人信息以及存活状况,要尝试根据它生成合适的模型并预测其他人的存活状况。 这是一个二分类问题,是logistic regression所能处理的范畴。,实例逻辑回归Kaggle泰坦尼克之灾,从机器学习问题角度 监督学习 无监督学习 半监督学习,机器学习算法概览,从算法的功能角度 回归算法(Regression Algorithms) 基于实例的算法(Instance-based Algorithms) 决策树类算法(Decision Tree Algorithms) 贝叶斯类算法(Bayesian Algorithms) 聚类算法(Clustering Algorithms) 人工神经网络类算法(Artificial Neural Network Algorithms) 深度学习(Deep Learning Algorithms) 降维算法(Dimensionality Reduction Algorithms) 模型融合算法(Ensemble Algorithms),机器学习算法概览,机器学习算法概览,预测结果如果是离散值(比如邮件分类问题中的垃圾邮件/普通邮件,比如用户会/不会购买某商品),那么我们把它叫做分类问题(classification problem); 朴素贝叶斯、逻辑回归、支持向量机等 预测结果是连续值(比如房价,股票价格等等),那么我们把它叫做回归问题(regression problem)。 线性回归等,机器学习分类与回归,逻辑回归 监督学习 分类问题 逻辑回归的成功之处在于,将原本输出结果通过sigmoid函数映射到(0,1),从而完成概率的估测。 逻辑回归能够较好地把两类样本点分隔开,解决分类问题。,机器学习逻辑回归,泰坦尼克号问题之背景: 就是大家都熟悉的Jack and Rose的故事,豪华游艇快沉了,大家都惊恐逃生,可是救生艇的数量有限,无法人人都上,副船长发话了lady and kid first!,所以是否获救其实并非随机,而是基于一些背景有rank先后的。 训练和测试数据是一些乘客的个人信息以及存活状况,要尝试根据它生成合适的模型并预测其他人的存活状况。 这是一个二分类问题,是logistic regression所能处理的范畴。 ,实例逻辑回归Kaggle泰坦尼克之灾,import pandas as pd #数据分析 import numpy as np #科学计算 from pandas import Series,DataFrame data_train = pd.read_csv(“/Users/WGW/Titanic_data/Train.csv“) data_train,实例逻辑回归Kaggle泰坦尼克之灾,data_train如下所示:,实例逻辑回归Kaggle泰坦尼克之灾,训练数据中总共有891名乘客,but有些属性的数据不全,比如说: Age(年龄)属性只有714名乘客有记录 Cabin(客舱)更是只有204名乘客是已知的,实例逻辑回归Kaggle泰坦尼克之灾,我们用下列的方法,得到数值型数据的一些分布: mean字段告诉我们,大概0.383838的人最后获救了,平均乘客年龄大概是29.7岁(计算这个时候会略掉无记录的),实例逻辑回归Kaggle泰坦尼克之灾,统计乘客各属性分部:,实例逻辑回归Kaggle泰坦尼克之灾,实例逻辑回归Kaggle泰坦尼克之灾,1、被救的人300多点,不到半数; 2、3等舱乘客非常多; 3、遇难和获救的人年龄似乎跨度都很广; 4、3个不同的舱年龄总体趋势似乎也一致,3等舱乘客20岁多点的人最多, 1等舱40岁左右的最多; 5、登船港口人数按照S、C、Q递减,而且S远多于另外两港口。,实例逻辑回归Kaggle泰坦尼克之灾,可能会有一些想法了: 1、不同舱位/乘客等级可能和财富/地位有关系,最后获救概率可能会不一样? 2、年龄对获救概率也一定是有影响的,毕竟前面说了,副船长还说小孩和女士先走呢? 3、和登船港口是不是有关系呢?也许登船港口不同,人的出身地位不同?,实例逻辑回归Kaggle泰坦尼克之灾,属性与获救结果的关联统计:,实例逻辑回归Kaggle泰坦尼克之灾,实例逻辑回归Kaggle泰坦尼克之灾,实例逻辑回归Kaggle泰坦尼克之灾,实例逻辑回归Kaggle泰坦尼克之灾,实例逻辑回归Kaggle泰坦尼克之灾,实例逻辑回归Kaggle泰坦尼克之灾,先把Cabin缺失与否作为条件(虽然这部分信息缺失可能并非未登记,丢失了而已?所以这样做未必妥当),先在有无Cabin信息这个粗粒度上看看Survived的情况。,实例逻辑回归Kaggle泰坦尼克之灾,大体数据的情况看了一遍,对感兴趣的属性也有个大概的了解了。 下一步干啥? 处理处理这些数据(feature engineering过程),为机器学习建模做点准备吧,实例逻辑回归Kaggle泰坦尼克之灾,Cabin:按Cabin有无数据,将这个属性处理成Yes和No两种类型吧。 Age:通常遇到缺值的情况,我们会有几种常见的处理方式。,实例逻辑回归Kaggle泰坦尼克之灾,缺失数据常用处理方式: 1、如果缺值的样本占总数比例极高,我们可能就直接舍弃了,作为特征加入的话,可能反倒带入noise,影响最后的结果了。 2、如果缺值的样本适中,而该属性非连续值特征属性(比如说类目属性),那就把NaN作为一个新类别,加到类别特征中。 3、如果缺值的样本适中,而该属性为连续值特征属性,有时候我们会考虑给定一个step(比如这里的age,我们可以考虑每隔2/3岁为一个步长),然后把它离散化,之后把NaN作为一个type加到属性类目中。 4、有些情况下,缺失的值个数并不是特别多,那我们也可以试着根据已有的值,拟合一下数据,补充上。,实例逻辑回归Kaggle泰坦尼克之灾,用scikit-learn中的RandomForest来拟合缺失的年龄数据:,实例逻辑回归Kaggle泰坦尼克之灾,实例逻辑回归Kaggle泰坦尼克之灾,因为逻辑回归建模时,需要输入的特征都是数值型特征,我们通常会先对类目型的特征因子化。 什么叫做因子化呢?举个例子: 以Cabin为例,原本一个属性维度,因为其取值可以是yes,no,而将其平展开为Cabin_yes,Cabin_no两个属性。 原本Cabin取值为yes的,在此处的”Cabin_yes”下取值为1,在”Cabin_no”下取值为0 原本Cabin取值为no的,在此处的”Cabin_yes”下取值为0,在”Cabin_no”下取值为1,实例逻辑回归Kaggle泰坦尼克之灾,使用pandas的”get_dummies”来完成特征因子化,并拼接在原来的”data_train”之上:,实例逻辑回归Kaggle泰坦尼克之灾,各属性值之间scale差距太大,将对收敛速度造成几万点伤害值!甚至不收敛! 先用scikit-learn里面的preprocessing模块做一个scaling,所谓scaling,其实就是将一些变化幅度较大的特征化到-1,1之内。,实例逻辑回归Kaggle泰坦尼克之灾,把需要的feature字段取出来,转成numpy格式,使用scikit-learn中的LogisticRegression建模:,实例逻辑回归Kaggle泰坦尼克之灾,”test_data”也要做和”train_data”一样的预处理!,实例逻辑回归Kaggle泰坦尼克之灾,实例逻辑回归Kaggle泰坦尼克之灾,预测取结果喽!,实例逻辑回归Kaggle泰坦尼克之灾,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!