萬音澤
(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等實現,用于輿情監測等金融工程項目中。