谁是中国A股最有钱的自然人
运行此代码,便可知道,在当前日期,谁是A股最有钱的自然人!
股东数据来自于恒生聚源,选择的是类型为“自然人”的股东,有可能有脏数据!
import pandas as pd
import numpy as np
from datetime import datetime,timedelta
from CAL.PyCAL import *
cal = Calendar('China.SSE')
def GetSecID(tk_list,**kargs): #获得partyID
num = 100
cnt_num = len(tk_list)/num
if cnt_num > 0:
df = pd.DataFrame({})
for i in range(cnt_num):
sub_df = DataAPI.SecIDGet(ticker=tk_list[i*num:(i+1)*num],**kargs)
df = pd.concat([df,sub_df])
if (i+1)*num != len(tk_list):
sub_df = DataAPI.SecIDGet(ticker=tk_list[(i+1)*num:],**kargs)
df = pd.concat([df,sub_df])
else:
df = DataAPI.SecIDGet(ticker=tk_list,**kargs)
return df
def CountTime(): #获取最近的一个交易日,返回的是datetime格式
today = datetime.today()
today_str = today.strftime("%Y%m%d")
cal_date = Date.fromDateTime(today)
time1=" 15:05:00"
ben_time = datetime.strptime(today_str+time1,"%Y%m%d %H:%M:%S")
if cal.isBizDay(cal_date) & (today>ben_time): #如果是交易日,则判断当天是不是在15点前
date = today
else: #如果当天不是交易日,则获得前一个交易日
cal_wd = cal.advanceDate(cal_date, '-1B', BizDayConvention.Following) #Date格式
date = cal_wd.toDateTime() #datetime格式
return date
def GetMktEqud(tk_list,**kargs): #获得最新市场信息快照,即最新价格信息
num = 50
cnt_num = len(tk_list)/num
if cnt_num > 0:
df = pd.DataFrame({})
for i in range(cnt_num):
sub_df = DataAPI.MktEqudGet(ticker=tk_list[i*num:(i+1)*num],**kargs)
df = pd.concat([df,sub_df])
if (i+1)*num != len(tk_list):
sub_df = DataAPI.MktEqudGet(ticker=tk_list[(i+1)*num:],**kargs)
df = pd.concat([df,sub_df])
else:
df = DataAPI.MktEqudGet(ticker=tk_list,**kargs)
return df
def add_nm_money(sub_info): #将个股名称与金额拼接,方便做展示
add_info_list = []
sub_info_1 = sub_info.sort(columns='hold_money',ascending=False)
for i in range(len(sub_info_1)):
add_info = sub_info_1['secshortNM'].iloc[i] + str(round(sub_info_1['hold_money'].iloc[i]/1e8,2))+'亿'
add_info_list.append(add_info)
return add_info_list
#获得全A股的partyID
universe = DataAPI.EquGet(equTypeCD='A')['secID'].tolist() #获得全A股的secID
All_A_tks_list = map(lambda x:x[0:6],universe) #根据色此ID获得A股的所有ticker,因为要获得partyID需要输入ticker
party_id_info = GetSecID(tk_list=All_A_tks_list,field=['secShortName','ticker','partyID']) #由ticker获得该个股的partyID
party2tk_dic = dict(zip(party_id_info['partyID'],party_id_info['ticker'])) #获得partyID与ticker的对应字典;注意,party_id_info的partyID是int型
party2nm_dic = dict(zip(party_id_info['partyID'],party_id_info['secShortName'])) #获得partyID与secShortName的对应字典
party_id_list = map(lambda x:str(x),party_id_info['partyID'].tolist()) #获得partyID的list,返回的party_id_info的‘partyID’是int型,而EquMainshJYGet输入的partyID需要str型,所以这里做个转换
field1 = ['partyID','publishDate','shName','shChar','holdVol'] #分别对应的是[公司代码,公告日、信息类别、股东名称、股东性质、持股数]
#获得所有个股的自然人股东姓名,以及持有的股票数目
All_info_df = pd.DataFrame({})
for party_id in party_id_list:
hold_info = DataAPI.JY.EquMainshJYGet(partyID=party_id,field=field1)
last_publishDate = hold_info['publishDate'].iloc[-1]
hold_info = hold_info[(hold_info['publishDate']==last_publishDate)&(hold_info['shChar']=='自然人')] #获取最新的自然人股东信息
hold_info_gp = hold_info.groupby('shName')
#由于EquMainshJYGet这个API获得的是十大股东和十大流通股,只要出现过,不管是哪种都要记录;有可能出现两次,也只记录一次。
for nm,sub_info in hold_info_gp:
if len(sub_info)>1: #既是十大股东之一也是十大流通股东之一,只记录其中之一
All_info_df = pd.concat([All_info_df,sub_info[0:1]])
else: #是十大股东或十大流通股东,记录下来
All_info_df = pd.concat([All_info_df,sub_info])
All_info_df['ticker'] = All_info_df['partyID'].apply(lambda x:party2tk_dic[x]) #获得partyID对应的ticker
#获得个股的行情数据
tklist_1 = All_info_df['ticker'].tolist() #获得有自然人持股的个股ticker
tklist_1 = list(set(tklist_1)) #去重
endDate = CountTime().strftime('%Y%m%d') #获得最近一个交易日的日期
Mkt_info = GetMktEqud(tklist_1,beginDate=endDate,endDate=endDate,field = ['ticker','closePrice']) #获取最近一个交易日的行情数据
tk2price = dict(zip(Mkt_info['ticker'],Mkt_info['closePrice'])) #获得个股ticker与价格的字典
All_info_df['closePrice'] = All_info_df['ticker'].apply(lambda x:tk2price[x]) #添加closePrice到All_info_df中
All_info_df['secshortNM'] = All_info_df['partyID'].apply(lambda x:party2nm_dic[x]) #添加secshortNM即个股的简称到All_info_df中
All_info_df['hold_money'] = All_info_df['holdVol']*All_info_df['closePrice'] #添加hold_money即个股的持有金额到All_info_df中
All_info_df_gp = All_info_df.groupby('shName') #根据股东的姓名来分类
#统计自然人股东的总资产,并按照总资产大小由大到小排序
final_info_dic = {'name':[],'total_money':[],'stk_money':[]}
for personNM,sub_info in All_info_df_gp:
total_money = sub_info['hold_money'].sum()
stk_money = add_nm_money(sub_info) #获得个股名称和金额的拼接结果
final_info_dic['name'].append(personNM)
final_info_dic['total_money'].append(total_money)
final_info_dic['stk_money'].append(stk_money)
final_info_df = pd.DataFrame(final_info_dic)
#为了展示,做一些处理
All_info_df_sort = final_info_df.sort(columns='total_money',ascending=False).reset_index(drop=True)
All_info_df_sort['total_money'] = np.round(All_info_df_sort['total_money']/1e8,2).astype(str)+'亿'
All_info_df_sort.columns = ['自然人名称','持有的股票及资产','总资产']
print '谁是A股最有钱的自然人股东?(附注:’恒生聚源‘的数据库显示为自然人,则该股东定为自然人股东,可能存在脏数据)'
All_info_df_sort
谁是A股最有钱的自然人股东?(附注:’恒生聚源‘的数据库显示为自然人,则该股东定为自然人股东,可能存在脏数据)
自然人名称 | 持有的股票及资产 | 总资产 | |
---|---|---|---|
0 | 财政部 | [工商银行6165.82亿, 农业银行4801.54亿, 交通银行1290.53亿] | 12257.89亿 |
1 | 淡马锡 | [建设银行908.96亿] | 908.96亿 |
2 | 王靖 | [信威集团480.9亿] | 480.9亿 |
3 | 王传福 | [比亚迪344.61亿] | 344.61亿 |
4 | 张长虹 | [大智慧340.28亿, *ST路翔0.51亿] | 340.79亿 |
5 | 贾跃亭 | [乐视网327.9亿] | 327.9亿 |
6 | 张近东 | [苏宁云商264.86亿] | 264.86亿 |
7 | 中国第一重型机械集团公司 | [中国一重250.14亿] | 250.14亿 |
8 | 李仲初 | [石基信息242.46亿] | 242.46亿 |
9 | 龚虹嘉 | [海康威视238.03亿] | 238.03亿 |
10 | 傅利泉 | [大华股份201.11亿] | 201.11亿 |
11 | 肖文革 | [印纪传媒175.97亿, 西部证券16.58亿] | 192.55亿 |
12 | 杜江涛 | [内蒙君正157.7亿, 博晖创新16.3亿] | 174.0亿 |
13 | 梁允超 | [汤臣倍健162.02亿] | 162.02亿 |
14 | 孙清焕 | [木林森161.08亿] | 161.08亿 |
15 | 蔡东青 | [奥飞动漫147.74亿] | 147.74亿 |
16 | 吕向阳 | [比亚迪144.47亿] | 144.47亿 |
17 | 帅放文 | [尔康制药128.99亿] | 128.99亿 |
18 | 何巧女 | [东方园林128.18亿] | 128.18亿 |
19 | 易峥 | [同花顺128.11亿] | 128.11亿 |
20 | 田明 | [美亚光电127.27亿, 西北轴承0.21亿] | 127.48亿 |
21 | 姜伟 | [贵州百灵126.89亿, 安泰科技0.41亿] | 127.3亿 |
22 | 王俊民 | [海思科125.16亿] | 125.16亿 |
23 | 王伟 | [朗玛信息98.87亿, 盛达矿业6.57亿, 火炬电子5.8亿, 凯发电气3.95亿, 新... | 118.54亿 |
24 | 阙文彬 | [恒康医疗116.81亿] | 116.81亿 |
25 | 敖小强 | [雪迪龙115.3亿] | 115.3亿 |
26 | 庄敏 | [中达股份107.71亿] | 107.71亿 |
27 | 王海鹏 | [美盈森105.31亿] | 105.31亿 |
28 | 周亚辉 | [昆仑万维98.11亿] | 98.11亿 |
29 | 张轩松 | [永辉超市94.87亿] | 94.87亿 |
... | ... | ... | ... |
11186 | 罗篦涵 | [金莱特0.03亿] | 0.03亿 |
11187 | 翟振国 | [北特科技0.03亿] | 0.03亿 |
11188 | 高春成 | [欣泰电气0.03亿] | 0.03亿 |
11189 | 熊小华 | [禾丰牧业0.03亿] | 0.03亿 |
11190 | 冯月季 | [联明股份0.03亿] | 0.03亿 |
11191 | 张艳红 | [金轮股份0.03亿] | 0.03亿 |
11192 | 瞿斌 | [联明股份0.03亿] | 0.03亿 |
11193 | 宋建平 | [光洋股份0.03亿] | 0.03亿 |
11194 | 牛帅 | [登云股份0.03亿] | 0.03亿 |
11195 | 李国虎 | [金莱特0.03亿] | 0.03亿 |
11196 | 林薇薇 | [北特科技0.03亿] | 0.03亿 |
11197 | 陈天国 | [雄韬股份0.03亿] | 0.03亿 |
11198 | 宗长丽 | [金轮股份0.03亿] | 0.03亿 |
11199 | 刘燕华 | [跃岭股份0.03亿] | 0.03亿 |
11200 | 吴小金 | [登云股份0.03亿] | 0.03亿 |
11201 | 张铁立 | [联明股份0.03亿] | 0.03亿 |
11202 | 吴国军 | [北特科技0.03亿] | 0.03亿 |
11203 | 韩泉富 | [联明股份0.03亿] | 0.03亿 |
11204 | 余晓玲 | [北特科技0.03亿] | 0.03亿 |
11205 | 侯玉辉 | [登云股份0.03亿] | 0.03亿 |
11206 | 朱素焕 | [登云股份0.03亿] | 0.03亿 |
11207 | 陈茂铸 | [天保重装0.03亿] | 0.03亿 |
11208 | 陈兆国 | [天保重装0.02亿] | 0.02亿 |
11209 | 王利琼 | [登云股份0.02亿] | 0.02亿 |
11210 | 陈行飞 | [天保重装0.02亿] | 0.02亿 |
11211 | 戴晓斐 | [天保重装0.02亿] | 0.02亿 |
11212 | 赵丽 | [天保重装0.02亿] | 0.02亿 |
11213 | 陆建 | [登云股份0.02亿] | 0.02亿 |
11214 | 陈玉芬 | [天保重装0.02亿] | 0.02亿 |
11215 | 卢旭东 | [红阳能源0.0亿] | 0.0亿 |
11216 rows × 3 columns