资管过程日报指标异常分析

2024-08-29 07:38

本文主要是介绍资管过程日报指标异常分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

资管过程日报指标异常分析

1.数据处理

2.异常值标准制定

3.画图

4.导出word

#!/usr/bin/env python
# coding: utf-8import matplotlib.pyplot as plt
import pandas as pd 
import numpy as np
plt.rcParams['font.sans-serif']=['Simhei'] #显示中文
plt.rcParams['axes.unicode_minus']=False   #显示负号col=['日期','类别','队列','队列人数','当日剩余案件量','尝试呼叫次数','当日人均案件量','尝试呼叫次数','接通次数','接通率','当日有效呼出次数','联络客户数','可联客户数','有效联络客户数','可联客户占比','有效联络率','PTP']
xlsx = pd.ExcelFile('D:\我的项目\资管过程日报指标异常值分析\资管过程日报.xlsx')
df = pd.read_excel(xlsx, '原始数据分开展示',header=0,usecols=col)import datetime
jsontime = '2021-03-01'  # 数据开始时间,注意调整
date_start=datetime.datetime.strptime(jsontime,"%Y-%m-%d")
df_21=df[df['日期']>=date_start]nan_lines = df_21['类别'].isnull()  # 找出类别为空的行
mm=df_21[nan_lines]
df_remain=df_21.drop(index=mm.index, axis=0) # 删除s类别为空的行df_remain2=df_remain.drop(['日期', '类别','队列'], axis=1) df_remain2=df_remain2.astype('float')
df_remain2.dtypes
df_remain2.info()df_remain1 = df_remain.reindex(columns=['日期', '类别','队列'])df2 = pd.concat([df_remain1, df_remain2], axis=1)
queue=['城市信贷_M0(资管整体)','城市信贷_M0_预测后手工队列','城市信贷_M0_预测外呼队列','城市信贷_M1_冠军队列','城市信贷_M1_挑战者队列','城市信贷M2','城市信贷M3','城市信贷高期M4-M6','城市信贷高期M7-M12','城市信贷高期M13+','宜人贷预催收','宜人贷初期手工','宜人贷中期M2','宜人贷中期M3','宜人贷高期M4-M6','宜人贷高期M7-M12','宜人贷高期M13+','宜人小贷_M0(资管整体)','宜人小贷初期','宜人小贷M2','宜车贷M2','宜车贷M3','宜车贷高期M4-M6','宜车贷高期M7+']
df3=df2[df2['类别'].isin(queue)]
df_group = df3.groupby(['类别','日期']).agg({'队列人数':'sum','当日剩余案件量':'sum','尝试呼叫次数':'sum','接通次数':'sum','当日有效呼出次数':'sum','联络客户数':'sum','可联客户数':'sum','有效联络客户数':'sum','PTP':'sum'})df_group['人均案件量']=df_group['当日剩余案件量']/df_group['队列人数']
df_group['人均接通量']=df_group['接通次数']/df_group['队列人数']
df_group['人均尝试呼叫量']=df_group['尝试呼叫次数']/df_group['队列人数']
df_group['呼叫强度']=df_group['尝试呼叫次数']/df_group['当日剩余案件量']
df_group['接通率']=df_group['接通次数']/df_group['尝试呼叫次数']
df_group['可联率']=df_group['可联客户数']/df_group['联络客户数']
df_group['PTP率']=df_group['PTP']/df_group['可联客户数']
df_group=df_group.rename(columns={"当日剩余案件量":"分案量","队列人数":"催收员数量"})#识别异常值index_list=['分案量','催收员数量','人均案件量','人均接通量','人均尝试呼叫量','呼叫强度','接通率','可联率','PTP率']def outlier(dataframe,a, threshold=2.2):dd = dataframe[a]ff = dataframe.reindex(columns=[a])   MAD = (dd - dd.median()).abs().median()if MAD!=0:zscore = ((dd - dd.median())* 0.6475 /MAD).abs()        ff.loc[:,'isAnomaly'] = zscore > thresholdelse:ff.loc[:,'isAnomaly']=Falseff.loc[:,'med'] = dd.median()ff.loc[:,'mad'] = MADreturn ffdf_outlier = pd.DataFrame(data=[])
for group in queue:df_group_tag=df_group.xs(key=group, level='类别')for ind in index_list:da = outlier(df_group_tag,ind)da['index']=indda.columns=['value','isAnomaly','med','mad','index']da['group']=groupdf_outlier=pd.concat((da,df_outlier), axis=0)        df_outlier2=df_outlier.loc[df_outlier.isAnomaly==True,:]    prd=lambda x: '城市信贷' if '城市信贷' in x else ('宜人贷' if '宜人贷' in x else ('宜人小贷' if '宜人小贷' in x else '宜车贷'))
df_outlier2['prd']=df_outlier2['group'].apply(prd)
df_outlier['prd']=df_outlier['group'].apply(prd)df11 = pd.pivot_table(df_outlier, index = ['group','日期'], columns = ['index'], aggfunc = {'value':'sum'}).reset_index()df11.drop([0, 1], axis=0, inplace=True)
df11.columns=['group','日期','PTP率','人均尝试呼叫量','人均接通量','人均案件量','催收员数量','分案量','可联率','呼叫强度','接通率']import time
today=time.strftime('%Y-%m-%d',time.localtime(time.time()))
path="D:/我的项目/资管过程日报指标异常值分析/"
with pd.ExcelWriter(path+"资管过程日报异常值_%s.xlsx" %today) as writer:df_outlier.to_excel(writer, sheet_name='所有指标')df_outlier2.to_excel(writer, sheet_name='异常数据')# df11.to_excel(writer, sheet_name='透视表')writer = pd.ExcelWriter(path+"资管过程日报异常值_%s_拆分.xlsx" %today)
for group in list(queue):df12 = df11[df11['group'] == group]df12.to_excel(writer, sheet_name= group ,index=False)
writer.save()# 作图
for group in queue:df_group_tag=df_group.xs(key=group, level='类别')for ind in index_list:da = outlier(df_group_tag,ind)da['index']=indda.columns=['value','isAnomaly','med','mad','index']da['date']=da.indexda['date']=da['date'].apply(lambda x:x.strftime('%m-%d')) #转换成月日格式fig = plt.figure()fig.set_size_inches(10,6)ax1 = fig.add_subplot(2, 1, 1)ax2 = fig.add_subplot(2, 1, 2)        ax1.plot(da['date'],da['value'],color='#27727B',lw=1.5)        ax2.plot(da['date'],da['isAnomaly'],color='#C1232B',lw=1.5)plt.title("%s" %ind, fontsize=12)plt.tight_layout()fig.savefig('D:/我的项目/资管过程日报指标异常值分析/图片/%s_%s.png' %(group,ind))
#         print(group)plt.close()   #图片太多的情况下,需要关闭plt,否则会出现warning# 图片导入到word里from docx import Document #创建文档
from docx.oxml.ns import qn #中文
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT #段落
from docx.shared import Pt,RGBColor,Mm,Cm#大小磅数/字号
from openpyxl import load_workbook
from docx.enum.section import WD_ORIENTATION, WD_SECTION_START # 导入节方向和分解符类型
from docx.enum.text import WD_ALIGN_PARAGRAPHword_document = Document()  # 创建word文档对象
word_document.styles['Normal'].font.name = u'微软雅黑'  # 正文/标题1/标题2 (英文)
word_document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')  # 中文# ----段落创建P1 标题行-----
name='资管过程日报异常值分析'
run = word_document.add_heading('', level=1).add_run(u"%s" %name)  #添加标题
run.font.name=u'微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑') 
run.font.size = Pt(20)
run.bold = Truefor title in queue:p2 = word_document.add_heading('', level=2).add_run(u"%s" %title)  #添加标题p2.font.name=u'微软雅黑'p2._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑') p2.font.size = Pt(16)p2.bold = Truefor ind in index_list:# ----段落创建-----   p5 = word_document.add_paragraph()  # 向word添加段落p5.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 段落居中对齐# ----添加标题---p5 = word_document.add_heading('', level=3).add_run(u"%s" %ind)  #添加标题p5.font.name=u'微软雅黑'p5._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑') p5.font.size = Pt(16)p5.bold = True# ----段落创建---p4 = word_document.add_paragraph()  # 向word添加段落p4.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 段落居中对齐# ----添加图片---run_text_4 = p4.add_run()run_text_4.add_picture('D:/我的项目/资管过程日报指标异常值分析/图片/%s_%s.png' %(title,ind) ,width=Mm(200))
#         print('pic/%s_%s.png' %(title,ind))word_document.save('D:/我的项目/资管过程日报指标异常值分析/结果/%s_%s.docx' % (name,today))

这篇关于资管过程日报指标异常分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117257

相关文章

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序