本文件的程序用于筛选出适合检验的股票,针对新三板的公司,需要踢除的公司包括了:
数据来源于Wind资讯和同花顺。数据库导出的原始数据不包含已经退市的公司,所以在进行分析时加回了那些退市的公司。
文中使用的代号:NEEQ表示新三板公司(代码以4或8开头),MB表示主板(代码以00、60开头,主板不包含B股股票),SME表示中小企业板(代码以002开头),ChiNext表示创业板(代码以300开头)。还有一部分可能涉及到预披露的、正在接受核准的以及正在等待证券发行的拟上市公司对应的信息(通常是wind或者同花顺数据库自己编码的以A开头的代码)
所有数据选自从新三板建立之初(2006)到2016年4月30日。有效的“新三板”样本6867家公司。
In [1]:
%matplotlib inline
import numpy
import pandas
import matplotlib.pyplot as plt
import seaborn as sns
In [2]:
stocks_neeq = pandas.read_excel("../data/raw/挂牌公司一览.xlsx")
stocks_neeq = stocks_neeq.iloc[:-2] #最后两行不是有用信息
stocks_neeq_20160430 = pandas.read_excel("../data/raw/挂牌公司一览20160430.xls")
stocks_neeq = stocks_neeq.append(stocks_neeq_20160430)
In [3]:
stocks_neeq["所属园区"].value_counts()
Out[3]:
In [4]:
MB_delist = stocks_neeq[stocks_neeq["所属园区"] == "主板退市公司"]
In [5]:
len(MB_delist) #与wind退市中数量一致
Out[5]:
In [6]:
#踢除主板退市到新三板的公司
stocks_neeq = stocks_neeq[stocks_neeq["所属园区"] != "主板退市公司"]
在新三板挂牌的公司还包括了原两网的公司(NET和STAQ),两网的公司是在90年代有中国人民银行批准设立的,总用9家公司(粤传媒(400003)上市后剩余8家公司),由于政策方面的约束,此类公司即便在三板市场上依然不被允许进行新的融资而只能股份转让。这些公司包含了:
In [7]:
stkcs_net_staq = ["400001.OC", "400002.OC", "400005.OC", "400006.OC", "400007.OC", "400009.OC", "400010.OC", "400013.OC"]
stocks_neeq = stocks_neeq[~stocks_neeq["证券代码"].isin(stkcs_net_staq)]
In [8]:
len(stocks_neeq)
Out[8]:
In [9]:
stocks_neeq[stocks_neeq["证券代码"] == "834019.OC"]
Out[9]:
In [10]:
stocks_neeq = stocks_neeq.drop(6644)
In [11]:
stocks_neeq[stocks_neeq["证券代码"] == "834019.OC"]
Out[11]:
退市股票处理:11个转板上市公司,1个连续四年亏损,16个吸收合并的公司,3家公司将公司变为有限责任公司,6家公司未说明退市原因。在数据库退市股票列表里有两家公司400001和400003属于两网公司转板,不作为研究样本处理。
In [12]:
delisting = pandas.read_excel("../data/raw/退市股票一览.xlsx") #2016年4月15日之前退市的公司
delisting = delisting[:-2]
In [13]:
delisting.head()
Out[13]:
In [14]:
delisting = delisting[~delisting["代码"].isin(["400001.OC", "400003.OC"])]
In [15]:
stkcd = stocks_neeq["证券代码"].append(delisting["代码"])
In [16]:
stkcd[stkcd.duplicated()]
Out[16]:
In [17]:
delisting = pandas.read_excel("../data/delist.xls")
In [18]:
delisting.head()
Out[18]:
In [19]:
stocks_neeq_all = pandas.concat([stocks_neeq, delisting], ignore_index=True)
In [20]:
len(stocks_neeq_all)
Out[20]:
In [21]:
len(stocks_neeq), len(delisting)
Out[21]:
In [22]:
stocks_neeq_all.iloc[0]
Out[22]:
In [23]:
stocks_neeq_all[stocks_neeq_all["所属证监会行业"].isnull()]
Out[23]:
In [24]:
stocks_neeq_all.loc[stocks_neeq_all["证券代码"] == "835458.OC", "所属证监会行业"] = "货币金融服务"
stocks_neeq_all.loc[stocks_neeq_all["证券代码"] == "830806.OC", "所属证监会行业"] = "软件和信息技术服务业"
stocks_neeq_all.loc[stocks_neeq_all["证券代码"] == "430217.OC", "所属证监会行业"] = "互联网和相关服务业"
In [25]:
stocks_neeq_all[stocks_neeq_all["所属证监会行业"].isnull()]
Out[25]:
In [26]:
finance_sector = ["货币金融服务", "资本市场服务", "保险业", "其他金融业"]
print(len(stocks_neeq_all[stocks_neeq_all["所属证监会行业"].isin(finance_sector)]))
stocks_neeq_all = stocks_neeq_all[~stocks_neeq_all["所属证监会行业"].isin(finance_sector)]
In [27]:
stocks_neeq_all.to_csv("../data/NEEQ_sample.csv", index=False)
In [28]:
a = len(stocks_neeq_all[stocks_neeq_all["挂牌日期"] <= pandas.Timestamp('2009-10-30 00:00:00')])
由此得到的“新三板”公司的有效样本数量为{{len(stocks_neeq_all)}}。
“新三板”样本公司最早的挂牌时间为{{stocks_neeq_all["挂牌日期"].min()}},所以在选择与之对比的A股主板、中小板和创业板公司时也选择从2006年以后,其中创业板开始于2009年10月,在2006到2009年10月之间挂牌的新三板公司有{{a}}家公司。
由于所有适合本研究的“新三板”公司均为2006年之后挂牌交易的,所以对应的主板、中小板和创业板公司也将会选择2005年之后IPOs的公司作为对比的对象。后续的检验也会将主中创三个板块的定向增发作为对比对象,以保证在发行过程上有些许的可比性。
In [47]:
stocks_neeq_all.iloc[0]
Out[47]:
In [46]:
year = lambda x: x.year
stocks_neeq_all["挂牌年度"] = stocks_neeq_all["挂牌日期"].apply(year)
In [55]:
stocks_neeq_all["挂牌年度"].value_counts().sort_index()
Out[55]:
In [70]:
sns.barplot(stocks_neeq_all["挂牌年度"].value_counts().sort_index().index,
stocks_neeq_all["挂牌年度"].value_counts().sort_index(), palette="Blues_d");
In [75]:
sns.countplot(x="挂牌年度", data=stocks_neeq_all, palette="Blues_d");
In [74]:
stocks_neeq_all["所属证监会行业"].value_counts()
Out[74]:
In [ ]: