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

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

运行此代码,便可知道,在当前日期,谁是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

results matching ""

    No results matching ""