万音泽
(1.南开大学金融学院 天津 300050;2.南开大学计算机科学与技术学院 天津 300350)
在金融工程的舆情监测与分析中,部分项目需要采用“爬虫”技术智能监测网页内容,进行数据挖掘、存储、读取、机器学习等,存储及读取数据时需要对大量数据进行分类与编码,进而进行分类存储、数据分析等。GB/T 4754—2017《国民经济行业分类》提供了几乎所有经济活动的分类与编码,极大方便了项目所需的分类编码与信息交换。
GB/T 4754—2017《国民经济行业分类》由国家质检总局、国家标准委于2017年6月30日发布,于2017年10月1日起正式实施。本标准主要参考联合国《所有经济活动的国际标准产业分类》(ISIC Rev.4)。根据我国《国民经济行业分类》标准的历次版本颁布、修订历史,自 1984年开始,每经历 8~10年进行一次修订,2017年修订后的行业分类共有20个门类、97个大类、473个中类、1 380个小类。本标准的历次版本依时间次序发布情况为:GB/T 4754—1984、GB/T 4754—1994、GB/T 4754—2002、GB/T 4754—2011、GB/T 4754—2017。
根据本标准使用说明,本标准采用分类和分层编码方法,将国民经济行业划分为门类、大类、中类和小类 4级。代码由 1位拉丁字母和 4位阿拉伯数字组成。门类代码用一位拉丁字母表示,即用字母 A、B、C……依次代表不同门类;大类代码用2位阿拉伯数字表示,打破门类界限,从 01开始按顺序编码;中类代码用3位阿拉伯数字表示,前2位为大类代码,第3位为中类顺序代码;小类代码用4位阿拉伯数字表示,前 3位为中类代码,第 4位为小类顺序代码,代码结构图见图1。
图1 国民经济行业分类编码结构图Fig.1 Structure of classification and coding of national economic industries
根据GB/T 4754—2017《国民经济行业分类》,以金融业分类编码为例,采用J表示金融业的行业分类,大类、种类、小类的编码见表1。
从图1、表1中的编码方法及编码数据可见,国标中的编码采用整数数字顺序编码方式,最终的整数落在第4层级的小类代码,大类代码可以采用在后面补齐2位0形成整数编码,例如表1中货币金融服务经济活动的编码可编写为 6600,依此类推,资本市场服务经济活动的编码为 6670,非货币银行服务经济活动的编码为 6630,这样就在小类代码列形成了全部为整数由小到大排列的顺序编码。
表1 金融业国民经济分类编码表Tab.1 Classification and coding table of financial industry
在当今信息化、智能化社会,新的经济活动不断涌现,部分新经济活动扩展较快,例如在GB/T 4754—2017的修订文件中增补了以下几项金融行业服务分类:汽车金融公司服务、小额贷款公司服务、消费金融公司服务、网络借贷服务,这几项服务近几年迅速在国内的非货币银行服务中占据比较重要的位置,业务额比例上升较快,非货币银行服务的编码也相应从6633增编至6637。本标准还增加了中类编码664,增加了小类编码 6640,将银行理财服务增补入分类标准,同时将银行监管服务调增至中类 665,小类6650。上述微调变化见表2。
扩充后的分类编码,局部仍然存在需要即时增补的小类,例如P2P服务、校园贷、民间借贷服务等,这类经济活动在某段时间成为热点,进行金融工程的舆情分析时候,需要在数据库中及时扩充。
表2与表1对比主要有 3种变化:增加中类代码;增加小类代码;增加活动内容、属性。按照整数数字顺序编码方式理解和使用国民经济行业分类标准,以上3种变化会带来以下应用问题:
表2 金融业国民经济分类编码表Tab.1 National economy classification and coding table of financial industry
①编码数值变化。上述变化中,中类数字编码664所对应的经济活动发生了“移位”变化,新修订的标准已经由664改为665。在舆情监测项目中以代码664作为索引数值将难以进行存储、读取。
②编码数量扩展。分类编码标准的修订周期较长,难以满足某些变化较快的行业分类要求,例如在“非货币银行服务”中扩充 P2P服务、校园贷、民间借贷服务等小类时,当按照整数数字 663X顺序编码,出现整数位不足问题,表2中编码至 6638后无法继续进行整数顺序编码。
③编码层级扩展。分类编码中一般采用“其他XX”经济活动来补充经济活动的完整性。但在实际使用过程中,例如在一些“舆情监测”“推荐系统”等金融工程项目中,当需要对某些热点经济活动单独划分时,需要进行层级扩张,即在小类代码 6639所代表的“其他非货币银行服务”经济活动中,增加划分种类,例如可将 P2P服务、校园贷、民间借贷服务等划入此类,进行属性分类储存、读取。
扩展标记语言(eXtended Marked Language,XML)是一种能进行自我描述的协议语言,是由W3C组织制定的一系列技术“推荐规范”,其特点是可扩展性和平台独立性。XML文档是AscII码,可以被大多数应用程序处理,一般情况下,操作系统和数据库系统都支持XML文档进行信息传递。
以表2为例,国民经济分类编码具有树状结构特征,即国民经济分类编码整体为“树”,门类为一级主干,大类、中类依次分别为二、三级分支,小类为叶。各类代码所代表的国民经济活动具有唯一性,按照同一划分逻辑进行划分,一般以“其他”来表示所有余下的国民经济活动,实现完整划分。
本文按照门类、大类、中类、小类顺序对国民经济活动分类进行结构化处理,形成树状结构,再串行化为 XML流。将标准中的分类代码,作为一个属性数值,存储到XML流文件对应位置。
图2为采用 C++语言结构体编制的节点元素数据结构示意图,节点元素的主要关联对象有:父节点元素、上一节点元素、下一节点元素、节点元素名称、节点元素编码。
采用C++语言以结构体形式定义节点元素对象、子节点元素链表等。图2中时间序列数值节点元素链表为一种扩充数据,示例可以在定义节点元素的数据结构时增加属性字段或者增加链表结构等扩展编码数据库,延伸编码数据库的适用范围。
图2 节点元素数据结构示意图Fig.2 Data structure diagram of node elements
①节点元素对象
struct Node
{
string name;//元素标记名称
string numStr;//元素节点编码
Node* parent;//父节点元素
list<Node> children;//下层节点链表
list<TimeNode>timeList;//时间节点链表
};
② 时间序列数值节点元素链表
struct TimeNode
{
DateTime timeStamp;//时间序列元素节点
intnum;//时间序列对应的频次数值
};
图3为采用 C++语言结构体编制的“非货币银行服务”经济活动的节点元素示意图,节点元素的关联对象有:父节点元素——货币金融服务;上一节点元素——货币银行服务;下一节点元素——银行理财服务等。其中,经济活动的名称作为节点元素名称字段表示,经济活动的编码对节点元素不起任何控制或约束作用,只作为节点的一个属性字段“节点元素编码”进行存储。
图3 非货币银行服务节点元素示意图Fig.3 Elemental schematic diagram of non-monetary banking service nodes
经济活动的节点元素可以包含任意数量的子节点元素,采用 C++语言中的链表数据结构存储,以NULL作为结束标志,具有可扩展性能。子节点元素的C++语言定义见3.2节,其中子节点元素链表任一节点元素与父节点元素具有相同的数据结构。
以某金融工程项目“舆情监测”系统为例,在该项目中,需要对常见各大网站进行关键词匹配,进而进行出现次数统计,计算出现频率的变化。
该项目中首先将 GB/T 4754—2011《国民经济行业分类》存入CSV格式文件,CSV文件易读且修改方便。通过 C++程序读取文件,按照 3.1、3.2节之方法形成XML文件。读入CSV文件时,按照行顺序依次进行,并按照固定列确定行业分类,再依照后续列确定大类、中类、小类或扩展类。
当 GB/T 4754—2017《国民经济行业分类》出现修订时,只需要将经济活动编码的 CSV文件整体进行更新。例如2.3节所述中类数字编码664所对应的经济活动改为665后,采用数据结构编码方式形成XML数据库,XML数据库以经济活动的名称为辨别属性,编码只作为附属字段,因此编码数值变化不影响 XML数据库的更新,从而为维护XML数据库带来了便利。
以某金融工程项目“舆情监测”系统为例,在该项目中,需要对 2.3节所述“非货币银行服务”中扩充 P2P服务、校园贷、民间借贷服务等小类时,当按照整数数字顺序编码时表2中编码至6638后无法继续进行整数顺序编码。按照数据结构形式编码,以C++程序读取CSV编码文件时,会忽略数值编码,只按照经济活动所在的行和列以及所在的上一级分类关系实现对XML树的重构。
编码标准将经济活动的层级划分为4级,当根据项目需要,将编码层级扩展为5级、6级时,原整数顺序编码方式不再适用。按照本文的数据结构编码方式,保持原经济活动编码的 CSV文件的整体结构不变,只需将要增加层级的位置的经济活动向后一列移动,C++程序会按照列的先后顺序自动划分层级,形成更多层级的树状结构。因此,按照数据结构编码方式可以方便地实现编码层级的扩展。
例如对 2.3节所述的“舆情监测”“推荐系统”等金融工程项目中,在小类代码 6639所代表的“其他非货币银行服务”经济活动中,在编码的 6639列后增加一列编码(编码数值只作为属性标记),同时将划入此类的经济活动 P2P服务、校园贷、民间借贷向后一列移动,C++程序读取CSV编码文件时,将按照其所在列的位置方便地实现编码层级的扩展,实现对XML树的重构。
① GB/T 4754—2017《国民经济行业分类》规定了全社会经济活动的分类与代码,代码编制方法为基于整数数字顺序编码方式。这种编码方式已经难以适应编码数值变化、编码数量扩展、编码层级扩展变化。
②基于数据结构的分类编码方法,通过定义数据结构,编制程序对 CSV编码文件按照规定顺序进行读取,重构 XML树状结构,可方便地实现编码数量扩展、编码层级扩展,适应编码数值变化。
③本文示例在舆情监测项目中采用 C++语言针对 XML格式的国民经济行业分类编码进行存储与读写,效率较高,能广泛用于数据存储、读写、交换,具有较好的通用性和可推广性能,对一些国民经济统计、分类、存储、金融工程数据挖掘、机器学习等项目具有借鉴意义。
本文提出的数据结构编码方式是对使用GB/T 4754—2017《国民经济行业分类》方法上的探讨,以数据结构编码思维方式替代整数数值顺序编码思维,所提供的C++重构XML树的方法也可以通过其他编程语言如 Python等实现,用于舆情监测等金融工程项目中。