Python与数据科学PPT完整全套教学课件_第1页
Python与数据科学PPT完整全套教学课件_第2页
Python与数据科学PPT完整全套教学课件_第3页
Python与数据科学PPT完整全套教学课件_第4页
Python与数据科学PPT完整全套教学课件_第5页
已阅读5页,还剩453页未读, 继续免费阅读

下载本文档

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

文档简介

一、基础编1、基础编.pptx2、分析编.pptx3、挖掘编.pptx4、提高编.pptx全套可编辑PPT课件本章主要内容

数据科学简介

python基础知识1

数据科学简介1.1什么是数据科学

近几年,“数据科学”的概念被媒体和大众炒得越来越热,但究竟什么是“数据科学”,不同的时期、不同的专家给出了不同的答案。Naur认为,数据科学是计算机科学的一个替代性称谓。Wu则认为,数据科学就是统计学。而Cleveland则认为数据科学是统计学加上它在计算技术方面的扩展。Conway则认为数据科学是计算机科学技术、数学与统计学知识、专业应用知识三者的交集。客观来讲,迄今数据科学还没有一个统一成熟的定义,ChikioHayashi、MikeLoukides等人曾先后撰文专门探究“什么是数据科学”,作为一门交叉科学,我们认为数据科学是一门包括了计算机技巧,数学和统计知识,实质性的专业知识的强调以数据为导向的分析与决策的科学。

事实上,数据科学是利用计算机的运算能力对数据进行处理,从数据中提取信息,进而形成“知识”的一门科学。它已经影响了计算机视觉、信号处理、自然语言识别等计算机分支,也已经在IT、金融、医学、自动驾驶等领域得到广泛使用,甚至在总统竞选方面都出现了数据科学的身影。

数据科学的学习是一项即有趣又艰辛的工作,Metamarket公司的CEOMikeDriscoll曾说过:研究数据科学,一方面需要如极客那般刻苦钻研,一方面需要像统计学家那样拥有完美的理论。数据科学家不仅仅是极客——极客只关心如何调试一行Bash脚本或Pig脚本,没人会在意非欧氏距离矩阵。数据科学家也不仅仅是统计学家——后者只关注如何完成一个理论的证明或构建出一个完美的模型,很少有人会使用R语言将数据文件读入系统,从而进行后续的分析。数据科学是一门关于数据的工程,它需要同时具备理论基础和工程经验,需要掌握各种工具的用法。1.2如何学习数据科学

数据科学集成了多种领域的不同元素,包括信号处理,数学,概率模型技术和理论,机器学习,计算机编程,统计学,数据工程,模式识别和学习,可视化,不确定性建模,数据仓库,以及从数据中析取规律和产品的高性能计算。而且,数据科学并不局限于大数据,但是数据量的扩大诚然使得数据科学的地位越发重要。所以,数据科学家,顾名思义就是数据科学的从业者。1.3什么是数据科学家

用ThomasH.Davenport(埃森哲战略变革研究院主任)和D.J.Patil(美国科学促进会科学与技术政策研究员,为美国国防部服务)的话来总结:数据科学家倾向于用探索数据的方式来看待周围的世界。(好奇心)把大量散乱的数据变成结构化的可供分析的数据,还要找出丰富的数据源,整合其他可能不完整的数据源,并清理成结果数据集。(问题分体整理能力)新的竞争环境中,挑战不断地变化,新数据不断地流入,数据科学家需要帮助决策者穿梭于各种分析,从临时数据分析到持续的数据交互分析。(快速学习能力)数据科学家会遇到技术瓶颈,但他们能够找到新颖的解决方案。(问题转化能力)当他们有所发现,便交流他们的发现,建议新的业务方向。(业务精通)他们很有创造力的展示视觉化的信息,也让找到的模式清晰而有说服力。(表现沟通能力)他们会把蕴含在数据中的规律建议给Boss,从而影响产品,流程和决策。(决策力)1.3什么是数据科学家1.4数据科学家需要掌握的技能

计算机科学

数学

统计学

机器学习

某一领域的专业知识

沟通和演讲的技巧

数据可视化2.1python基本概念1.5python与数据科学

随着NumPy、SciPy、matplotlib、ETS等众多程序库的开发,Python越来越适合于做科学计算。与科学计算领域最流行的商业软件MATLAB相比,Python是一门真正的通用程序设计语言,比MATLAB所采用的脚本语言的应用范围更广泛,有更多程序库的支持,适用于Windows和Linux等多种平台,完全免费并且开放源码。虽然MATLAB中的某些高级功能目前还无法替代,但是对于基础性、前瞻性的科研工作和应用系统的开发,完全可以用Python来完成。1.6数据科学领域常用的python包⑴Numpy⑵Scipy⑶Pandas⑷Matplotlib⑸Scikit-learn1.6数据科学领域常用的python包还有其它一些库,如:用于自然语言处理的Nltk,用于网站数据抓取的Scrappy,用于网络挖掘的Pattern,用于深度学习的Theano等。但是,如果你正开始学习Python,建议你首先熟悉这五个库,这些教程都非常适合初学者。Python有着像matlab一样强大数值计算工具包NumPy;有着绘图工具包matplotlib;有着科学计算工具包SciPy(基于Numpy和matplotlib的)。这三者为Python提供了像Matlab一样强大的矩阵控制能力,这是Python完胜Perl和Ruby的地方。对于数据科学领域而言,Python可能是最重要的语言了,如前文所述,它有着非常丰富的生态系统。Python直接能够处理数据,而Pandas几乎可以像SQL那样对数据进行控制。Matplotlib能够让你对数据和结果进行可视化,以便快速理解你的数据。Scikit-learn提供了机器学习算法支持,Theano提供了深度学习框架(还可以使用GPU加速)。2Python基础知识2.1python基本概念Python是一种脚本语言,编程语言有多种多样,但是有开源和闭源之分,Python就是一个开放核心源代码的编程语言,它开发代码的效率非常高,代码编写后非常易读,非常适合多人参与的项目。它支持面向对象的编程方式,同样也可以面对过程,非常灵活,它不但免费,而且可以任意Copy分发。Python是开源自由软件,容易获得,可以阅读它的源程序并修改它。同时,python是一种功能强大而完善的通用语言,也是一种直译式计算机程序设计语言。该语言借鉴了脚本和解释性语言的易用性,能够高效地完成各种复杂的高层次任务。本章接下来将简单介绍python的基础知识和特性。2.1python基本概念

(1)安装Python在开始学习python前,需要安装一些应用软件。下面简要介绍如何下载和安装Python。如果想直接跳到安装过程的介绍而不看详细的向导,可以直接访问网址:/download,下载并安装Python的最新版本。要在Windows系统中安装Python,请参照下面的步骤进行。

2.1python基本概念①打开Web浏览器,访问;②点击Download链接;③可以在这里看到几条链接,名字类似于Python2.7Windowsinstaller。点击Windowsinstaller链接并且下载安装文件;④将WindowsInstaller文件放在计算机的任何位置均可;⑤在Windows浏览器中双击运行所下载的文件,这样会开启一个Python的安装向导。该向导使用起来很简单,只需要接受默认设置,等到安装程序完成,就能使用Python了。

如果安装一切正常,应该能在Windows的开始菜单中找到新的程序。按照开始—>程序—>Python—>IDLE(PythonGUI)的步骤启动Python的开发环境,启动好的Python运行窗口如图2-1所示,>>>是pythonIDLE运行窗口的提示符,可以在后面输入Python命令。2.1python基本概念图2-1启动好的python运行窗口2.1python基本概念(2)

Python基础概念①常量

一个字面意义上的常量的例子是如键入文档的引述或关注点的摘要,可将文本框放置在文档中的任何位置。可使用“文本框工具”选项卡更改重要引述文本框的格式。同15、1.823、10.25E-3这样的数,或者如同"Howareyou"、"It'sasquare!"这样的字符串。它们具备字面的意义,按照它们的字面意义使用它们的值。数2总是代表它自己,而不会是别的什么东西——它是一个常量,因为不能改变它的值。因此,所有这些都被称为字面意义上的常量。Python中逻辑常量为true(真)和false(假)。2.1python基本概念②编码所谓文件编码指的是Python源码的编码格式,一般用notepad++能看到源码文件的编码。源码文件的格式会影响到在源码中定义的字符串,假设源码的编码格式为utf-8,那么下面定义的字符串的编码格式就是utf-8。源码的编码格式为utf-8,所以s1的编码格式为utf-8。若要想将格式转换为gb2312,则必须先解码(decode)成系统缺省编码,然后再编码(encode)成gb2312。2.1python基本概念③转义符

如果想要在一个字符串中包含一个单引号('),例如,这个字符串是What'syourname?。如果用'What'syourname?'来指示它,Python会弄不明白这个字符串从何处开始,何处结束,因为这里的’都被认为是字符串的标识符,但又不成对。所以,要指明单引号而不是字符串的标识,可以通过“\”来完成,如,'What\'syourname?'。第2个'前有一个“\”表示它就是单引号,而不是字符串的标识符。这里的“\”就是转义符。

另一个表示这种字符串的方法是"What'syourname?",即用双引号。类似地,要在双引号字符串中使用双引号本身的时候,也可以借助于转义符。另外,可以用转义符\\来指示反斜杠本身。2.1python基本概念转义字符描述\(在行尾时)续行符\\反斜杠符号\'单引号\"双引号\a响铃\b退格(Backspace)\e转义\000空\n换行\v纵向制表符\t横向制表符\r回车\f换页\oyyc\xyy十进制数yy代表的字符\other其它的字符以普通格式输出表2-1转义字符列表2.1python基本概念>>>print'I\'mok.'I'mok.>>>print'I\'mlearning\nPython.'I'mlearningPython.>>>print'\\\n\\'\\转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\,可以在Python的交互式命令行用print打印字符串:2.1python基本概念如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义:>>>print'\\\t\\'\\>>>printr'\\\t\\'\\\t\\2.1python基本概念④整数和浮点数在Python中包含有这两种类型的数(number):整数(int)、浮点数(float)。A整数Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。2.1python基本概念B浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。2.1python基本概念⑤字符串字符串是以''或""括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'mOK"包含的字符是I,',m,空格,O,K这6个字符。如果字符串内部既包含'又包含",可以用转义字符\来标识,比如:'I\'m\"OK\"!'表示的字符串内容是:I'm"OK"!

如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用'''...'''的格式表示多行内容:>>>print'\\\t\\'\\>>>printr'\\\t\\'\\\t\\2.1python基本概念⑥布尔值布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来:>>>TrueTrue>>>FalseFalse>>>3>2True>>>3>5False2.1python基本概念

布尔值可以用and、or和not运算。and运算是与运算,只有所有都为True,and运算结果才是True:>>>TrueandTrueTrue>>>TrueandFalseFalse>>>FalseandFalseFalseor运算是或运算,只要其中有一个为True,or运算结果就是True:>>>TrueorTrueTrue>>>TrueorFalseTrue>>>FalseorFalseFalse2.1python基本概念not运算是非运算,它是一个单目运算符,把True变成False,False变成True:>>>notTrueFalse>>>notFalseTrue布尔值经常用在条件判断中,比如:ifage>=18:print'adult'else:print'teenager'2.1python基本概念⑦空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,我们后面会继续讲到。2.1python基本概念⑧变量及其命名规范变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头,比如:a=1,变量a是一个整数。t_007='T007',变量t_007是一个字符串。Answer=True,变量Answer是一个布尔值True。在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如:a=123#a是整数printaa='ABC'#a变为字符串printa2.1python基本概念

变量是标识符的例子。标识符是用来标识某样东西的名字。变量外,使用标识符的例子还有函数名、类名等。在命名标识符的时候,要遵循下列规则:第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘_’)。其他部分可以由字母(大写或小写)、下划线(‘_’)或数字(0-9)组成。python标识符对大小写是敏感的。例如,name和Name被认为是两个标识符。变量名全部小写,由下划线连接各个单词,如:color=WHITE,this_is_a_variable=1。变量名不应带有类型信息,因为Python是动态类型语言。如iValue、names_list、dict_obj等都是不好的命名。2.1python基本概念⑨缩进空白在Python中非常重要。行首的空白称为缩进,它决定逻辑行的缩进层次,从而用来决定语句的分组。同一层次的语句必须有相同的缩进量(缩进几个字符)。每一组这样的语句称为一个块。语句块是进行处理的同一批语句。简言之,python是用连续相同层次缩进表示语句块的。例如for语句后相同缩进量相同的连续语句是其循环体。注意,不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。建议在每个缩进层次使用单个制表符或两个或四个空格。2.1python基本概念⑩注释在Python中,#号开始至行末的文字为注释。没有多行注释。同代码不一致的注释比没注释更差。当代码修改时,始终优先更新注释!注释应该是完整的句子,如果注释是一个短语或句子,首字母应该大写,除非他是一个以小写字母开头的标识符(永远不要修改标识符的大小写)。如果注释很短,最好省略末尾的句号。2.1python基本概念⑶输入和输出①输入

现在已经可以用print输出你想要的结果了。但是,如果要让用户从电脑输入一些字符怎么办?Python提供了一个raw_input,可以让用户输入字符串,并存放到一个变量里。比如输入用户的名字:>>>name=raw_input()Michael2.1python基本概念②输出用print加上字符串,就可以向屏幕上输出指定的文字。比如输出'hello,world',用代码实现如下:

print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出:>>>print'Thequickbrownfox','jumpsover','thelazydog'Thequickbrownfoxjumpsoverthelazydog>>>print'hello,world‘2.1python基本概念print会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串是这样拼起来的:2.1python基本概念⑷运算符及字符串的运算①运算符Python中包含数学中的多种运算法则,详细见下表:运算符名称说明例子+加两个对象相加3+5得到8。'a'+'b'得到'ab'。-减得到负数或是一个数减去另一个数-5.2得到一个负数。50-24得到26。*乘两个数相乘或是返回一个被重复若干次的字符串2*3得到6。'la'*3得到'lalala'。**幂返回x的y次幂3**4得到81(即3*3*3*3)/除x除以y4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333//取整除返回商的整数部分4//3.0得到1.0%取余返回除法的余数8%3得到2。-25.5%2.25得到1.5<

小于返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。5<3返回0(即False)而3<5返回1(即True)。比较可以被任意连接:3<5<7返回True。>

大于返回x是否大于y5>3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。<=小于等于返回x是否小于等于yx=3;y=6;x<=y返回True。>=大于等于返回x是否大于等于yx=4;y=3;x>=y返回True。==等于比较对象是否相等x=2;y=2;x==y返回True!=不等于比较两个对象是否不相等x=2;y=3;x!=y返回True。2.1python基本概念②运算符优先级表2-3给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合)。这意味着在一个表达式中,如果没有括号,Python会首先计算表中较下面的运算符,然后在再计算列在表上部的运算符。建议使用圆括号来对运算符和操作数进行分组,以便能够明确地指出运算的先后顺序,使程序尽可能地易读。运算符描述or布尔“或”and布尔“与”notx布尔“非”表2-3运算符优先级2.1python基本概念③计算顺序默认地,运算符优先级表决定了哪个运算符在别的运算符之前计算。具有相同优先级的运算符按照从左向右的顺序计算。通常可以使用圆括号改变计算次序,例如,在表达式12+3*4中乘法先进行运算,而表达式(12+3)*4中,加先进行运算。2.1python基本概念④字符串的运算字符串是程序中经常使用的元素,字符串的运算也很多,包括连接两个字符串,取一个字符串中的一部分,称为取子字符串,大小写转换,字符串与数值的转换等。A字符串连接python中可使用+进行字符串的连接操作。其实在实际应用中需要使用字符串连续相加是很少的,更多的操作是几个字符串的连接,当有这样的需求时,使用+操作符其实是最快的方式。

s0="Python"s1='C++'s2=s0+""+s1则S2的值为:'PythonC++'2.1python基本概念B取部分字符串

<字符串名>[<起始位置>:<终止位置>:<步长>]

得到从<起始位置>开始,间隔<步长>,到<终止位置>前一个字符结束的字符串。<起始位置>可省略,表示从起始位置为0。<终止位置>可省略,表示从终止位置为末尾。<步长>省略表示步长为1。例如:f='abcdefghijklmnopqrstuvwxyz'则f[5]的值为'f'f[0:10:2]的值为'acegi'f[0:10:2]的值为'acegi'f[0:10]的值为'abcdefghij'f[:10]的值为'abcdefghij'f[10:]的值为'klmnopqrstuvwxyz'len(f)#字符串的长度,本例结果为262.1python基本概念C其他的字符串处理函数其他的字符串处理函数还有:ord('a')#返回字符的ASCII的十进制值chr(97)#返回整数对应的字符D库中的字符串处理函数上面的字符串处理函数可以直接使用,而要使用字符串的大小写转换、查找等功能,需要引入string库,方法是在程序开头写“importstring”,例如:importstringf='abcdefghijklmnopqrstuvwxyz'#定义一个字符串f.upper()#转换为大写,不改变ff.find('f')#返回f的索引值(即在字符串中从0开始的序号)f.replace('b','boy')#返回b被boy替换的字符串,不改变f2.2序列和基本语句⑴列表列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型。列表中的每个元素都分配一个数字-它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。列表时对象的有序集合。列表的内容可以修改,列表的长度可变。列表的定义:<列表名称>[<列表项>]其中多个列表项用逗号隔开,它们的类型可以相同,也可以不同,还可以是其列表。例如:date=[2011,2,9,9,54]day=['sun','mon','tue','wed','thi','fri','sat']today=[2011,2,9,"wed"]data=[date,day]2.2序列和基本语句①创建一个列表只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

list1=['physics','chemistry',1997,2000];list2=[1,2,3,4,5];list3=["a","b","c","d"];与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。2.2序列和基本语句②访问列表中的值使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示:list1=['physics','chemistry',1997,2000];list2=[1,2,3,4,5,6,7];print"list1[0]:",list1[0]print"list2[1:5]:",list2[1:5]以上实例输出结果:list1[0]:physicslist2[1:5]:[2,3,4,5]2.2序列和基本语句③更新列表你可以对列表的数据项进行修改或更新,你也可以直接改变列表位置上的值,如下所示:Valueavailableatindex2:1997Newvalueavailableatindex2:2001list=['physics','chemistry',1997,2000];print"Valueavailableatindex2:"printlist[2];list[2]=2001;print"Newvalueavailableatindex2:"printlist[2];2.2序列和基本语句⑤Python列表脚本操作符列表对+和*的操作符与字符串相似。+号用于组合列表,*号用于重复列表。如下:

表2-4:Python列表脚本操作符Python表达式结果描述len([1,2,3])3长度[1,2,3]+[4,5,6][1,2,3,4,5,6]组合['Hi!']*4['Hi!','Hi!','Hi!','Hi!']重复3in[1,2,3]True元素是否存在于列表中2.2序列和基本语句⑥Python列表截取Python的列表截取与字符串操作类型,如下所示:列表为:L=['a','b','c'],进行截取操作:Python表达式结果描述L[2]'c'读取列表中第三个元素L[-2]'b'读取列表中倒数第二个元素L[1:]['b','c']从第二个元素开始截取列表2.2序列和基本语句函数名描述cmp(list1,list2)比较两个列表的元素len(list)列表元素个数max(list)返回列表元素最大值min(list)返回列表元素最小值list(seq)将元组转换为列表⑦Python列表操作的函数和方法列表操作包含以下函数:2.2序列和基本语句列表操作包含以下方法:列表操作方法描述list.append(obj)在列表末尾添加新的对象list.count(obj)统计某个元素在列表中出现的次数list.extend(seq)在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)list.index(obj)从列表中找出某个值第一个匹配项的索引位置list.insert(index,obj)将对象插入列表list.pop(obj=list[-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值list.remove(obj)移除列表中某个值的第一个匹配项list.reverse()反向列表中元素list.sort([func])对原列表进行排序2.2序列和基本语句#useoftuple#filename:tuple.pygarden=("BirdofParadise","rose","tulip","lotus","olive","Sunflower")print('Numberofflowersinthegardenis',len(garden))i=2;print('flower',i,'is',garden[i-1])new_garden=('Phlox','PeachBlossom',garden)i=1;print('flower',i,'is',garden[i-1])C:\Python2.71>pythontuple.pyNumberofflowersinthegardenis6flower2isroseflower1isBirdofParadise(2)元组元组和列表十分类似,只不过元组和字符串一样是不可变的,即不能修改元组。元组通过圆括号中用逗号分割的项目定义。当一组数据,只使用,不修改时使用元组。元组的使用与列表相同,只是不能修改、删除、增加其元素。例如:

运行结果如下:2.2序列和基本语句运算格式/举例说明/结果T1()空元组T2=(2011,)有一项的元组T3=(2011,2,9,19,54)5项,整数元组,索引号0-4T4=('sun',('mon','tue','wed'))嵌套的元组T3[i],T4[i][j]索引,T3[1]的值为2,T4[1][1]的值为'tue'T3[i:j]分片,取i到j-1的项Len(T3)求元组的长度T3+T4合并T3*3重复,T3重复3次forxinT3循环,x取T3中的每个成员执行循环体19inT319是否是L2的成员元组的运算如表2-8所示:元组与列表的最大不同:一是定义时用一对圆括号,二是内容不能修改。

2.2序列和基本语句⑶字典字典是无序的对象的集合,通过键进行操作。类似于通讯录,通过姓名来查找电话、地址等信息,则姓名就是键。字典要求一定要没有同名的人。

字典的定义为:<字典名>={键1:值2,键2:值2,键3:值3,…}其中,键1,键2,键3不相同,值可以是任何类型的数据,可以是列表或元组。注意,字典定义中使用的是大括号,项通过逗号隔开,每个项有键部分和值部分,键和值之间用冒号隔开。只可使用简单的对象作为键,而且不能改变,但可以用不可变或可变的对象作为字典的值。例如:2.2序列和基本语句#useofdictionaries#filename:dict.pyaddress1={'zhang':'larry@',

'wang':'wang@','lily':'lily@',

'sam':'sam@'}print('mailofzhang',address1['zhang'])address2={'zhang':['larry@','shaanxi'],

'wang':['wang@','beijing'],

'lily':['lily@','shanghai'],'sam':['sam@','hubei']}print('mailoflily',address2['lily'][0])print('provinceoflily',address2['lily'][0])运行结果如下:C:\Python2.7>pythondict.pymailofzhanglarry@mailoflilylily@provinceoflilylily@2.2序列和基本语句字典的操作如下:运算格式/举例说明/结果d1={}空字典d2={'class':'jianhuan','year':'2011'}有两项的字典d3={'xjtu':{'class':'huagong','year':'2011'}}字典的嵌套d2['class'],d3['xjtu']['class']按键使用字典d2.keys()获得键的列表d2.values()获得值的列表len(d2)求字典的长度d2['year']=2020添加或改变字典的值deld2['year']删除键2.2序列和基本语句①创建字典

Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。

可以创建词典:dict1={'abc':456}

dict2={'abc':123,98.6:37}每个键与值用冒号隔开(:),每对用逗号,每对用逗号分割,整体放在花括号中({})。

键必须独一无二,但值则不必。值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。2.2序列和基本语句②访问字典的值

把相应的键放入熟悉的方括弧,如下实例:dict={'Name':'Zara','Age':7,'Class':'First'}

print"dict['Name']:",dict['Name']

print"dict['Age']:",dict['Age']2.2序列和基本语句③修改字典

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:

dict={'Name':'Zara','Age':7,'Class':'First'}

dict['Age']=8;#updateexistingentry

dict['School']="DPSSchool";#Addnewentry

print"dict['Age']:",dict['Age']

print"dict['School']:",dict['School']2.2序列和基本语句④删除字典元素能删单一的元素也能清空字典,清空只需一项操作。显示删除一个字典用del命令,如下实例:dict={'Name':'Zara','Age':7,'Class':'First'}

deldict['Name'];#删除键是'Name'的条目

dict.clear()

#清空词典所有条目

deldict

#删除词典

print"dict['Age']:",dict['Age']

print"dict['School']:",dict['School']

2.2序列和基本语句⑤字典键的特性

字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。但是两个重要的点需要记住:

A不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下所示:

dict={'Name':'Zara','Age':7,'Name':'Manni'}

print"dict['Name']:",dict['Name']以上实例输出结果:

dict['Name']:

ManniB键必须不可变,所以可以用数,字符串或元组充当,所以用列表就不行,如下实例:dict={['Name']:'Zara','Age':7}

print"dict['Name']:",dict['Name']以上实例输出结果:Traceback(mostrecentcalllast):

File"test.py",line3,in<module>

dict={['Name']:'Zara','Age':7};

TypeError:listobjectsareunhashable2.2序列和基本语句⑥字典内置函数和方法字典操内置函数描述cmp(dict1,dict2)比较两个字典元素len(dict)计算字典元素个数,即键的总数str(dict)输出字典可打印的字符串表示type(variable)返回输入的变量类型,如果变量是字典就返回字典类型字典内置方法描述radiansdict.clear()删除字典内所有元素radiansdict.copy()返回一个字典的浅复制radiansdict.fromkeys创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值radiansdict.get(key,default=None)返回指定键的值,若值不在字典返回default值radiansdict.has_key(key)如果键在字典dict里返回true,否则返回falseradiansdict.items()以列表返回可遍历的(键,值)元组数组radiansdict.keys()以列表返回一个字典所有的键radiansdict.setdefault(key,default=None)和get()类似,但如果键不已经存在于字典中,将会添加键并将值设为defaultradiansdict.update(dict2)把字典dict2的键/值对更新到dict里radiansdict.values()以列表返回字典中的所有值2.2序列和基本语句字典的操作如下:运算格式/举例说明/结果d1={}空字典d2={'class':'jianhuan','year':'2011'}有两项的字典d3={'xjtu':{'class':'huagong','year':'2011'}}字典的嵌套d2['class'],d3['xjtu']['class']按键使用字典d2.keys()获得键的列表d2.values()获得值的列表len(d2)求字典的长度d2['year']=2020添加或改变字典的值deld2['year']删除键2.2序列和基本语句⑷基本语句①条件选择语句Python的if语句的功能跟其他语言的非常相似,都是用来判定给出的条件是否满足,然后根据判断的结果(即真或假)决定是否执行给出的操作。If语句是一种单选结构,它选择的是做与不做。它是由三部分组成:关键字if本身、测试条件真假的表达式(我们简称为条件表达式)和表达式结果为真(即表达式的值为非零)时要执行的代码。If语句的语法形式如下所示:if语句用来检验一个条件,如果<条件>为真,我们运行一块语句(称为if-块),否则我们处理另外一块语句(称为else-块)。else从句是可选的。

具体格式如下:if<条件>:<if块>else:<else块>2.2序列和基本语句②while循环语句while语句的功能是,当给定的条件表达式为真时,重复执行循环体(即内嵌的语句),直到条件为假时才退出循环,并执行循环体后面的语句。while语句的语法形式如下所示:while<条件>:<循环体>举例:whilei<10:printii=i+1在循环中,<条件>后有一个冒号,<循环体>要使用缩进的格式。While语句的功能是党<条件>成立(为真)时,执行循环体,然后再次检验<条件>,如果成立,再次执行循环体,直到<条件>不再成立,然后执行后面的程序。2.2序列和基本语句③for循环for是用来循环的,是从某个对象那里依次将元素读取出来。for<循环变量>in<序列>:<循环体>2.2序列和基本语句names=['Michael','Bob','Tracy']scores=[95,75,85]>>>d={'Michael':95,'Bob':75,'Tracy':85}>>>d['Michael']95④使用dict和set首先我们来看一下dict,Python内置了字典:dict的支持,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:2.2序列和基本语句把数据放入dict的方法,除了初始化时指定外,还可以通过key放入::>>>d['Adam']=67>>>d['Adam']67由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:>>>d['Jack']=90>>>d['Jack']90如果key不存在,dict就会报错:>>>d['Thomas']Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>KeyError:'Thomas'2.2序列和基本语句要避免key不存在的错误,有两种办法:A通过in判断key是否存在:>>>'Thomas'indFalseB通过dict提供的get方法如果key不存在,可以返回None,或者自己指定的value:>>>d.get('Thomas')>>>d.get('Thomas',-1)-12.2序列和基本语句要删除一个key,用pop(key)方法,对应的value也会从dict中删除:>>>d.pop('Bob')75>>>d{'Michael':95,'Tracy':85}

2.2序列和基本语句dict内部存放的顺序和key放入的顺序是没有关系的,和list比较,dict有以下几个特点:A查找和插入的速度极快,不会随着key的增加而增加;B需要占用大量的内存,内存浪费多。C查找和插入的时间随着元素的增加而增加;D占用空间小,浪费内存很少。2.2序列和基本语句Set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。要创建一个set,需要提供一个list作为输入集合:>>>s=set([1,2,3])>>>sset([1,2,3])重复元素在set中自动被过滤:>>>s=set([1,1,2,2,3,3])>>>sset([1,2,3])2.2序列和基本语句通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果>>>s.add(4)>>>sset([1,2,3,4])>>>s.add(4)>>>sset([1,2,3,4])通过remove(key)方法可以删除元素:>>>s.remove(4)>>>sset([1,2,3])2.3函数和模块很多时候,Python程序中的语句都会组织成函数的形式。函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字,这样,我们就可以通过函数名在程序的不同地方多次执行(这通常叫做函数调用),却不需要在所有地方都重复编写这些语句。另外,每次使用函数时可以提供不同的参数作为输入,以便对不同的数据进行处理;函数处理后,还可以将相应的结果反馈给我们。2.3函数和模块⑴函数①定义函数当我们自己定义一个函数时,通常使用def语句,其语法形式如下所示:def<函数名>(<形参表>):<函数体>其中,函数名可以是任何有效的Python标识符;参数列表是调用该函数时传递给它的值,可以由多个、一个或零个参数组成,当有多个参数时各个参数由逗号分隔;圆括号是必不可少的,即使没有参数也不能没有它;函数体是函数每次被调用时执行的代码,可以由一个语句或多个语句组成,函数体一定要注意缩进。此外,有时候会忘记圆括号后面的冒号,这会导致语法错误。2.3函数和模块⑴函数①定义函数当我们自己定义一个函数时,通常使用def语句,其语法形式如下所示:def<函数名>(<形参表>):<函数体>其中,函数名可以是任何有效的Python标识符;参数列表是调用该函数时传递给它的值,可以由多个、一个或零个参数组成,当有多个参数时各个参数由逗号分隔;圆括号是必不可少的,即使没有参数也不能没有它;函数体是函数每次被调用时执行的代码,可以由一个语句或多个语句组成,函数体一定要注意缩进。此外,有时候会忘记圆括号后面的冒号,这会导致语法错误。2.3函数和模块②调用函数Python内置了很多有用的函数,我们可以直接调用。要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。可以直接从Python的官方网站查看文档,也可以在交互式命令行通过help(abs)查看abs函数的帮助信息。调用abs函数:>>>abs(100)100>>>abs(-20)20>>>abs(12.34)12.342.3函数和模块③数据类型转换Python内置的常用函数还包括数据类型转换函数,比如int()函数可以把其他数据类型转换为整数:>>>int('123')123>>>int(12.34)12>>>float('12.34')12.34>>>str(1.23)'1.23'>>>unicode(100)u'100'>>>bool(1)True>>>bool('')False2.3函数和模块④自定义函数在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。我们以自定义一个求绝对值的my_abs函数为例:defmy_abs(x):ifx>=0:returnxelse:return-x

2.3函数和模块A空函数如果想定义一个什么事也不做的空函数,可以用pass语句:defnop():passB参数检查调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError:>>>my_abs(1,2)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:my_abs()takesexactly1argument(2given)2.3函数和模块C返回多个值函数可以返回多个值,比如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的新的坐标:importmathdefmove(x,y,step,angle=0):nx=x+step*math.cos(angle)ny=y-step*math.sin(angle)returnnx,ny2.3函数和模块⑤函数的参数

定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。2.3函数和模块默认参数可以简化函数的调用。设置默认参数时,有几点要注意:(1)必选参数在前,默认参数在后,否则Python的解释器会报错。(2)在设置默认参数时,当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。使用默认参数最大的好处是能降低调用函数的难度。举个例子,假设要在屏幕上画一个圆,由于画圆只需要确定圆心坐标(x,y)和半径r就可以了,所以,我们假设可以这样调用该函数:>>>x,y=0,0>>>r=20>>>draw_circle(x,y,r)2.3函数和模块⑥常用函数type(<表达式>)获得表达式的数据类型int(‘34’)转换为整数int('1101',2)将二进制字符串转换为十进制整数float(’43.4’)转换为浮点数str(34)转换为字符串bin(43)将十进制整数转换为二进制数math..log10(10)以10为底的对数math.sin(math.pi/2)正弦函数,单位弧度math.pi常数pi,3.141592653589793math.exp(8)e的8次幂math.pow(32,4)32的4次幂math.sqrt(2)2开平方math.cos(math.pi/3)余弦函数math.fabs(-32.90)求绝对值math.factorial(n)求n的阶乘2.3函数和模块⑦缺省参数

在定义函数时,我们可以用赋值符号给某些形参指定默认值,这样当调用该函数的时候,如果调用方没有为该参数提供值的话,则使用默认值;如果调用该函数的时候为该参数提供了值的话,则使用调用方提供的值——像这样的参数我们称之为缺省参数。2.3函数和模块⑧局部变量和全局变量

在Python中的任何变量都有其特定的作用域,比如在一个函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量;比如在一个文件顶部定义的变量可以供该文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量。

上面是从空间的角度来考察变量的局部性和全局性,如果从时间的角度来看,不妨简单地认为在程序运行的整个过程中,全局变量一直占据着内存,并且它的值可以供所有函数访问;而局部变量则是只有在其所在函数被调用时才给它分配内存,当函数返回时,其所占内存就会被释放,所以它只能供其所在的函数所访问——换句话说,当某个函数退出时,其局部变量原先所占的内存将被分配给其它函数的局部变量。2.3函数和模块⑵模块

模块基是一个包含了已定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。在python里模块有另外

一个含义就是名字空间的意思,名字空间从字面意思理解就是存放名字的地方,我们把模块里面定义的方法或者变量的话,当做模块的属性,在其他的地方调用模块的属性或者方法的话,可以直接通过模块名.属性名或者方法名来调用。2.3函数和模块模块有下面的几种特性:

A模块语句在第一次导入的时候就执行了。在代码的任何地方导入一个模块,它都会生成一个空对象,然后从头到尾执行模块里面的语句。比如你在模块里面定义了:def

语句,或者赋值语句,系统都会先生成好模块对象的属性,然后存储到模块的名字空间里。

B如果你想查看模块里面的属性的话,可以通过dir()方法。

C模块里的变量和函数里的变量不太一样,模块里的变量是在模块第一次导入以后就可以使用了,而函数里的变量是在函数运行的时候才能够使用。2.3函数和模块②模块的调用python有三种调用模块的方法。AimportmodnameBfrommodnameimportfuncnamefrommodnameimportfa,fb,fc

或者

frommodnameimport*

C内建函数__import__()2.3函数和模块③作用域Python是静态作用域语言,尽管它自身是一个动态语言。也就是说,在Python中变量的作用域是由它在源代码中的位置决定的,这与C有些相似,但是Python与C在作用域方面的差异还是非常明显的。2.3函数和模块④安装第三方模块

在Python中,安装第三方模块,是通过setuptools这个工具完成的。Python有两个封装了setuptools的包管理工具:easy_install和pip。目前官方推荐使用pip。ApipinstallBeasy_installClicktoeditcompanyslogan.ThankYou!二、分析编本编主要内容Python数据获取与数据预处理

利用Python进行数据分析3Python数据获取与数据预处理(1)从键盘、文本文件、Office文件获取数据每种语言获取数据最基本的方式往往都是通过用户输入从键盘获取,Python亦不例外。这里我们将介绍两个很有用的内置函数即raw_input和input。①从键盘获取数据A用raw_input函数获取数据3.1Python数据获取>>>line=raw_input()GalapagosIsland>>>printlineGalapagosIsland>>>line=raw_input()123>>>printline123如果您希望用户输入一个数字,那么就必须用int或float将得到的字符串转换为所需的类型:>>>value=raw_input()123>>>value=int(value)>>>printvalue*22463.1Python数据获取而含有字母或下划线的字符串是无法用int或float转换成数字类型的:>>>value=float(raw_input())Galapagos

Traceback(mostrecentcalllast):File"<pyshell#13>",line1,in<module>value=float(raw_input())ValueError:couldnotconvertstringtofloat:Galapagos3.1Python数据获取此外,raw_input还可以接收一个字符串参数,该参数将用于对用户进行提示:>>>name=raw_input('Pleaseenteraname:')Pleaseenteraname:Darwin>>>printnameDarwin3.1Python数据获取B用input函数获取数据raw_input是把读入的数据转换成字符串;而input是把读入的数据默认为Python表达式。其实,这两个函数均能接收字符串,但raw_input直接读取控制台的输入(任何类型的输入它都可以接收)。而对于input,直接输入字符串会引发报错。3.1Python数据获取>>>line=input()GalapagosIslandTraceback(mostrecentcalllast):File"<pyshell#18>",line1,in<module>line=input()

File"<string>",line1GalapagosIslandSyntaxError:unexpectedEOFwhileparsing>>>line=input()'GalapagosIsland'>>>printlineGalapagosIsland3.1Python数据获取A用open函数获取文件内容为了从一个文件中读取数据,我们必须先将其打开(利用Python的内置函数open):代码如下:其中:第一个参数是文件名称,包括路径;第二个参数是打开的模式mode'r':只读(缺省。如果文件不存在,则抛出错误)'w':只写(如果文件不存在,则自动创建文件)'a':附加到文件末尾'r+':读写如果需要以二进制方式打开文件,需要在mode后面加上字符"b",比如"rb""wb"等②从文本文件获取数据f=open("d:\test.txt","r")3.1Python数据获取读取数据:f.read(size)参数size表示读取的数量,可以省略。如果省略size参数,则表示读取文件所有内容。f.readline()读取文件一行的内容f.readlines()读取所有的行到数组里面[line1,line2,...lineN]。在避免将所有文件内容加载到内存中,这种方法常常使用,便于提高效率。3.1Python数据获取示例:上面的代码则会把第一行的数据打印在编译器中,如果想要打印出所有的数据,则需要使用readlines()。3.1Python数据获取file=open('C:\Test\data0102.txt','r')line=file.readline()printlinefile.close()file=open('C:\Test\data0102.txt','r')lines=file.readlines()forlineinlines:line=line.strip()printlinefile.close()在执行完毕之后,为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用的文件对象占用内存。除非要读取的文件非常巨大,不然一次性读出所有内容放进内存并进一步处理是最快和最方便的办法。3.1Python数据获取B用linecache模块获取指定行的内容与open函数不同,使用linecache模块可以进行缓存优化,日常编程中涉及读取大文件,可以提高读取文件的效率。如果我们要从一个文件中读取其第2行数据:引入linecache模块,该模块允许使用getline(filename,lineno)函数从任意文件里得到任意的行;使用getlines(filename)函数从文件中得到全部内容,输出为列表格式。使用clearcache()函数清除缓存。3.1Python数据获取importlinecacheprintlinecache.getline('C:\Test\data0102.txt',2)③从Microsoft软件的文档中获取数据A从MicrosoftWord获取数据要先下载安装win32com包,下载地址:/projects/pywin32/files/;其次,加载包,创建对象实例;再次,打开并输出Word文件(例如Word文件010301.doc);最后,关闭文档。代码如下:fromwin32comimportclient#从win32com包引入client包word=client.Dispatch('Word.Application')#创建对象实例doc=word.Documents.Open(r'C:\Test\data010301.doc')#打开printdoc.content#打印doc.Close()#关闭word.Quit()3.1Python数据获取B从MicrosoftExcel获取数据从MicrosoftExcel获取数据,有多种途径和方式,我们将分别介绍以下4种:1、查看所有

温馨提示

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

评论

0/150

提交评论