109 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
| # -*- coding: utf-8 -*-
 | ||
| 
 | ||
| '''
 | ||
| 
 | ||
| 脚本说明:将传统理赔已质检的赔案数据进行解析命否规则
 | ||
| 
 | ||
| '''
 | ||
| 
 | ||
| #导入模块
 | ||
| 
 | ||
| import json
 | ||
| 
 | ||
| import pandas
 | ||
| 
 | ||
| import os
 | ||
| 
 | ||
| import sys
 | ||
| 
 | ||
| sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))))
 | ||
| 
 | ||
| from utils.pandas_extension import SaveAsExcel
 | ||
| 
 | ||
| print('正在打开文件并抽取数据...', end = '')
 | ||
| 
 | ||
| #打开源文件并读取数据
 | ||
| dataset = pandas.read_csv(filepath_or_buffer = 'dataset.csv')
 | ||
| 
 | ||
| print('已完成')
 | ||
| print()
 | ||
| 
 | ||
| print('正在转换数据...', end = '')
 | ||
| 
 | ||
| #转换函数,用于将命否规则中结果返回
 | ||
| def transform(rules):
 | ||
| 
 | ||
| 	result = []
 | ||
| 
 | ||
| 	try:
 | ||
| 
 | ||
| 		#替换规则结果中部分字符串
 | ||
| 		rules = rules.replace('true', 'True').replace('false', 'False')
 | ||
| 
 | ||
| 		#表达化
 | ||
| 		rules = eval(rules)
 | ||
| 
 | ||
| 		#若规则结果数据类型为列表则遍历,获取命否的规则编码并拼接
 | ||
| 		if isinstance(rules, list):
 | ||
| 
 | ||
| 			#遍历规则结果
 | ||
| 			for rule in rules:
 | ||
| 
 | ||
| 				#若规则命否则将规则获取规则编码
 | ||
| 				if not rule.get('success'):
 | ||
| 
 | ||
| 					#添加命否规则编码
 | ||
| 					result.append(rule.get('ruleCode'))
 | ||
| 
 | ||
| 	except:
 | ||
| 
 | ||
| 		result.append('failure')
 | ||
| 
 | ||
| 	return ','.join(result)
 | ||
| 
 | ||
| #清洗命否规则
 | ||
| dataset['清洗后命否规则'] = dataset['命否规则'].apply(func = lambda x: transform(x))
 | ||
| 
 | ||
| #解析预期进入自动审核字段
 | ||
| dataset['预期进入自动审核'] = dataset['清洗后命否规则'].apply(func = lambda x: '是' if x == '' else '否')
 | ||
| 
 | ||
| #解析实际
 | ||
| dataset['自动审核通过复核'] = dataset.apply(func = lambda x: '是' if x['预期进入自动审核'] == '是' and x['审核员'] == '自动审核' else ('否' if x['预期进入自动审核'] == '是' and x['审核员'] != '自动审核' else ''), axis = 'columns')
 | ||
| 
 | ||
| dataset = dataset[['赔案号', '质检完成时间', '预期进入自动审核', '自动审核通过复核', '清洗后命否规则']]
 | ||
| 
 | ||
| #数据集透视
 | ||
| pivot_table = dataset.groupby(by = '质检完成时间').agg(质检完成赔案数 = pandas.NamedAgg(column = '质检完成时间', aggfunc = lambda x: pandas.notna(x).sum()), 预期进入自动审核赔案数 = pandas.NamedAgg(column = '预期进入自动审核', aggfunc = lambda x: sum(x == '是')), 自动审核通过复核赔案数 = pandas.NamedAgg(column = '自动审核通过复核', aggfunc = lambda x: sum(x == '是')))
 | ||
| 
 | ||
| #按照质检完成时间倒序排序
 | ||
| pivot_table.sort_values(by = '质检完成时间', ascending = False, inplace = True)
 | ||
| 
 | ||
| #重置索引
 | ||
| pivot_table.reset_index(inplace = True)
 | ||
| 
 | ||
| #计算预期进入自动化审核率
 | ||
| pivot_table['预期进入自动审核率'] = pivot_table.apply(lambda x: round(x['预期进入自动审核赔案数'] / x['质检完成赔案数'] * 100, 2) if x['质检完成赔案数'] != 0 else None, axis = 'columns')
 | ||
| 
 | ||
| #计算预期进入自动化审核率
 | ||
| pivot_table['自动审核复核通过率'] = pivot_table.apply(lambda x: round(x['自动审核通过复核赔案数'] / x['预期进入自动审核赔案数'] * 100, 2) if x['预期进入自动审核赔案数'] != 0 else None, axis = 'columns')
 | ||
| 
 | ||
| #添加汇总行
 | ||
| pivot_table.loc[pivot_table.shape[0]] = ['汇总', pivot_table['质检完成赔案数'].sum(), pivot_table['预期进入自动审核赔案数'].sum(), pivot_table['自动审核通过复核赔案数'].sum(), round(pivot_table['预期进入自动审核赔案数'].sum() / pivot_table['质检完成赔案数'].sum() * 100, 2), round(pivot_table['自动审核通过复核赔案数'].sum() / pivot_table['预期进入自动审核赔案数'].sum() * 100, 2)]
 | ||
| 
 | ||
| print('已完成')
 | ||
| print()
 | ||
| 
 | ||
| print('正在将数据保存为EXCEL...', end = '')
 | ||
| 
 | ||
| SaveAsExcel(worksheets = [['按照质检完成时间汇总', pivot_table], ['明细数据', dataset]], file_path = '普康健康_自动审核统计数据.xlsx')
 | ||
| 
 | ||
| print('已完成')
 | ||
| print()
 | ||
| 
 | ||
| '''
 | ||
| 
 | ||
| 修改记录
 | ||
| 
 | ||
| 1、241220 就数据转换类型进行调整,使用封装函数保存为EXCEL,另外处理步骤参考抽取、转换和加载
 | ||
| 
 | ||
| ''' |