请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3364724 新帖:11

学习学习JQData~

特朗普对头发表于:5 月 10 日 06:35回复(1)

学习JQData笔记01~抄作业~

原文链接,向大佬致敬呀嘿嘿(^▽^)~

行业人员情况研究¶

背景:最近经常看到裁员等信息,但是并不能确定整个行业的情况,所以希望通过数据验证一下真实的情况

研究思路:¶

通过上市公司,根据行业筛选出来行业内的上市公司,对行业内上市公司公布的年报中的人员信息计算均值,得到历年行业内上市公司人员的均值,观察均值的趋势是否符合预期

需后续验证的问题:¶

因为所处IT行业,就对传统软件行业和互联网行业比较关注,主要是观察了这两个行业分类中的数据。

由于2018年年报还没有出来,待出来后再进行验证现阶段所说裁员的实际情况。

数据选择:¶

  1. 行业使用的是证监会行业
  2. 数据使用的是2012-2017年年报数据

结果:¶

  1. 传统软件行业(在证监会行业列表中的“软件和信息技术服务业”),人数稳定上升。
  2. 互联网行业(互联网和相关服务),人数在2016年后开始下降
  3. 展示了按人员数量最多的10个行业和较之前增长率最高的20个行业的信息
import jqdatasdk
jqdatasdk.auth(tel, pwd)
auth success
# 获取行业列表
# "sw_l1": 申万一级行业
# "sw_l2": 申万二级行业
# "sw_l3": 申万三级行业
# "jq_l1": 聚宽一级行业
# "jq_l2": 聚宽二级行业
# "zjw": 证监会行业
industries_list = jqdatasdk.get_industries(name='zjw')
industries_list
.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }
name start_date
L72 商务服务业 1996-08-29
L71 租赁业 1997-01-30
G53 铁路运输业 1998-05-11
G57 管道运输业 1996-11-04
G56 航空运输业 1997-11-05
G55 水上运输业 1993-11-19
G54 道路运输业 1991-01-14
G59 仓储业 1996-06-14
G58 装卸搬运和运输代理业 1993-05-05
P82 教育 2012-10-26
C42 废弃资源综合利用业 2012-10-26
C43 金属制品、机械和设备修理业 2010-09-29
M75 科技推广和应用服务业 2009-02-11
M74 专业技术服务业 2007-02-15
O80 机动车、电子产品和日用产品修理业 2012-01-01
O81 其他服务业 1998-03-27
D46 水的生产和供应业 1994-02-24
D45 燃气生产和供应业 2000-12-11
D44 电力、热力生产和供应业 1993-04-16
A02 林业 1996-12-06
A03 畜牧业 1997-06-11
A04 渔业 1993-05-07
A05 农、林、牧、渔服务业 1997-05-30
C39 计算机、通信和其他电子设备制造业 1990-12-19
C38 电气机械和器材制造业 1990-12-19
C35 专用设备制造业 1992-07-01
C34 通用设备制造业 1992-03-27
C37 铁路、船舶、航空航天和其他运输设备制造业 1992-03-31
C36 汽车制造业 1992-07-24
C31 黑色金属冶炼和压延加工业 1994-01-06
... ... ...
B07 石油和天然气开采业 1996-06-28
B06 煤炭开采和洗选业 1994-01-06
C19 皮革、毛皮、羽毛及其制品和制鞋业 1994-04-04
C18 纺织服装、服饰业 1993-12-31
C13 农副食品加工业 1993-12-15
C17 纺织业 1992-06-16
C16 烟草制品业 2012-01-01
C15 酒、饮料和精制茶制造业 1992-10-12
C14 食品制造业 1994-08-18
R89 娱乐业 2012-01-01
R88 体育 2017-03-24
R85 新闻和出版业 1992-12-08
R87 文化艺术业 2012-10-26
R86 广播、电视、电影和影视录音制作业 1994-02-24
I64 互联网和相关服务 1992-05-07
I65 软件和信息技术服务业 1992-08-20
I63 电信、广播电视和卫星传输服务 1992-12-02
J69 其他金融业 2012-10-26
J68 保险业 2007-01-09
J67 资本市场服务 1994-01-10
J66 货币金融服务 1991-04-03
B12 其他采矿业 2002-02-05
B10 非金属矿采选业 2017-05-03
B11 开采辅助活动 2002-02-05
G60 邮政业 2017-02-16
N76 水利管理业 2012-01-01
N77 生态保护和环境治理业 2012-10-26
N78 公共设施管理业 1992-08-07
E50 建筑装饰和其他建筑业 1997-05-22
M73 研究和试验发展 2012-10-26

90 rows × 2 columns

# 按行业列表获取每个行业公司的列表
def get_complany_lists(industries_list):
    complany_lists = []
    for industrie in industries_list:
        complany_lists.append(jqdatasdk.get_industry_stocks(industrie))
        
    return complany_lists
# 行业内公司的员工信息
def get_employee_df_lists(complany_lists, end_date_list):
    employee_df_lists = []

    for complany_list in complany_lists:
        q=jqdatasdk.query(jqdatasdk.finance.STK_EMPLOYEE_INFO).filter(jqdatasdk.finance.STK_EMPLOYEE_INFO.code.in_(complany_list),jqdatasdk.finance.STK_EMPLOYEE_INFO.end_date.in_(end_date_list)).limit(3000)
        employee_df_lists.append(jqdatasdk.finance.run_query(q))
        
    return employee_df_lists
# 计算从2012-2017年行业人数均值
def compute_employee_info(employee_df_lists):
    dict_list = []
    for employee_df in employee_df_lists:
        employee_list = []
        employee_dict = {}
        for name, group in employee_df.groupby('end_date'):
            employee_list.append(group['employee'].sum() / len(group))
            employee_dict[name] = group['employee'].sum() / len(group)
            
        dict_list.append(employee_dict)
        
    return dict_list
industries_list = jqdatasdk.get_industries(name='zjw')
end_date_list = ['2012-12-31', '2013-12-31', '2014-12-31', '2015-12-31', '2016-12-31', '2017-12-31']
complany_lists = get_complany_lists(industries_list.index)
employee_df_lists = get_employee_df_lists(complany_lists, end_date_list)
dict_list = compute_employee_info(employee_df_lists)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
industries_dict = {}
for i in range(len(dict_list)):
    employee_dict = dict_list[i]
    industries_dict[industries_list['name'].iloc[i]] = employee_dict
def plot_industrie_info(industrie_name):
    employee_dict = industries_dict[industrie_name]
    fig = plt.figure(figsize=(16,6))
    ax1 = fig.add_subplot(1,1,1)
    ax1.plot(list(employee_dict.keys()), list(employee_dict.values()))
    ax1.set_title(industrie_name)
    plt.show()
plot_industrie_info('软件和信息技术服务业')
plot_industrie_info('互联网和相关服务')
# 人数前十行业展示
sort_dict = {}
for industrie,employee_dict in industries_dict.items():
    if employee_dict:
        sort_dict[industrie] = list(employee_dict.values())[-1]
        
sort_dict = sorted(sort_dict.items(),key = lambda x:x[1],reverse = True)

fig = plt.figure(figsize=(16,6))
ax1 = fig.add_subplot(1,1,1)
for i in range(len(sort_dict)):
    if i == 10:
        break
    
    employee_dict = industries_dict[sort_dict[i][0]]
    ax1.plot(list(employee_dict.keys()), list(employee_dict.values()), label=sort_dict[i][0])
    
plt.legend()
plt.show()
# 对行业增长情况进行排序
sort_dict = {}
for industrie,employee_dict in industries_dict.items():
    if employee_dict:
        group_percent = 0
        for value in employee_dict.values():
            if value != 0:
                group_percent = (list(employee_dict.values())[-1] - value) / value
                break
                
        sort_dict[industrie] = group_percent
        
sort_dict = sorted(sort_dict.items(),key = lambda x:x[1],reverse = True)
sort_dict[:20]
[('教育', 18.837606837606838),
 ('邮政业', 15.31725251339253),
 ('房屋建筑业', 5.474210931485758),
 ('生态保护和环境治理业', 4.526429248943693),
 ('卫生', 3.8361863675582395),
 ('畜牧业', 2.726210049324297),
 ('开采辅助活动', 2.5886379192334017),
 ('住宿业', 2.535785583252401),
 ('广播、电视、电影和影视录音制作业', 1.2548248756750977),
 ('文化艺术业', 1.1809906291834003),
 ('房地产业', 1.0579207450124686),
 ('研究和试验发展', 0.8913786173633439),
 ('家具制造业', 0.7890826112500247),
 ('批发业', 0.7637756765849212),
 ('资本市场服务', 0.5465912749273315),
 ('商务服务业', 0.50051687521014),
 ('软件和信息技术服务业', 0.42658766526440167),
 ('废弃资源综合利用业', 0.4098669843160611),
 ('道路运输业', 0.4027766912498547),
 ('保险业', 0.3987247155716767)]
fig = plt.figure(figsize=(16,6))
ax1 = fig.add_subplot(1,1,1)
for i in range(len(sort_dict)):
    if i == 20:
        break
    
    employee_dict = industries_dict[sort_dict[i][0]]
    ax1.plot(list(employee_dict.keys()), list(employee_dict.values()), label=sort_dict[i][0])
    
plt.legend()
plt.show()
 

全部回复

0/140

达人推荐

量化课程

    移动端课程