ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 谁是中国A股最有钱的自然人 > 来源:https://uqer.io/community/share/5523b45ef9f06c8f3390453e 运行此代码,便可知道,在当前日期,谁是A股最有钱的自然人! 股东数据来自于恒生聚源,选择的是类型为“自然人”的股东,有可能有脏数据! ```py import pandas as pd import numpy as np from datetime import datetime,timedelta from CAL.PyCAL import * cal = Calendar('China.SSE') ``` ```py 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 ``` ```py #获得全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'] #分别对应的是[公司代码,公告日、信息类别、股东名称、股东性质、持股数] ``` ```py #获得所有个股的自然人股东姓名,以及持有的股票数目 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 ``` ```py #获得个股的行情数据 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']) #获取最近一个交易日的行情数据 ``` ```py 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') #根据股东的姓名来分类 ``` ```py #统计自然人股东的总资产,并按照总资产大小由大到小排序 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) ``` ```py #为了展示,做一些处理 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 ```