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

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

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Linux部署jar包过程

《Linux部署jar包过程》文章介绍了在Linux系统上部署Java(jar)包时需要注意的几个关键点,包括统一JDK版本、添加打包插件、修改数据库密码以及正确执行jar包的方法... 目录linux部署jar包1.统一jdk版本2.打包插件依赖3.修改密码4.执行jar包总结Linux部署jar包部署