PPT内容
这是python-pandas-数据分析技术与编程方法讲座ppt,包括了Python入门,开发环境IDE,pandas数据分析库,数据规整化,数据聚合与分组,实例分析——泰坦尼克之灾等内容,欢迎点击下载。
Python Pandas 数据分析技术与编程方法
目录
Python入门
开发环境IDE
pandas数据分析库
数据规整化
数据聚合与分组
实例分析——泰坦尼克之灾
Python的历史
Python是自由软件丰硕成果之一
创始人 Guido van Rossum
时间地点 1989年圣诞节期间在阿姆斯特丹创造
名字来源 大蟒蛇飞行马戏团爱好者
渊源 从ABC发展而来
主要受Modula-3的影响
结合了Unix shell和C的习惯
Python的语言特点
Python是一种面向对象的解释性语言
免费的
可移植的
可扩展的
简单的
万能的
Python的语法特点
Python是一种语法简单的脚本语言
运行方式 命令行、交互式、图形集成环境
面向对象 甚至还支持异常处理
模块和包 与Java类似,还开发了JPython
语言扩展 可以用C/C++/Java编写新的语言模块
丰富的库 数据分析/科学计算/机器学习/GUI/
... ...
Python的魅力
它使程序员的生活更有趣
简单易学
功能丰富
谁在使用Python呢?
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的字节码。
Windows下 Python 安装与配置
OS: 64位 windows 7
Version:python-2.7.11.msi
注意:
1.安装时勾选add to environment,默认安装pip
2.添加pip环境变量 path = C:\Python27\Scripts
PyPI (PythonPackageIndex)是python官方的第三方库的仓库,pip是一个安装和管理Python包的工具。
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中行首的空白是重要的,它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
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 数据可视化工具包
Pandas
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维命名容器的模块。
Series相关操作——创建
通过传递一个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相关操作
字符串方法:
DataFrame相关操作——创建
通过传递一个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 和 Series 间的操作
首先,作为一个激发性的例子,考虑一个二维数组和它的一个行间的差分:
这被称为 广播 (broadcasting)。
DataFrame 和 Series 间的操作
在一个DataFrame和一个Series间的操作是类似的:
pandas的索引对象
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提供了大量的方法能够轻松的对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函数:
通过多个列进行分组形成一个层次索引,然后执行函数:
实例——逻辑回归Kaggle泰坦尼克之灾
泰坦尼克号问题之背景:
就是大家都熟悉的『Jack and Rose』的故事,豪华游艇快沉了,大家都惊恐逃生,可是救生艇的数量有限,无法人人都上,副船长发话了『lady and kid first!』,所以是否获救其实并非随机,而是基于一些背景有rank先后的。
训练和测试数据是一些乘客的个人信息以及存活状况,要尝试根据它生成合适的模型并预测其他人的存活状况。
这是一个二分类问题,是logistic regression所能处理的范畴。
机器学习——算法概览
从机器学习问题角度
监督学习
无监督学习
半监督学习
机器学习——算法概览
从算法的功能角度
回归算法(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),从而完成概率的估测。
逻辑回归能够较好地把两类样本点分隔开,解决分类问题。
实例——逻辑回归Kaggle泰坦尼克之灾
泰坦尼克号问题之背景:
就是大家都熟悉的『Jack and Rose』的故事,豪华游艇快沉了,大家都惊恐逃生,可是救生艇的数量有限,无法人人都上,副船长发话了『lady and kid first!』,所以是否获救其实并非随机,而是基于一些背景有rank先后的。
训练和测试数据是一些乘客的个人信息以及存活状况,要尝试根据它生成合适的模型并预测其他人的存活状况。
这是一个二分类问题,是logistic regression所能处理的范畴。
https://www.kaggle.com/
实例——逻辑回归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泰坦尼克之灾
预测取结果喽!
相关PPT
科多大数据——数据分析python简介ppt:这是科多大数据——数据分析python简介ppt,包括了Python 简介,环境安装,代码规范,编码格式等内容,欢迎点击下载。
Python培训ppt课件:这是Python培训ppt课件下载,主要介绍了快速开始简单语句;Python的数据类型;Python函数;内置特殊函数;Python脚本与模块;简单的网络通信及即时聊天;总结,欢迎点击下载。
pythonchapter2 ppt:这是pythonchapter2 ppt,包括了程序设计需要系统化的方法,软件开发过程,需求分析,制定程序规格,设计,实现,测试与排错,维护等内容,欢迎点击下载。
《python-pandas-数据分析技术与编程方法讲座ppt》是由用户巴扎嘿于2018-05-15上传,属于培训教程PPT。