幾多公司趁墟大灣區 阿里太太係乜水 數據挖掘只需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 | 現時名稱 | 公司註冊編號 | 成立/註冊日期 | 改名日期 | |
---|---|---|---|---|---|---|
21711 | 212 | Bay Station Limited | 香港青年大灣區三業服務中心有限公司 | 2722021 | 2018-07-13 | NaT |
21958 | 459 | China Greater Bay (Hong Kong) Enterprise Limited | 中國大灣區(香港)實業有限公司 | 2720906 | 2018-07-11 | NaT |
22558 | 1059 | Guangdong-Hong Kong-Macao Greater Bay Area New... | 粵港澳大灣區新文化研究會有限公司 | 2720258 | 2018-07-10 | NaT |
22539 | 1040 | Greater Bay (China) Company Limited | 大灣區(中國)有限公司 | 2719559 | 2018-07-09 | NaT |
19356 | 867 | GREATER BAY SILK ROAD INVESTMENT HOLDINGS LIMITED | 大灣區絲路投資控股有限公司 | 2718945 | 2018-07-06 | NaT |
20968 | 2479 | TAI WAN DISTRICT INTERNATIONAL TALENT INDUSTRY... | 大灣區國際人才產業基金有限公司 | 2719044 | 2018-07-06 | NaT |
19381 | 892 | GUANGDONG-HONG KONG-MACAU BIG BAY AREA ENTREPR... | 粵港澳大灣區企業家協會有限公司 | 2718947 | 2018-07-06 | NaT |
18852 | 363 | China Great Bay Area Fund Holdings Co., Limited | 粵港澳大灣區產業基金控股有限公司 | 2718873 | 2018-07-06 | NaT |
20996 | 2507 | The Innovation Research Institute of GHM Great... | 大灣區創新研究院有限公司 | 2717470 | 2018-07-04 | NaT |
16048 | 923 | GB HSE INVESTMENT LIMITED | 大灣區投資王(香港)有限公司 | 2715989 | 2018-06-29 | NaT |
16035 | 910 | G.H.M Cosmetics Association Co. Limited | 粵港澳大灣區美妝產業促進會有限公司 | 2715195 | 2018-06-27 | NaT |
16200 | 1075 | Guangdong-Hong Kong-Macao Greater Bay Area Dev... | 粵港澳大灣區城市發展母基金有限公司 | 2714502 | 2018-06-26 | NaT |
12993 | 915 | GREATER BAY OVERSEAS YOUTH VENTURE DEVELOPMENT... | 大灣區海青創業發展有限公司 | 2711578 | 2018-06-20 | NaT |
13514 | 1436 | Huajin International Bay Area High-end Service... | 華金國際大灣區高端服務控股有限公司 | 2711245 | 2018-06-19 | NaT |
9336 | 1142 | Greater Bay Area Homeland Foundation Limited | 大灣區共同家園基金會有限公司 | 2710107 | 2018-06-15 | NaT |
5503 | 1228 | GREATER BAY INVESTORS LIMITED | 大灣區外商投資有限公司 | 2707224 | 2018-06-08 | NaT |
1242 | 1243 | Greater Bay Area Business Association Limited | 大灣區商業協會有限公司 | 2702596 | 2018-05-31 | NaT |
722 | 723 | Da Wen Qu Securities Company Limited | 大灣區證券有限公司 | 2234257 | NaT | 2018-06-01 |
1243 | 1244 | Greater Bay Area Homeland Youth Community Fund... | 大灣區共同家園青年公益基金有限公司 | 2669776 | NaT | 2018-05-30 |
1244 | 1245 | GREATER BAY AREA MEDIA GROUP LIMITED | 大灣區媒體集團有限公司 | 2663228 | NaT | 2018-05-29 |
5522 | 1247 | Guangdong-Hong Kong-Macao Greater Bay Area Edu... | 粵港澳大灣區教育論壇有限公司 | 840432 | NaT | 2018-06-08 |
9333 | 1139 | GREATER BAY AREA ASSOCIATION FOR MEDICAL HEALT... | 粵、港、澳大灣區醫療健康產業協會有限公司 | 2588373 | NaT | 2018-06-13 |
9334 | 1140 | Greater Bay Area Capital Limited | 粵港澳大灣區資本有限公司 | 2490239 | NaT | 2018-06-14 |
9335 | 1141 | Greater Bay Area Commerce and Industry Federat... | 大灣區工商聯總會有限公司 | 2144451 | NaT | 2018-06-12 |
16176 | 1051 | Greater Bay Area Homeland Youth Community Foun... | 大灣區共同家園青年公益基金會有限公司 | 2710107 | NaT | 2018-06-25 |
18853 | 364 | China Great Bay Area Fund Management Co., Limited | 粵港澳大灣區產業基金管理有限公司 | 1766936 | NaT | 2018-07-05 |
筆者小試牛刀的經驗發現,Python的程式確實簡潔,而且不少功能其實可以google找到,大量前輩高人早已公開各式各樣的有用工具,讓初學者可以站在巨人的肩膀上,亂試亂錯下發掘有趣應用。
由於筆者是新學乍練,若讀者有更簡潔更有效率的做法,不妨公諸同好。