学习JQData笔记01~抄作业~
原文链接,向大佬致敬呀嘿嘿(^▽^)~
背景:最近经常看到裁员等信息,但是并不能确定整个行业的情况,所以希望通过数据验证一下真实的情况
通过上市公司,根据行业筛选出来行业内的上市公司,对行业内上市公司公布的年报中的人员信息计算均值,得到历年行业内上市公司人员的均值,观察均值的趋势是否符合预期
因为所处IT行业,就对传统软件行业和互联网行业比较关注,主要是观察了这两个行业分类中的数据。
由于2018年年报还没有出来,待出来后再进行验证现阶段所说裁员的实际情况。
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
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()
本社区仅针对特定人员开放
查看需注册登录并通过风险意识测评
5秒后跳转登录页面...
移动端课程