import scorecardpy as sc import pandas as pd import numpy as np # 读取数据文件 df= pd.read_csv('D:\二次营销响应模型样本数据20230605.csv') def Calculate_IV(df,goal): ''' :param df: 要进行计算iv值的数据集 :param goal: 目标变量,取值0和1 :return:所有变量的woe、iv值详情信息 ''' features = list(df.columns) features.remove(goal) #把目标变量去掉,不参与变量的woe和iv计算 good,bad = df[goal].value_counts() #好坏标签,0代表好,1代表坏 Tab = pd.DataFrame() #接收每个变量的计算结果 for feature in features: dataset = df[[feature,goal]] table = pd.pivot_table(dataset,index=[feature],columns=[goal],aggfunc=np.alen, margins=True).fillna(0) table = pd.DataFrame(table) #每个特征分箱的好坏客户分组计数 table['bad%'] = table[1]/table['All'] #坏客户(标签为1)的占比 table['woe'] = np.log((table[0]*bad)/(table[1]*good)) #计算woe table['miv'] = table['woe']*(table[0]/good - table[1]/bad) #计算miv table['IV'] = table['miv'].sum() #计算IV table.insert(0,column='bining', value=table.index) table.insert(0,column='variable', value=feature) Tab = pd.concat([Tab,table]) Tab = Tab.round(decimals=4) return Tab
时间: 2024-04-06 22:34:53 浏览: 18
这段代码的功能是计算数据集中每个变量的信息值(IV)。其中,函数 Calculate_IV 接收两个参数,一个是数据集 df,另一个是目标变量 goal,函数返回一个包含所有变量的woe、iv值详情信息的 Pandas DataFrame 对象 Tab。
在函数 Calculate_IV 中,首先获取变量名称列表 features,并将目标变量 goal 从中删除,然后统计好坏标签的数量,即 good 和 bad。接着,对于每个特征 feature,获取包含该特征和目标变量的子集,然后对子集进行透视,计算每个特征分箱的好坏客户分组计数,得到一个表格 table。
接下来,表格 table 中新增一列 bad%,表示坏客户(标签为1)的占比。然后,计算每个分箱的 woe 值、miv 值和 IV 值,并将这些值添加到表格 table 中。最后,将表格 table 中的变量名称和分箱名称作为新列插入表格 table 的最前面,然后将表格 table 连接到最终结果表格 Tab 中。最后,返回结果表格 Tab。
最后,对于读取数据文件,需要检查文件路径是否正确,并且需要确保数据集中存在目标变量列。
相关问题
用Python代码实现在5000行7列的csv数据集中,用csv数据集中任取3000个数据建模进行回归建模,用csv数据集中其他1000个数据进行预测。
首先,我们需要安装所需的Python库,包括pandas、numpy和sklearn:
```python
!pip install pandas numpy sklearn
```
然后,我们可以使用pandas库读取csv文件并随机选择3000个数据进行建模。同时,我们可以使用sklearn库中的LinearRegression模型进行回归建模:
```python
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
# 读取csv文件
df = pd.read_csv('data.csv')
# 随机选择3000个数据进行建模
sampled_df = df.sample(n=3000)
# 将数据集拆分为自变量X和因变量y
X_train = sampled_df.iloc[:, :-1].values
y_train = sampled_df.iloc[:, -1].values
# 创建回归模型并进行训练
regressor = LinearRegression()
regressor.fit(X_train, y_train)
```
接下来,我们可以使用剩余的1000个数据进行预测。需要注意的是,在进行预测之前,我们需要对自变量进行标准化处理:
```python
# 选择剩余的1000个数据进行预测
test_df = df.drop(sampled_df.index)
X_test = test_df.iloc[:, :-1].values
y_test = test_df.iloc[:, -1].values
# 标准化处理自变量
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
# 进行预测并计算模型评分
y_pred = regressor.predict(X_test)
score = regressor.score(X_test, y_test)
print("模型评分:", score)
```
最后,我们可以输出预测结果并进行模型评估。完整的代码如下:
```python
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
# 读取csv文件
df = pd.read_csv('data.csv')
# 随机选择3000个数据进行建模
sampled_df = df.sample(n=3000)
# 将数据集拆分为自变量X和因变量y
X_train = sampled_df.iloc[:, :-1].values
y_train = sampled_df.iloc[:, -1].values
# 创建回归模型并进行训练
regressor = LinearRegression()
regressor.fit(X_train, y_train)
# 选择剩余的1000个数据进行预测
test_df = df.drop(sampled_df.index)
X_test = test_df.iloc[:, :-1].values
y_test = test_df.iloc[:, -1].values
# 标准化处理自变量
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
# 进行预测并计算模型评分
y_pred = regressor.predict(X_test)
score = regressor.score(X_test, y_test)
# 输出预测结果和模型评分
print("预测结果:", y_pred)
print("模型评分:", score)
```
导入csv数据,使用Kmeans聚类的python代码
以下是导入csv数据并使用Kmeans聚类的Python代码示例:
```python
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# 读取CSV数据
df = pd.read_csv('data.csv')
# 数据预处理
X = df.iloc[:, 1:].values
sc = StandardScaler()
X = sc.fit_transform(X)
# 使用PCA进行降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 使用KMeans进行聚类
kmeans = KMeans(n_clusters=3, init='k-means++', random_state=42)
y_kmeans = kmeans.fit_predict(X_pca)
# 可视化聚类结果
colors = ['red', 'blue', 'green']
for i in range(3):
plt.scatter(X_pca[y_kmeans == i, 0], X_pca[y_kmeans == i, 1], s=100, c=colors[i], label=f'Cluster {i+1}')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='yellow', label='Centroids')
plt.title('Clusters')
plt.xlabel('PCA 1')
plt.ylabel('PCA 2')
plt.legend()
plt.show()
```
在这个示例中,我们首先使用Pandas库的`read_csv`函数读取CSV数据文件,并将数据存储到DataFrame对象中。然后,我们使用NumPy库的`values`属性将DataFrame对象转换为NumPy数组。接下来,我们使用scikit-learn库的`StandardScaler`类对数据进行标准化处理。然后,我们使用PCA进行降维,并使用KMeans进行聚类。最后,我们使用Matplotlib库可视化聚类结果。