目录

任务1 数据探索与清洗

任务1.1

任务1.2

任务2 产品销售数据可视化分析

任务2.1

任务3 客户流失因素可视化分析

任务3.1

任务3.2

任务3.3

任务3.4

任务4 特征构建


任务1 数据探索与清洗

任务1.1

df = pd.read_csv(r'E:\编程学习\比赛用的\2022-B题\B题:银行客户忠诚度分析赛题数据\short-customer-data.csv',encoding='gbk')
dfs = pd.read_csv(r'E:\编程学习\比赛用的\2022-B题\B题:银行客户忠诚度分析赛题数据\long-customer-train.csv',encoding='utf-8')
df# 任务1_1 (1)
df = pd.read_csv(r'E:\编程学习\比赛用的\2022-B题\B题:银行客户忠诚度分析赛题数据\short-customer-data.csv',encoding='gbk')
df.dtypes
# 1. 查找所有缺失值的数量
df.isnull().sum()
# 2.数据表清洗,去除空值行
d = df.dropna()
d.isnull().sum()
# 3.去重复的值
d.drop_duplicates(["user_id"],keep='first',inplace=True)
d.to_excel(r'E:\编程学习\比赛用的\2022-B题\作品\result\result1_1.xlsx', index=False, encoding='utf-8')# (2)
dfs = pd.read_csv(r'E:\编程学习\比赛用的\2022-B题\B题:银行客户忠诚度分析赛题数据\long-customer-train.csv',encoding='utf-8')
dfs.dtypes
# # 1. 查找所有缺失值的数量
df.isnull().sum()
dfs['Age'] = dfs['Age'].str.replace("岁",'')
dfs['Age'] = dfs['Age'].str.replace("-",'0')
dfs['Age'] = dfs['Age'].str.replace(" ",'')
# 转换Age(客户年龄)数据类型为int类型
dfs['Age'] = dfs['Age'].astype('int64')
dfs.dtypes
dfs.to_excel(r'E:\编程学习\比赛用的\2022-B题\作品\result\result1_2.xlsx', index=False, encoding='utf-8')

任务1.2

# 特征转换
from sklearn.preprocessing import OrdinalEncoder
df_data_3 = d.copy()
# 特征转换
df_data_3[['job', 'marital', 'education', 'default', 'housing', 'loan', 'contact', 'month', 'day_of_week', 'poutcome', 'y']] = \
OrdinalEncoder()\
.fit_transform(d[['job', 'marital', 'education', 'default', 'housing', 'loan', 'contact', 'month', 'day_of_week', 'poutcome', 'y']])
df_data_3.to_excel(r'E:\编程学习\比赛用的\2022-B题\作品\result\result1_3.xlsx', index=False, encoding='utf-8')
df_data = d.copy()
df_data_dummies = pd.get_dummies(df_data[['job', 'marital', 'education', 'default', 'housing', 'loan', 'contact', 'month', 'day_of_week', 'poutcome', 'y']])
df_data_dummies

任务2 产品销售数据可视化分析

任务2.1

import pandas as pd
df = pd.read_excel(r'E:\编程学习\备赛-数据分析比赛\Day02\练习题-任务 2\result1.xlsx')
df
df2 = df.copy()
del df2['user_id']
df2# 引入第三方库
import sklearn
from sklearn import cluster
from sklearn.preprocessing import StandardScaler
import seaborn as sns
import matplotlib.pyplot as plt# 10个聚类簇
model = cluster.KMeans(n_clusters=10)
# 标准化模型
scaler = StandardScaler()
# 标准化
data_ = scaler.fit_transform(df2.iloc[:,:])
# 模型训练
model.fit(data_)
# 对数据进行聚类得到标签
labels = model.predict(data_)
df2['标签'] = labels
df2df2['值'] = df2['job']
summarys = df2.pivot_table(index='标签',columns='marital',values='值',aggfunc='count', fill_value=0)
summarysplt.style.use('ggplot')
#处理中文乱码
plt.rcParams['font.sans-serif']=['Microsoft YaHei']
#坐标轴负号的处理
plt.rcParams['axes.unicode_minus']=False
sns.heatmap(data=summarys,cmap="YlGnBu_r",vmin=100, vmax=1300, linewidths=.2,annot=True, fmt='g')
plt.title('十类人群在不同姻状况的数量热力图')
plt.show()

任务3 客户流失因素可视化分析

任务3.1

# 任务三
data3 = pd.read_excel(r'E:\编程学习\比赛用的\2022-B题\作品\result\result1_2.xlsx')
data3# 任务3-1
import pyecharts.options as opts
from pyecharts.charts import Line,Page
data3 = pd.read_excel(r'E:\编程学习\比赛用的\2022-B题\作品\result\result1_2.xlsx')
data_age1 = data3.query('Exited == 0')
data_age2 = data3.query('Exited == 1')data3_count = data_age1['Age'].value_counts()
le = len(data_age1['Age'])
age = [a for a in data3_count.index]
b = [round(b/le, 2) for b in data3_count.values]data3_count2 = data_age2['Age'].value_counts()
ages = [a for a in data3_count2.index]
e = [round(b/le, 2) for b in data3_count2.values]import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False    # 用来正常显示负号
fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
plt.title('不同年龄客户量占比')
ax1.plot(age, b, 'o:r', label='Line A')ax2 = fig.add_subplot(1,2,2)
plt.title('不同年龄客户量占比-已流失')
ax2.plot(ages,e, color='b', marker='o', label='Line B')
plt.savefig(r'E:\编程学习\比赛用的\2022-B题\作品\image\任务 3.1.png')
plt.show()

任务3.2

# 任务3-2
import matplotlib.pyplot as plt
# 无流失
CreditScore = [c for c in data_age1['CreditScore']]
CreditScore_age = [r for r in data_age1['Age']]# 已流失
CreditScore2 = [c for c in data_age2['CreditScore']]
CreditScore_ages = [r for r in data_age2['Age']]fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
plt.title('客户信用资格与年龄分布')
ax1.scatter(age, b)ax2 = fig.add_subplot(1,2,2)
plt.title('客户信用资格与年龄分布-已流失')
ax2.scatter(ages,e)
plt.savefig(r'E:\编程学习\比赛用的\2022-B题\作品\image\任务 3.2.png')
plt.show()

任务3.3

# 任务3-3
data3['值'] =data3['Tenure']
summary=data3.pivot_table(index='Exited',columns='Tenure',values='值',aggfunc='count', fill_value=0)
print(summary)

任务3.4

# 任务3-4
def Year(t):if t <= 3:return '新客户'elif t <= 6:return '稳定客户'elif t > 6:return '老客户'
def asset(z):if z <= 50000:return '低资产'elif z <= 90000:return '中下资产'elif z <= 120000:return '中上资产'elif z > 120000:return '高资产'
df_Text['Status'] = df_Text['Tenure'].apply(Year)
df_Text['AssetStage'] = df_Text['Balance'].apply(asset)
df_Text.to_excel(r'E:\编程学习\备赛-数据分析比赛\Day02\练习题--任务 4 特征构建\result3.xlsx',index=False)
data3_4 = pd.read_excel(r'E:\编程学习\比赛用的\2022-B题\作品\result\result3.xlsx')
data3_4plt.style.use('ggplot')
#处理中文乱码
plt.rcParams['font.sans-serif']=['Microsoft YaHei']
#坐标轴负号的处理
plt.rcParams['axes.unicode_minus']=False
sns.heatmap(data=summarys,cmap="YlGnBu_r",vmin=100, vmax=1300, linewidths=.2,annot=True, fmt='g')
plt.title('计新、老客户在各资产阶段中流失的客户量热力图')
plt.savefig(r'E:\编程学习\比赛用的\2022-B题\作品\image\任务 3.4.png')
plt.show()

任务4 特征构建

df = pd.read_excel(r'E:\编程学习\备赛-数据分析比赛\Day02\练习题--任务 4 特征构建\result1_2.xlsx')
dfdef Active_year(a, b):if b == 0:if a == '新客户':return 0elif a == '稳定客户':return 1elif a == '老客户':return 2else:if a == '新客户':return 3elif a == '稳定客户':return 4elif a == '老客户':return 5
def Active_AssetStage(a, b):if b == 0:if a == '低资产':return 0elif a == '中下资产':return 1elif a == '中上资产':return 2elif a == '高资产':return 3else:if a == '低资产':return 6elif a == '中下资产':return 7elif a == '中上资产':return 8elif a == '高资产':return 9def Active_HasCrCard(a, b):if b == 0:if a == '低资产':return 0elif a == '中下资产':return 2elif a == '中上资产':return 5elif a == '高资产':return 5else:if a == '低资产':return 6elif a == '中下资产':return 7elif a == '中上资产':return 9elif a == '高资产':return 9df2 = df.copy()
df2['IsActiveStatus'] = df2.apply(lambda x: Active_year(x['Status'], x['IsActiveMember']), axis=1)
df2['IsActiveAssetStage'] = df2.apply(lambda x: Active_AssetStage(x['AssetStage'], x['IsActiveMember']), axis=1)
df2['CrCardAssetStage'] = df2.apply(lambda x: Active_HasCrCard(x['AssetStage'], x['HasCrCard']), axis=1)
df2.to_excel(r'E:\编程学习\备赛-数据分析比赛\Day02\练习题--任务 4 特征构建\result1_3.xlsx', index=False)

2022第五届“泰迪杯”数据分析技能赛-B题-银行客户忠诚度分析相关推荐

  1. 2022第五届“泰迪杯”数据分析技能赛-B题-银行客户忠诚度分析(上)

    新手参加比赛,不足之处敬请谅解 题目链接:链接:https://pan.baidu.com/s/1x1U-kobvPjNMm8xnvS9Gdg  提取码:7id3 目录 任务1 数据探索与清洗 任务1 ...

  2. 2022第五届“泰迪杯”数据分析技能赛-B题-银行客户忠诚度分析(下)

    2022第五届"泰迪杯"数据分析技能赛-B题-银行客户忠诚度分析(上)链接:https://blog.csdn.net/weixin_60200880/article/detail ...

  3. 2022年”泰迪杯“数据分析技能赛B题:银行客户忠诚度分析

    A题和B题我们小组都做了,最终A题二等奖,B题一等奖.总结写在最前面,泰迪杯技能赛不像数学建模比赛,所有的问题具有引导性,但一天完成建模和论文也不是一件容易的事,如果想要通过Python实现分析,需要 ...

  4. 2022泰迪杯数据分析技能赛B题方案及赛后总结:银行客户忠诚度分析

    第五届"泰迪杯"数据分析技能赛(B题)『一等奖』,@队友:东可在编程.好同志歪歪 B题题目为"银行客户忠诚度分析",题目给出了短期客户产品购买数据"s ...

  5. 第五届“泰迪杯”数据分析技能赛 经验代码分享

    第五届"泰迪杯"数据分析技能赛 经验/代码分享 品牌:"泰迪杯"数据分析技能赛 组织单位:泰迪杯数据分析技能赛组织委员会.广东泰迪智能科技股份有限公司.广东省工 ...

  6. 2021 年“泰迪杯”数据分析技能赛 B 题 肥料登记数据分析 (视频讲解+解题源码)、数据挖掘、数据分析实战

    2021 年"泰迪杯"数据分析技能赛 B 题 肥料登记数据分析 (视频讲解+解题源码).数据挖掘.数据分析实战 前言: 整理了2021 年"泰迪杯"数据分析技能 ...

  7. 第五届“泰迪杯”数据分析技能赛

    为推广我国高校数据分析实践教学,培养学生数据分析的应用和创新能力,增加校企交流合作和信息共享,提升我国高校的教学质量和企业的竞争能力,"泰迪杯"数据分析技能赛(以下简称竞赛)于20 ...

  8. 2021泰迪杯数据分析技能赛B题-肥料登记数据分析

    调用模块: import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns p ...

  9. 第五届泰迪杯数据分析技能大赛思路

    各有关单位: 为推广我国高校数据分析实践教学,培养学生数据分析的应用和创新能力,增加校企交流合作和信息共享,提升我国高校的教学质量和企业的竞争能力,"泰迪杯"数据分析技能赛(以下简 ...

最新文章

  1. 使用JDBC获取Oracle连接时报错
  2. 执行sql语句_一条SQL查询语句是如何执行的?
  3. 提升你的代码——Lambda!
  4. 删除链表重复节点 python_python无序链表删除重复项的方法
  5. Java抽象– ULTIMATE教程(PDF下载)
  6. 2、Eternal框架-svn_有更新!
  7. 爱奇艺《青春有你3》节目组决定终止节目录制
  8. C++编程语言中类对象的赋值与复制介绍(一)
  9. java面试| 精选基础题(1)
  10. sprintf函数的用法linux,sprintf函数用法解析
  11. wps excel 插入公式 整列
  12. 亲戚关系php,中国亲戚关系解析图(大全)
  13. 动态电路中的动态元件——电容和电感
  14. Unity Editor 基础篇(三):自定义窗口
  15. 【MySQL】MySQL安装图解
  16. linux服务器被攻击怎么办
  17. android9使用type-c接口,插入线控耳机与数据线监听混乱
  18. Linux 性能分析工具- Atop安装和使用
  19. 国内CMS内容管理系统
  20. 西游记的四种性格和生活的人

热门文章

  1. OA和KM知识管理的区别
  2. 华硕 内存条 不同步_国产RGB内存条新品,主打梦幻光效,比芝奇的皇家戟便宜近一半...
  3. Halcon示例之角点检测(包含自定义函数的创建)
  4. [转]中国排名前100的IT公司
  5. xcvxcvxcvc
  6. 中断控制器8259——工作方式、命令字
  7. vue-amap center和zoom
  8. 连接 Oracle数据库 配置方法
  9. visio-使用技巧
  10. 国产达梦数据库优势及常用Sql