近年来,企业社会责任(csr)已成为全球学术界研究的热点,



一、CSR相关论文

[1]解学梅,朱琪玮.企业绿色创新实践如何破解“和谐共生”难题?[J].管理世界,2021,37(01):128-149+9.
[2]谢红军,吕雪.负责任的国际投资:ESG与中国OFDI[J].经济研究,2022,57(03):83-99.
[3]Schaefer, Sarah Desirée, Ralf Terlutter, and Sandra Diehl. "Is my company really doing good? Factors influencing employees' evaluation of the authenticity of their company's corporate social responsibility engagement." Journal of business research 101 (2019): 128-143.



CSR数据多为非结构文本数据,可以做词频统计、情感分析、话题模型等文本分析任务。今天给大家奉上A股CSR数据集, 对文本分析感兴趣的同学, 欢迎报名视频课「Python实证指标构建与文本分析」。 本文仅展示A股企业社会责任数据集,并作简单分析。



二、CSR数据集

目前这是市面上最全最完整的原始数据,数据已整理到csv压缩文件(大小308M)。

A股企业社会责任报告数据集基本信息

- 记录数14043
- 沪深2337家公司
- 年度2006-2023
- 公布日期2007-03-14 ~ 2024-04-30
- txt、pdf、csv
- 体积



三、实验

3.1 读取数据

import pandas as pd

df = pd.read_csv('CSR2006-2023.csv.gz', compression='gzip')
df


3.2 字段

CSR2006-2023.csv.gz 含字段

- code 股票代码
- name 公司简称
- year 会计年度
- pub_date 发布日期
- type 报告类型, 有三种CSR、ESG、CSRESG; 有的公司发布的报告即是CSR,也是ESG,所以标注类型为CSRESG。 实际使用,可以将字段type中含CSR的看做企业社会责任报告

查看CSR、ESG、CSRESG记录数

df.type.value_counts()

Run

type
CSR       11926
ESG        1884
CSRESG      233
Name: count, dtype: int64

3.3 记录数

#ESG报告数
len(df)

Run

14043

#发布ESG报告的公司数
df.code.nunique()

Run

2337

3.4 会计年度

#有ESG报告的年份

#sorted(df['year'].unique())
sorted(df.year.unique())

Run

[2006,
 2007,
 2008,
 2009,
 2010,
 2011,
 2012,
 2013,
 2014,
 2015,
 2016,
 2017,
 2018,
 2019,
 2020,
 2021,
 2022,
 2023]

3.5 发布日期

df['pub_date'] = pd.to_datetime(df['pub_date'])
print(df['pub_date'].min())
print(df['pub_date'].max())

Run

2007-03-14 00:00:00
2024-04-30 00:00:00



四、ESG年度发布量

df.groupby('year').apply(len).plot(kind='bar')  



五、沪深发布量

大邓记得深圳交易所大多数股票以0开头,上海交易所股票则大多以6开头。 可以简单通过第一位数字来判断两个交易所发布量

#切片,选取股票代码字符串第二个位置的数字
df['code'].str.slice(start=1, stop=2).value_counts()

Run

code
6    7835
0    4962
3    1199
8      18
9      17
2      10
4       2
Name: count, dtype: int64

运行结果,除了0和6还出现了2、3/9。综上,股票代码

  • 0 深交所

  • 3 创业板

  • 6 上交所

  • 其他


df[df['code'].str.startswith('A6')]


df[df['code'].str.startswith('A0')]


#股票代码第一位出现2或者9的股票
df[df['code'].str.match('A2|A9')]



数据集获取

数据整理不易, 100元, 加微信 372335839, 备注「姓名-学校-专业-CSR」



广而告之