tfse-etl-api-v0.2/RatingData/scripts/common.py

305 lines
9.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import copy
import time
from RatingData.db import FIND_DATA_N_TYC, FIND_SINGLE_DATA_BY_REQ, FIND_ALL_DATA_BY_REQ
from RatingData.static.province_map import p_map
import pandas as pd
def modify_unit(param):
"""
金额单位从元改为万元
Parameters:
param: 金额数据
Returns:
result: 单位为万元的金额数据
"""
money = round(param/10000, 2)
return str(money)
def judge_list(param):
"""
判断列表中是否有None
如果有置为-
Parameters:
param: list列表
Returns:
result: 没有None的list
"""
df = pd.DataFrame(param)
df = df.fillna('-')
df = df[0].apply(lambda x: round(x/10000, 2) if isinstance(x, float) else x)
df = df.to_list()
df = [str(x) for x in df]
return df
def calculate_growth_rate(param1, param2):
"""
计算增长率
传入两年财务数据字典项,算出年增长率
Parameters:
param1: 财务指标1
param2: 财务指标2
Returns:
增长率
"""
param1 = float(param1)
param2 = float(param2)
rate = round((param1 - param2) / param2, 2)
return rate
def calculate_amount(param):
"""
计算数据之和
清洗数据库数据,根据需要返回
注意:
货币单位不同现在存在美元、人民币两种汇率暂用6.5
Parameters:
param: 数据库数据
Returns:
数据合计
"""
result = dict()
result['amount'] = 0
result['industry'] = list()
result['base'] = list()
for item in param:
if item['amountSuffix'] == '万人民币':
try:
result['amount'] += item['amount']
except TypeError:
result['amount'] += 0
elif item['amountSuffix'] == '万美元':
try:
result['amount'] += item['amount'] * 6.5
except TypeError:
result['amount'] += 0
result['industry'].append(item['category'])
result['base'].append(item['base'])
return result
def calculate_list(param):
"""
计算列表中所有元素出现的次数
Parameters:
param: list数据
Returns:
列表元素出现次数对象
"""
result = dict()
for item in param:
result[item] = param.count(item)
return result
def time_stamp(param):
"""
时间戳转换
Parameters:
param: 时间戳数据
Returns:
转换后时间数据
"""
if param is None:
return '-'
else:
estiblish_time = param / 1000
put_date = time.localtime(estiblish_time)
date = time.strftime("%Y-%m-%d", put_date)
return date
def province_conversion(param):
"""
省份转换
Parameters:
param: 省份简称
Returns:
转换后省份全称
"""
res = [v for k, v in p_map.items() if k == param][0]
return res
def industry_processing(param):
"""
将行业数组转为字符串
Parameters:
param list 行业数组
Returns:
result str 行业字符串
"""
return param[0] + '-' + param[1]
# 获取数据库数据
def get_tfse_data(param):
"""
获取数据库数据
Parameters:
param: 企业名称、企业ID、评价ID
Returns:
report_data: 数据库数据
"""
company = param['company']
rid = param['rid']
cid = param['cid']
report_data = dict()
# 评价结果
es = FIND_SINGLE_DATA_BY_REQ('综信评价数据', '评价结果', {'评价ID': rid}, ["企业名称", "评价年度", "财务评分", "经营评分", "信用等级", "评价时间"])
# 综合评价填报
cef = FIND_SINGLE_DATA_BY_REQ('综信评价数据', '填报数据', {'评价ID': rid}, ["财务填报", "行业选择"])
# 指标明细
fid = FIND_ALL_DATA_BY_REQ('综信评价数据', '财指结果', {'企业ID': cid},
['报告期', '净资产收益率', '存货周转率', '已获利息倍数', '应收账款周转率', '总资产周转率', '总资产增长率', '总资产报酬率', '技术投入比率', '营业增长率', '资产负债率', '速动比率'])
# 基本信息
cbd = FIND_DATA_N_TYC(db='公司背景', col='基本信息', query={'企业名称': company})[0]
if '上市' in cbd['基本信息']['companyOrgType'] and '非上市' not in cbd['基本信息']['companyOrgType']:
# 企业股东
cs = FIND_DATA_N_TYC(db='公司背景', col='十大股东', query={'企业名称': company})[0]
else:
cs = FIND_DATA_N_TYC(db='公司背景', col='企业股东', query={'企业名称': company})[0]
# 对外投资
oi = FIND_DATA_N_TYC(db='公司背景', col='对外投资', query={'企业名称': company})[0]
# 进出口信用
ip = FIND_DATA_N_TYC(db='经营状况', col='进出口信用', query={'企业名称': company})[0]
# 专利
ip_02 = FIND_DATA_N_TYC(db='知识产权', col='专利', query={'企业名称': company})[0]
# 软件著作权
sc = FIND_DATA_N_TYC(db='知识产权', col='软件著作权', query={'企业名称': company})[0]
# 资质证书
qh = FIND_DATA_N_TYC(db='经营状况', col='资质证书', query={'企业名称': company})[0]
# 融资历史
fh = FIND_DATA_N_TYC(db='公司发展', col='融资历史', query={'企业名称': company})[0]
# 风险数据
rd = FIND_SINGLE_DATA_BY_REQ('综信评价数据', '风险数据', {'评价ID': rid}, ["合规风险", "经营风险", "关联风险"])
# 周边风险
pr = FIND_DATA_N_TYC(db='天眼风险', col='周边风险', query={'企业名称': company})[0]
report_data['评价结果'] = es
report_data['综合评价填报'] = cef
report_data['指标明细'] = fid
report_data['基本信息'] = cbd
report_data['企业股东'] = cs
report_data['对外投资'] = filter_oi_data(oi)
report_data['进出口信用'] = ip
report_data['专利'] = ip_02
report_data['软件著作权'] = sc
report_data['资质证书'] = qh
report_data['融资历史'] = fh
report_data['风险数据'] = rd
report_data['周边风险'] = pr
return report_data
def filter_oi_data(param):
"""
对外投资
清洗掉状态为吊销、注销、迁出的企业
Parameters:
param: 对外投资数据
Returns:
清洗后的数据
"""
result = list()
total = 0
data = param['对外投资']['result']
for item in data:
if item['regStatus'] != '注销' and item['regStatus'] != '迁出' and item['regStatus'] != '吊销':
result.append(item)
total += 1
param['对外投资']['result'] = result
param['对外投资']['total'] = total
return param
def shareholder_strength_data(param):
"""
股东数据
清洗数据库数据,根据需要返回
Parameters:
param: 企业名称
Returns:
股东数据
"""
data = dict()
# 基本信息
cbd = FIND_DATA_N_TYC(db='公司背景', col='基本信息', query={'企业名称': param})[0]
# 企业股东
cs = FIND_DATA_N_TYC(db='公司背景', col='企业股东', query={'企业名称': param})[0]
data['基本信息'] = cbd
data['企业股东'] = cs
return data
def ten_shareholder_data(param):
"""
十大股东数据
清洗数据库数据,根据需要返回
Parameters:
param: 企业名称
Returns:
股东数据
"""
data = dict()
# 基本信息
cbd = FIND_DATA_N_TYC(db='公司背景', col='基本信息', query={'企业名称': param})[0]
data['基本信息'] = cbd
if '上市' in cbd['基本信息']['companyOrgType']:
cs = FIND_DATA_N_TYC(db='公司背景', col='十大股东', query={'企业名称': param})[0]
data['十大股东'] = cs
else:
cs = FIND_DATA_N_TYC(db='公司背景', col='企业股东', query={'企业名称': param})[0]
data['企业股东'] = cs
return data
def person_subsidiaries(param):
"""
人员控股数据
清洗数据库数据,根据需要返回
Parameters:
param: 人员id
Returns:
人员控股数据
"""
data = dict()
# 控股数据
ps = FIND_DATA_N_TYC(db='公司背景', col='人员控股企业', query={'人员ID': param})[0]
data['人员控股企业'] = ps
return data
def get_esg_data(param):
"""
获取数据库数据并按要求格式返回
Parameters:
param dict 企业名称、企业ID、评价ID
Returns:
result dict 符合要求需要清洗的数据
"""
company = param['company']
rid = param['rid']
cid = param['cid']
# ESG评价结果
es = FIND_SINGLE_DATA_BY_REQ('ESG评价数据', '评价结果', {'评价ID': rid}, ['评价等级'])
# ESG风险数据
rd = FIND_SINGLE_DATA_BY_REQ('ESG评价数据', '风险数据', {'企业ID': cid},
["严重违法", "失信人", "法律诉讼", "税收违法", "经营异常", "行政处罚", "被执行人"])
# ESG评价填报
ef = FIND_SINGLE_DATA_BY_REQ('ESG评价数据', '填报数据', {'评价ID': rid},
["评价ID", "企业ID", "企业名称", "所属行业", "评价年度", "公司当年收入(万元)", "环境问卷", "社会问卷", "治理问卷"])
report_data = copy.deepcopy(ef)
report_data['评价等级'] = es['评价等级']
report_data['风险数据'] = rd
return report_data