1、Python学习数据分析与数据挖掘认识PythonlPython是一种解释型、面向对象、动态数据类型的高级程序设计语言。lPython由GuidovanRossum于1989年底发明,第一个公开发行版发行于1991年。lPython是纯粹的自由软件,源代码和解释器CPython遵循GPL(GNUGeneralPublicLicense)协议lPython具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C+)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型,然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块
2、,性能要求特别高,就可以用C/C+重写,而后封装为Python可以调用的扩展类库。Python优点有哪些lPython是一种开源的、解析性的,面向对象的编程语言lPython使用一种优雅的语法,可读性强lPython具有丰富的库,可以处理各种工作lPython支持类和多层继承等的面向对象编程技术lPython可运行在多种计算机平台和操作系统中,如Unix、Windows、MacOS、Ubuntu、OS/2等等为什么选择Python进行数据分析l在众多解释型语言中,Python最大的特点是拥有一个巨大而活跃的科学计算社区。进入21世纪以来,在行业应用和学术研究中采用python进行科学计算的势头
3、越来越猛。l近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任务的一大代替方案,结合其在通用编程方面的强大实力,完全可以只是用Python这一种语言去构建以数据为中心的应用程序。l作为一个科学计算平台,Python的成功源于能够轻松的集成C、C+以及Fortran代码。大部分现代计算机环境都利用了一些Fortran和C库来是西安线性代数、优选、积分、快速傅里叶变换以及其他诸如此类的算法。课程内容1.Python环境搭建环境搭建 1.1 python1.1 python版本选择版本选择 1.2 python 1.2 python 安装安装2.Python基础基础 2
4、.1 python2.1 python基础语法基础语法 2.2 python2.2 python数据类型数据类型 2.3 2.3 条件和循环条件和循环 2.4 Python 2.4 Python 函数函数 2.5 Python 2.5 Python 模块模块 2.6 Python2.6 Python文件文件I/OI/O3.Python库介绍库介绍 3.1 NumPy3.1 NumPy库介绍库介绍 3.2 Pandas 3.2 Pandas库介绍库介绍 4.数据处理与分析数据处理与分析 4.1 4.1 数据探索数据探索 4.2 4.2 数据预处理数据预处理 4.3 4.3 挖掘建模挖掘建模5.实
5、例分析实例分析 5.1 5.1 TitanicTitanic数据集分析数据集分析 5.2 5.2 餐饮客户价值分析餐饮客户价值分析1.1 Python环境搭建lPython2.X和Python3.XPython的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容,许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。大多数第三方库都正在努力地相容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写相容Python 3.0
6、版本的程式,然后使用Python 2.6,Python 2.7来执行。In summary:Python 2.x is legacy,Python 3.x is the present and future of the language1.2 Python安装lUnix&Linux平台安装Python打开WEB浏览器访问http:/www.python.org/download/选择适用于Unix/Linux的源码压缩包。下载及解压压缩包。如果你需要自定义一些选项修改Modules/Setup 执行./configure 脚本 make make installlWindow平台安装Pyth
7、on打开WEB浏览器访问http:/www.python.org/download/在下载列表中选择Window平台安装包,包格式为:python-XYZ.msi 文件,XYZ 为你要安装的版本号。要使用安装程序 python-XYZ.msi,Windows系统必须支持Microsoft Installer 2.0搭配使用。只要保存安装文件到本地计算机,然后运行它,看看你的机器支持MSI。Windows XP和更高版本已经有MSI,很多老机器也可以安装MSI。下载后,双击下载包,进入Python安装向导,安装非常简单,你只需要使用默认的设置一直点击下一步直到安装完成即可。集成开发环境选择lPy
8、CharmPyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS、Windows、Linux 系统。PyCharm 功能:调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制PyCharm 下载地址:https:/ Python基本语法lPython标识符在Python里,标识符由字母、数字、下划线组成。在Python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。Python中的标识符是区分大小写的。Python可以同一行显示多条语句,方法是用分号;分开。以下划线开头的标识符是有特殊意义的。以单下划线开
9、头_foo的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用fromxxximport*而导入以双下划线开头的_foo代表类的私有成员;以双下划线开头和结尾的_foo_代表Python里特殊方法专用的标识,如_init_()代表类的构造函数。lPython 保留保留字符字符下面的列表显示了在Python中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。所有Python的关键字只包含小写字母。andexecnotassertfinallyorbreakforpassclassfromprintcontinueglobalraisedefifreturndelimport
10、tryelifinwhileelseiswithexceptlambdayieldl行和缩进行和缩进学习Python与其他语言最大的区别就是,Python的代码块不使用大括号来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。以下代码会执行错误:lPython引号引号Python可以使用引号()、双引号()、三引号(或)来表示字符串,引号的开始与结束必须的相同类型的。其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释。lPython注释注释
11、python中单行注释采用#开头python中多行注释使用三个单引号()或三个双引号()。2.2 Python数据类型l标准数据类型标准数据类型Python定义了一些标准类型,用于存储各种类型的数据。Python有五个标准的数据类型:Numbers(数字)String(字符串)List(列表)Tuple(元组)Dictionary(字典)lPython数字数字数字数据类型用于存储数值。他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。当你指定一个值时,Number对象就会被创建。可以通过使用del语句删除单个或多个对象的引用。例如:Python支持四种不同的数字类型:int
12、(有符号整型)long(长整型也可以代表八进制和十六进制)float(浮点型)complex(复数)var1=1var2=10delvardelvar_a,var_blPython字符串字符串字符串或串(String)是由数字、字母、下划线组成的一串字符。python的字串列表有2种取值顺序:从左到右索引默认0开始的,最大范围是字符串长度少1从右到左索引默认-1开始的,最大范围是字符串开头如果你要实现从字符串中获取一段子字符串的话,可以使用变量头下标头下标:尾下标尾下标,就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾。s=a1a2an(n=0)S=
13、ilovepythons1:5的结果是love。lPython列表列表List(列表)是Python中使用最频繁的数据类型。列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。列表用标识,是python最通用的复合数据类型。列表中值的切割也可以用到变量头下标:尾下标,就可以截取相应的列表,从左到右索引默认0开始,从右到左索引默认-1开始,下标可以为空表示取到头或尾。加号+是列表连接运算符,星号*是重复操作。如下实例:lPython元组元组元组是另一个数据类型,类似于List(列表)。元组用()标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表
14、。lPython 字典字典字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。字典用标识。字典由索引(key)和它对应的值value组成。PythonPython数据类型数据类型数据类型数据类型转换转换转换转换函数描述int(x,base)将x转换为一个整数long(x,base)将x转换为一个长整数float(x)将x转换到一个浮点数complex(real,imag)创建一个复数str(x)将对象x转换为字符串repr(x)将对象x转换为表达式字
15、符串eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象tuple(s)将序列s转换为一个元组list(s)将序列s转换为一个列表set(s)转换为可变集合dict(d)创建一个字典。d必须是一个序列(key,value)元组。frozenset(s)转换为不可变集合chr(x)将一个整数转换为一个字符unichr(x)将一个整数转换为Unicode字符ord(x)将一个字符转换为它的整数值hex(x)将一个整数转换为一个十六进制字符串oct(x)将一个整数转换为一个八进制字符串2.3 条件和循环lPython条件语句Python条件语句是通过一条或多条语句的执行结果(
16、True或者False)来决定执行的代码块。Python程序语言指定任何非0和非空(null)值为true,0或者null为false。Python编程中if语句用于控制程序的执行,基本形式为lPython 循环语句循环语句循环语句允许我们执行一个语句或语句组多次。Python提供了for循环和while循环(在Python中没有do.while循环)循环类型描述while循环在给定的判断条件为true时执行循环体,否则退出循环体。for循环重复执行语句嵌套循环你可以在while循环体中嵌套for循环演示演示 Python while 语句执行过程语句执行过程2.4 Python 函数函数l定
17、义函数遵循的相关规则函数代码块以def关键词开头,后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。函数的第一行语句可以选择性地使用文档字符串用于存放函数说明。函数内容以冒号起始,并且缩进。return 表达式表达式结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。l函数语法l实例2.5 Python 模块模块l定义模块好处模块让你能够有逻辑地组织你的Python代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块能定义函数,类和变
18、量,模块里也能包含可执行的代码。Python模块(Module),是一个Python文件,以.py结尾,包含了Python对象定义和Python语句。l模块的引入模块定义好后,我们可以使用import语句来引入模块,语法如下:比如要引用模块math,就可以在文件最开始的地方用import math来引入。在调用math模块中的函数时,必须这样引用:import module1,module2,.moduleN模块名.函数名2.6 Python文件I/Ol打印到屏幕打印到屏幕最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式。此函数把你传递的表达式转换成一个字符串表达
19、式,并将结果写到标准输出如下:l读取键盘输入读取键盘输入Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘。二者区别raw_input会提示你输入任意字符串,然后在屏幕上显示相同的字符串。input函数和raw_input函数基本类似,但是input可以接收一个Python表达式作为输入,并将运算结果返回。raw_inputinput打开和关闭打开和关闭文件文件lopen 函数函数 你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。语法:file_name:file_name变量是一个包含了你要访问的文件名称
20、的字符串值。buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。Python提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用file对象做大部分的文件操作。file object=open(file_name,access_mode
21、,buffering)lclose()方法方法File对象的close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。当一个文件对象的引用被重新指定给另一个文件时,Python会关闭之前的文件。语法:fileObject.close();lwrite()方法方法 write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。write()方法不会在字符串的结尾添加换行符(n)。语法:fileObject.write(string);lread()方法方法 read()方法从一个打开的文件中读取一个字符串
22、。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。语法:fileObject.read(count);Python File(Python File(文件文件文件文件)方法方法方法方法序号方法及描述1file.close()关闭文件。关闭后文件不能再进行读写操作。2file.flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件,而不是被动的等待输出缓冲区写入。3file.fileno()返回一个整型的文件描述符(filedescriptorFD整型),可以用在如os模块的read方法等一些底层操作上。4file.isatty()如果文件连接到一个终端设备返
23、回True,否则返回False。5file.next()返回文件下一行。6file.read(size)从文件读取指定的字节数,如果未给定或为负则读取所有。7file.readline(size)读取整行,包括n字符。8file.readlines(sizehint)读取所有行并返回列表,若给定sizeint0,返回总和大约为sizeint字节的行,实际读取值可能比sizhint较大,因为需要填充缓冲区。9file.seek(offset,whence)设置文件当前位置10file.tell()返回文件当前位置。11file.truncate(size)截取文件,截取的字节通过size指定,默
24、认为当前文件位置。12file.write(str)将字符串写入文件,没有返回值。13file.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。python库利用python进行数据分析工具重要的Python库lNumPy:Numpy(NumericalPython的简称)是Python科学计算的基础包。快速高效的多维数组对象ndarray用于对数组执行元素级计算以及直接对数组执行数学运算的函数用于读写硬盘上基于数组的数据集的工具线性代数运算、傅里叶变换、以及随机数生成用于将C、C+、Fortran代码集成到Python的工具除了为P
25、ython提供快速的数组处理能力,NumPy在数据分析方面还作为在算法之间传递数据的容器 lPandas:pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数Pandas兼具NumPy高性能的数据计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。提供了复杂精细的索引功能、一边更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。Pandas提供了大量适用于金融数据的高性能时间序列功能和工具其他的Python库lMatplotlib:matplotlib是最流行的用于绘制数据图标的Python库,实现数据可视化。lIPython:Ipython是Pyth
26、on科学计算标准工具集的组成部分,它将其他所有的东西联系到了一起,为交互是和探索式计算提供了一个强健而高效的环境。lSciPy:SciPy是一组专门解决科学计算中各种标准问题域的包的集合,包括Scipy.integrate:数值积分例程和韦恩方程式求解器Scipy.linalg:扩展了由numpy.linalg提供的线性代数例程和矩阵分解功能Scipy.optimize:函数优化器(最小化器)以及根查找算法Scipy.signal:信号处理工具Scipy.sparse:稀疏矩阵和系数线性系统求解器Scipy.special:SPECFUN(这是一个实现了许多常用数学函数(如伽马函数)的Fort
27、ran库)的包装器Scipy.stats:标准连续的离散概率分布(如密度函数、采样器、连续分布函数等)、各种统计检验方法,以及更好的描述统计法。Scipy.weave:利用内敛C+代码加速数组计算的工具常用第三方Python库安装和导入l安装下载并安装Anaconda,它附带了预安装的库。AnacondaPython是完全免费、跨平台、企业级的Python发行大规模数据处理、预测分析和科学计算工具。PyCharm已经集成NumPy、Pandas、Matplotlib等常用库。l导入importnumpyasnpfromsocketimportgethostname,socket3.1 NumP
28、y库介绍lNumPy是高性能科学计算和数据分析的基础包。部分功能如下:ndarray,具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。用于对整组数据进行快速运算的标准数学函数(无需编写循环)。用于读写磁盘数据的工具以及用于操作内存映射文件的工具。线性代数、随机数生成以及傅里叶变换功能。用于集成C、C+、Fortran等语言编写的代码的工具。l首先要导入numpy库:importnumpyasnp生成函数作用np.array(x)np.array(x,dtype)将输入数据转化为一个ndarray将输入数据转化为一个类型为type的ndarraynp.asarray(array)将输入
29、数据转化为一个新的(copy)ndarraynp.ones(N)np.ones(N,dtype)np.ones_like(ndarray)生成一个N长度的一维全一ndarray生成一个N长度类型是dtype的一维全一ndarray生成一个形状与参数相同的全一ndarraynp.zeros(N)np.zeros(N,dtype)np.zeros_like(ndarray)生成一个N长度的一维全零ndarray生成一个N长度类型位dtype的一维全零ndarray类似np.ones_like(ndarray)np.empty(N)np.empty(N,dtype)np.empty(ndarray)
30、生成一个N长度的未初始化一维ndarray生成一个N长度类型是dtype的未初始化一维ndarray类似np.ones_like(ndarray)np.eye(N)np.identity(N)创建一个N*N的单位矩阵(对角线为1,其余为0)np.arange(num)np.arange(begin,end)np.arange(begin,end,step)生成一个从0到num-1步数为1的一维ndarray生成一个从begin到end-1步数为1的一维ndarray生成一个从begin到end-step的步数为step的一维ndarraynp.in1d(ndarray,x,y,.)检查ndar
31、ray中的元素是否等于x,y,.中的一个,返回bool数组矩阵函数说明np.diag(ndarray)np.diag(x,y,.)以一维数组的形式返回方阵的对角线(或非对角线)元素将一维数组转化为方阵(非对角线元素为0)np.dot(ndarray,ndarray)矩阵乘法np.trace(ndarray)计算对角线元素的和排序函数说明np.sort(ndarray)排序,返回副本np.unique(ndarray)返回ndarray中的元素,排除重复元素之后,并进行排序np.intersect1d(ndarray1,ndarray2)np.union1d(ndarray1,ndarray2)
32、np.setdiff1d(ndarray1,ndarray2)np.setxor1d(ndarray1,ndarray2)返回二者的交集并排序。返回二者的并集并排序。返回二者的差。返回二者的对称差一元计算函数说明np.abs(ndarray)np.fabs(ndarray)计算绝对值计算绝对值(非复数)np.mean(ndarray)求平均值np.sqrt(ndarray)计算x0.5np.square(ndarray)计算x2np.exp(ndarray)计算exlog、log10、log2、log1p计算自然对数、底为10的log、底为2的log、底为(1+x)的lognp.sign(nd
33、array)计算正负号:1(正)、0(0)、-1(负)np.ceil(ndarray)np.floor(ndarray)np.rint(ndarray)计算大于等于改值的最小整数计算小于等于该值的最大整数四舍五入到最近的整数,保留dtypenp.modf(ndarray)将数组的小数和整数部分以两个独立的数组方式返回np.isnan(ndarray)返回一个判断是否是NaN的bool型数组np.isfinite(ndarray)np.isinf(ndarray)返回一个判断是否是有穷(非inf,非NaN)的bool型数组返回一个判断是否是无穷的bool型数组cos、cosh、sin、sinh、
34、tan、tanh普通型和双曲型三角函数arccos、arccosh、arcsin、arcsinh、arctan、arctanh反三角函数和双曲型反三角函数np.logical_not(ndarray)计算各元素notx的真值,相当于-ndarray多元计算函数说明np.add(ndarray,ndarray)np.subtract(ndarray,ndarray)np.multiply(ndarray,ndarray)np.divide(ndarray,ndarray)np.floor_divide(ndarray,ndarray)np.power(ndarray,ndarray)np.mod
35、(ndarray,ndarray)相加相减乘法除法圆整除法(丢弃余数)次方求模np.maximum(ndarray,ndarray)np.fmax(ndarray,ndarray)np.minimun(ndarray,ndarray)np.fmin(ndarray,ndarray)求最大值求最大值(忽略NaN)求最小值求最小值(忽略NaN)np.copysign(ndarray,ndarray)将参数2中的符号赋予参数1np.greater(ndarray,ndarray)np.greater_equal(ndarray,ndarray)np.less(ndarray,ndarray)np.l
36、ess_equal(ndarray,ndarray)np.equal(ndarray,ndarray)np.not_equal(ndarray,ndarray)=乘客乘客ID Survived=是否生还是否生还 Pclass=乘客等级乘客等级(1/2/3等舱位等舱位)Name=乘客姓名乘客姓名 Sex=性别性别 Age=年龄年龄 SibSp=堂兄弟堂兄弟/妹个数妹个数 Parch=父母与小孩个父母与小孩个数数 Ticket=船票信息船票信息 Fare=票价票价 Cabin=客舱客舱 Embarked=登船登船港口港口1、导入数据&查看基本信息运行结果从数据集的基本信息可以看出,Age Cabi
37、n Embarked 是存在缺失值的,其中Cabin字段缺失值过多。常用的方法是去除和补齐,数值型的数据是可以根据统计学的方法或者机器学习的方法将其进行补齐的2、分析乘客分析乘客存活率与各单变量之间的关存活率与各单变量之间的关系系查看总存活率输出结果survived_rate=float(dfSurvived.sum()/dfSurvived.count()Print(survived_rate:,survived_rate)survived_rate:0.383838383838l舱位与存活率关系舱位与存活率关系l运行结果运行结果l性别性别与存活率关系与存活率关系l运行结果运行结果l年龄年龄
38、与存活率关系与存活率关系l运行结果运行结果3、分析乘客分析乘客存活率与复合变量之间的存活率与复合变量之间的关关系系根据上述变量分析,舱位和性别对存活率影响都很大,但哪一个占的比重更大呢?将舱位和性别整合为复合变量进行分析输出结果输出结果结果分析结果分析l船舱等级越高,存活率越高船舱等级越高,存活率越高l女性存活率高于男性女性存活率高于男性l部分餐饮客户的消费行为特征数据如下,根据数据将客户分成不同客户群,并评价这些客户群的价值5.2 餐饮客户价值分析lPython代码l运行结果l分群一结果分析分群一的R间隔相对较小,主要集中在030天,消费次数集中在1025次,消费金额在5002000l分群二结果分析分群二的R间隔分布在030天,消费次数集中在012次,消费金额在01800l分群三结果分析分群三的R间隔较大,间隔分布在3080天,消费次数集中在015次,消费金额在02000l对比分析分群1的时间间隔较短,消费次数多,而且消费金额较大,时高消费、高价值人群。分群二的时间间隔、消费次数和消费金额处于中等水平,代表着一般客户。分群三的时间间隔较长,消费次数较少,消费金额也不是特别高,是价值较低的客户群体。谢谢