基于python的回归算法

##1,读取文件,并进行初步筛选去重


import pandas as pd
from IPython.display import display

corp_eva7 = pd.read_excel('/home/dev/桌面/官方数据表/zhubiao.xlsx')
# corp_eva7['flag'] = corp_eva7['财报年份标签']

# 财报年份标签
fenxiang = corp_eva7[[
   xxxx___
]]
#print(fenxiang)

##2,检查字段空值,排除掉空值率高于80%的字段,# 排除area,金额,投资方字段

# 使用isnull()方法检查空值
null_distribution = fenxiang.isnull().sum()

# 打印每个字段的空值分布情况
print(null_distribution)


# 查看数值字段的分布情况
numeric_columns = fenxiang.select_dtypes(include=['number'])

for column in numeric_columns.columns:
    print(f"字段:{column}")
    print(fenxiang[column].value_counts())
    fenxiang[column].plot(kind='hist', bins=20)

##3,先处理连续型变量,对数据进行分箱,先处理离群值,然后计算均值与标准差,按照极差除于10进行分箱,分为10个箱体


import pandas as pd

# 获取分箱
# 读取文件到DataFrame
binned_data = fenxiang
# 选择数值型字段
numeric_columns = binned_data.select_dtypes(include=['number'])

# 遍历每个数值型字段进行分箱处理
for column in numeric_columns.columns:
    # 计算每个字段的最大值和最小值
    min_value = binned_data[column].min()
    max_value = binned_data[column].max()
    # 计算均值和标准差
    mean = binned_data[column].mean()
    std_dev = binned_data[column].std()
    # 定义异常值阈值(例如,超过平均值2个标准差的被定义为异常值)
    outlier_threshold = 2 * std_dev

    # 删除异常值
    data = binned_data[(binned_data[column] >= mean - outlier_threshold) & 
                       (binned_data[column] <= mean + outlier_threshold)]
    # 计算每个分箱的宽度
    bin_width = (max_value - min_value) / 10

    # 使用Cut函数进行分箱处理
    bins = [min_value + i * bin_width for i in range(11)]
    binned_data[f'{column}_bins'] = pd.cut(binned_data[column], bins, labels=False, 
                                            include_lowest=True, right=True)

# 打印已经分箱处理的DataFrame
print(binned_data)

##4,拼接负样本标签字段到处理后的表中

df2 = corp_eva7['负样本标签']

filtered_columns.index = df2.index
# 拼接数据框
df1_cm = pd.concat([filtered_columns, df2], axis=1)
#print(df1_cm['负样本标签'])

##5,计算连续型字段的数据的WOE值和IV值

import pandas as pd
import numpy as np

# 创建一个DataFrame来存储每个变量的WOE值,好客户数目和坏客户数目以及IV值
woe_df = pd.DataFrame(columns=['Field', 'Bin', 'WOE', 'Good', 'Bad', 'IV'])

# 计算整体好坏比
total_good = df1_cm['负样本标签'].sum()
total_bad = len(df1_cm) - total_good

# 遍历每个字段,计算每个字段的WOE值,好客户数目和坏客户数目以及IV值
for col in df1_cm.columns[:-1]:  # 排除最后一个字段
    if col.endswith('_bins'):  # 如果字段名以_bins结尾
        woe_col = col + '_woe'

        iv = 0  # 初始化IV值

        for bin_value in sorted(df1_cm[col].uniq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值