财经大数据分析-以Python为工具 课件第5-7章 筛选财务报表数据-应用数据筛选、合并财务报表-应用数据合并、制作数据透视表和计算行业竞争度-应用数据分组_第1页
财经大数据分析-以Python为工具 课件第5-7章 筛选财务报表数据-应用数据筛选、合并财务报表-应用数据合并、制作数据透视表和计算行业竞争度-应用数据分组_第2页
财经大数据分析-以Python为工具 课件第5-7章 筛选财务报表数据-应用数据筛选、合并财务报表-应用数据合并、制作数据透视表和计算行业竞争度-应用数据分组_第3页
财经大数据分析-以Python为工具 课件第5-7章 筛选财务报表数据-应用数据筛选、合并财务报表-应用数据合并、制作数据透视表和计算行业竞争度-应用数据分组_第4页
财经大数据分析-以Python为工具 课件第5-7章 筛选财务报表数据-应用数据筛选、合并财务报表-应用数据合并、制作数据透视表和计算行业竞争度-应用数据分组_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

Python与财经大数据分析基础第5章

筛选财务报表数据——应用数据筛选

CONTENTS目录5.1索引的基本类型5.2索引设定与获取5.3Series对象的索引与切片5.4DataFrame对象的索引与切片5.5应用实践索引概念:当打开一本书,我们如何才能迅速的找到我们要找到知识点?索引(书的目录)为我们提供了便利。这类似于从庞杂的关系型数据库中找到需要的数据。通过索引,我们可以很方便的从关系型数据库中定位数据、选择数据和筛选数据。索引提供指向存储在表的指定列中的数据值的指针,数据库使用索引可以方便的找到特定值,然后顺指针找到包含该值的行。DataFrame数据结构属于关系型数据对象,借助索引,我们可以实现数据的查询、切片与筛选等。5.1索引的基本类型5.1索引的基本类型基本属性:行索引—index列索引—columns二维数据——value5.1索引的基本类型在DataFrame中,通过各种索引可以查找、定位和选择我们想要的数据,根据对数据的检索方式不同,又可以分为如下几种索引:位置索引标签索引布尔索引5.1索引的基本类型5.1.1位置索引顾名思义,就是通过元素所处的相对位置进行筛选和定位。也就是说,在DataFrame中,我们根据行索引(index)和列索引(columns)的相对位置信息来确定和检索数据。在Python语言中,我们把第一行和第一列都定义为0(行或列),第二行和第二列都定义为1(行或列),并以此类推……5.1索引的基本类型例如,如果在一个3行4列的表格中,我们要想筛选和定位到黄色格子中的数据,可以选择输入这个格子所在的相对位置进行定位。5.1索引的基本类型5.1.2标签索引在DataFrame数据结构中,我们可以对表格的行设置行标签(Index),对表格的列设置列标签(Columns),对表格中数据的定位可以通过输入其所对应的行列标签实现。5.1索引的基本类型我们可以将行标签定义为[1,2,3],将列标签定义为[‘w’,‘a’,‘n’,‘g’],那么此时通过标签对表格中黄色格子的数据定位为(2,‘n’)5.1索引的基本类型5.1.3布尔索引布尔索引,又叫逻辑索引,是通过借助True或False判断来返回数据的一种方法。通过布尔索引,我们可以对DataFrame中的Value进行逻辑判断,然后返回条件为True的值,过滤掉条件为False的值。在数据框中,我们可以根据数据过滤数据。可以使用不同的运算符对数据框应用某些条件,例如==、>、<、<=、>=。当我们将这些运算符应用于数据帧时,它会产生一系列True或False。5.1索引的基本类型布尔值如右表所示:根据布尔值为真的条件,返回数值,并形成一个新表。5.2索引设定与获取5.2索引设定与获取设定便于引用和调整的索引可以帮助我们更容易地进行数据筛选与数据分析。在实际财会数据处理的过程中,我们往往需要将其中一列或几列数据设为索引以方便进行数据分析。set_index()与reset_index()两个函数可以帮助我们非常容易地完成这类设定。5.2索引设定与获取5.2.1set_index()set_index()函数可以将DataFrame中的某一列或某几列设置为列索引。5.2索引设定与获取5.2.2reset_index()在设定索引后,有时我们需要取消索引或者更换索引,这时可以使用reset_index()函数对原索引进行重制(reset),以下是该函数的基本语法。5.2索引设定与获取5.2.3多级索引除了简单的一维数据和二维数据,在分析财会数据时我们时常需要构建并储存多维数据,即数据索引会超过2个键,例如,在处理面板数据时,行索引可能需要用公司代码和会计年度构成,而列索引可能由各类财务指标名称构成。对此,Pandas提供了Panel和Panel4D对象解决三维数据与四维数据的构建与索引问题。在实践中,一般通过层级索引(hierarchicalindexing,也被称为多级索引,multi-indexing)配合多个有不同等级(level)的一级索引一起使用,这样可以将高维数组转换成类似一维Series和二维DataFrame对象的形式。表5-1展示了通过多级索引表现三维张量的逻辑:5.2索引设定与获取下表展示了通过多级索引表现三维张量的逻辑:在对面板数据进行处理与分析时,设定多级索引可以帮助我们更方便地筛选与统计数据情况。5.2索引设定与获取5.2.4布尔索引:比较与逻辑运算(1)运算符除了算数运算之外,Python中还有比较运算和逻辑运算两类常用的运算,通常使用对应的运算符进行。下表展示了Python中常用的比较与逻辑运算符及其含义。5.2索引设定与获取值得注意的是,Python中的关键字and、or、not也可以进行逻辑运算,通常与逻辑运算符获得的结果一致,但在某些情况下会有所区别。当我们使用and或or时,相当于让Python判断整个对象的真假,而&和|是指判断对象中每个元素的布尔值。如下例所示,当我们对A和B两个由0和1组成的Series进行“或”的逻辑运算时,使用运算符“|”会对其中每个元素进行“或”的逻辑运算,其中有一个元素为1(True)即输出1(True),而当我们使用or进行逻辑运算时,系统会报错,提示我们整个Series对象的布尔值无法确定,因此无法进行逻辑运算。5.2索引设定与获取(2)Pandas的运算函数A.query()函数query()函数使用字符串代数式的作为输入条件进行数据筛选,输入的字符串使用代数式的方法表示对某列特定的过滤规则。虽然query()函数形式简洁,但是性能高且节省内存,特别适合处理复合条件的运算。5.2索引设定与获取B.isin()函数使用isin()函数,不仅可以对整个DataFrame进行筛选,而且可以针对DataFrame中的特定列(Series)进行筛选,还可以用DataFrame中的某一列对另一个DataFrame中的数据进行筛选。5.2索引设定与获取C.between()函数有时我们需要筛选出特定范围内的数据,例如筛选收盘价格在16.30到16.50之间的数据,如果通过逻辑判断进行,则需要使用复合逻辑判断语句,代码较为繁复。Between()函数能简化上述筛选过程,表达式也更具有可读性,因此比较适合在需要编写许多筛选条件时使用。=5.2索引设定与获取(3)Pandas的字符串方法在实际处理财会数据的过程中,除了要对数值进行比较与逻辑运算,往往还需要对字符串进行操作和比较,提取出包含(或者不包含)某些字符的数据,例如,提取出行业代码包括“C”的公司等。使用Python的一个优势就是字符串处理起来比较容易,在此基础上,Pandas提供了一系列处理字符串的方法,它们都是在数据筛选和清洗时不可或缺的功能。Pandas为包含字符串的Series和DataFrame提供了str属性,既包括Python内置的字符串方法,如len()、lower()、upper()等,又包括其他Pandas独有的字符串方法,如get()、get_dummies()、slice()等。在这一小节中我们介绍常用的几种字符串方法,如下表所示。5.2索引设定与获取5.3Series对象的索引与切片5.3Series对象的索引与切片Series对象是Pandas中的由带索引数据构成的一维数据结构。与NumPy的ndarray结构类似,区别在于Series对象带有显式定义的索引。Series具有values和index两个属性,values代表值,index代表显式定义的索引。Pandas会默认用0到n-1的有序整数作为Series的index,但我们也可以根据需求自行指定各种类型的index。Series对象可以通过列表、数组、字典创建,也可以通过DataFrame中某一行或者某一列创建。对Series对象的获取与选择可以通过位置索引、标签索引和布尔索引进行。5.4DataFrame对象的索引与切片5.4DataFrame对象的索引与切片在数据处理时,二维的DataFrame对象更加常见。DataFrame可以被看作是有序排列的若干Series对象,也可以被看作是带有行索引和列索引的二维数组。DataFrame由data、index及columns构成,data为DataFrame中存储的数据,index指定行索引,columns指定列索引。Pandas提供了一系列方法对DataFrame数据进行筛选。利用DataFrame的行列标签以及隐性位置标签,我们可以选取某个单元格的数据、某一行(列)或某几行(列)数据、以及某几行的特定几列的数据。实现数据筛选,既可以通过简单的df[]的字典形式(dictionary-style)实现,也可以使用df.loc[]、df.iloc[]、df.at[]、df.iat[]等常用的索引器(indexer)实现。接下来我们将对这几种方式进行具体讲解。5.4DataFrame对象的索引与切片5.4.1字典形式选取由于DataFrame具有行标签和列标签两种显式索引,在进行字典形式的数据选取时需要特别注意输入的标签Pandas会理解为是行标签还是列标签,以避免筛选错误。具体而言,字典形式的选取可以用“df[]”的形式(df为DataFrame名称)选取数据,方括号中可以有三种输入,包括传入行位置索引或行标签表示的切片索引进行行切片(选取多行)、传入单个列标签或一组列标签选择单列或一组列(选取单列或多列)、以及传入布尔索引选取出符合条件的数据。5.4DataFrame对象的索引与切片5.4.2loc与iloc(1)locloc索引器属性表示索引和切片操作都依赖于显式索引,通过行标签或列标签进行取值,其基本语法如下。5.4DataFrame对象的索引与切片5.4.2loc与iloc(2)ilociloc索引器属性指索引和切片过程中都依赖隐式索引,通过整数形式的位置索引进行取值,其基本语法如下。5.4DataFrame对象的索引与切片5.4.3at与iat位置定位功能中at与iat是两种不同的索引方法,主要用于点选取。5.4DataFrame对象的索引与切片5.4.4filter()在数据处理过程中,我们有时不清楚具体的行列标签,或者有时想要筛选出标签名称符合某些规律的行列标签,这时,filter()函数就派上了用场,以下是该函数的基本语法。5.4

DataFrame对象的索引与切片5.4.5np.where()与分位数索引除了前文介绍的Pandas提供的筛选方法,Numpy也提供了相应的定位函数,如where()函数5.4

DataFrame对象的索引与切片5.4.6多级索引筛选运用多级索引可以帮助我们快速地从面板数据中筛选出我们所需要的数据。与单索引类似,上文介绍的字典形式取值与loc、iloc等索引器都可以应用在多级索引上。用元组表示索引是多级索引的基础。在使用多级索引筛选数据之前,为了避免混淆导致的错误,我们首先区分在多级索引中元组和列表两个不同的概念:5.5应用实践5.5应用实践财务报表是财务分析的基础,在会计实证研究中,我们常常需要用处理从数据库中导出的财务报表。我们以从国泰安数据库下载的2018年-2020年的资产负债表和利润表为例,展示本节讲解的各类数据筛选方法。Python与财经大数据分析基础第6章

合并财务报表——应用数据合并

CONTENTS目录6.1数据拼接:concat()与append()6.2数据合并:merge()与join()6.3combine_first()与update()填充6.4应用实践数据合并种类:1.上下拼接(纵向合并)2.左右拼接(横向合并)合并后的数据:1.交集2.并集3.左对齐4.右对齐6.1数据拼接:concat()与append()6.1数据拼接:concat()与append()6.1.1concat()函数在工作中经常会遇到多个表进行拼接合并的需求,在pandas中有多个拼接合并的方法,每种方法都有自己擅长的拼接方式pd.concat()函数可以沿着指定的轴将多个dataframe或者series拼接到一起通过该函数参数控制,可以实现多个表格上下拼接,左右拼接,内连接和外链接6.1数据拼接:concat()与append()6.1数据拼接:concat()与append()6.1.2

append()函数在现有DataFrame后追加新的行或新的数据。具有相同列的数据,追加。如果列不同,将会创建新列。一般用来纵向合并。6.1数据拼接:concat()与append()6.2数据合并:merge()与join()6.2数据合并:merge()与join()6.2.1merge()函数merge()是pandas最常用的合并函数,能将两张表的横轴按共同列进行合并。每次两两合并。一般用来横向合并。6.2数据合并:merge()与join()6.2数据合并:merge()与join()6.2.1join()函数join()是依附于Series或DataFrame对象的进行合并的方法,可以视为对pandas.merge()函数的一种快捷的方法。该方法可以指定索引或者共同列作为合并键将另一个Series或DataFrame对象合并到原有的对象上,多用于“一对一”和“一对多”关系下的横向合并。6.2数据合并:merge()与join()6.3combine_first()与update()填充6.3combine_first()与update()填充6.3.1combine_first()方法使用combine_first()方法可以将一张表的非空值依据行、列索引一致的规律填充进入另一张表的空值中,填充结果的行列索引为两张表行列索引的并集。6.3combine_first()与update()填充6.3.2update()方法使用update()方法,可以将输入的表中的非空值根据行列索引对齐的规则,直接填充进原表格。与combine_first()方法相比,update()方法不会生成新的对象,而是直接改变被填充的表格,集合操作规则默认为左连接(left)。6.4应用实践6.4应用实践在财经大数据的分析过程中,准确地合并不同来源、不同结构的数据是必要的过程。例如,为了对公司的财务表现进行综合分析,我们往往需要合并公司的成立年份、行业、股权结构等数据,以便进行横向和纵向的财务指标对比分析。下面我们以从国泰安数据库下载的2018年-2020年的资产负债表、利润表与公司基本信息表,以及第四章来自wind数据库的股权结构为例,展示本节讲解的各类数据合并方法。Python与财经大数据分析基础第7章制作数据透视表和计算行业竞争度——应用数据分组

CONTENTS目录04数据排序与排名05数据分箱06应用实践01概述02Groupby语法03数据聚合与计算01概述根据所给数据,根据特定标签或分类变量对整体数据进行分组,从而实现数据的高效分类计算。现实中,我们经常需要根据特定标签或字段,对整体数据进行分组处理和操作。例如:

按照上市公司资产规模分两组,计算每组市值加权平均收益率;按照公司是否被提起民事诉讼分为两类,并统计他们的特征;按照班级计算学生的平均成绩等等。

7.1概述(一)分组假设,我们有一个数据,由4000多家上市公司的日交易数据构成。我们想分别把每一家上市公司的未来一期(t+1)的收益率return,做一个滞后(放到t期上显示),即对数据统一向后递延一期。该如何处理?

7.1概述(二)分组的应用示例处理流程:1)选择每一只股票;2)进行滞后处理3)合并所有股票数据数据处理方法:1)for循环每只股票;2)利用DataFrame分组函数高效处理7.1概述(二)分组的应用示例StkcdTrddtReturn(t)Return(t+1)X2022-11-140.010.02X2022-11-150.02-0.05X2022-11-16-0.05NaNY2022-11-150.030.01Y2022-11-160.010.06Y2022-11-170.06-0.02Y2022-11-18-0.02NaN02Groupby语法在DataFrame中,可以通过Groupby来进行分组操作。当调动Groupby时,它会生成一个分组对象,保存在内存里。接着,针对这个分组对象,我们可以引用所需函数进行分组计算。最后,再按照组别返回对应的处理结果,形成一个新的表单。

7.2Groupby语法(一)概述如图所示:

7.2Groupby语法(一)概述7.2Groupby语法(二)df.groupby()基本语法03数据聚合与计算7.3数据聚合与计算(一)概述在DataFrame中,引用Groupby对数据分组后,接下来就是引用相应的方法对数据分组聚合和计算。数据聚合的常用方法agg;数据分组计算的常用函数apply,自由度最高。7.3数据聚合与计算(二)数据聚合方法——aggdf.groupby(‘Key1’).agg({‘Key4’:[np.mean,np.count]})7.3数据聚合与计算(三)数据聚合方法——applydf.groupby(‘Column’).apply(func,axis=0)该函数是基于分组后,对组层面的运算;传入该函数的是分组后的,每一个DataFrame经过运算后返回为新的DataFrame或Series或Scalar,最终再合并输出为一个DataFrame。基本语法:func:对行或列进行运算的函数;axis:1表示对每列进行运算,0表示对每行进行运算;7.3数据聚合与计算(三)数据聚合方法——applydf.groupby(’class‘).apply(np.mean)classaroelevX3......Y1......Y3......X6......Y5......Z2......Z4......X9......Z6......classaroelevX3......X6......X9classaroelevY1......Y3......Y5classaroelevZ2......Z4......Z6......classaX6Y3Z404数据排序与排名7.4数据排序与排名(一)概述在DataFrame中,所谓排序,就是根据制定列或行对整体数据进行重新排列,方便浏览数据,也方便观察特定变量变化趋势,与其他变量之间的关系。所谓排名,则是根据指定列值的大小,进行排序,根据大小排序,并不改变原数据的排列。7.4数据排序与排名(一)概述classaX2Y1Y3X6classarank_aX23Y14Y32X61classaY1X2Y3X6排序排名7.4数据排序与排名(二)数据排序DataFrame.sort_values(by,*,axis=0,ascending=True,inplace=False)主要参数:by:str或listofstraxis:{0或‘index’,1或‘columns’}ascending:defaultTrue,升序排列,False是降序排列。inplace:排序后保留覆盖原数据。DataFrame.sort_index()7.4数据排序与排名(三)数据排名DataFrame.rank(axis=0,method='average',ascending=True)主要参数说明:axis{0or‘index’,

1or‘columns’},default0method{‘average’,‘min’,‘max’,‘first’,‘dense’},default‘average’当组内有重复值的时候如何处理:average:组均值;min:组最小值;max:组最大值;first:

按照出现在数据中的先后顺序;dense:类似min,但逐渐增加1。05数据分箱7.5数据排序与排名(一)概述变量分箱(binning)属于对连续变量离散化类型中的一种,例如,信用评分系统中一般有常用的等距分段、等深分段、最优分段。在资产定价领域,我们在计算famaandFrench规模因子SMB的时候,需要对规模按照中位数分为Big和Small两类。按照价值选股因子,综合打分,并根

温馨提示

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

评论

0/150

提交评论