财经大数据分析-以Python为工具 课件 王彦超 第1-7章 数据创建、数据查看-制作数据透视表和计算行业竞争度-应用数据分组_第1页
财经大数据分析-以Python为工具 课件 王彦超 第1-7章 数据创建、数据查看-制作数据透视表和计算行业竞争度-应用数据分组_第2页
财经大数据分析-以Python为工具 课件 王彦超 第1-7章 数据创建、数据查看-制作数据透视表和计算行业竞争度-应用数据分组_第3页
财经大数据分析-以Python为工具 课件 王彦超 第1-7章 数据创建、数据查看-制作数据透视表和计算行业竞争度-应用数据分组_第4页
财经大数据分析-以Python为工具 课件 王彦超 第1-7章 数据创建、数据查看-制作数据透视表和计算行业竞争度-应用数据分组_第5页
已阅读5页,还剩167页未读 继续免费阅读

下载本文档

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

文档简介

Python与财经大数据分析基础第1章——数据创建

CONTENTS目录1.1数据分析模块介绍1.2DataFrame简介1.3DataFrame数据创建1.4读取本地存储的数据1.5实操练习题1.1数据分析模块介绍1.1数据分析模块介绍数据,是一切分析的基础,科学地创建、整理数据,是得到可靠分析结果的重要前提。为了更好地进行数据分析,我们首先需要构建自己的数据集或数据库。在数据创建时,我们可以构建虚拟数据,也可以读取现有数据公司提供的数据,也可以利用网络爬虫爬取网上一些特色数据。通过Python的数据创建功能,可以实现数据的存储,方便后续的调用、清洗、运行、计算和分析。1.1数据分析模块介绍由于爬虫技术在后续章节会有介绍,所以本章主要介绍通过DataFrame自行创建,或通过读取结构化数据创建两种方式。1.2DataFrame简介1.2DataFrame简介在Python中,DataFrame是一种表格型数据结构,类似Excel,是Pandas中非常重要的结构化数据容器。通过DataFrame,数据分析过程中的繁琐操作在很大程度上简化了。DataFrame既有行索引,也有列索引,是二维数据结构,即数据以行和列的表格方式排列。DataFrame也被看做是一系列Series组成的字典。如图所示,DataFrame由index、columns及data构成。1.3DataFrame数据创建1.3DataFrame数据创建在进行数据创建时,可以借助Pandas模块中的DataFrame()函数。该函数的具体语法如下所示:1.3DataFrame数据创建(1)通过列表(list)创建当数据为列表(list)类型时,为方便后期分析与运算,通常会将列表(list)转变为DataFrame进行操作,同时可以定义index和columns的值。当由多个列表中创建DataFrame时,需要使用zip()函数。zip()函数返回一个zip类型的对象,将多个列表的相同位置的元素配对在一起,每个列表形成DataFrame不同的列。1.3DataFrame数据创建(2)通过数组(array)创建我们可以通过Pandas.DataFrame()函数将生成的数组转换成一个标准的DataFrame。为了更方便读取数据,我们可以分别定义index和columns的值。1.3DataFrame数据创建(3)通过字典(dict)创建作为一种可变容器模型,字典(Dictionary)可存储任意类型对象。当录入数据为字典(dict)类型时,通过Pandas.DataFrame()函数,可以很方便的将字典转变为DataFrame。其中,字典的Key对应DataFrame中column值,字典中每一对数据会形成一个Series,这些Series汇总到一起就是DataFrame中的columns。此外,在使用Pandas.DataFrame()函数对字典数据进行转换时,可以单独定义index参数。1.3DataFrame数据创建(4)通过序列Series创建 Series是Pandas库中一种基本的数据结构,属于一维数据形式,可以理解为n行2列的简单数据表格,第一列是索引(index),第二列是值(values)。作为二维数据结构的DataFrame可以拆分为一系列Series,同时一系列Series可以组合成DataFrame。基于此,DataFrame可以通过Series来创建。其中,index为Series的标签,columns对应各个Series。当遇到Series长度不同的情况时,缺失数据会显示为NaN。相比于用list创建DataFrame,用Series创建可以实现自动对齐。1.3DataFrame数据创建(5)时间序列数据创建有时候我们需要构建一个时间序列,模拟一些数据。Pandas.date_range()函数为我们创建时间序列提供了便利,通过该函数,我们很方便的可以生成一个固定频率的时间序列。然后,再结合其他数据,通过pandas.DataFrame()函数创建一个虚拟时间序列数据。1.3DataFrame数据创建Pandas.date_range()函数的具体语法如下所示:1.4读取本地存储的数据1.4读取本地存储的数据对于数据分析而言,获取和利用第三方数据是比较有效的方式。目前,市场上有很多专注于数据生产的第三方公司,如国泰安(CSMAR)和万得资讯(Wind)等。这些公司专注于数据源的工作,提供数据产品给使用者。这些数据大部分是结构化数据。例如,上市公司年报信息、重要的公司治理数据、环境数据、宏微观经济数据、重大事件数据和市场交易数据等等。通过对这些结构化数据的读取和处理,Python可以高效的辅助我们进行数据分析、可视化或数据挖掘。本小节将从单个文件读取与批量文件读取两个角度,分别介绍csv文件、txt文件与Excel文件的读取方法。1.4读取本地存储的数据(1)单个文件读取A.读取文本文件在现有第三方数据库中,很多数据被存储在文本文件(csv文件、txt文件)中。这是因为文本文件可以储存较大样本量的数据,与其他存储形式相比能够节省大量的储存空间。Pandas.read_csv()是专门读取csv文件、txt文件的函数。该函数的具体语法如下所示:1.4读取本地存储的数据1.4读取本地存储的数据B.读取表格文件现实中,很多财经数据会以Excel的形式存储。在Python中,可以通过Pandas.read_excel()函数导入已有Excel文件。该函数的具体语法如下所示:1.4读取本地存储的数据1.4读取本地存储的数据(2)批量文件读取在对资本市场进行分析的过程中,往往需要依靠较长时间跨度的数据资料作为支撑。由于单个csv和Excel文件储存的数据有限,而资本市场交易数据量又很大,在数据分析过程中,我们经常遇到的是,一个大的数据文件被分割成若干文件,在读取的时候需要对这些文件进行批处理,形成一个整体的文件。1.4读取本地存储的数据首先,利用for循环,获取所需读取全部文件名称的列表1.4读取本地存储的数据在获得文件名称的列表后,可以根据文件名称和文件路径构建文件的绝对路径,再按照文件绝对路径对每个文件进行数据读取,具体操作中有以下两种方法:1.4读取本地存储的数据方法一:生成一个空DataFrame,通过read_csv()(或read_excel)和append()函数对所有数据进行读取,存入DataFrame中。1.4读取本地存储的数据方法二:

生成一个空list,通过read_csv()(或read_excel)和append()函数对所有数据进行读取,存入list中,通过concat()函数整合数据,存入DataFrame中。1.4读取本地存储的数据append()函数与concat()函数常用于数据合并,两种方法进行数据批量读取的结果完全一致,但第二种方式只进行一次DateFrame合并,因此运行速度相对较快。1.5实操练习题1.5实操练习题从CSMAR数据库中下载Excel2003格式的1990-2022年资产负债表、利润表、现金流量表所有科目的数据,对这些文件进行批量读取,分别形成资产负债表、利润表、现金流量表数据。Python与财经大数据分析基础第3章——数据清洗

CONTENTS目录3.1数据标签重命名3.2缺失值处理3.3异常值处理3.4数据去重3.5数据替换3.6数据标准化3.7实操练习题

数据处理过程中,原始数据可能存在着各种不利于分析及后续处理的因素,如数据缺失、异常值等。这些因素不仅会影响数据建模,更会影响数据分析的结果,故数据清洗尤为重要。

数据清洗的目的包括两点:第一,通过清洗使数据可用;第二,让数据变得更适合后续的分析过程。换句话说,“脏”的数据要洗,干净的数据也要洗。3.1数据标签重命名3.1数据标签重命名批处理。DateFrame数据结构支持批量地重命名行列标签,帮助我们将数据行列标签修改为符合自己习惯的或依照惯例使用的标签名称,方便后续调用、代码阅读和理解。3.1缺失值处理3.2缺失值处理3.2

缺失值处理

(1)缺失值查看在pandas包中,可以使用isnull()与notnull()函数找到数据中的缺失值。其通过返回布尔值的方式帮助我们识别数据中的缺失值:若isnull()返回值为True,或notnull()返回值为False,则数据中存在缺失值。数据集大小不同时可使用不同的方法查看缺失值:对于容量较小的数据集,可以使用isnull()语句;对于容量较大的数据集,一般采取以下两种方式:一是可以使用info函数查看,通过info函数可以查看字段的数据类型以及各字段下非空值的数量;二是使用对insull()输出的布尔值求和来查看。3.2

缺失值处理

(2)缺失值删除当数据量较大或数据冗余时,需要对存在缺失值的数据进行过滤,可以使用dropna()函数删除缺失值数据,也可以选择删除整行或整列。该函数的具体语法如下所示:3.2

缺失值处理

(3)缺失值填充在处理缺失值的过程中,直接删除缺失值是一种简单直接的办法,但也有可能因此使得原数据中的重要信息丢失,本部分将介绍另一种处理缺失值的方法——缺失值填充,使用fillna()函数可以填充数据集中的空值。该函数的具体语法如下所示:3.2

缺失值处理3.3异常值处理3.3异常值处理异常值,是远离绝大多数样本点的特殊群体,也称为离群点,这些异常值,在某些建模场景下会导致结论的错误。其中一种典型的异常值即为极端值。极端值是指样本中其数值明显偏离其余值的个别样本。在数据分析过程中,对数据集进行异常值的识别与修正,是必不可少的一环。异常值检测的方法包括常用法与建模法两种。其中常用法包括:3σ方法、IQR方法与缩尾法;建模法包括:KNN算法(基于近邻度异常点检测)、K-means(基于聚类方法的异常点检测)等。极端值的处理方式与异常值类似,进行极端值检测时常用到上述方法中的3σ方法、IQR方法与缩尾法。3.3异常值处理

3σ方法3σ方法是处理数据极端值最常用的方法。它是指按一定概率确定一个置信区间,将超过该置信区间的数据进行剔除。3σ方法也存在一定局限性,在对正态或近似正态分布的数据进行处理时,它是一种以数据量充分大为前提(n>10)的方法,数据量过小时使用该方法剔除异常值是不够可靠的。3σ方法的原则如下:μ为平均值,σ为标准差,数值分布在(μ-σ,μ+σ)的概率为0.6827;数值分布在(μ-2σ,μ+2σ)的概率为0.9545;数值分布在(μ-3σ,μ+3σ)的概率为0.9973。当数据值集中在(μ-2σ,μ+2σ)区间时,超过此范围的概率不足5%,属于小概率事件,可以认为处于该区间外的数据为异常值;当数据值集中在(μ-3σ,μ+3σ)区间时,超过此范围的概率不足0.3%,即超出该范围的数据可以认为是极端异常值。3.3异常值处理IQR方法四分位距(interquartilerange),是衡量一组数据离散程度的统计量,用IQR表示。其值等于第一四分位数(25%)和第三四分位数(75%)的差距,计算公式为:IQR=Q_3-Q_1定义异常值与极端异常值,表达式如下所示:3.3异常值处理缩尾法缩尾法(Winsorize)是一种处理极端值的方法。通常,缩尾处理将超出变量特定百分位范围的数值替换为其特定百分位数值。进行缩尾法处理异常值或极端值时,将用到winsorize()函数,在处理大样本数据时,缩尾处理比3σ方法高效。winsorize函数的具体语法如下所示:3.3异常值处理3.3异常值处理KNN算法(基于近邻度的异常点检测)在进行异常值判断与处理时,确定数据邻近性度量比确定其统计分布更有意义,此时,数据集的异常点是由其K-最近邻(KNN)测定的。异常点测定对K值高度敏感。K值过小时,少量的邻近异常点可能导致较低的异常点得分;K值过大时,点数少于K的簇中所有的对象都可能成为异常点。因此,为使K值的选取更具稳健性,可以使用K个最近邻的平均距离。该方法的优势在于简单、易操作,缺点在于对于参数的选取具有敏感性。在第十四章机器学习中,详细讲解KNN算法的原理与实战。3.3异常值处理K-means算法(基于聚类方法的异常点检测)当一个对象是基于聚类的离群点时,如果该对象不强属于任何簇,那么该对象属于离群点。K-means算法是基于聚类的异常点检测方法,其对异常点非常敏感,通过聚类检测异常点时,常会因为异常点而影响聚类,从而导致结构缺失有效性。因此,可以使用如下方法解决该问题:对象聚类、删除异常点、对象再次聚类。基于线性与接近线性复杂度的聚类技术检测异常点可能是高度有效的,但聚类算法产生的簇的质量对该算法产生的异常点的质量影响非常大。在十四章机器学习中,详细讲解K-means算法的原理与实战。3.4数据去重3.4

数据去重数据去重是指在数据集中,找出重复的数据并将其删除,只保存唯一的数据单元的过程。在数据预处理过程中,这是一项经常性操作,数据去重会带来很多好处,如节省存储空间、提升写入性能和提高模型精度等。数据去重一般可以通过duplicated()和drop_duplicates()两个函数实现,下面进行详细介绍。3.4

数据去重(1)duplicated()函数使用duplicated()函数可以判断数据中是否存在重复值,函数输出结果将返回一个布尔序列来显示各行是否有重复行,没有重复行显示为False,有重复行显示为True。具体语法如下所示:3.4

数据去重(2)drop_duplicates()函数使用drop_duplicates()函数可以在找出重复值的同时将其删除,只保存唯一的数据单元。具体语法如下所示:3.5数据替换3.5数据替换在进行数据清洗时,时常需要批量地替换或插入数据,但单个修改一方面效率过低,另一方面也增加了出错的概率。Pandas提供了replace()函数和insert()函数,能帮助我们高效地完成批量的数据替换和插入。(1)replace()函数replace()函数常用于数据的批量替换,如把字符串中的old(旧字符串)替换为new(新字符串)。具体语法如下所示:3.5数据替换3.5数据替换(2)insert()函数insert()函数用于将指定对象插入列表的指定位置。具体语法如下所示:3.6数据标准化3.6

数据标准化在数据分析之前,有时需要将各类数据进行标准化预处理,便于利用标准值进行数据分析。数据标准化在统计中表现为统计数据的指数化,数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,使所有指标对测评方案的作用趋同;数据无量纲化处理主要解决数据的可比性。3.6

数据标准化(1)Z-Score方法Z-Score方法基于原始数据的均值和标准差实现标准化,公式为:Z-Score适合大多数类型数据,也是很多工具的默认标准化方法。然而,这是一种中心化方法,会改变原有数据的分布结构,不适合用于对稀疏数据处理。3.6

数据标准化(2)min-max标准化Min-Max标准化是指对原始数据进行线性变换,将值映射到[0,1]之间,公式为:min-max标准化方法保留了原始数据之间的相互关系,但是如果标准化后,新输入的数据超过了原始数据的取值范围,即不在原始区间中,则会产生越界错误。因此这种方法适用于原始数据的取值范围已经确定的情况。3.7实操练习题3.6

数据标准化对已经读取的资产负债表数据,进行以下操作:1.对列标签进行重命名,标签名为CSMAR数据库中给定的中文名称;2.查看数据缺失的情况,并删除资产合计为缺失的行;3.对资产合计的极端值按照上下1%进行缩尾处理;4.对其他应收款的缺失值用0替换;5.对资产合计进行Z-Score和Min-Max标准化。Python与财经大数据分析基础第4章

股权性质信息整理——应用数据转置

CONTENTS目录4.1T转置4.2行列互换4.3数据透视4.4数组转置4.5应用实践“转置”是一个数学名词,常用于矩阵的计算过程中。设A为m×n阶矩阵(即m行n列),第i行j列的元素为Aij,把A的行列互相交换从而得到一个新的矩阵AT,这一过程称为矩阵的转置。在Python中,数据转置是将原数据的行列互换,以更符合研究逻辑,更方便地进行计算和分析,在数据预处理时经常使用,为之后的数据筛选、合并、统计操作提供方便。本章将介绍以下五个Pandas模块与数据转置有关的函数。4.1T转置4.1T转置最简单直接的转置操作是将数据沿对角线翻转,在这个过程中数据的形状发生了变化,数据逻辑也发生了变化,但是数据的对应关系保持不变。为了更方便地进行数据处理和分析,充分利用行列的关系表达,我们时常使用transpose()函数对原数据进行转置操作,转置效果如下图所示:4.1T转置transpose()函数的具体语法如下所示:DateFrame.T是DateFrame.transpose()的别名和简写方法。为方便起见,可以直接使用DateFrame.T进行转置操作。transpose()函数只能进行最简单的整体翻转操作,想要对数据进行更复杂的行列变换处理,需要其他的转置方式。4.2行列互换4.2行列互换如果数据结构比较复杂,索引层数较多,则需要使用stack()函数与unstack()函数进行操作。stack()是将数据的列索引转换为行索引,unstack()是将数据的行索引转换为列索引,从而改变数据样式,以更符合研究习惯和后续调用。4.2行列互换stack()函数与unstack()函数的基本语法类似,stack()函数将列中指定levels的列,堆叠到行索引中;unstack()函数将行中指定levels的行,堆叠到列索引中。具体语法如下所示:4.2行列互换4.3数据透视4.3数据透视4.3.1melt()函数与stack()函数和unstack()函数进行行列索引的互换不同,melt()函数是将列索引转化成数据,从而将DataFrame从宽格式转换为长格式。melt()函数的使用效果如下图所示,类似于Excel中的数据逆透视。4.3数据透视melt()函数的主要任务是将DataFrame压缩为一种格式,其中一列或多列是标识符变量,而其余列被认为是测量变量,且不会旋转到行轴,只剩下两个非标识符列,分别为变量variable和值value。具体语法如下所示:4.3数据透视4.3.2

pivot()函数与melt()函数相反,pivot()函数是将数据转化成行列索引,使用来自指定索引的唯一值来形成DataFrame的轴,进行数据重塑,从而将DataFrame从长格式转换为宽格式。pivot()函数的使用效果如下图所示,类似于Excel中的数据透视。具体语法如下所示:4.3数据透视4.4数据转置4.1数据转置本节主要针对Numpy模块的多维数组进行转置操作介绍。下图分别是二维数组和三维数组的转置效果图。Numpy模块中有三种方式能够对数组进行转置操作,分别是T属性、transpose()函数、swapaxes()函数。4.1数据转置4.4.1T属性T属性的使用十分简单,调用格式为array.T,比较适合对低维数组进行转置操作。因此,对二维数组的转置通常使用T属性。对于高维数组而言,T属性也可以应用,只不过只能使用默认的转置方式,即交换位置序列的第一个值和最后一个值。4.1

数据转置将转置前后两个三维数组各元素对应位置列在下表,从中可以清晰地看出高维数组T属性只交换位置序列的第一个值和最后一个值。4.1数据转置4.4.2transpose()函数对二维数组进行转置,除了使用T属性,还可以使用transpose()函数,两者效果完全一致。对于高维数组而言,T属性也可以应用,只不过只能使用默认的转置方式,即交换位置序列的第一个值和最后一个值。4.1数据转置4.4.3swapaxes()函数与transpose()函数不同的是,swapaxes()函数接受一对轴编号,如果想要达到transpose(2,1,0)的效果,只需要输入swapaxes(0,2)即可。4.5应用实践4.5应用实践出于研究需要,我们需要整理A股上市公司不同年份的股权性质信息,下图是从Wind导出的数据(部分),为了方便后续调用数据,我们需要把它转化为“StkcdReptdt股权性质”三列:WindA股上市公司股权性质信息处理后股权性质信息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中,所谓排序,就是根据制定列或行对整体数据进行重新排列,方便浏览数据,也方便观察特定变量变化趋势,与其他变量之间的

温馨提示

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

评论

0/150

提交评论