bank marketing数据集预处理

采用bank marketing数据集,官方下载地址:
UCI Machine Learning Repository

博主下载了一份,免费分享

链接:https://pan.baidu.com/s/1ZzJNNH0qaN4lKv8iBJYhZA?pwd=e3f6 
提取码:e3f6

根据如下文章为参考

http://t.csdnimg.cn/G0kHs

因为该文章代码是图片,所以在实验成功后把文字代码放上来。并且对部分代码进行了微调,例如不是针对所有特征列进行独热编码。

import pandas as pd
import random
df = pd.read_csv('bank-additional-full.csv', encoding='utf-8-sig', sep=';')
print(df.tail())
for col in df. columns:
    if type(df[col][0]) is str:
        print ("unknown value count in "+ col +" is "+ str(df[df[col]=='unknown']['y'].count()))

#缺失值处理
df.loc[df["job"] == "unknown","job"] = "admin."
df.loc[df["marital"] == "unknown","marital"] = "married"
df.loc[df["education"] == "unknown","education"] = "university.degree"
df.loc[df["housing"] == "unknown","housing"] = random.choice(["yes", "no"])
df.loc[df["loan"] == "unknown","loan"] = "no"
df = df.drop(["default"], axis= 1)

#数据编码
for col in df.columns:
    if type(df[col][0]) is str:
        df.loc[df[col] == "no", col] = 0
        df.loc[df[col] == "yes", col] = 1

df.education = df.education.replace({"illiterate" : 1,"basic.4y" : 2, "basic.6y" : 3,"basic.9y" : 4, "high.school" : 5, "professional.course" : 6,"university.degree" : 7})
df.month = df.month.replace({"jan" : 1,"feb" : 2, "mar" : 3,"apr" : 4, "may" : 5, "jun" : 6,"jul" : 7, "aug" : 8, "sep" : 9,"oct" : 10, "nov" : 11, "dec" : 12})
df.day_of_week = df.day_of_week.replace({"mon" : 1,"tue" : 2, "wed" : 3,"thu" : 4, "fri" : 5})
df.contact = df.contact.replace({"cellular" : 0,"telephone" : 1})
df.poutcome = df.poutcome.replace({"failure" : 0,"nonexistent" : 1,"success": 2})
# 对指定列进行独热编码
encoded_cols = pd.get_dummies(df[['job', 'contact', 'marital']])

# 将独热编码后的列与原始数据进行合并
df = pd.concat([df, encoded_cols], axis=1)

# 删除原始的 'job', 'contact', 'marital' 列
df = df.drop(['job', 'contact', 'marital'], axis=1)

# 将 'y' 列移动到最后一列
y_column = df.pop('y')  # 移除 'y' 列并返回该列
df['y'] = y_column  # 将 'y' 列添加到 DataFrame 的最后一列

# 将处理后的数据保存为 CSV 文件
df.to_csv('processed_data.csv', index=True)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 数据集简介 Bank Marketing数据集是一个关于银行市场营销活动的数据集,包含了一系列客户的特征和目标变量。目标变量是二分类变量,指示客户是否订阅了银行的定期存款。 数据集包含了45211个样本和17个特征: - age:年龄 - job:职业 - marital:婚姻状况 - education:教育程度 - default:是否有信用违约记录 - balance:账户余额 - housing:是否有住房贷款 - loan:是否有个人贷款 - contact:联系方式 - day:最后一次联系的日期 - month:最后一次联系的月份 - duration:最后一次联系的通话时长 - campaign:此次活动期间与该客户联系的次数 - pdays:距离上次联系该客户的时间 - previous:此次活动期间与该客户联系的次数 - poutcome:上次活动的结果 - y:是否订阅定期存款 2. 数据集预处理 首先需要将数据集导入Python中,并进行数据预处理。具体包括以下几个步骤: - 导入必要的库和数据集 - 查看数据集的基本信息、缺失值和重复值 - 对非数值型变量进行编码 - 将数据集划分为训练集和测试集 代码如下: ```python # 导入必要的库和数据集 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder bank = pd.read_csv('bank.csv', delimiter=';') # 查看数据集的基本信息、缺失值和重复值 print(bank.info()) print(bank.isnull().sum()) print(bank.duplicated().sum()) # 对非数值型变量进行编码 le = LabelEncoder() bank['job'] = le.fit_transform(bank['job']) bank['marital'] = le.fit_transform(bank['marital']) bank['education'] = le.fit_transform(bank['education']) bank['default'] = le.fit_transform(bank['default']) bank['housing'] = le.fit_transform(bank['housing']) bank['loan'] = le.fit_transform(bank['loan']) bank['contact'] = le.fit_transform(bank['contact']) bank['month'] = le.fit_transform(bank['month']) bank['poutcome'] = le.fit_transform(bank['poutcome']) bank['y'] = le.fit_transform(bank['y']) # 将数据集划分为训练集和测试集 X = bank.iloc[:, :-1] y = bank.iloc[:, -1] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) ``` 3. 构建逻辑回归模型 构建逻辑回归模型需要完成以下几个步骤: - 导入必要的库 - 创建逻辑回归模型对象 - 将训练集数据拟合到模型中 - 使用测试集数据评估模型的性能 代码如下: ```python # 导入必要的库 from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, confusion_matrix, classification_report # 创建逻辑回归模型对象 logreg = LogisticRegression() # 将训练集数据拟合到模型中 logreg.fit(X_train, y_train) # 使用测试集数据评估模型的性能 y_pred = logreg.predict(X_test) print('Accuracy score:', accuracy_score(y_test, y_pred)) print('Confusion matrix:\n', confusion_matrix(y_test, y_pred)) print('Classification report:\n', classification_report(y_test, y_pred)) ``` 4. 结果分析 运行上述代码后,可以得到模型的性能指标。以本例为例,模型的准确率为89.8%,混淆矩阵如下: ``` [[11574 380] [ 1055 658]] ``` 可以看出,在测试集上,模型预测正确的正样本有658个,预测错误的正样本有1055个;预测正确的负样本有11574个,预测错误的负样本有380个。同时,分类报告可以帮助我们更好地了解模型的性能: ``` precision recall f1-score support 0 0.92 0.97 0.94 11954 1 0.63 0.38 0.47 1713 accuracy 0.90 13667 macro avg 0.77 0.68 0.71 13667 weighted avg 0.88 0.90 0.89 13667 ``` 可以看出,模型的精确度为0.63,召回率为0.38,F1值为0.47。这表明模型的性能有待进一步提高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值