一、主要作业内容:
1.数据读取:根据数据文件类型以及数据探索、数据处理和聚类实验的要求,读取数据并处理为符合要求的格式。必须提供代码和结果截图
2.数据探索与数据处理:根据之前讲过的实验《数据探索》的内容,查看数据的基本统计特征情况和拓展统计特征情况,根据之前做过的实验《Pandas统计分析基础与数据预处理》中的内容,查看数据是否存在缺失值、异常值、重复值,如果存在,进行相应处理(这个具体怎么做之前给你们的材料里都有)。必须提供代码和结果截图
3.kmeans聚类分析:按照实验《Sklearn操作与聚类分析模型构建与评价》中的数据处理和聚类分析流程,以第二步中处理完成的数据作为本次聚类分析实验的输入数据,完成数据聚类分析任务。必须提供代码和结果截图。
4.按照要求认真完成实验,提交完整实验报告和对应的完整代码文件。
二、源代码:
#coding=gbk
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans #导入kmeans算法
data=pd.read_csv('E:\\python\\大数据实验\\data\\credit_card.csv',encoding='GBK')
#查看数据集情况:
data.info()
data.describe()
###历史行为特征
#划分出历史行为特征数据
data_active=data.iloc[:,[2,3,4,6,7,8]]
#定义聚类特征数据
data_means=data.iloc[:,[0]]
#查看历史行为特征数据集情况:
data_active.describe()
data_active.info()
#计算评分 数值越低,评分越低
def GetScore(x):
if x>=2:
a =0
else:
a =1
return a
score_1=data_active['瑕疵户'].apply(GetScore)
score_2=data_active['逾期'].apply(GetScore)
score_3=data_active['呆账'].apply(GetScore)
score_4=data_active['退票'].apply(GetScore)
score_5=data_active['拒往记录'].apply(GetScore)
score_6=data_active['强制停卡记录'].apply(GetScore)
#加权求和
data_means.loc[:,'history_credit_risk']=score_1+score_2*2+score_3*3+score_4*3+score_5*3+score_6
###经济风险情况特征
# 划分出经济风险情况特征数据
data_encomic = data.iloc[:, [5, 18, 19, 21, 22]]
# 查看经济风险情况特征数据情况
data_encomic.describe()
data_encomic.info()
# 借款额度分数
def GetScore_encomic(x):
if x >= 2:
a = 1
else:
a = 0
return a
score_yu = data_encomic['月刷卡额'].apply(GetScore_encomic)
# 个人月收入情况分数
data_person = data_encomic['个人月收入'] / data_encomic['个人月开销']
data_person_Scores = []
for i in range(data_encomic.shape[0]):
if data_person[i] < 1:
data_person_Scores.append(0)
else:
data_person_Scores.append(1)
# 家庭月收入情况分数
data_mouth = data_encomic['家庭月收入'] / data_encomic['月刷卡额']
data_mouth_Scores = []
for i in range(data_encomic.shape[0]):
if data_person[i] < 1:
data_mouth_Scores.append(0)
else:
data_mouth_Scores.append(1)
data_means['economic_risk'] = np.array(data_mouth_Scores) + np.array(data_person_Scores) + np.array(score_yu)
###收入风险情况特征
data_shouru=data.iloc[:,[14,17,20]]
#查看收入风险情况特征数据情况
data_shouru.describe()
data_shouru.info()
#住家评分
HouseScore = []
for i in range(data_shouru.shape[0]):
if 3 <= data_shouru.loc[i, '住家'] <= 5:
HouseScore.append(0)
else:
HouseScore.append(1)
#职业评分
JobScore = []
for i in range(data_shouru.shape[0]):
if(data_shouru.loc[i, '职业'] <= 7) | (data_shouru.loc[i, '职业'] == 19) | (data_shouru.loc[i, '职业'] == 21):
JobScore.append(2)
if(data_shouru.loc[i, '职业'] >= 8) & (data_shouru.loc[i, '职业'] <= 11):
JobScore.append(1)
if(data_shouru.loc[i, '职业'] <= 18) & (data_shouru.loc[i, '职业'] >= 12) | (data_shouru.loc[i, '职业'] == 20) | (data_shouru.loc[i, '职业'] == 22):
JobScore.append(0)
#年龄评分
AgeScore = []
for i in range(data_shouru.shape[0]):
if data_shouru.loc[i, '年龄'] <= 2:
AgeScore.append(1)
else:
AgeScore.append(0)
data_means['income_risk'] = np.array(HouseScore) + np.array(JobScore) + np.array(AgeScore)
####聚类分析
#标准化构建的三个特征数据集
sc_X = StandardScaler()
data_means_stander = sc_X.fit_transform(data_means.iloc[:,[1,2,3]])
#聚类训练
k = 5 ## 确定聚类中心数
#构建模型
kmeans_model = KMeans(n_clusters = k,n_jobs=4,random_state=123)
fit_kmeans = kmeans_model.fit(data_means_stander) #模型训练
#客户特征分析排名
data_means['count']=data_means['income_risk']+data_means['economic_risk']+data_means.loc[:,'history_credit_risk']
sort_values=data_means.sort_values("count",inplace=False)
#查看聚类中心
kmeans_model.cluster_centers_
#保存客户的类别标签
data_means['lable']=kmeans_model.labels_
#统计不同类别样本的数目
r1 = pd.Series(kmeans_model.labels_).value_counts()
data_means.to_csv("mean.csv",index=False,sep=',', encoding="utf_8_sig")