![Python数据挖掘与机器学习第2版 课件 魏伟一 第1章 数据挖掘概论;第2章 Python数据分析与挖掘基础;第3章 认识数据_第1页](http://file4.renrendoc.com/view9/M00/11/14/wKhkGWcwloeAdJGQAAJICDrioEM847.jpg)
![Python数据挖掘与机器学习第2版 课件 魏伟一 第1章 数据挖掘概论;第2章 Python数据分析与挖掘基础;第3章 认识数据_第2页](http://file4.renrendoc.com/view9/M00/11/14/wKhkGWcwloeAdJGQAAJICDrioEM8472.jpg)
![Python数据挖掘与机器学习第2版 课件 魏伟一 第1章 数据挖掘概论;第2章 Python数据分析与挖掘基础;第3章 认识数据_第3页](http://file4.renrendoc.com/view9/M00/11/14/wKhkGWcwloeAdJGQAAJICDrioEM8473.jpg)
![Python数据挖掘与机器学习第2版 课件 魏伟一 第1章 数据挖掘概论;第2章 Python数据分析与挖掘基础;第3章 认识数据_第4页](http://file4.renrendoc.com/view9/M00/11/14/wKhkGWcwloeAdJGQAAJICDrioEM8474.jpg)
![Python数据挖掘与机器学习第2版 课件 魏伟一 第1章 数据挖掘概论;第2章 Python数据分析与挖掘基础;第3章 认识数据_第5页](http://file4.renrendoc.com/view9/M00/11/14/wKhkGWcwloeAdJGQAAJICDrioEM8475.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据挖掘与机器学习理解数据分析与挖掘的基本概念和方法、熟练掌握数据挖掘业务流程和典型应用场景,主要包括认识数据、数据预处理、数据挖掘技术等。掌握数据分析与挖掘中用到的典型机器学习算法,包括回归分析方法、关联规则挖掘、分类和聚类中的典型算法原理和应用。掌握利用Python进行数据分析与挖掘的方法,重点阐述典型数据挖掘方法利用scikit-learn实现的过程。熟悉Python数据分析常用的Numpy、Pandas和Matplotlib,熟练使用JupyterNotebook进行数据分析与挖掘。数据挖掘与机器学习第一章概论本章内容数据挖掘简介数据分析与数据挖掘数据挖掘的主要任务数据挖掘的数据源数据挖掘存在的主要问题数据挖掘工具Python数据挖掘常用类库10十一月20243数据分析与挖掘从文明之初的“结绳计数”到文字发明后的“文以载道”,再到近代科学的“数据建模”,数据一致伴随着人类社会的成长变迁。然而,直到以电子计算机为代表的现代信息技术出现后,才使人类掌握数据、处理数据的能力得到空前高速的发展。信息技术及其在社会经济生活方方面面的应用(即信息化)推动数据(信息)称为继物质、能源之后的第三大战略资源。大数据(存储管理、分析、处理)知识是人类对客观世界的观察和了解,是人类对客观世界是什么、为什么、应该怎么做的认知,知识推动人类的进步和发展。人类所作出的正确判断和决策,以及采取正确的行动都是基于智慧和知识。数据是反映客观事物的数字、词语、声音和图像等,是可以进行计算加工的“原料”。数据是对客观事物的数量、属性、位置及其相互关系的抽象表示,适合于保存、传递和处理。TheExplosiveGrowthofData-------fromterabytestopetabytes数据分析与挖掘简介数据分析与挖掘简介自动数据收集工具和成熟的数据库技术使得大量的数据被收集,存储在数据库、数据仓库或其他信息库中以待分析。主要的数据来源与领域:Web,e-commerce,transactions,stocks,…Science:Remotesensing,bioinformatics,scientificsimulation,…Societyandeveryone:news,YouTube62016年每分钟产生的海量数据“数据丰富,信息贫乏”数据分析与挖掘简介面对大量的数据,迫使人们不断寻找新的工具,对规律进行探索,为决策提供有价值的信息。数据挖掘有助于发现趋势,揭示已知的事实,预测未知的结果。人们迫切希望能够对海量数据进行分析挖掘,发现并提取隐含在数据中的有价值信息。10十一月20247WhyDataMining?Wearedrowningindata,butstarvingforknowledge!
“Necessityisthemotherofinvention”解决办法:数据仓库(DataWarehouse)和在线分析处理(OLAP)数据挖掘—在大量数据中发现有用的知识、模式、规律、约束等数据挖掘简介数据挖掘(DataMining)是人工智能和数据库领域研究的热点问题,是指从大量有噪声的、不完全的、模糊和随机的数据中,提取出隐含在其中的、事先不知道但具有潜在利用价值的信息的过程。这个定义包括几层含义:数据必须是真实的、大量的并且含有噪声的;发现的是用户感兴趣的可以接受、理解和运用的知识;仅支持特定的问题,并不要求放之四海而皆准的知识。与数据挖掘的含义类似的还有一些术语如从数据中心挖掘知识、知识提取、数据/模式分析等。10十一月20249WhatIsDataMining?Datamining(knowledgediscoveryfromdata)数据挖掘--从大量数据中寻找其规律的技术,是统计学、数据库技术和人工智能技术的综合。数据挖掘是从数据中自动地抽取模式、关联、变化、异常和有意义的结构;数据挖掘大部分的价值在于利用数据挖掘技术改善预测模型。AlternativenamesKnowledgediscovery(mining)indatabases(KDD),knowledgeextraction,data/patternanalysis,dataarcheology,datadredging,informationharvesting,businessintelligence,etc.并非所有东西都是数据挖掘查询、专家系统、小型的科学计算、统计10数据挖掘简介ThisisaviewfromtypicalmachinelearningandstatisticscommunitiesInputDataPatternInformationKnowledgeDataMiningDataPre-ProcessingPost-ProcessingDataintegrationNormalizationFeatureselectionDimensionreductionPatterndiscoveryAssociation&correlationClassificationClusteringOutlieranalysis…………PatternevaluationPatternselectionPatterninterpretationPatternvisualization数据分析与数据挖掘数据分析(DataAnalysis,DA)是数学与计算机科学相结合的产物,是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论,对数据加以详细研究和概括总结的过程。数据分析和数据挖掘都是基于搜集来的数据,应用数学、统计和计算机等技术抽取出数据中的有用信息,进而为决策提供依据和指导方向。数据分析有广义与狭义之分。广义的数据分析包括了狭义数据分析和数据挖掘。10十一月202412数据分析与数据挖掘10十一月202413数据分析与数据挖掘10十一月202414差异数据分析数据挖掘定义描述和探索性分析,评估现状和修正不足技术性的“采矿”过程,发现未知的模式和规律侧重点实际的业务知识挖掘技术的落地,完成“采矿”过程技能统计学、数据库、Excel和可视化等过硬的数学功底和编程技术结果需结合业务知识解读统计结果模型或规则数据分析与数据挖掘对比数据挖掘的主要任务数据挖掘是通过分析每个数据,从大量数据中寻找其规律的技术。10十一月202415数据挖掘:知识挖掘的核心DataCleaningDataIntegrationDataWarehouseKnowledgeTask-relevantDataSelectionDataMiningPatternEvaluation数据挖掘的主要任务数据挖掘的主要任务有关联分析、聚类分析、分类分析、异常分析、特异群组分析和演变分析等。(1)关联规则挖掘由RakeshApwal等人首先提出。两个或两个以上变量的取值之间存在的规律称为关联。(2)预测建模是指根据已知的数据构建出一个数据模型,然后应用这个模型对未知数据的所属分类进行预测,主要包括分类和回归两类问题。(3)聚类是把数据按照相似性归纳成若干类别,使得同一类中的数据彼此相似,不同类中的数据尽量相异。(4)离群点指全局或局部范围内偏离一般水平的观测对象。离群点等异常值会对数据分析与挖掘产生不良影响。10十一月202416数据挖掘的数据源作为一门通用的技术,只要数据对目标应用是有用的,数据挖掘就可以用于任何类型的数据。对于挖掘的应用,数据的基本形式主要有数据库数据、数据仓库、事务数据库和其它数据源。(1)数据库系统是由一组内部相关的数据和用于管理这些数据的程序组成,通过软件程序对数据进行高效的存储和管理,并发、共享或分布式访问,并保证数据的完整性和安全性。10十一月202417数据挖掘的数据源(2)数据仓库是依照分析需求、分析维度和分析指标进行设计的,它是数据库的一种概念上的升级。(3)事务数据库的每个记录代表一个事务,例如一个航班的订票、顾客的一个交易等。(4)其它类型数据时间相关的数据和序列数据,数据流,空间数据,Web数据(HTML等)等。10十一月202418数据挖掘使用的技术作为一个应用驱动的领域,数据挖掘吸纳了诸如统计学、机器学习、数据库和数据仓库、数据可视化、算法、高性能计算和许多应用领域的先进技术10十一月202419数据库系统与数据仓库数据库管理系统(DatabaseManagementSystem,DBMS)是一种操纵和管理数据库的大型软件,主要关注数据库的创建、维护和使用。数据仓库(Datawarehouse)是面向主题的、集成的与时间相关且不可修改的数据集合。数据库主要用于事务处理,数据仓库主要用于数据分析,用途上的差异决定了两种架构的特点不同。10十一月202420数据挖掘与机器学习10十一月202421从数据分析的角度来看,数据挖掘与机器学习有很多相似之处,但不同之处也十分明显,例如:数据挖掘并没有机器学习探索人的学习机制这一科学发现任务,数据挖掘中的数据分析是针对海量数据的,等。从某种意义上说,机器学习的科学成分更重一些,二数据挖掘的技术成分更中一些。机器学习(MachineLearning,ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。其专门研究计算机是怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构,使之不断改善自身性能。数据挖掘(DataMining)是从海量数据中获取有效的、新颖的、潜在有用的、最终可理解的模式的过程。数据挖掘中用到了大量的机器学习界提供的数据分析技术和数据库界提供的数据管理技术。数据挖掘存在的问题目前,数据挖掘在很多领域取得了巨大成功,但依然存在一些具有挑战性的问题。(1)数据类型多样化(2)噪声数据(3)高维度数据(4)数据挖掘的可视化10十一月202422数据挖掘建模常用工具1商用工具商用工具主要由商用的开发商提供,通过市场销售,提供相关的服务。与开源软件相比,商用软件更强大、软件性能更加成熟稳定。主要的商用数据挖掘工具有SASEnterpriseMiner、SPSSClementine和IBMIntelligentMiner等。2开源工具开源软件的最大优势在于免费,而且让任何有能力的人参与并完善软件。相对于商用工具,开源软件工具更容易学习和掌握。常用的开源工具有R语言、Python、Weka和RapidMiner等。10十一月202423SASEnterpriseMinerSPSSClementineIntelligentMinerQUEST1商用工具数据挖掘常用工具RWekaMahoutRapidMinerPythonSparkMLlib2开源工具数据挖掘常用工具PythonPython是一种功能强大的、开源的、解释性、面向对象计算机编程语言,内建有各种高级数据结构,支持模块和包,支持多种平台并可扩展。Python语言简洁、易学习、易阅读,并在数据统计、机器学习方面得到广泛应用,是人工智能研究领域中一个非常重要的工具。数据挖掘常用工具利用Python进行数据挖掘的优势1.爬取数据需要Python2.数据分析需要Python3.Python语言简单高效10十一月202427利用Python进行数据挖掘的优势10十一月202428Python数据挖掘常用类库Python的第三方模块很丰富,而且语法非常简练,自由度很高。10十一月202429数据科学计算平台——Anaconda10十一月202430Anaconda是一个集成的Python数据科学环境,简单的说,Anaconda除了有Python外,还安装了180多个用于数据分析的第三方库,而且可以使用conda命令安装第三方库和创建多个环境。相对于只安装Python而言,避免了安装第三方库的麻烦。网站:/help/anaconda/数据科学计算平台——AnacondaJupyterNotebook(Julia+Python+R=Jupyter)基于Web技术的交互式计算文档格式,支持Markdown和Latex语法,支持代码运行、文本输入、数学公式编辑、内嵌式画图和其他如图片文件的插入,是一个对代码友好的交互式笔记本。10十一月202431确认勾选将Python添加到系统环境变量
数据科学计算平台——Anaconda数据科学计算平台——AnacondaAnacondaNavigator数据科学计算平台——Anaconda
conda:一个工具,用于包管理和环境管理,其中:
包管理与pip类似,管理python第三方;
环境管理能够允许用户使用不同版本的Python,并能灵活切换数据科学计算平台——AnacondaWin+R:运行CMD命令;conda–V:显示python版本,说明环境变量设置成功;condaupgrade-all
:先把所有工具包进行升级
包的安装和卸载:condainstallxxx#xxx为包名condaremovexxxpipinstallxxxpipuninstallxxxJupyterNotebook的使用JupyterNotebook(Julia+Python+R=Jupyter)基于Web技术的交互式计算文档格式,支持Markdown和Latex语法,支持代码运行、文本输入、数学公式编辑、内嵌式画图和其他如图片文件的插入,是一个对代码友好的交互式笔记本。10十一月202436数据科学计算平台——Anaconda数据科学计算平台—Anaconda1.JupyterNotebook中的代码输入与编辑10十一月202437Files基本上列出了所有的文件,Running显示了当前已经打开的终端和Notebooks,Clusters由IPythonparallel包提供,用于并行计算。若要创建新的Notebook,只需单击页面右上角的New按钮,在下拉选项中选择python3,即可得到一个空的notebook界面如图1-3所示数据科学计算平台—Anaconda主要由以下部分组成:notebook标题、主工具栏、快捷键、notebook编辑区。若要重新命名notebook标题,可选择File|Rename,输入新的名称,更改后的名字就会出现在Jupyter图标的右侧。10十一月202438数据科学计算平台—Anaconda10十一月202439数据科学计算平台—Anaconda在编辑区可以看到一个个单元(cell)。如图1-4所示,每个cell以“In[]”开头,可以输入正确的Python代码并执行。例如,输入"python"+"program",然后按“Shift+Enter”,代码将被运行后,编辑状态切换到新的cell。10十一月202440数据科学计算平台—Anaconda选择Insert|Insertcellabove,则在当前cell上面会添加一个新的默认是code类型的单元。通过选择cell|celltype菜单选择Markdown(标记),这样就可以获得一个优美,解释性更强的Notebook。Notebook还具备导出功能,可导出为如下几种形式的文件:HTML、Markdown、ReST、 PDF(ThroughLaTex)、RawPython。10十一月202441数据科学计算平台—Anaconda10十一月202442Markdowm:Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。运行后:JupyterNotebook的使用快捷键10十一月202443本章小结数据挖掘数据分析数据挖掘的过程数据挖掘相关的技术Python数据挖掘的类库JupyterNotebook10十一月202444数据挖掘与机器学习第2章python数据分析与挖掘基础本章内容Python基础Python内建数据结构Numpy数值运算基础Pandas统计分析基础Matplotlib图表绘制基础Scikit-learn基础10十一月2024461.Python基础Python是一个结合了解释性、编译性、互动性和面向对象的高级程序设计语言。其结构简单,语法定义清晰。Python最具特色的就是使用缩进来表示代码块,不需要使用大括号{}。Python3中有六种标准的数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)和Dictionary(字典)。其中,不可变数据类型有Number、String和Tuple;可变数据类型有List、Dictionary和Set。Python中的变量是不需要声明数据类型的,变量的“类型”是所指的内存中被赋值对象的类型。同一变量可以反复赋值,而且可以是不同类型的变量。10十一月202447Python基础操作符和表达式运算符用于执行程序代码运算,会针对一个以上的操作数进行运算。Python语言支持算术运算符、关系运算符和逻辑运算符。10十一月202448操作符描述+,-,*,/,%,//,**算术运算:加、减、乘、除、取模、整除、幂<,<=,>,>=,!=,==关系运算符and,or,not,逻辑运算符Python基础字符串1.转义字符字符串被定义为引号之间的字符集合,在Python中,字符串用单引号('),双引号("),三引号(''')括起来。当Python字符串中有一个反斜杠时表示一个转义序列的开始,称反斜杠为转义符。10十一月202449表2-2转义字符示例转义序列说明\n换行\\反斜杠\”双引号\t制表符Python允许用r+“
”的方式表示“
”内部的字符串默认不转义。Python基础字符串2.字符串的运算Python特有的索引规则为:第一个字符的索引是0,后续字符索引依次递增,或者从右向左编号,最后一个字符的索引号为-1,前面的字符依次减1,主要运算+*切片。3.字符串的常见方法属性,见表2-4字符串的方法描述10十一月202450Python基础11/10/2024表2-4字符串的常用方法描述方法/函数作用str.capitalize()返回字符串的副本,其首字符大写str.count(sub[,start[,end]])
返回[start,end]范围内sub的非重叠出现次数,start和end可选str.endswith(sub[,start[,end]])返回布尔值,表示字符串是否以指定的sub结束,同类方法str.startswith()str.find(sub[,start[,end]])
返回字符串中首次出现子串sub的索引位置,start和end可选,若未找到sub,返回-1,类似方法str.index()str.split(sep=None)使用sep作为分隔符拆分字符串,返回字符串中单词的列表str.strip([chars])删除字符串前端和尾部chars指定的字符集,如果省略或None则删除空白字符str.upper()/str.lower()将字符串中所有字符转换为大写/小写Python基础
流程控制条件语句ifcondition:if-block[elifcondition: elif-blockelse: else-block]10十一月202452其中,冒号(:)是语句块开始标记,[]内为可选项。另外,在Python中,当condition的值为False、0、None、””、()、[]、{}时,会被解释器解释为假(False)。Python基础
流程控制2.循环语句10十一月202453while语句语法格式:whilecondition:while-block【例2-4】求1+2+3+4+5的值。In[4]:sum=0i=1whilei<6:sum=sum+ii=i+1print("sumis%d."%sum)Out[4]:sumis15.Python基础
流程控制2.循环语句10十一月202454for语句语法格式:for
v
in
Seq:for_block其中,v是循环变量,Seq是序列类型,涵盖字符串、列表及元组。在每轮循环中,循环变量被设置为序列类型中的当前对象,for_block是循环体,用来完成具体功能。Python基础
流程控制2.循环语句10十一月202455for语句语法格式:for
v
in
Seq:for_block【例2-5】将下面数组中的奇数变成它的平方,偶数保持不变。In[5]:x=[1,2,3,4,8,7,22,33,88]print("原数据:",x)foriinrange(len(x)):if(x[i]%2)!=0:#判读第i个元素是否为奇数
x[i]=x[i]*x[i]print("处理后:",x)Out[5]:原数据:
[1,2,3,4,8,7,22,33,88]处理后:
[1,2,9,4,8,49,22,1089,88]Python基础函数是对程序逻辑进行过程化和结构化的一种方法。有了函数,可将大块的代码巧妙合理地隔离成容易管理和维护的小块。1.函数的定义函数定义语法格式如下所示:deffunction_name(arguments):function_block10十一月202456函数代码块以def关键词开头,后接函数标识符名称和圆括号();function_name是用户自定义的函数名称;arguments是零个或多个参数,且任何传入参数必须放在圆括号内;最后必须跟一个冒号(:),函数体从冒号开始,并且缩进;function_block实现函数功能的语句块。Python基础10十一月202457【例2-6】定义函数计算n!。In[6]:deffac(n):s=1;foriinrange(2,n+1):s=s*ireturnsn=5print('%d!=%d'%(n,fac(n)))Out[6]:5!=120Python基础2.lambda函数Python使用lambda来创建匿名函数。准确地说,lambda只是一个表达式,函数体比def定义的函数简单得多,在lambda表达式中只能封装有限的逻辑。除此之外,lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。10十一月202458【例2-7】定义一个lambda函数计算多项式1+2*x+y2+z*y的值。In[7]:polynominal=lambdax,y,z:1+2*x+y**2+z*ypolynominal(1,2,3)Out[7]:132Pyhton内建数据结构在Python中,最基本的数据结构是序列。序列中的成员有序排列,可以通过下标偏移量访问到它的一个或几个成员。除了前面已经介绍过的字符串,最常见的序列是列表和元组。列表是Python中最具灵活性的有序集合对象类型。和字符串不同的是,列表具有可变长度、异构以及任意嵌套列表的特点。列表是可变对象,支持在原处修改。10十一月2024592Pyhton内建数据结构
列表的常用方法(1)增加元素
L.append(v)(2)查找给定的元素L.index(x)(3)删除列表中的元素L.remove(v)(4)列表元素倒排、统计和排序
L.reverse()用以倒排列表中的元素,L.count(x)实现返回x在列表中出现的次数。10十一月2024602Pyhton内建数据结构列表的推导式列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个推导序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。10十一月202461语法格式为:[<expr1>forkinLif<expr2>]语义:
returnList=[]forkinL:if<expr2>:returnList.append(<expr1>)returnreturnList;2Pyhton内建数据结构元组
元组有很多用途,例如,坐标(x,y),数据库中的员工记录等等。元组和字符串一样,不可改变,即不能给元组的一个独立的元素赋值。元组用的是圆括号(),而列表用的是方括号[]。10十一月202462In[13]:tup=tuple('bar')#创建元组print('输出元组tup:',tup)#输出元组nested_tup=(4,5,6),(7,8)print('输出元组tup:',nested_tup)#元素是元组的元组print('元组的连接',tup+tuple('wwy'))a,b,c=tup#元组的拆分print(a,b,c)print(tup.count(a))#统计某个数值在元组中出现的次数Out[13]:输出元组tup:('b','a','r')输出元组tup:((4,5,6),(7,8))元组的连接
('b','a','r','w','w','y')bar12Pyhton内建数据结构字典字典也称映射,是一个由键/值对组成的非排序可变集合体。键值对在字典中以下面的方式标记:dict={key1:value1,key2:value2}10十一月202463方法描述dict.get()返回指定键的值,若值不在字典中则返回defaultdict.items()以列表返回可遍历的(键,值)元组数组dict.keys()以列表返回一个字典所有的键dict.values()以列表返回字典中的所有值2Pyhton内建数据结构集合是一个由唯一元素组成的非排序集合体。也就是说,集合中的元素没有特定顺序,也没有重复项。集合可以使用大括号{}或者set()函数创建集合,但是,创建一个空集合必须用set(),因为{}是用来创建一个空字典。10十一月202464In[15]:set1=set([0,1,2,3,4])set2=set([1,3,5,7,9])print(set1.issubset(set2))print(set1.union(set2))print(set2.difference(set1))print(set1.issubset(set2))Out[15]:False{0,1,2,3,4,5,7,9}{9,5,7}FalseNumPy数值运算基础Numpy是一个开源的Python科学计算库,它是python科学计算库的基础库,许多其他著名的库(如Pandas、
Scikit-learn等)都要用到Numpy库的一些功能。Numpy常用的导入格式:importnumpyasnp创建数组对象NumPy库能将数据(列表、元组、数组或其他序列类型)转换为ndarray数组。利用array函数创建数组对象专门创建数组的函数10十一月202465NumPy数值运算基础利用array函数创建数组对象10十一月202466array函数的格式:np.array(object,dtype,ndmin)表2-6array函数的主要参数及说明参数名称说明object接收array,表示想要创建的数组dtype接收data-type,表示数组所需的数据类型,默认为Nonendmin接收int,指定生成数组应该具有的最小维数,默认为NoneNumPy数值运算基础利用array函数创建数组对象importnumpyasnpdata1=[1,3,5,7]#列表w1=np.array(data1)print('w1:',w1)data2=(2,4,6,8)#元组w2=np.array(data2)print('w2:',w2)data3=[[1,2,3,4],[5,6,7,8]]#多维数组w3=np.array(data3)print('w3:',w3)10十一月202467NumPy数值运算基础2.专门创建数组的函数10十一月202468表2-7常用专门创建数组的函数np.arange(n)类似range()函数,返回ndarray类型,元素从0到n-1np.ones(shape)根据shape生成一个全1数组,shape为元组类型np.zeros(shape)根据shape生成一个全0数组,shape为元组类型np.full(shape,val)根据shape生成一个值全为val的数组np.eye(n)创建一个对角线全为1其余元素为0的方阵np.linspace()指定开始值、终值和元素个数创建一维数组np.logspace()指定开始值、终值和元素个数创建一维等比数组NumPy数值运算基础NumPy创建的ndarray对象属性,主要有shape、size等属性10十一月202469属性说明ndim秩,即数据轴的个数shape数组的维度size数组元素个数dtype数据类型itemsize数组中每个元素的字节大小nbytes整个数组所需的字节数NumPy数值运算基础生成随机数在NumPy.random模块中,提供了多种随机数的生成函数。如randint生成指定范围的随机整数。用法:np.random.randint(low,high=None,size=None)10十一月202470arr1=np.random.randint(100,200,size=(2,4))print('arr1:\n',arr1)arr2=np.random.rand(5)print('arr2:\n',arr2)arr3=np.random.rand(3,2)print('arr3:\n',arr3)arr1:
[[117175143145]
[116158166192]]arr2:
[0.0591052
0.135920070.492438250.972930620.67059451]arr3:
[[0.717379740.39455845]
[0.945141410.34930551]
[0.927437750.26501378]]运行结果NumPy数值运算基础生成随机数函数10十一月202471函数说明seed确定随机数生成器的种子permutation返回一个序列的随机排列或返回一个随机排列的范围shuffle对一个序列进行随机排序binomial产生二项分布的随机数normal产生正态(高斯)分布的随机数beta产生beta分布的随机数chisquare产生卡方分布的随机数gamma产生gamma分布的随机数uniform产生在[0,1)中均匀分布的随机数NumPy数值运算基础2.3.4数组变换
数组重塑
reshape方法改变其数据维度,传入的参数为新维度的元组。reshape的参数中的其中一个可以设置为-1,表示数组的维度可以通过数据本身来推断。10十一月202472Out[23]:arr1:[01234567891011]arr2:[[0123][4567][891011]]arr3:[[012345][67891011]]In[23]:arr1=np.arange(12)print('arr1:\n',arr1)arr2=arr1.reshape(3,4)print('arr2:\n',arr2)arr3=arr1.reshape(2,-1)print('arr3:\n',arr3)NumPy数值运算基础2.3.4数组变换
数组重塑
与reshape相反的方法是数据散开(ravel)或数据扁平化(flatten)。10十一月202473In[24]:arr1=np.arange(12).reshape(3,4)print('arr1:\n',arr1)arr2=arr1.ravel()print('arr2:',arr2)arr3=arr1.flatten()print('arr3:',arr3)Out[24]:arr1:[[0123][4567][891011]]arr2:[01234567891011]arr3:[01234567891011]NumPy数值运算基础2.3.4数组变换
数组合并完成数组的组合,包括数组的横向组合和纵向组合。NumPy利用hstack、vstack和concatenate函数完成数组的组合。横向组合是将ndarray对象构成的元组作为参数,传给hstack函数。纵向组合是利用vstack将数组纵向合并。10十一月202474In[25]:arr1=np.arange(6).reshape(3,2)arr2=arr1*2arr3=np.hstack((arr1,arr2))print('横向合并:\n',arr3)arr4=np.vstack((arr1,arr2))print('纵向合并:\n',arr4)Out[25]:横向合并:
[[0102][2346][45810]]纵向合并:
[[01][23][45][02][46][810]]NumPy数值运算基础2.3.4数组变换
数组合并concatenate函数可以实现数组的横向或纵向合并,其中的参数axis=1时进行横向合并,axis=0时进行纵向合并。10十一月202475In[26]:arr1=np.arange(6).reshape(3,2)arr2=arr1*2print('横向组合为:\n',np.concatenate((arr1,arr2),axis=1))print('纵向组合为:\n',np.concatenate((arr1,arr2),axis=0))Out[26]:横向组合为:
[[0102][2346][45810]]纵向组合为:
[[01][23][45][02][46][810]]NumPy数值运算基础2.3.4数组变换数组分割:与数组合并相反,NumPy提供了hsplit、vsplit和split分别实现数组的横向、纵向和指定方向的分割。10十一月202476同样,split在参数axis=1时实现数组的横向分割,axis=0时则进行纵向分割。NumPy数值运算基础2.3.4数组变换数组转置和轴对换数组转置是数组重塑的一种特殊形式,可以通过transpose方法进行转置。transpose方法需要传入轴编号组成的元组。10十一月202477除了使用transpose外,可以直接利用数组的T属性进行数组转置。NumPy数值运算基础数组的索引和切片一维数组的索引和切片一维数组的切片和索引与python的list索引类似10十一月202478In[29]:arr=np.arange(10)print(arr)print(arr[2])print(arr[-1])print(arr[1:4])Out[29]:[0123456789]29[123]NumPy数值运算基础数组的索引和切片一维数组的索引和切片数组的切片返回的是原始数组的视图,并不会产生新的数据,这就意味着在视图上的操作会使原数组发生改变。如果需要的并非视图而是要复制数据,则可以通过copy方法实现。10十一月202479In[30]:arr1=arr[-4:-1].copy()print(arr)print(arr1)Out[30]:[0123456789][678]NumPy数值运算基础数组的索引和切片多维数组的索引对于多维数组,它的每一个维度都有一个索引,各个维度的索引之间用逗号分隔。也可以使用整数函数和布尔值索引访问多维数组。10十一月202480In[31]:arr=np.arange(12).reshape(3,4)print(arr)print(arr[0,1:3])#索引第0行中第1列到第2列的元素print(arr[:,2])#索引第2列元素print('索引结果1:',arr[(0,1),(1,3)])#索引第1、2行中第0、2、3列的元素print('索引结果2:',arr[1:2,(0,2,3)])mask=np.array([1,0,1],dtype=np.bool)#mask是一个布尔数组,它索引第0,2行中第1列元素print('索引结果3:',arr[mask,1])Out[31]:[[0123][4567][891011]][12][2610]索引结果1:[17]索引结果2:[[467]]索引结果3:[19]NumPy数值运算基础数组的运算数组的运算支持向量化运算,将本来需要在Python级别进行的运算,放到C语言的运算中,明显地提高了程序的运算速度。1.数组和标量间的运算数组之所以强大是因为不需要通过循环就可以完成批量计算,比如相同维度的数组的算术运算直接应用到元素中。10十一月202481【例2-32】数组元素的追加。In[32]:a=[1,2,3]b=[]foriina:b.append(i*i)print('b数组:',b)wy=np.array([1,2,3])c=wy*2print('c数组:',c)Out[32]:b数组:[1,4,9]c数组:[246]NumPy数值运算基础数组的运算2.ufunc函数ufunc函数全称为通用函数,是一种能够对数组中的所有元素进行操作的函数。ufunc函数是针对数组进行操作,而且以NumPy数组作为输出。对一个数组进行重复运算时,使用ufunc函数比使用math库中的函数效率更高。常用的ufunc函数运算有四则运算、比较运算和逻辑运算。10十一月202482NumPy数值运算基础数组的运算2.ufunc函数常用的ufunc函数运算有四则运算、比较运算和逻辑运算。1)四则运算:加(+)、减(-)、乘(*)、除(/)、幂(**)。数组间的四则运算表示对每个数组中的元素分别进行四则运算,所以形状必须相同。2)比较运算:>、<、==、>=、<=、!=。比较运算返回的结果是一个布尔数组,每个元素为每个数组对应元素的比较结果。3)逻辑运算:np.any函数表示逻辑“or”,np.all函数表示逻辑“and”。运算结果返回布尔值。10十一月202483NumPy数值运算基础数组的运算2.ufunc函数常用的ufunc函数运算有四则运算、比较运算和逻辑运算。10十一月202484In[33]:x=np.array([1,2,3])y=np.array([4,5,6])print('数组相加结果:',x+y)print('数组相减结果:',x-y)print('数组相乘结果:',x*y)print('数组幂运算结果:',x**y)Out[33]:数组相加结果:
[579]数组相减结果:
[-3-3-3]数组相乘结果:
[41018]数组幂运算结果:
[132729]NumPy数值运算基础数组的运算2.ufunc函数常用的ufunc函数运算有四则运算、比较运算和逻辑运算。10十一月202485数组的比较运算。In[34]:x=np.array([1,3,6])y=np.array([2,3,4])print('比较结果(<):',x<y)print('比较结果(>):',x>y)print('比较结果(==):',x==y)print('比较结果(>=):',x>=y)print('比较结果(!=):',x!=y)Out[34]:比较结果(<):[TrueFalseFalse]比较结果(>):[FalseFalseTrue]比较结果(==):[FalseTrueFalse]比较结果(>=):[FalseTrueTrue]比较结果(!=):[TrueFalseTrue]NumPy数值运算基础数组的运算2.ufunc函数ufunc函数的广播机制广播(broadcasting)是指不同形状的数组之间执行算术运算的方式。10十一月202486In[35]:arr1=np.array([[0,0,0],[1,1,1],[2,2,2]])arr2=np.array([1,2,3])print('arr1:\n',arr1)print('arr2:\n',arr2)print('arr1+arr2:\n',arr1+arr2)Out[35]:arr1:[[000][111][222]]arr2:[123]arr1+arr2:[[123][234][345]]NumPy数值运算基础条件逻辑运算在NumPy中可以利用基本的逻辑运算就可以实现数组的条件运算。这种方法对大规模数组处理效率不高,也无法用于多维数组。NumPy提供的where方法可以解决这些问题。where的用法:np.where(condition,x,y)满足条件(condition),输出x,不满足则输出y。10十一月202487NumPy数值运算基础条件逻辑运算在NumPy中可以利用基本的逻辑运算就可以实现数组的条件运算。10十一月202488In[37]print(np.where([[True,False],[True,True]],[[1,2],[3,4]],[[9,8],[7,6]]))w=np.array([2,5,6,3,10])print(np.where(w>4))Out[37]array([[1,8],[3,4]])(array([1,2,4],dtype=int64),)NumPy数值运算基础NumPy中的数据统计与分析1.排序
numpy.sort(a,axis,kind,order)
sort主要参数及其说明10十一月202489参数说明a要排序的数组kind排序算法,默认为“quicksort”order如果数组包含字段,则是要排序的字段axis按指定轴对数据集排序。axis=1为沿横轴排序;axis=0为沿纵轴排序;axis=None,将数组平坦化之后进行排序NumPy数值运算基础NumPy中的数据统计与分析1.排序
numpy.sort(a,axis,kind,order)
10十一月202490In[38]:arr=np.array([7,9,5,2,9,4,3,1,4,3])print('原数组:',arr)arr.sort()print('排序后:',arr)Out[38]:原数组:
[7952943143]排序后:
[1233445799]NumPy数值运算基础NumPy中的数据统计与分析1.排序
numpy.sort(a,axis,kind,order)
10十一月202491带轴向参数的sort排序。In[39]:arr=np.array([[4,2,9,5],[6,4,8,3],[1,6,2,4]])print('原数组:\n',arr)arr.sort(axis=1)#沿横向排序print('横向排序后:\n',arr)Out[39]:原数组:
[[4295][6483][1624]]横向排序后:
[[2459][3468][1246]]NumPy数值运算基础NumPy中的数据统计与分析1.排序
使用argsort和lexsort函数,可以在给定一个或多个键时,得到一个由整数构成的索引数组,索引值表示数据在新的序列中的位置。10十一月202492使用argsort和lexsort函数进行排序。In[40]:arr=np.array([7,9,5,2,9,4,3,1,4,3])print('原数组:',arr)print('排序后:',arr.argsort())#返回值为数组排序后的下标排列a=[2,5,8,4,3,7,6]b=[9,4,0,4,0,2,1]c=np.lexsort((a,b))print(c)Out[40]:原数组:
[7952943143]排序后:
[7369582014][4265310]NumPy数值运算基础NumPy中的数据统计与分析2.重复数据与去重在数据统计分析中,需要提前将重复数据剔除。在NumPy中,可以通过unique函数找到数组中的唯一值并返回已排序的结果。
10十一月202493数组内数据去重。In[41]:names=np.array(['红色','蓝色','黄色','白色','红色'])print('原数组:',names)print('去重后的数组:',np.unique(names))Out[41]:原数组:
['红色''蓝色''黄色''白色''红色']去重后的数组:
['白色''红色''蓝色''黄色']NumPy数值运算基础NumPy中的数据统计与分析2.重复数据与去重10十一月202494统计分析中有时需要把一个数据重复若干次,在NumPy中主要使用tile和repeat函数实现数据重复。【例2-42】使用tile函数实现数据重复。In[42]:arr=np.arange(5)print('原数组:',arr)wy=np.tile(arr,3)print('重复数据处理:\n',wy)Out[42]:原数组:
[01234]重复数据处理:
[012340123401234]NumPy数值运算基础NumPy中的数据统计与分析2.重复数据与去重repeat函数的格式:numpy.repeat(A,reps,axis=None)其中参数“a”是需要重复的数组元素,参数“repeats”是重复次数,参数“axis”指定沿着哪个轴进行重复,axis=0表示按行进行元素重复;axis=1表示按列进行元素重复。10十一月202495In[43]:arr1=np.arange(5)print('原数组:',arr1)w1=np.tile(arr,3)print('原数组重复3次:\n',np.tile(arr1,3))arr2=np.array([[1,2,3],[4,5,6]])print('重复数据处理:\n',arr2.repeat(2,axis=0))Out[43]:原数组:
[01234]原数组重复3次:
[012340123401234]重复数据处理:
[[123][123][456][456]]NumPy数值运算基础3.常用统计函数NumPy中提供了很多用于统计分析的函数,常见的有sum、mean、std、var、min和max等。几乎所有的统计函数在针对二维数组的时候需要注意轴的概念。10十一月202496NumPy数值运算基础3.常用统计函数10十一月202497【例2-44】NumPy中常用函数的使用。In[44]:arr=np.arange(20).reshape(4,5)print('创建的数组:\n',arr)print('数组的和:',np.sum(arr))print('数组纵轴的和:',np.sum(arr,axis=0))print('数组横轴的和:',np.sum(arr,axis=1))print('数组的均值:',np.mean(arr))print('数组横轴的均值:',np.mean(arr,axis=1))print('数组的标准差:',np.std(arr))print('数组横轴的标准差:',np.std(arr,axis=1))Out[44]:创建的数组:
[[01234][56789][1011121314][1516171819]]数组的和:
190数组纵轴的和:[3034384246]数组横轴的和:[10356085]数组的均值:
8.5数组横轴的均值:[2.7.12.17.]数组的标准差:
4.766281297335398数组横轴的标准差:[1.414213561.414213561.414213561.41421356]Pandas统计分析基础Pandas(PythonDataAnalysisLibrary)是基于NumPy的数据分析模块,它提供了大量标准数据模型和高效操作大型数据集所需的工具,可以说Pandas是使得Python能够成为高效且强大的数据分析环境的重要因素之一。导入方式:importpandasaspd10十一月202498Pandas统计分析基础Pandas中的数据结构Pandas有三种数据结构Series、DataFrame和Panel。Series类似于数组,DataFrame类似于表格,而Panel则可以视为Excel的多表单Sheet。10十一月202499Pandas统计分析基础SeriesSeries是一种一维数组对象,包含了一个值序列,并且包含了数据标签,称为索引(index),通过索引来访问数组中的数据。Series的创建1)通过列表创建2)通过字典创建10十一月2024100Pandas统计分析基础Series的创建1)通过列表创建10十一月2024101In[45]:importpandasaspdobj1=pd.Series([1,-2,3,-4])print(obj1)i=["a","c","d","a"]v=[2,4,5,7]obj2=pd.Series(v,index=i,name="col")print(obj2)Out[45]:011-2233-4dtype:int64a2c4d5a7Name:col,dtype:int64输出的第一列为index,第二列为数据value。如果创建Series时没有指定index,Pandas会采用整型数据作为该Series的index。所以Series有两套描述某条数据的手段,即位置和标签。Pandas统计分析基础Series的创建2)通过字典创建10十一月2024102如果数据被存放在一个Python字典中,也可以直接通过这个字典来创建Series。【例2-46】通过字典创建Series。In[46]:sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}obj3=pd.Series(sdata)print(obj3)Out[46]:Ohio35000Texas71000Oregon16000Utah5000dtype:int64Pandas统计分析基础Series的创建2)通过字典创建10十一月2024103对于许多应用而言,Series域重要的一个功能是:它在算术运算中会自动对齐不同索引的数据。【例2-47】不同索引数据的自动对齐。In[47]:sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}obj1=pd.Series(sdata)states=['California','Ohio','Oregon','Texas']obj2=pd.Series(sdata,index=states)print(obj1+obj2)Out[47]:CaliforniaNaNOhio70000.0Oregon32000.0Texas142000.0UtahNaNdtype:float64Pandas统计分析基础DataFrameDataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看作由Series组成的字典(共用同一个索引)。构建DataFrame的方式有很多,最常用的是直接传入一个由等长列表或NumPy数组组成的字典来构建DataFrame。10十一月2024104Pandas统计分析基础DataFrame10十一月2024105【例2-49】DataFrame的索引。In[49]:data={'name':['张三','李四','王五','小明'],'sex':['female','female','male','male'],'year':[2001,2001,2003,2002],'city':['北京','上海','广州','北京']}df1=pd.DataFrame(data,columns=['name','year','sex','city'])display(df1)Out[49]:Pandas统计分析基础索引对象Pandas的索引对象负责管理轴标签和其他元数据(如轴名称等)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index。10十一月2024106【例2-50】显示DataFrame的索引和列。In[50]:display(df1)print(df1.index)print(df1.columns)Out[50]:
RangeIndex(start=0,stop=4,step=1)Index(['name','year','sex','city'],dtype='object')Pandas统计分析基础索引对象1.重新索引索引对象是无法修改的,因此,重新索引是指对索引重新排序而不是重新命名,如果某个索引值不存在的话,会引入缺失值。10十一月2024107重建索引In[51]:obj=pd.Series([7.2,-3.3,3.5,3.6],index=['b','a',
'd','c'])obj.reindex(['a','b','c','d','e'])Out[51]:a-3.3b7.2c3.6d3.5eNaNdtype:float64对于重建索引引入的缺失值,可以利用fill_value参数填充。Pandas统计分析基础索引对象1.重新索引10十一月2024108【例2-52】重建索引时填充缺失值。In[52]:obj.reindex(['a','b','c','d','e'],fill_value=0)Out[52]:a-3.3b7.2c3.6d3.5e0.0dtype:float64Pandas统计分析基础索引对象1.重新索引10十一月2024109对于顺序数据,比如时间序列,重新索引时可能需要进行插值或填值处理,利用参数method选项可以设置:Ø
method=‘ffill’或‘pad’,表示前向值填充Ø
method=‘bfill’或‘backfill’,表示后向值填充【例2-53】缺失值的前向填充。In[53]:importnumpyasnpobj1=pd.Series(['blue','red','black'],index=[0,2,4])obj1.reindex(np.arange(6),method='ffill')Out[53]:0blue1blue2red3red4black5blackdtype:objectPandas统计分析基础索引对象1.重新索引10十一月2024110缺失值的后向填充则对空缺值用后面的数据值进行填充,参数method取值'backfill'。对于DataFrame,reindex可以修改行索引或列索引。如果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 11-20各数的认识(说课稿)2024-2025学年一年级上册数学人教版
- 3《我很诚实》说课稿-2023-2024学年道德与法治三年级下册统编版
- 二零二五年度门窗行业展会参展与赞助合同
- 2025至2030年中国螺杆式干泵数据监测研究报告
- 2025版高速公路扩建工程分包合同三方协议书2篇
- 二零二五年度内衣店品牌加盟授权及品牌形象维护合同
- 二零二五年度平房房屋租赁及装修合同3篇
- 2025至2030年中国多层纸板粘箱机数据监测研究报告
- 2025至2030年工艺品包装革项目投资价值分析报告
- 2025至2030年中国冰箱灯数据监测研究报告
- 2022年中国电信维护岗位认证动力专业考试题库大全-上(单选、多选题)
- 《电气作业安全培训》课件
- 水平二(四年级第一学期)体育《小足球(18课时)》大单元教学计划
- 《关于时间管理》课件
- 医药高等数学智慧树知到课后章节答案2023年下浙江中医药大学
- 城市道路智慧路灯项目 投标方案(技术标)
- 水泥采购投标方案(技术标)
- 医院招标采购管理办法及实施细则(试行)
- 初中英语-Unit2 My dream job(writing)教学设计学情分析教材分析课后反思
- 广州市劳动仲裁申请书
- 江西省上饶市高三一模理综化学试题附参考答案
评论
0/150
提交评论