版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据分析概述1了解数据分析01案例1:啤酒与尿布案例2:股票走势预测数据分析步骤0203041了解数据分析1了解数据分析数据分析是指用适当的统计、分析方法对收集来的大量数据进行分析,将它们加以汇总、理解并消化,以求最大化地开发数据的功能,发挥数据的作用。数据分析是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。1了解数据分析广义的数据分析包括狭义数据分析和数据挖掘。狭义数据分析是指根据分析目的,采用对比分析、分组分析、交叉分析和回归分析等分析方法,对收集的数据进行处理与分析,提取有价值的信息,发挥数据的作用,得到一个特征统计量结果的过程。2案例1:啤酒与尿布2“啤酒与尿布”的故事产生于20世纪90年代的美国某超市中,超市管理人员分析销售数据时发现了一个令人难于理解的现象:在某些特定的情况下,“啤酒”与“尿布”两件看上去毫无关系的商品会经常出现在同一个购物篮中,这种独特的销售现象引起了管理人员的注意,经过后续调查发现,这种现象出现在年轻的父亲身上,他们在购买尿布的同时,往往会顺便买啤酒犒劳自己。超市管理人员发现了这一独特的现象,开始尝试将啤酒与尿布摆放在相同的区域的促销手段,从而提高了这两件商品销售收入案例1:啤酒与尿布3案例2:股票走势预测案例2:股票走势预测3
现在市面上各种股票分析软件很多,它们就是通过对某支股票之前涨跌数据经过分析后,给出合理的意见,有最近一年的、最近一周的、最近三天的,数据分析的越多得出结论越趋于合理。当然股票行情由于存在的影响因素居多,比如企业并购、管理层更换、国家政策等,所以股票的数据分析最终只能是一种参考,最终的决定权还在持股人手里,但是这种对于股票的数据分析无疑给玩股票的人提供了更多有效信息。4数据分析步骤数据分析步骤4
数据分析已经逐渐演化为一种解决问题的过程,甚至是一种方法论。虽然每个公司都会根据自身需求和目标创建最适合的数据分析流程,但是数据分析的核心步骤是一致的。数据分析步骤41、数据获取数据获取是数据分析工作的基础,是指根据需求分析的结果提取、收集数据。数据获取主要有两种方式:网络数据与本地数据。网络数据是指存储在互联网中的各类视频、图片、语音和文字等信息。本地数据则是指存储在本地数据库中的生产、营销和财务等系统的数据。本地数据按照数据时间又可以划分为两部分,分别是历史数据与实时数据。历史数据是指系统在运行过程中遗存下来的数据,其数据量随系统运行时间的增加而增长;实时数据是指最近一个单位时间周期(月、周、日、小时等)内产生的数据。在数据分析过程中,具体使用哪种数据获取方式,需要依据需求分析的结果而定。数据分析步骤42、数据预处理数据预处理是指对数据进行数据合并、数据清洗、数据标准化和数据变换,并直接用于分析建模的这一过程的总称。其中,数据合并可以将多张互相关联的表格合并为一张;数据清洗可以去除重复、缺失、异常、不一致的数据;数据标准化可以去除特征间的量纲差异;数据变换则可以通过离散化、哑变量处理等技术满足后期分析与建模的数据要求。在数据分析的过程中,数据预处理的各个过程互相交叉,并没有明确的先后顺序。数据分析步骤43、分析与建模分析与建模是指通过对比分析、分组分析、交叉分析、回归分析等分析方法,以及聚类模型、分类模型、关联规则、智能推荐等模型与算法,发现数据中有价值的信息,并得出结论的过程。在数据分析过程中,具体使用哪种数据获取方式,需要依据需求分析的结果而定。分析与建模的方法按照目标不同可以分为几大类。如果分析目标是描述客户行为模式的,那么可以采用描述型数据分析方法,同时还可以考虑关联规则、序列规则和聚类模型等。如果分析目标是量化未来一段时间内某个事件发生概率的,那么可以使用两大预测分析模型,即分类预测模型和回归预测模型。在常见的分类预测模型中,目标特征通常为二元数据,如欺诈与否、流失与否、信用好坏等。在回归预测模型中,目标特征通常为连续型数据,常见的有股票价格预测等。数据分析步骤44、模型评价与优化模型评价是指对于已经建立的一个或多个模型,根据其模型的类别,使用不同的指标评价模型性能优劣的过程。常用的聚类模型评价指标有ARI评价法(兰德系数)、AMI评价法(互信息)、V-measure评分、FMI评价法和轮廓系数等。常用的分类模型评价指标有准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1值(F1Value)、ROC和AUC等。常用的回归模型评价指标有平均绝对误差、均方误差、中值绝对误差和可解释方差值等。模型优化则是指模型性能在经过模型评价后已经达到了要求,但在实际生产环境应用过程中,发现模型的性能并不理想,继而对模型进行重构与优化的过程。多数情况下,模型优化和分析与建模的过程基本一致。数据分析步骤45、部署部署是指将数据分析结果与结论应用至实际生产系统的过程。根据需求的不同,部署阶段可以是一份包含了现状具体整改措施的数据分析报告,也可以是将模型部署在整个生产系统的解决方案。在多数项目中,数据分析师提供的是一份数据分析报告或一套解决方案,实际执行与部署的是需求方。ThankYOU!数据标注概述2数据标注概念01数据标注分类数据标注流程0203常用数据标注工具041数据标注概念1数据标注概念1、数据标注
对文本、图像、语音、视频等待标注数据进行归类、整理、编辑、纠错、标记和批注等操作,为待标注数据增加标签,生产满足机器学习训练要求的机器可读数据编码。2、标签(label)
标识数据的特征、类别和属性等,可用于建立数据及机器学习训练要求所定义的机器可读数据编码间的联系。1数据标注概念3、标注任务
按照数据标注规范对数据集进行标注的过程。4、数据标注员
负责对文本、图像、音频、视频等待标注数据进行归类、整理、编辑、纠错、标记和批注等操作的工作人员。1数据标注概念5、标注工具
数据标注员完成标注任务产生标注结果所需的工具和软件。标注工具按照自动化程度分手动、半自动和自动三种。2数据标注分类2数据标注分类1、文本标注文本标注是对文本进行特征标记的过程。需要明确文本的多维度特征,对其打上具体的语义、构成、语境、目的、情感等元数据标签,以创建一个巨大的文本数据集(文本训练数据)。通过标注好的训练数据,可以教会机器如何识别文本中隐含的人类意图或情感,更加“人性化”地理解语言。2数据标注分类2、图像标注图像标注是计算机视觉(ComputerVision)领域重要的过程之一。在图像标注过程中,数据标注员使用标签或元数据来标记AI模型学习识别的数据特征。图像标注的数据被用于训练机器模型,使计算机在见到无标记的新数据时识别出这些特征。主要的标注方法有点标、框标、区域标注、3D标注、分类标注等等应用场景如安防、教育、自动驾驶等等,目前落地比较成熟的有人脸识别、车牌识别等领域。2数据标注分类3、语音标注语音标注是数据标注行业中一种比较常见的标注类型,主要工作内容是将语音中包含的文字信息、各种声音“提取”出来,进行转写或合成主要用于人工智能机器学习,应用在语音识别、对话机器人等领域。3数据标注流程数据标注流程3
数据标注基本流程:3数据标注流程1、数据采集
数据采集与获取是整个数据标注流程的首要环节。对于数据标注众多平台而言,其数据主要来源于提出标注需求的人工智能公司。通过互联网获取公开的数据集与专业数据集。公开数据集是政府、科研机构等对外开放的资源,获取比较简单专业数据往往更耗费人力物力,有时需要通过人工采集、购买所得,或者通过拍摄、录制等自主手段所得。3数据标注流程2、数据清洗对所采集的数据进行筛检,去掉重复的、无关的数据;对于异常值与缺失值进行查缺补漏,同时平滑噪声数据,最大限度纠正数据的不一致行和不完整性;将数据统一成合适于标注且与主题密切相关的标注格式,以帮助训练更为精确的数据模型和算法。3数据标注流程3、数据标注数据经过清洗,即可进入数据标注的核心环节。4、数据质检无论是数据采集、数据清洗,还是数据标注,通过人工处理数据的方式并不能保证完全准确。为了提高数据输出的准确率,数据质检成为重要的环节,而最终通过质检环节的数据才算是真正的过关。4常用数据标注工具4常用数据标注工具1、文本标注工具DoccanoDoccano是一个开源的文本标注工具,目前支持文本分类、序列标注以及seq2seq,支持自定义标签用于情感分析、NER(命名实体识别)、机器翻译、文本摘要等任务。4常用数据标注工具2、图像标注工具LabelImgLabelImg是一个图像标注工具,它是使用python的qt开发的。通过它标注图像生成的标签文件支持xml、PASCALVOC、YOLO。优点:跨平台,支持Linux、MacOS、Windows安装方便使用简单。缺点:只支持矩形框的标注。4常用数据标注工具3、语音标注工具PraatPraat,是目前比较流行也比较专业的语音处理的软件,可以进行语音数据标注、语音录制、语音合成、语音分析等等,同时生成各种语图和报表免费、占用空间小、通用性强、可移植性好等特点ThankYOU!数据标注案例2案例1:文本标注01案例2:图像标注案例3:语音标注02031案例1:文本标注1文本标注doccano是docummentanotation的缩写,是一个开源的文本标注工具,可以用它为NLP任务的语料库进行打标。它支持情感分析、命名实体识别、文本摘要等任务。操作非常便捷,在小型语料库上,只要数小时就能完成全部的打标工作。下面介绍一下如何在Windows10操作系统下安装、配置和使用doccano,doccano是基于python开发的,所以要先安装python解释器。1文本标注1、python解释器的安装进入Python官网(P),单击Downloads->Windows双击下载好的安装文件【python-3.9.12-amd64.exe】1文本标注2、doccano的安装与初始配置打开DOS窗口,执行以下命令
#pipinstalldoccano==1.6.2-i/simple/然后,执行以下命令#初始化数据库#doccanoinit#创建一个superuser。这里要把pass改成容易记住的密码。当然,用户名也可以改成别的。#doccanocreateuser--usernameadmin--passwordpass1文本标注3、doccano的安装与初始配置在终端中运行下面的代码来启动WebServer#doccanowebserver--port8000打开另一个终端,运行下面的代码启动任务队列doccanotask1文本标注4、运行doccano与创建新的文本打标打开浏览器(最好是Chrome),在地址栏中输入http://localhost:8000/并回车到“项目”的界面。单击左上角的“创建”按钮来创建新的项目以文本分类为例,填写完项目要求的信息后,单击保存,就创建了一个新的NLP文本分类的标注项目1文本标注5、添加语料库首先单击左上角的“操作”→“导入数据集”单击“TextLine格式”,然后在跳转到的界面里,选择文件格式再单击“数据集”的标签,就可以看到一条一条的文本已经被添加到项目中了,将来将对这些文本进行打标1文本标注6、添加标签添加将来可供选择的标签单击“标签”,就来到了添加标签的界面。单击“操作”按钮,并在下拉菜单中单击“创建标签”可以给标签自定义颜色。全部设置好以后,单击“保存”1文本标注7、添加成员添加成员,多个人协同完成语料库的打标工作通过命令添加账户#doccanocreateuser--username小明--passwordpassword可以设置不同的成员的角色,不同的角色对应着不同的权限1文本标注8、添加标注指南9、开始给文本打标以NER任务为例,在打标的界面下,选中句子中的实体,然后在上面选择相应的实体类型People,也可以直接在键盘上按下p键1文本标注10、审核标注结果11、导出打标结果当要导出标注结果的时候,重新用管理员用户登陆,在“数据集”页面下,单击“操作”→“导出数据集”通过命令添加账户2案例2:图像标注2图像标注图像标注是许多人工智能产品的基础,并且是计算机视觉(ComputerVision)领域重要的过程之一。在图像标注过程中,数据标注员使用标签或元数据来标记AI模型学习识别的数据特征。这些图像标注的数据被用于训练机器模型,使计算机在见到无标记的新数据时识别出这些特征2图像标注1、图像分类分类是简单又快捷的图像标注方法,仅将一个标签应用于一张图像。例如,人们可能想要浏览并分类一系列杂货店货架的图像,并确定哪些货架上有汽水哪些没有汽水。在一天中的时间内,图像中是否有汽车。在提供单一、高级标签方面,分类是一种快捷的图像标注方法不指示图像中物体所在的位置。2图像标注2、目标检测目标检测是让标注员在图像中标注出指定的特定物体。因此,如果分类法将图像归类为包含汽水,那么这种方法进一步表明汽水在图像中的位置,或者是正在寻找的芬达汽水的位置。目标检测的标注技术有:2D边界框、三维长方体或3D边界框、多边形分割、样条线标注目标检测允许重叠使用框或线,因此该方法仍不是高精确的方法。它提供的是物体的一般位置,同时也是相对较快的标注过程。2图像标注3、语义分割语义分割通过确保图像的每个组成部分仅属于一个类别来解决物体检测的重叠问题。通俗的来说就是语义分割是对区域内的像素分类而不是目标分类。图像标注方法并不仅仅局限于上述三种类型。其他的方法包括专门用于人脸识别的类型,例如特征点标注(标注员使用人体姿势点标注来绘制特征,例如眼、鼻和口)2图像标注4、物体检测标注工具——labelImg该工具对于windows、Linux、Mac操作系统都支持github上地址:/tzutalin/labelImg。2图像标注4、物体检测标注工具——labelImg加载一个图片目录,第一张图片会自动打开,此时按下w键,就可以标注目标了。3案例3:语音标注语音标注3Praat,是目前比较流行也比较专业的语音处理的软件可以进行语音数据标注、语音录制、语音合成、语音分析等等,同时生成各种语图和报表免费、占用空间小、通用性强、可移植性好等特点。Praat官网链接:
http://www.fon.hum.uva.nl/praat/语音标注31、音频数据导入导入.wav音频或.TextGrid标注初始化TextGrid文件语音标注32、音频数据导入同时选择wav和对应TextGrid标注TextGrid标注设置
在弹出的TextGrid窗口中,选择File->Preferences,将ShowIPAchart给去掉勾选,这样右边不会显示字符表语音标注33、标注技巧ctr+i放大波形ctr+o缩小波形由于Praat不会自己保存TextGrid格式文本,记得随时按一下ctr+s保存播放音频:按Tab键可以播放音频,Esc键取消;或按下方的灰色时间段也可以播放音频标注分界线给边界区域添加文字标注分界线给边界区域添加文字ThankYOU!ndarray数组3NumPy库介绍NumPy(NumericalPython)是一个由多维数组对象和用于处理这些数组的函数集合组成的库,是Python中最常用的科学计算库。NumPy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。NumPy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。12ndarray数组NumPy中定义的最重要的对象是称为ndarray的n维数组类型它是相同类型的数据集合,可以使用从零开始的索引来访问集合中的数据。ndarray数组1、数组属性在创建数组之前,需要先了解数组的基本属性,数组的属性及其说明如下表。属性名称属性说明ndim返回int,表示数组的维数shape返回tuple,表示数组形状的阵列,对于n行m列的矩阵,形状为(n,m)size返回int,表示数组的元素总数,等于数组形状的乘积dtype返回data-type,表示数组中元素的数据类型itemsize返回int,表示数组的每个元素的大小(以字节为单位),例如,一个元素类型为float64的数组的itemsiz属性值为8(float64占用64个bits,每个字节长度为8,所以64/8,占用8个字节),一个元素类型为complex32的数组的itemsiz属性值为4,即32/82ndarray数组2、数组创建ndarray可以使用NumPy中的数组函数numpy.array创建numpy.array(object,
dtype
=
None,
copy
=
True,
order
=
None,
subok
=
False,
ndmin
=
0)
array函数主要参数及其说明如下表。参数说明object数组或嵌套的数列。dtype数组元素的数据类型,可选。Numpy中的数据类型见表2-2。copy对象是否需要赋值,默认True。order创建数组的样式,C(行)或F(列)或A(任意),默认为A。subok默认情况下,返回一个与基类类型一致的数组。ndmin指定生成数组的最小维度。23数组示例示例1:列表生成ndarray数组importnumpyasnpa=np.array([1,2,3])print('一维数组:',a)b=np.array([[1,2],[3,4]])print('多维数组:',b)c=np.array([1,2,3,4,5],ndmin=3)print('指定最小维度',c)输出结果如下:一维数组:[123]多维数组:[[12][34]]指定最小维度[[[12345]]]数组示例示例2:numpy.arange()numpy.arange:返回一个ndarray对象,该对象包含给定范围内的均匀间隔的值importnumpyasnpx=np.arange(5)print(x)y=np.arange(5,dtype=float)#设置数据类型print(y)z=np.arange(10,20,2)#设置起始值和终止值,步长print(z)输出结果如下:[01234][0.1.2.3.4.][1012141618]3数组示例示例3:ndarray.ndimimportnumpyasnpa=np.arange(24)print(a.ndim)#a现只有一个维度#现在调整其大小b=a.reshape(2,4,3)#b现在拥有三个维度print(b.ndim)输出结果如下:133数组示例示例4:ndarray.shapeimportnumpyasnpa=np.array([[1,2,3],[4,5,6]])print(a.shape)输出结果如下:(2,3)3数组示例示例5:ndarray.reshapeNumPy也提供了reshape函数来调整数组大小importnumpyasnpa=np.array([[1,2,3],[4,5,6]])b=a.reshape(3,2)print(b)输出结果如下:[[1,2][3,4][5,6]]3数组示例示例6:ndarray.itemsizendarray.itemsize以字节的形式返回数组中每一个元素的大小。importnumpyasnp#数组的dtype为int8(一个字节)x=np.array([1,2,3,4,5],dtype=8)print(x.itemsize)#数组的dtype现在为float64(八个字节)y=np.array([1,2,3,4,5],dtype=np.float64)print(y.itemsize)输出结果如下:183数组示例示例7:ndarray.flagsndarray.flags返回ndarray对象的内存信息importnumpyasnpx=np.array([1,2,3,4,5])print(x.flags)输出结果如下:C_CONTIGUOUS:TrueF_CONTIGUOUS:TrueOWNDATA:TrueWRITEABLE:TrueALIGNED:True属性描述C_CONTIGUOUS(C)数据是在一个单一的C风格的连续段中。F_CONTIGUOUS(F)数据是在一个单一的Fortran风格的连续段中。OWNDATA(O)数组拥有它所使用的内存或从另一个对象中借用它。WRITEABLE(W)数据区域可以被写入,将该值设置为False,则数据为只读。ALIGNED(A)数据和所有元素都适当地对齐到硬件上。UPDATEIFCOPY(U)这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新。3ThankYOU!NumPy切片与索引3NumPy切片与索引ndarray对象的内容可以通过索引或切片来访问和修改,与Python中list的切片操作一样。ndarray数组可以基于0-n的下标进行索引,切片对象可以通过内置的slice函数,并设置start,stop及step参数进行,从原数组中切割出一个新数组。12切片示例示例1:slice()importnumpyasnpa=np.arange(10)s=slice(2,7,2)#从索引2开始到索引7停止,间隔为2print(a[s])输出结果如下:[246]2数组示例示例2:start:stop:step
切片importnumpyasnpa=np.arange(10)b=a[2:7:2]#从索引2开始到索引7停止,间隔为2print(b)输出结果如下[246]2数组示例示例3:冒号如果只放置一个参数,如
[2],将返回与该索引相对应的单个元素。如果为
[2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如
[2:7],那么则提取两个索引(不包括停止索引)之间的项。importnumpyasnpa=np.arange(10)#[0123456789]b=a[5]print(b)print(a[2:])print(a[2:5])输出结果如下5[23456789][234]2数组示例示例4:多维数组切片importnumpyasnpa=np.array([[1,2,3],[3,4,5],[4,5,6]])print(a)#从某个索引处开始切割print('从数组索引a[1:]处开始切割')print(a[1:])输出结果如下[[123][345][456]]从数组索引a[1:]处开始切割[[345][456]]2数组示例示例5:省略号切片使选择元组的长度与数组的维度相同。如果在行位置使用省略号,它将返回包含行中元素的ndarray。importnumpyasnpa=np.array([[1,2,3],[4,5,6]])print(a[...,1])#第2列元素print(a[1,...])#第2行元素print(a[...,1:])#第2列及剩下的所有元素输出结果如下[245][345][[23][45][56]]ThankYOU!ndarray数学运算3NumPy的数学运算NumPy的算术函数可以用于执行算术运算函数的输入数组必须具有相同的形状或符合数组广播规则12数学运算示例示例1:加减乘除importnumpyasnpa=np.arange(9).reshape(3,3)b=np.array([10,10,10])print('加法运算:\n',np.add(a,b))print('减法运算:\n',np.subtract(a,b))print('乘法运算:\n',np.multiply(a,b))print('除法运算:\n',np.divide(a,b))输出结果如下:2数学运算示例示例2:numpy.diff()沿着指定轴计算第N维的离散差值importnumpyasnpa=np.array([1,2,4,7,11,16,22])print(np.diff(a))输出结果如下:[123456]2数学运算示例示例3:numpy.mod()返回两个输入数组中相应元素相除后的余数a=np.array([10,20,30])b=np.array([3,5,7])print('第一个数组:',a)print('第二个数组:',b)print('求余数运算0:',np.mod(a,b))print('求余数运算1:',np.remainder(a,b))输出结果如下:第一个数组:[102030]第二个数组:[357]求余数运算0:[102]求余数运算1:[102]2数学运算示例示例4:numpy.reciprocal()返回数组的倒数。对于整数数组中的绝对值大于1的元素,由于Python处理整数除法的方式,结果始终为0。importnumpyasnpnp.seterr(divide='ignore')a=np.array([0,0.25,1/3,1.33,1,100])print('原数组:',a)print('倒数:',np.reciprocal(a))b=np.array([1,2,10,100],dtype=)print(b,'的倒数:',np.reciprocal(b))c=np.array([1,2,10,100],dtype=np.float)print(c,'的倒数:',np.reciprocal(c))输出结果如下:原数组:[0.0.250.333333331.331.100.]倒数:[inf4.3.0.75187971.0.01][1210100]的倒数:[1000][1.2.10.100.]的倒数:[1.0.50.10.01]2数学运算示例示例5:numpy.power()将第一个输入数组中的元素作为底数,将第二个输入数组作为指数,作幂运算。importnumpyasnpa=np.array([10,100,1000])print('数组:',a)print('幂函数:',np.power(a,2))b=np.array([1,2,3])print('幂函数:',np.power(a,b))输出结果如下:数组:[101001000]幂函数:[100100001000000]幂函数:[10100001000000000]2数学运算示例示例6:numpy.sqrt()返回数组的平方根。如果输入数组中有负数,对应的平方根输出为nan。importnumpyasnpa=np.array([0,1,4,9,16,25])print(np.sqrt(a))print(np.sqrt(16))输出结果如下:[0.1.2.3.4.5.]4.02数学运算示例示例7:numpy.amin()和numpy.amax()函数沿指定轴从给定数组中的元素返回最小值或最大值。importnumpyasnpa=np.array([[3,7,5],[8,4,3],[2,4,9]])print('数组:\n',a)print('最小值:',np.amin(a),'最大值:',np.amax(a))print('每行的最小值:',np.amin(a,axis=1))print('每列的最小值:',np.amin(a,axis=0))print('每行的最大值:',np.amax(a,axis=1))print('每列的最大值:',np.amax(a,axis=0))输出结果如下:2数学运算示例示例8:numpy.ptp()返回数组元素最大值和最小值的差importnumpyasnpa=np.array([[3,7,5],[8,4,3],[2,4,9]])print('数组:\n',a)print('最小值:',np.amin(a),'最大值:',np.amax(a))print('最大值与最小值的差:',np.amax(a)-np.amin(a))print('最大值与最小值的差:',np.ptp(a))print(np.amax(a,axis=1)-np.amin(a,axis=1))print(np.ptp(a,axis=1))print(np.amax(a,axis=0)-np.amin(a,axis=0))print(np.ptp(a,axis=0))输出结果如下:2数学运算示例示例9:numpy.median()返回数组的中位数importnumpyasnpa=np.array([[30,65,70],[80,95,10],[50,90,60]])print('数组:\n',a)print('中位数:',np.median(a))print('每行的中位数:',np.median(a,axis=1))print('每列的中位数:',np.median(a,axis=0))输出结果如下:2数学运算示例示例10-1:numpy.mean()numpy.mean():返回数组的算术平均值,可以沿轴计算。importnumpyasnpa=np.array([[1,2,3],[3,4,5],[4,5,6]])print('算术平均值:',np.mean(a))print('每行的算术平均值:',np.mean(a,axis=1))print('每列的算术平均值:',np.mean(a,axis=0))输出结果如下:算术平均值:3.6666666666666665每行的算术平均值:[2.4.5.]每列的算术平均值:[2.666666673.666666674.66666667]2数学运算示例示例10-2:numpy.average()返回数组的加权平均值importnumpyasnpa=np.array([1,2,3,4,5])#不指定权重时相当于mean函数print('算术平均值:',np.mean(a))print('算术平均值:',np.average(a))#指定权重参数wts=np.array([1,2,1,2,1])print('加权平均值:',np.average(a,weights=wts))print('加权平均值以及权重的和:',np.average([1,2,3,4],weights=[4,3,2,1],returned=True))输出结果如下:算术平均值:3.0算术平均值:3.0加权平均值:3.0加权平均值以及权重的和:(2.0,10.0)2数学运算示例示例11:numpy.std()和numpy.var()numpy.var():方差,
mean((x-x.mean())**2)。numpy.std():标准差,是方差的算术平方根。importnumpyasnpa=np.array([1,2,3,4])print('方差:',np.mean((a-np.mean(a))**2))print('方差:',np.var(a))print('标准差:',np.sqrt(np.var(a)))print('标准差:',np.std(a))输出结果如下:方差:1.25方差:1.25标准差:1.118033988749895标准差:1.118033988749895ThankYOU!基于NumPy的股票统计分析3读入股票交易数据01对数据进行统计分析021读入股票交易数据读入股票交易数据
股票市场变化很快,但是通过对历史数据的分析,也能发现一些规律,能对股民起到一定的辅助作用,本案例通过对股票交易中几个指标数据,利用numpy工具进行分析,得到一些新的分析指标。1读入股票交易数据importnumpyasnpparams=dict(fname='Tushare_data.csv',delimiter=',',usecols=(1,2,3,4,5),unpack=True,skiprows=1#这里需要注意的是会转换成float,因此要跳过第一行)openprice,highprice,closeprice,lowprice,volume=np.loadtxt(**params)print(openprice)#开盘价print(highprice)#最高价print(closeprice)#收盘价print(lowprice)#最低价print(volume)#成交量1读入股票交易数据输出结果如下:[9.919.859.910.1210.1810.2810.1310.3810.410.7310.9511.0110.710.4910.0310.][9.9810.0410.0310.1810.4610.5210.5210.3810.5110.7311.0711.3811.3510.8710.6110.24][9.8810.029.839.9710.1510.3510.3810.1510.4310.3510.8210.9711.10.7710.5910.11][9.679.739.79.8510.059.9810.059.9110.0710.0210.4210.8210.6610.289.959.51][371024.72403037.44425117.468867.31416224.09514386.25547808.19562862.94523435.22921904.19738088.69647724.44737837.31648425.25827487.12594674.38]11读入股票交易数据取数据使用了numpy.loadtxt函数,需要传入5个关键字参数:fname是文件名,数据类型为str;delimiter是分隔符,数据类型为str;usecols是读取的列数,数据类型为元组,元组有多少个元素,就读取多少列;unpack是否解包,数据类型为bool;skiprows可选,可以用于跳过第一行,数据类型为int。2对数据进行统计分析2对数据进行统计分析1、计算成交量加权平均价格
成交量加权平均价格(Volume-WeightedAveragePrice,VWAP)是将多笔交易的价格按各自的成交量加权而算出的平均价,结合了成交量与价格动向,用来衡量某个证券交易的平均价格。
print('成交量加权平均价格:',np.average(closeprice,weights=volume))输出结果如下:成交量加权平均价格:10.4261774830465872对数据进行统计分析2、计算股票近期最高价的最大值和最低价的最小值
print('最高价的最大值:',highprice.max())print('最低价的最小值:',lowprice.min())输出结果如下:最高价的最大值:11.38最低价的最小值:9.512对数据进行统计分析3、计算最高价的最大值和最小值的差,计算最低价的最大值和最小值的差
print('最高价的最大值和最小值的差:',highprice.ptp())#highprice.max()-highprice.min()print('最低价的最大值和最小值的差:',lowprice.ptp())输出结果如下:最高价的最大值和最小值的差:1.4000000000000004最低价的最大值和最小值的差:1.31000000000000052对数据进行统计分析4、计算收盘价的中位数
print('收盘价的中位数:',np.median(closeprice))输出结果如下:收盘价的中位数:10.352对数据进行统计分析5、计算收盘价的方差
print('收盘价的方差:',np.var(closeprice))输出结果如下:收盘价的方差:0.134343359374999972对数据进行统计分析6、计算年波动率和月波动率年波动率:对数收益率的标准差除以其均值,再乘以交易日的平方根,通常交易日取252。月波动率:对数收益率的标准差除以其均值,再乘以交易月的平方根,通常交易月取12。对数收益率:所有价格取对数之后两两之间的差值。
2对数据进行统计分析logreturn=np.diff(np.log(closeprice))print('对数收益率:',logreturn)annual_vol=logreturn.std()/logreturn.mean()*np.sqrt(252)print('年波动率:',annual_vol)month_vol=logreturn.std()/logreturn.mean()*np.sqrt(12)print('月波动率:',month_vol)输出结果如下:对数收益率:[0.01407058-0.019144160.014141650.017893120.019512810.00289436-0.022407170.02721256-0.007699750.044409750.0137680.002731-0.02113078-0.01685433-0.04638513]年波动率:235.82999709952244月波动率:51.46232442141798ThankYOU!pandas数据结构4数据结构的创建01基本属性和方法数据访问0203重置索引041数据结构的创建1数据结构的创建pandas是Python的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。pandas建造在NumPy之上,所以使得pandas在以NumPy为中心的应用中得以容易的使用,而pandas库在与其它第三方科学计算支持库结合时也能够完美的进行集成。在Python中,pandas库的功能十分强大,它可提供高性能的矩阵运算。可用于数据挖掘和数据分析,同时也提供数据清洗功能;支持类似SQL的数据增、删、查、改,并且带有丰富的数据处理函数;支持时间序列分析功能;支持灵活处理缺失数据等。1数据结构的创建pandas有两个强大的利器。Series(一维数据)是一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成,而仅由一组数据也可产生简单的Series对象。DataFrame是pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame既有行索引也有列索引,可以被看做是由Series组成的字典。1数据结构的创建Series创建:pandas.Series(
data,
index,
dtype,
copy)
说明参数data数据采用各种形式,例如ndarray,列表,常量。index数据索引标签,必须长度与数据相同。如果未传递索引,则默认自动生成从0开始的整数索引。dtypedtype用于数据类型,默认会自己判断。name设置名称。copy复制数据,默认为False。1数据结构的创建DataFrame的创建:pandas.DataFrame(
data,
index,
columns,
dtype,
copy)
参数说明data数据类型,例如ndarray,series,map,list,dict等。index索引值或行标签。columns列标签,可选。默认为np.arange(n)。dtype数据类型。copy复制数据,默认为False。2基本属性和方法2基本属性和方法pandas.Series的基本属性和方法属性或方法说明axes返回一个行索引(标签)列表。index返回行索引。dtypes返回此对象中的数据类型。empty如果Series完全为空,则返回true;否则返回false。ndimSeries维度。size返回元素个数。values以ndarray的形式返回Series中的实际数据。2基本属性和方法DataFrame的基本属性和方法属性或方法说明T转置行和列。axes返回行索引和列名的列表。index返回行索引。columns返回列名。dtypes返回此对象中的dtypes。empty如果DataFrame完全为空,则为true;否则为false。ndimDataFrame维度。shape返回表示DataFrame大小的元组。size元素个数。values以ndarray的形式返回DataFrame中的实际数据。astype()数据类型转换。to_numpy()输出实际数据的NumPy对象,不包含索引和列名。3数据访问3数据访问示例1:根据位置或索引输出Series对应元素importnumpyasnpimportpandasaspds=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])print(s[0])#输出第一个元素print(s['a'])#输出索引a对应的元素s[0]=6#通过位置对元素进行修改s['b']=7#通过索引对元素进行修改print(s)输出结果如下:3数据访问示例2:检索元素importnumpyasnpimportpandasaspds=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])#根据位置检索元素print(s[:3])#检索前三个元素print(s[-3:])#检索最后三个元素#根据索引检索元素print(s[['a','c','d']])输出结果如下:3数据访问示例3:删除行importpandasaspddata={'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,4],index=['a','b','d'])}df=pd.DataFrame(data)df=df.drop('a')#删除第1行print(df)输出结果如下:onetwob2.02.0c3.0NaNdNaN4.03数据访问示例4:pd.DataFrame.loc()loc函数可以按照索引来进行行列选择importpandasaspddata={'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,4],index=['a','b','d']),'three':pd.Series([10,20,30,40],index=['a','b','c','d'])}df=pd.DataFrame(data)print('DataFrame:\n',df)#读取行:将行标签传递给loc函数来选择行,如果要读取多行,可以通过DataFrame.loc[index1,index2,…]]来进行读取。print("读取行索引为b的行:\n",df.loc['b'])print("读取行索引为b和c的行:\n",df.loc['b':'c'])print('读取全部数据:\n',df.loc[:])#df.loc[:]等价于df.loc[:,:]#读取列print('读取列索引为‘one’的列:\n',df.loc[:,'one'])print('读取列索引为‘two’和‘three’的列:\n',df.loc[:,['two','three']])#读取区块:可以写成“[起始索引,终止索引]”或“起始索引:终止索引”print("读取index为'c','d',column为'two','three'的数据:\n",df.loc[['c','d'],['two','three']])3数据访问输出结果如下:4重置索引4重置索引重置索引分为两种:一种是将现有DataFrame的一列作为列标签。一种是将DataFrame数据与其他的数组或者DataFrame进行对齐。4重置索引示例1:set_index()和reset_index()set_index():将现有的一列设置为列标签。reset_index():将原标签归为数据,重置为默认列标签。importpandasaspddf=pd.DataFrame([['a',1],['c',3],['b',2],['d',4]],columns=['letter','num'])print(df)df1=df.set_index('num')print(df1)print(df1.reset_index())输出结果如下:4重置索引示例1:rename()基于某些映射(字典或系列)或任意函数来重新标记轴。importnumpyasnpimportpandasaspddf=pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])print(df)print("更改行、列名:")print(df.rename(columns={'col1':'c1','col2':'c2','col3':'c3'},index={1:6,3:7,5:8}))输出结果如下:4常用数据标注工具2、图像标注工具LabelImgLabelImg是一个图像标注工具,它是使用python的qt开发的。通过它标注图像生成的标签文件支持xml、PASCALVOC、YOLO。优点:跨平台,支持Linux、MacOS、Windows安装方便使用简单。缺点:只支持矩形框的标注。4常用数据标注工具3、语音标注工具PraatPraat,是目前比较流行也比较专业的语音处理的软件,可以进行语音数据标注、语音录制、语音合成、语音分析等等,同时生成各种语图和报表免费、占用空间小、通用性强、可移植性好等特点ThankYOU!pandas数据处理4数据读写01数据清洗数据转换0203数据合并与拼接041数据读写1数据读写文本文件是一种由若干行字符构成的计算机文件,它是一种典型的顺序文件。CSV是一种用分隔符分隔的文件格式,因为其分隔符不一定是逗号,所以又被称为字符分隔文件。文本文件以纯文本形式存储表格数据(数字和文本),它是一种通用、相对简单的文件格式,最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的、无规范的格式)。大量程序都支持CSV或其变体,所以CSV或其变体可以作为大多数程序的输入和输出格式。1数据读写CSV文件根据其定义也是一种文本文件。在数据读取过程中可以使用文本文件的读取函数对CSV文件进行读取。同时,如果文本文件是字符分隔文件,那么可以使用读取CSV文件的函数进行读取。pandas提供了read_table()函数读取文本文件,提供了read_csv()函数读取CSV文件。1数据读写pandas.DataFrame.to_csv(path_or_buf)#csv文件pandas.read_csv(filepath_or_buffer)pandas.DataFrame.to_excel(excel_writer,sheet_name='Sheet1')#xlsx文件pandas.read_excel(io,
sheet_name=0)
2数据清洗2数据清洗数据处理中的数据清洗主要包括对空值、重复值和异常值的处理。空值也称缺失值,一般可以选择删除或者进行填充。重复值一般在检测出来之后直接删除。异常值的判断往往依赖具体分析数据,一般采取删除和替换。这里主要学习对空值和重复值的处理方法。2数据清洗1、缺失值缺失值是指现有数据集中某个或某些属性的值是不完整的。主要有三种处理方法:删除:将存在缺失值的样本删除,或将缺失数据较多的特征删除。补全:对于数值型数据,可以采用均值、中位数、固定值等填充;对于离散型数据,可以采用众数、固定值等填充,也可以训练一个模型来预测缺失数据,如k-means聚类等方法进行补全。不处理:有一些模型自身能够处理数据缺失的情况,在这种情况下不需要对数据进行任何处理。2数据清洗示例1:删除缺失值DataFrame.dropna(axis=0,how=’any’,thresh=None,subset=None,inplace=False)参数说明axis默认为0,表示有空值时,删除整行;axis=1时,表示有空值时去掉整列。how默认为'any',表示如果一行(或一列)里任何一个数据为缺失值就去掉整行(或列),如果设置how='all'表示一行(或列)都缺失才去掉这整行(或列)。thresh设置需要多少非空值的数据才可以保留下来。subset设置想要检查的列。如果是多个列,可以使用列名的列表作为参数。inplace如果设置True,将计算得到的值直接覆盖之前的值并返回None,这里是对源数据进行修改。2数据清洗importnumpyasnpimportpandasaspddata={'Name':pd.Series(['张三','李四','王五','赵六','孙七']),'Math':pd.Series([88,75,np.nan,98,59]),'Chinese':pd.Series([78,88,91,69,65]),'English':pd.Series([65,95,98,72,np.nan]),'Nan':pd.Series([np.nan,np.nan,np.nan,np.nan,np.nan])}df=pd.DataFrame(data)print('删除有缺失值的行:\n',df.dropna())#如果有空值,则删除整行print('删除有缺失值的列:\n',df.dropna(axis=1))#如果有空值,则删除整列print('删除全部为缺失值的列:\n',df.dropna(axis=1,how='all'))#只有当所有值都为Nan时,才会删除2数据清洗示例2:填充缺失值DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None)参数说明value用来填充的值,不能是列表。method默认为None,取值为{'backfill','bfill','pad','ffill',None}。pad/ffill:表示用上一个有效值进行填充。backfill/bfill:表示用下一个有效值进行填充。axis表示轴,{0or'index',1or'columns'}。inplace如果设置True,将计算得到的值直接覆盖之前的值并返回None,这里是对原数据进行修改。limitint,默认为None,表示填充连续Nan值的最大数目,也就是说如果有超过这个值的连续缺失值,会部分填充。如果未指定method,则表示全部填充。2数据清洗importpandasaspdimportnumpyasnpdata={'Name':pd.Series(['张三','李四','王五','赵六','孙七']),'Math':pd.Series([88,75,np.nan,98,59]),'Chinese':pd.Series([78,88,91,69,65]),'English':pd.Series([65,95,98,72,np.nan])}df=pd.DataFrame(data)print("Math:使用0填补缺失值:")print(df['Math'].fillna(0))print('English:使用均值填补缺失值')print(df['English'].fillna(np.mean(df['English'])))2数据清洗2、重复值重复值的处理过程主要包括检测重复值和删除重复值。pandas通过duplicated函数来检测重复值,返回布尔值,重复出现就返回True,否则返回False。通过drop_duplicates函数来删除重复值。pd.DataFrame.duplicated(subset=None,keep='first')pd.DataFrame.drop_duplicates(subset=None,keep='first',inplace=False,ignore_index=False)2数据清洗示例:duplicated()和drop_duplicates()importpandasaspddf=pd.DataFrame(data=[['a',1],['a',2],['b',1],['b',2],['a',1]],columns=['label','num'])print(df)print(df.duplicated())#这一行内容与之前某一行完全相同才会去掉print(df.drop_duplicates())输出结果如下:2数据清洗设置subset='label':print(df.duplicated('label'))#只要label之前出现过就去掉print(df.drop_duplicates('label'))#不重新索引print(df.drop_duplicates('label',ignore_index=True))#重新索引输出结果如下:3数据转换3数据转换不管是为pandas对象应用自定义函数,还是应用第三方函数,都离不开以下几种方法:(1)pipe():用于对整个DataFrame进行操作。(2)apply()/transform():用于对行或列来进行操作。(3)applymap():用于按元素进行操作。3数据转换示例1:transform()transform函数可以对DataFrame进行运算,而且transform可以同时计算多个函数的结果importnumpyasnpimportpandasaspddf=pd.DataFrame(np.random.randn(3,3),columns=['col1','col2','col3'])print(df)print(df.transform(lambdax:x*100))print(df.transform([np.exp,lambdax:x*100]))#多个函数输出结果如下:4数据合并与拼接4数据合并与拼接pandas提供了多种方法对DataFrame进行合并或拼接,常用的包括concat、merge、join和append,本单元主要介绍如何使用append函数。append是只能在axis=0上进行合并pandas.DataFrame.append(self,other,ignore_index=False,sort=False)4重置索引示例:append()importpandasaspddf1=pd.DataFrame({'A':[0,1,2],'B':[3,4,5]})df2=pd.DataFrame({'a':[1,2,3],'c':[4,5,6]})df1.append(df2)输出结果如下:ThankYOU!pandas数据统计4统计方法01数据排序GroupBy0203pandas日期处理041统计方法1统计方法统计方法有助于理解和分析数据的行为示例1:head()、tail()和sample()head():返回前n行,默认n=5。tail():返回最后n行,默认n=5。sample():随机返回5行。1统计方法importnumpyasnpimportpandasaspds=pd.Series(np.random.randn(5),index=['r1','r2','r3','r4','r5'])print("前3行:\n",s.head(3))print("后2行:\n",s.tail(2))data={'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),'Age':pd.Series([25,26,25,23,30,29,23]),'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}df=pd.DataFrame(data)print("前5行:\n",df.head())print("后4行:\n",df.tail(4))输出结果如下:1统计方法示例2:describe()describe():主要介绍数据集各列的数据统计情况(最大值、最小值、标准偏差、分位数等等)。对于非数值型Series对象,返回值的总数,唯一值数量,出现次数最多的值和出现的次数。对于混合型的DataFrame对象,返回数值列的汇总统计量,如果没有数字列,则只显示类别型的列。pd.DataFrame/Series.describe(percentiles=None,include=None,exclude=None,datetime_is_numeric=False)参数说明percentiles指定输出结果包含的分位数。include参数的值为列表,用该参数可以控制包含的数据类型。可以取值为all,表示所有输入的数据类型都被输出。exclude参数的值为列表,用该参数可以控制排除的数据类型。默认为None,表示不排除任何数据类型。datetime_is_numeric布尔类型,默认为Fasle,是否将datetime的数据类型视为数字。1统计方法importpandasaspdd
=
{'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
'Lee','David','Gasper','Betina','Andres']),
'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度企业并购与股权转让合同标的
- 2024年度建筑设计顾问服务合同
- 2024年度保险合同保险范围和保险费用支付2篇
- 保证合同的概念特征3篇
- 二零二四年坯布生产与玩具制造合作合同
- 二零二四年度硫精矿购销合同
- 二零二四年排水管施工工程物流服务合同
- 2024年度医疗服务设备采购与维护合同3篇
- 2024年度变电站设计工程承包合同2篇
- 二零二四年度腾讯社交广告投放协议
- 教练技术三阶段讲义(共58页)
- 独自在家通用课件
- 购神华煤-平台公司函件
- 中医保健养生PPT课件:冬季养生
- 房屋面积测绘细则
- 法律法规培训记录
- 《酒店情境英语》M2U2Check-in教案
- 企业会计准则--基本准则
- 干式壳管式蒸发器设计设计说明书
- 建筑施工企业三类人员变更申请表(外省市)
- 串激电机基本原理(共9页)
评论
0/150
提交评论