谁是中国A股最有钱的自然人

来源:https://uqer.io/community/share/5523b45ef9f06c8f3390453e

运行此代码,便可知道,在当前日期,谁是A股最有钱的自然人!

股东数据来自于恒生聚源,选择的是类型为“自然人”的股东,有可能有脏数据!

  1. import pandas as pd
  2. import numpy as np
  3. from datetime import datetime,timedelta
  4. from CAL.PyCAL import *
  5. cal = Calendar('China.SSE')
  1. def GetSecID(tk_list,**kargs): #获得partyID
  2. num = 100
  3. cnt_num = len(tk_list)/num
  4. if cnt_num > 0:
  5. df = pd.DataFrame({})
  6. for i in range(cnt_num):
  7. sub_df = DataAPI.SecIDGet(ticker=tk_list[i*num:(i+1)*num],**kargs)
  8. df = pd.concat([df,sub_df])
  9. if (i+1)*num != len(tk_list):
  10. sub_df = DataAPI.SecIDGet(ticker=tk_list[(i+1)*num:],**kargs)
  11. df = pd.concat([df,sub_df])
  12. else:
  13. df = DataAPI.SecIDGet(ticker=tk_list,**kargs)
  14. return df
  15. def CountTime(): #获取最近的一个交易日,返回的是datetime格式
  16. today = datetime.today()
  17. today_str = today.strftime("%Y%m%d")
  18. cal_date = Date.fromDateTime(today)
  19. time1=" 15:05:00"
  20. ben_time = datetime.strptime(today_str+time1,"%Y%m%d %H:%M:%S")
  21. if cal.isBizDay(cal_date) & (today>ben_time): #如果是交易日,则判断当天是不是在15点前
  22. date = today
  23. else: #如果当天不是交易日,则获得前一个交易日
  24. cal_wd = cal.advanceDate(cal_date, '-1B', BizDayConvention.Following) #Date格式
  25. date = cal_wd.toDateTime() #datetime格式
  26. return date
  27. def GetMktEqud(tk_list,**kargs): #获得最新市场信息快照,即最新价格信息
  28. num = 50
  29. cnt_num = len(tk_list)/num
  30. if cnt_num > 0:
  31. df = pd.DataFrame({})
  32. for i in range(cnt_num):
  33. sub_df = DataAPI.MktEqudGet(ticker=tk_list[i*num:(i+1)*num],**kargs)
  34. df = pd.concat([df,sub_df])
  35. if (i+1)*num != len(tk_list):
  36. sub_df = DataAPI.MktEqudGet(ticker=tk_list[(i+1)*num:],**kargs)
  37. df = pd.concat([df,sub_df])
  38. else:
  39. df = DataAPI.MktEqudGet(ticker=tk_list,**kargs)
  40. return df
  41. def add_nm_money(sub_info): #将个股名称与金额拼接,方便做展示
  42. add_info_list = []
  43. sub_info_1 = sub_info.sort(columns='hold_money',ascending=False)
  44. for i in range(len(sub_info_1)):
  45. add_info = sub_info_1['secshortNM'].iloc[i] + str(round(sub_info_1['hold_money'].iloc[i]/1e8,2))+'亿'
  46. add_info_list.append(add_info)
  47. return add_info_list
  1. #获得全A股的partyID
  2. universe = DataAPI.EquGet(equTypeCD='A')['secID'].tolist() #获得全A股的secID
  3. All_A_tks_list = map(lambda x:x[0:6],universe) #根据色此ID获得A股的所有ticker,因为要获得partyID需要输入ticker
  4. party_id_info = GetSecID(tk_list=All_A_tks_list,field=['secShortName','ticker','partyID']) #由ticker获得该个股的partyID
  5. party2tk_dic = dict(zip(party_id_info['partyID'],party_id_info['ticker'])) #获得partyID与ticker的对应字典;注意,party_id_info的partyID是int型
  6. party2nm_dic = dict(zip(party_id_info['partyID'],party_id_info['secShortName'])) #获得partyID与secShortName的对应字典
  7. party_id_list = map(lambda x:str(x),party_id_info['partyID'].tolist()) #获得partyID的list,返回的party_id_info的‘partyID’是int型,而EquMainshJYGet输入的partyID需要str型,所以这里做个转换
  8. field1 = ['partyID','publishDate','shName','shChar','holdVol'] #分别对应的是[公司代码,公告日、信息类别、股东名称、股东性质、持股数]
  1. #获得所有个股的自然人股东姓名,以及持有的股票数目
  2. All_info_df = pd.DataFrame({})
  3. for party_id in party_id_list:
  4. hold_info = DataAPI.JY.EquMainshJYGet(partyID=party_id,field=field1)
  5. last_publishDate = hold_info['publishDate'].iloc[-1]
  6. hold_info = hold_info[(hold_info['publishDate']==last_publishDate)&(hold_info['shChar']=='自然人')] #获取最新的自然人股东信息
  7. hold_info_gp = hold_info.groupby('shName')
  8. #由于EquMainshJYGet这个API获得的是十大股东和十大流通股,只要出现过,不管是哪种都要记录;有可能出现两次,也只记录一次。
  9. for nm,sub_info in hold_info_gp:
  10. if len(sub_info)>1: #既是十大股东之一也是十大流通股东之一,只记录其中之一
  11. All_info_df = pd.concat([All_info_df,sub_info[0:1]])
  12. else: #是十大股东或十大流通股东,记录下来
  13. All_info_df = pd.concat([All_info_df,sub_info])
  14. All_info_df['ticker'] = All_info_df['partyID'].apply(lambda x:party2tk_dic[x]) #获得partyID对应的ticker
  1. #获得个股的行情数据
  2. tklist_1 = All_info_df['ticker'].tolist() #获得有自然人持股的个股ticker
  3. tklist_1 = list(set(tklist_1)) #去重
  4. endDate = CountTime().strftime('%Y%m%d') #获得最近一个交易日的日期
  5. Mkt_info = GetMktEqud(tklist_1,beginDate=endDate,endDate=endDate,field = ['ticker','closePrice']) #获取最近一个交易日的行情数据
  1. tk2price = dict(zip(Mkt_info['ticker'],Mkt_info['closePrice'])) #获得个股ticker与价格的字典
  2. All_info_df['closePrice'] = All_info_df['ticker'].apply(lambda x:tk2price[x]) #添加closePrice到All_info_df中
  3. All_info_df['secshortNM'] = All_info_df['partyID'].apply(lambda x:party2nm_dic[x]) #添加secshortNM即个股的简称到All_info_df中
  4. All_info_df['hold_money'] = All_info_df['holdVol']*All_info_df['closePrice'] #添加hold_money即个股的持有金额到All_info_df中
  5. All_info_df_gp = All_info_df.groupby('shName') #根据股东的姓名来分类
  1. #统计自然人股东的总资产,并按照总资产大小由大到小排序
  2. final_info_dic = {'name':[],'total_money':[],'stk_money':[]}
  3. for personNM,sub_info in All_info_df_gp:
  4. total_money = sub_info['hold_money'].sum()
  5. stk_money = add_nm_money(sub_info) #获得个股名称和金额的拼接结果
  6. final_info_dic['name'].append(personNM)
  7. final_info_dic['total_money'].append(total_money)
  8. final_info_dic['stk_money'].append(stk_money)
  9. final_info_df = pd.DataFrame(final_info_dic)
  1. #为了展示,做一些处理
  2. All_info_df_sort = final_info_df.sort(columns='total_money',ascending=False).reset_index(drop=True)
  3. All_info_df_sort['total_money'] = np.round(All_info_df_sort['total_money']/1e8,2).astype(str)+'亿'
  4. All_info_df_sort.columns = ['自然人名称','持有的股票及资产','总资产']
  5. print '谁是A股最有钱的自然人股东?(附注:’恒生聚源‘的数据库显示为自然人,则该股东定为自然人股东,可能存在脏数据)'
  6. 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亿
  1. 11216 rows × 3 columns