根据证券业协会发布的2019年证券公司经营业绩排名情况以及证券公司名单进行数据处理整合后进行分析并根据证监会公布的指标进行评级模型建模:
数据预处理
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
pd.set_option('display.max_rows', None)#显示全部行
pd.set_option('display.max_columns', None)#显示全部列
plt.rcParams['font.sans-serif']=['SimHei']#正常显示中文
plt.rcParams['axes.unicode_minus'] = False
数据导入
company = pd.read_excel('证券公司分析数据.xlsx',sheet_name='证券公司概览')
index = pd.read_excel('证券公司分析数据.xlsx',sheet_name='2019年证券公司指标对比')
重复值处理
security_company = company.copy().drop_duplicates('证券公司简称')
security_index = index.copy().drop_duplicates('证券公司简称')
security_company.info()
缺失值分析及处理
security_company缺失值分析:在证监会披露的证券公司名录名单中共有134家,其中包含了资管、承销保荐等公司,进行合并项统计后共有98家证券公司
security_company = security_company.dropna()
#计算缺失率
missing_percentage = []
for i in range(len(security_index)):
missing_percentage.append(
[security_index.iloc[i]['证券公司简称'],
round(
security_index.iloc[i].isnull().sum() /
len(security_index.iloc[i]) * 100, 2)])
pd.DataFrame(missing_percentage , columns=['证券公司简称','缺失率']).sort_values(by='缺失率',ascending= False)
#摩根大通(中国)与野村东方为新成立外资券商,较多数据未披披露,故删除其数据
security_index = security_index[security_index['证券公司简称'].isin(['摩根大通','野村东方'])== False]
security_index.info()
security_index缺失值分析:
净资产:缺失值为网信证券,其净资产为负值,填充为0
净资产收益率:缺失值为网信证券,其净资产为负值,填充为0
公益性支出:缺失值过小,填充为0
净资本:缺失值为网信证券,填充为0
核心净资本:缺失值为网信证券,填充为0
财务杠杆倍数:缺失值为网信证券,以C,CC,CCC级的平均财务杠杆填充
客户资金余额:缺失值过小,填充为0
证券经纪业务收入:缺失值过小,填充为0
代理买卖证券业务收入(含席位租赁):缺失值过小,填充为0
交易单元席位租赁收入 :缺失值过小,填充为0,负值填充为0
代理买卖证券业务收入:该指标仅公布位于行业中位数以上公司的排名(考虑转变成离散的编号)
营业部平均代理买卖证券业务收入:缺失值过小,填充为0
代理销售金融产品收入:缺失值过小,填充为0
承销与保荐业务收入:缺失值过小,填充为0
股票主承销佣金收入:缺失值过小,填充为0
债券主承销佣金收入:缺失值过小,填充为0
担任资产证券化管理人家数:缺失值过小,填充为0
并购重组财务顾问业务收入:缺失值过小,填充为0
投资咨询业务收入:缺失值过小,填充为0
资产管理业务收入:该指标仅公布位于行业中位数以上公司的排名(考虑转变成离散的编号)
代理机构客户买卖证券交易额占代理全部客户买卖证券交易额的比例:该指标仅公布位于行业中位数以上公司的排名(考虑转变成离散的编号)
基于柜台与机构客户对手方交易业务收入:缺失值过小,填充为0
境外子公司证券业务收入占营业收入比例:境外子公司业务仅有部分券商有,其余填充为0
融资类业务利息收入:缺失值过小,填充为0
融资融券业务利息收入:缺失值过小,填充为0
约定购回业务利息收入:缺失值过小,填充为0
股票质押业务利息收入:缺失值过小,填充为0
股权投资收入:没有数据的认为没有进行股权投资活动,填充为0
#缺失值填充及处理
security_index['财务杠杆倍数'] = security_index['财务杠杆倍数'].fillna(round(
pd.merge(security_company[security_company['2020年评级'].isin(['C','CC','CCC']) == True],security_index[['证券公司简称', '财务杠杆倍数']],how='left',on='证券公司简称')['财务杠杆倍数'].mean()))
security_index = security_index.fillna(0)
security_index_copy = security_index.copy()
security_index = security_index.drop(['代理买卖证券业务收入', '资产管理业务收入', '代理机构客户买卖证券交易额占代理全部客户买卖证券交易额的比例'], axis=1)
security_data = pd.merge(security_company,security_index,how='right',on='证券公司简称')
security_data.info()
探索性分析
#描述性统计
security_data.describe().round(0)
security_data.shape
#(96, 43)
#相关性热力图
def correlation_heatmap(df):
_ , ax = plt.subplots(figsize =(20, 16))
colormap = sns.diverging_palette(220, 10, as_cmap = True)
_ = sns.heatmap(
df.corr(),
cmap = colormap,
square=True,
cbar_kws={
'shrink':.9 },
ax=ax,
annot=True,
linewidths=0.1,vmax=1.0, linecolor='white',
annot_kws={
'fontsize':10 }
)
plt.title('Pearson Correlation of Features', y=1.05, size=15)
correlation_heatmap(security_data.iloc[:,8:])
fig, ax = plt.subplots(2, 3,figsize=(16,12))
sns.boxplot(x = '2020年评级', y = '总资产', data=security_data, ax = ax[0,0],order=['AA','A','BBB','BB','B','CCC','CC','C'])
ax[0,0].set_title('总资产')
sns.boxplot(x = '2020年评级', y = '净资产', data=security_data, ax = ax[0,1],order=['AA','A','BBB','BB','B','CCC','CC','C'])
ax[0,1].set_title('净资产')
sns.boxplot(x = '2020年评级', y = '营业收入', data=security_data, ax = ax[0,2],order=['AA','A','BBB','BB','B','CCC','CC','C'])
ax[0,2].set_title('营业收入')
sns.boxplot(x = '2020年评级', y = '净利润', data=security_data, ax = ax[1,0],order=['AA','A','BBB','BB','B','CCC','CC','C'])
ax[1,0].set_title('净利润')
sns.boxplot(x = '2020年评级', y = '净资本', data=security_data, ax = ax[1,1],order=['AA','A','BBB','BB','B','CCC','CC','C'])
ax[1,1].set_title('净资本')
sns.boxplot(x = '2020年评级', y = '核心净资本', data=security_data, ax = ax[1,2],order=['AA','A','BBB','BB','B','CCC','CC','C'])
ax[1,2].set_title('核心净资本')
security_data[security_data['2020年评级'] == 'BBB'].sort_values(by='总资产',ascending=False)
#最高为广发证券
security_data[security_data['2020年评级'] == 'A'].sort_values(by='净资产',ascending=False)
#最高为东方证券
总资产、净资产、营业收入、净利润、净资本、核心净资本之间高度相关,AA级的券商在这几项指标明显远高于其他级别的券商,其中BBB级中的广发证券和A级中的东方证券指标接近于AA级(两家券商在2018年都为AA级),且随着级别的上升,相同级别当中的证券公司之间的差距增大
security_percentage = security_data.groupby(