计算思维与数据科学 K-Means聚类模型信用卡用户风险评估 python连接数据库来处理数据

实验目的
1、处理信用卡数据异常值
1)读取信用卡数据;
2)丢弃逾期、呆账、强制停卡、退票、拒往记录为1、瑕疵户为2的记录;
3)丢弃呆账、强制停卡、退票为1、拒往记录为2的记录;
4)丢弃频率为5、刷卡金额不等于1的数据;
2、构造信用卡客户风险评估关键特征
1)根据特征瑕疵户、逾期、呆账、强制停卡记录、退票、拒往记录,构建历史行为特征(使用PCA降维);
2)根据特征借款余额、个人月收入、个人月开销、家庭月收入和月刷卡额,构建出经济风险情况特征;
3)根据特征职业、年龄、住家,构建出收入风险特征情况;
4)标准化历史行为特征、经济风险特征、个人收入风险特征;
3、构建K-Means聚类模型
1)根据构建的3个特征对客户进行分群,构建聚类模型,聚类数为5;
2)训练聚类模型,求出聚类中心,每类的用户数目;结合业务对客户群进行特征分析,对每个客户群体进行排名。
python连接数据库来处理数据

import pymysql
import pandas as pd
import numpy as np

conn = pymysql.connect(
    host='localhost',
    user='root',
    password='',
    db='tieba',
    charset='utf8',
       # autocommit=True,    # 如果插入数据,, 是否自动提交? 和conn.commit()功能一致。
)
print(1)
cur = conn.cursor()
#sql= "select 逾期 from sheet1 "
'''
2)丢弃逾期、呆账、强制停卡、退票、拒往记录为1、瑕疵户为2的记录;
3)丢弃呆账、强制停卡、退票为1、拒往记录为2的记录;
4)丢弃频率为5、刷卡金额不等于1的数据;

sql1="delete from sheet1 where 逾期 =1 and 呆账 =1 and 强制停卡记录 =1 and 退票 =1 and 拒往记录 =1 and 瑕疵户 =2 "
sql2="delete from sheet1 where 呆账 =1 and 强制停卡记录 =1 and 退票 =1 and 拒往记录 =2 "
sql3="delete from sheet1 where 频率 =5 and 月刷卡额 != 1 "
cur.execute(sql1)
cur.execute(sql2)
cur.execute(sql3)
#cur.execute(sql)
conn.commit()
result = cur.fetchall()
print(result)
丢弃成功
'''
# 1)根据特征瑕疵户、逾期、呆账、强制停卡记录、退票、拒往记录,构建历史行为特征(使用PCA降维);
cur1 = conn.cursor()
sql4="select 瑕疵户,逾期,呆账,强制停卡记录,退票,拒往记录 from sheet1 "
cur1.execute(sql4)
result1 = cur1.fetchall()
#print(result1)
from sklearn.decomposition import PCA
pca = PCA()
pca.fit(result1)
pca.components_
a = pca.explained_variance_ratio_

print(a)
pca = PCA(4)
pca.fit(result1)
low_d = pca.transform(result1)
print(low_d)

from sklearn.preprocessing import StandardScaler
################标准差标准化################
#       zij=(xij-xi)/si                 #
#       zij为标准化后的变量值              #
#       xij为实际变量值                    #
#       xi算术平均值(数学期望)           #
#       si标准差                           #
############################################
stdScale_1 = StandardScaler().fit(low_d) ## 生成规则

boston_Scaler_1 = stdScale_1.transform(low_d) 
print('标准差标准化后训练集数据的方差为:',np.var(boston_Scaler_1))

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = 5,
    random_state=123).fit(boston_Scaler_1)
k1 = kmeans.cluster_centers_
print(k1)
a1 = pd.Series(kmeans.labels_).value_counts()
print('最终每个类别的数目为:\n',a1)


#2)根据特征借款余额、个人月收入、个人月开销、家庭月收入和月刷卡额,构建出经济风险情况特征;
cur2 = conn.cursor()
sql5="select 借款余额,个人月收入,个人月开销,家庭月收入,月刷卡额 from sheet1 "
cur2.execute(sql5)
result2 = cur2.fetchall()
#print(result2)

stdScale_2 = StandardScaler().fit(result2) ## 生成规则
## 将规则应用于训练集
boston_Scaler_2 = stdScale_2.transform(result2) 
## 将规则应用于测试集
print('标准差标准化后训练集数据的方差为:',np.var(boston_Scaler_2))

kmeans2 = KMeans(n_clusters = 5,
    random_state=123).fit(boston_Scaler_2)
k2 = kmeans2.cluster_centers_
print(k2)
a2 = pd.Series(kmeans2.labels_).value_counts()
print('最终每个类别的数目为:\n',a2)


#3)根据特征职业、年龄、住家,构建出收入风险特征情况;
cur3 = conn.cursor()
sql6="select 职业,年龄,住家 from sheet1 "
cur3.execute(sql6)
result3 = cur3.fetchall()
#print(result3)
stdScale_3 = StandardScaler().fit(result3) ## 生成规则
## 将规则应用于训练集
boston_Scaler_3 = stdScale_3.transform(result3) 
## 将规则应用于测试集
print('标准差标准化后训练集数据的方差为:',np.var(boston_Scaler_3))

kmeans3 = KMeans(n_clusters = 5,
    random_state=1234).fit(boston_Scaler_3)
k3 = kmeans3.cluster_centers_
print(k3)
a3 = pd.Series(kmeans3.labels_).value_counts()
print('最终每个类别的数目为:\n',a3)
conn.close()

你可能感兴趣的:(聚类,python,kmeans)