立場新聞 Stand News

幾多公司趁墟大灣區 阿里太太係乜水 數據挖掘只需5行程式

2018/7/22 — 18:53

去年9月,前特首梁振英被揭發出任兩家新開公司的董事,卻未有申報,梁振英事後急解畫,指公司是非牟利,並且在事件被揭發4日後修改公司章程列明「非牟利」。其實,要發掘這類新聞,可以到政府的資料一線通,公司註冊處目前已提供2017年以來的新成立公司或改名公司名單,並且以Excel檔案的制式供下載。本文嘗試撰寫5行Python程式,便可以取得這些檔案並加以分析、挖掘有用資訊。

為何要使用Python?用Excel或Google Sheets當然也可以輕易做到簡單分析,但由於涉及的公司數目數以萬計,狂開數十張worksheets,速度上定有所拖慢,而且Python有龐大的程式庫,可以做諸如人工智能等深入分析,就算如下文所作的文字雲,亦很方便處理。

筆者首先以最新的7月9日至7月15日的數據作展示,首先到https://data.gov.hk/tc-data/dataset/hk-cr-crdata-list-newly-registered-companies,下載最新的新成立或改名公司名單,以下便是用於載入資料的code:

廣告

import pandas as pd

df = pd.read_excel('data/wk_new&changednamecoys__20180709.xls', skiprows=10)

df.columns = ['順序編號','current name','現時名稱','公司註冊編號','成立/註冊日期','改名日期']

第一行是載入用於處理資料的Python程序庫pandas,第二行是用pandas讀入所需的Excel檔案,並跳過頭10行的標題部份,再將資料輸入到df這個變數內,檔案路徑因人而異,筆者是把資料檔案放於data的folder內,第三行可有可無,純粹是給予每一列一個名稱,增加可讀性。在三行程序後,df的首5項內容為:

廣告

載入資料後,可使用 print(len(df)) 列印資料有多少行,得出3437,即該星期內的新公司或改名公司也有近三千家,數目可不少。接下來,是資料處理,例如我想知道有多少公司是以大灣區為名?可用以下兩行程式:

df_ans=df[df['現時名稱'].astype(str).str.contains('大灣區')]

print(df_ans)

第一行是在資料庫中的中文名稱一欄,找出含有「大灣區」的公司名稱,然後輸入另一變數df_ans以作顯示,由於df的變數類型是dataframe,它必須以astype(str)變為字串,才能以str.contain來搜尋。讀者也可以在之前加一行如 ask = input("想搜尋的字詞"),要求程式叫用戶輸入想搜尋的字詞。

結果是:

即是短短一周內便有4家大灣區公司成立,包括香港青年大灣區三業服務中心有限公司、中國大灣區(香港)實業有限公司、大灣區(中國)有限公司及粵港澳大灣區新文化研究會有限公司,這些公司的背後有否猛人坐鎮,都是可發掘的題材。

筆者再三嘗試下,又發現近期流行的「區塊鏈」亦商機處處,有9家名稱有區塊鏈的公司在一周內成立,部份名字如「加密爸爸區塊鏈科技有限公司」、「香港以太聖區塊鏈集團有限公司」相當有趣,究竟做的是什麼買賣耐人尋味。

若讀者想捕捉企業動向,亦可以一些大公司的名稱搜尋,例如以「阿里」搜索,便發現一家「阿里太太實業控股集團有限公司」,與阿里巴巴是否有關,便要再考究了。至於「小米」,則分別有一家「小米光學集團(香港)有限公司」及一家「中華小米啤酒集團有限公司」,是小米的新業務?

上述Python的5行程式,已可發掘不少資訊,但若想做較複雜的操作,例如以這些公司名稱的詞語出現頻率製作文字雲,原來亦不難。

不過,首先要再處理一下數據,將中文名稱一欄抽離數據庫,刪去當中標示為空(NaN)的行,並把欄名「現用中文公司名稱」及一些太普遍的詞語如「有限公司」及「香港」抽走,令文字雲不顯示這些用詞,相關程式如下:

df_name=df['現時名稱']     # 把中文名稱欄載入df_name 

df_name=df_name[~df_name.isnull()]     # 再清走沒有名稱的空行

df_name=df_name[~df_name.astype(str).str.contains('現用中文公司名稱')]   # 清走欄名

df_text=' '.join(df_name)    # 將每行名稱串成一字串,載入df_text內

df_text=df_text.replace('有限公司','')   # 再清走字串中的「有限公司」

df_text=df_text.replace('香港','')    # 清走「香港」

處理過後將是一串包含所有公司名稱的長字串,然後便可以作文字雲處理,相關程式如下:

import matplotlib.pyplot as plt

from wordcloud import WordCloud

import jieba

 

wordlist = jieba.cut(df_text, cut_all = True)

w_split = " ".join(wordlist)

co_wordcloud = WordCloud(font_path = "../fonts/雅黑.ttf", width=800, height=600).generate(w_split)

#處理繪圖部份

plt.figure(figsize=(30,20))

plt.imshow(co_wordcloud)

plt.axis("off")

plt.show()

首三行是載入相關程式庫,第四、五行則是把長字串中的詞語分割,並輸入到文字雲,記著要提供一個中文字庫的檔案(如上述程式中的雅黑.ttf),否則將無法顯示中文,然後便是繪圖的部份。結果如下:


讀者可發現生物科技的新公司也有不少,再用最初5行程式建立的搜尋器找找,發現原來有26家「生物科技」新公司,4家公司改名。不過,文字雲的顯示受制於其詞典庫,故有些較新的詞語可能未有更新,如「大灣區」、「區塊鏈」等字未見顯示在文字雲上,若希望加入,便要新建一個user.dict的檔案,其內容可以是:

一帶一路 4
大灣區 4

數目字是字的頻率,供jieba用來計算字詞出現的或然率,數字不用太大。然後在載入jieba時,加上這一句:

jieba.load_userdict("user.dict")

便可把這些自訂字詞加入到文字雲中。

以上只是處理一個星期的數據,若果要處理更長時間的數據又如何,Python是可以處理多個檔案的,只要把多個檔案存於同一個子目錄下,便可以一併輸入處理,相關程式是:

import glob

import pandas as pd

files=glob.glob("data/*.xls")

 

dfs = []

for num, fname in enumerate(files, start=1):

   print("File #{} | {}".format(num, fname))

   if len(fname) > 0:

       data = pd.read_excel(fname, header=None, skiprows=10)

       dfs.append(data)

df = pd.concat(dfs, ignore_index=True)

要處理多個檔案,要輸入glob的程式庫,然後指示其下載同一子目錄下的所有excel檔案,然後逐一讀入,最後再將多個資料庫串起。

筆者僅下載了5月底至7月15日不足兩個月的資料,已有2.5萬行數據,對Excel來說也是頗多,但Python處理也不過數秒,下載後便可以上述同樣的做法搜尋關鍵字及製作文字雲。如再以「大灣區」搜尋,便發現5月底至7月15日,已有26家公司以大灣區命名,較剛才提到的4家大增:

符合公司數目:26

 順序編號current name現時名稱公司註冊編號成立/註冊日期改名日期
21711212Bay Station Limited香港青年大灣區三業服務中心有限公司27220212018-07-13NaT
21958459China Greater Bay (Hong Kong) Enterprise Limited中國大灣區(香港)實業有限公司27209062018-07-11NaT
225581059Guangdong-Hong Kong-Macao Greater Bay Area New...粵港澳大灣區新文化研究會有限公司27202582018-07-10NaT
225391040Greater Bay (China) Company Limited大灣區(中國)有限公司27195592018-07-09NaT
19356867GREATER BAY SILK ROAD INVESTMENT HOLDINGS LIMITED大灣區絲路投資控股有限公司27189452018-07-06NaT
209682479TAI WAN DISTRICT INTERNATIONAL TALENT INDUSTRY...大灣區國際人才產業基金有限公司27190442018-07-06NaT
19381892GUANGDONG-HONG KONG-MACAU BIG BAY AREA ENTREPR...粵港澳大灣區企業家協會有限公司27189472018-07-06NaT
18852363China Great Bay Area Fund Holdings Co., Limited粵港澳大灣區產業基金控股有限公司27188732018-07-06NaT
209962507The Innovation Research Institute of GHM Great...大灣區創新研究院有限公司27174702018-07-04NaT
16048923GB HSE INVESTMENT LIMITED大灣區投資王(香港)有限公司27159892018-06-29NaT
16035910G.H.M Cosmetics Association Co. Limited粵港澳大灣區美妝產業促進會有限公司27151952018-06-27NaT
162001075Guangdong-Hong Kong-Macao Greater Bay Area Dev...粵港澳大灣區城市發展母基金有限公司27145022018-06-26NaT
12993915GREATER BAY OVERSEAS YOUTH VENTURE DEVELOPMENT...大灣區海青創業發展有限公司27115782018-06-20NaT
135141436Huajin International Bay Area High-end Service...華金國際大灣區高端服務控股有限公司27112452018-06-19NaT
93361142Greater Bay Area Homeland Foundation Limited大灣區共同家園基金會有限公司27101072018-06-15NaT
55031228GREATER BAY INVESTORS LIMITED大灣區外商投資有限公司27072242018-06-08NaT
12421243Greater Bay Area Business Association Limited大灣區商業協會有限公司27025962018-05-31NaT
722723Da Wen Qu Securities Company Limited大灣區證券有限公司2234257NaT2018-06-01
12431244Greater Bay Area Homeland Youth Community Fund...大灣區共同家園青年公益基金有限公司2669776NaT2018-05-30
12441245GREATER BAY AREA MEDIA GROUP LIMITED大灣區媒體集團有限公司2663228NaT2018-05-29
55221247Guangdong-Hong Kong-Macao Greater Bay Area Edu...粵港澳大灣區教育論壇有限公司840432NaT2018-06-08
93331139GREATER BAY AREA ASSOCIATION FOR MEDICAL HEALT...粵、港、澳大灣區醫療健康產業協會有限公司2588373NaT2018-06-13
93341140Greater Bay Area Capital Limited粵港澳大灣區資本有限公司2490239NaT2018-06-14
93351141Greater Bay Area Commerce and Industry Federat...大灣區工商聯總會有限公司2144451NaT2018-06-12
161761051Greater Bay Area Homeland Youth Community Foun...大灣區共同家園青年公益基金會有限公司2710107NaT2018-06-25
18853364China Great Bay Area Fund Management Co., Limited粵港澳大灣區產業基金管理有限公司1766936NaT

2018-07-05

筆者小試牛刀的經驗發現,Python的程式確實簡潔,而且不少功能其實可以google找到,大量前輩高人早已公開各式各樣的有用工具,讓初學者可以站在巨人的肩膀上,亂試亂錯下發掘有趣應用。

由於筆者是新學乍練,若讀者有更簡潔更有效率的做法,不妨公諸同好。

 

發表意見