tfse-model-api-v0.2/Esg/EsgModel.py

120 lines
3.3 KiB
Python

import copy
import datetime
from Esg.db import update_data
from Esg.scripts.environmental import environmental_rating
from Esg.scripts.governance import governance_rating
from Esg.scripts.social import social_rating
from common.scripts import read_json_file
class EsgModel:
"""
ESG评价模型
"""
def __init__(self):
"""
初始化数据
Parameters
param dict 数据模板
questionnaire dict 填报问卷
rid str 评价ID
cid str 企业ID
period str 评价年度
"""
self.questionnaire = None
self.company = None
self.rid = None
self.cid = None
self.period = None
self.esg_score = None
self.rating_result = None
def prepare_params(self, param):
"""
准备模型数据
Parameters:
param dict 数据模板
Returns:
-
"""
self.rid = param['评价ID']
self.cid = param['企业ID']
self.company = param['企业名称']
self.period = param['评价年度']
self.esg_score = self.esg_rating_scripts(param)
self.rating_result = self.esg_rating_result()
@staticmethod
def esg_rating_scripts(param):
"""
esg打分方法
Parameters:
param dict 数据模板
Returns:
score dict 分数
"""
score = dict()
score['环境得分'] = environmental_rating(param)
score['社会得分'] = social_rating(param)
score['公司治理得分'] = governance_rating(param)
score['合计'] = score['环境得分']['合计'] + score['社会得分']['合计'] + score['公司治理得分']['合计']
return score
def esg_rating_result(self):
"""
整合打分结果
Parameters:
score dict 打分结果
Returns:
result dict esg得分
"""
score = copy.deepcopy(self.esg_score)
result = dict()
result['企业名称'] = self.company
result['企业ID'] = self.cid
result['评价ID'] = self.rid
result['评价年度'] = self.period
result['评价等级'] = self.score_rank(score['合计'])
result['环境得分'] = score['环境得分']
result['社会得分'] = score['社会得分']
result['公司治理得分'] = score['公司治理得分']
result['ESG得分'] = score['合计']
result['评价时间'] = datetime.datetime.now().strftime('%Y-%m-%d')
return result
def save_result(self):
"""
保存评价结果
"""
rating_result = self.rating_result
update_data('ESG评价数据', '评价结果', {"企业ID": self.cid, "评价年度": self.period}, rating_result)
@staticmethod
def score_rank(param):
"""
描述
Parameters:
param float esg分数合计
Returns:
result str 评价等级
"""
if param >= 80:
level = 'A'
elif param >= 50:
level = 'B'
elif param >= 30:
level = 'C'
else:
level = 'D'
return level
if __name__ == '__main__':
m = EsgModel()
data = read_json_file('/Esg/static/template_data.json')
m.prepare_params(data)
r = m.esg_rating_result()