二、大数据实践项目——数据分析与处理

article/2025/9/26 23:41:19

一、数据处理主要任务

二、数据集处理

1、查看数据集基本情况

调用 info() 函数来查看数据data的基本情况,包括数据维度,字段名称和类型以及有无缺失值,数据占用内存等。(以下为部分字段信息)

可见总的数据47447行,少于此数值的为有数据缺失。

 

 2、查看数据基本统计信息

data_des = data.describe(include='all')

可以从基本信息中粗略的观察数据情况: 

 

3、是否违约特征分析

使用pandas中的plot()函数绘制特征 ‘违约’ 分布状况。

这一步主要目的是看数据集label分布是否是平衡的,即是否未违约人数明显多于违约人数。

import pandas as pd
import matplotlib.pyplot as pltfig = plt.figure(figsize=(8,6))
# 绘制柱状图,查看违约关系的取值分布情况
data['Default'].value_counts(dropna=False).plot(kind='bar',rot=40) #不去除nan值,x轴标签旋转40度# 在柱形上方显示计数
counts = data['Default'].value_counts(dropna=False).values
for index, item in zip([0,1,2], counts): plt.text(index, item, item, ha="center", va= "bottom", fontsize=12) # 设置柱形名称plt.xticks([0,1,2],['未违约','违约','NaN'])
# 设置x、y轴标签plt.xlabel("是否违约")
plt.ylabel("客户数量")
# 设置标题以及字体大小
plt.title("违约与未违约数量分布图",size=13)# 设置中文显示
plt.rcParams['font.sans-serif']=['SimHei'] 
plt.rcParams['font.family']=['sans-serif']
plt.show()

 

4、分析数据中某个离散型数据字段与标签值(是否违约)之间的关系(以CityId字段为例)

(1)不同城市级别下不同违约情况的数量分布柱状图

(2)不同城市级别下违约率柱状图

其中标签字段为'Default'

主要使用了 sns.countplot(),其中hue='Default'是按照标签进行分类

import seaborn as sns
import matplotlib.pyplot as pltfig, [ax1, ax2] = plt.subplots(1, 2, figsize=(16, 6))# 对CityId列的类别设定顺序
data['CityId'] = data['CityId'].astype('category')
data['CityId'] = data['CityId'].cat.set_categories(['一线城市', '二线城市', '其它'], ordered=True)# 绘制柱状图,查看不同城市级别在不同是否违约的取值分布情况
sns.countplot(x='CityId', hue='Default', data=data, ax=ax1)# 将具体的计数值显示在柱形上方
counts = data['Default'].groupby(data['CityId']).value_counts().values
count1 = counts[[0, 2, 4]]
count2 = counts[[1, 3, 5]]
for index, item1, item2 in zip([0, 1, 2], count1, count2):ax1.text(index - 0.2, item1 + 0.05, '%.0f' % item1, ha="center", va="bottom", fontsize=12)ax1.text(index + 0.2, item2 + 0.05, '%.0f' % item2, ha="center", va="bottom", fontsize=12)# 绘制柱状图查看违约率分布
cityid_rate = data.groupby('CityId')['Default'].sum() / data.groupby('CityId')['Default'].count()
sns.barplot(x=[0, 1, 2], y=cityid_rate, ax=ax2)# 将具体的计数值显示在柱形上方
for index, item in zip([0, 1, 2], cityid_rate):ax2.text(index, item, '%.3f' % item, ha="center", va="bottom", fontsize=12)# 设置柱形名称
ax1.set_xticklabels(['一线城市', '二线城市', '其它'])
ax2.set_xticklabels(['一线城市', '二线城市', '其它'])# 设置图例名称
ax1.legend(['未违约','违约'])# 设置标题以及字体大小
ax1.set_title("不同城市级别下不同违约情况数量分布柱状图",size=13)
ax2.set_title("不同城市级别违约率分布柱状图",size=13)# 设置x,y轴标签
ax1.set_xlabel("CityId")
ax1.set_ylabel("客户人数")
ax2.set_xlabel("CityId")
ax2.set_ylabel("违约率")# 显示汉语标注
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.family'] = ['sans-serif']
plt.show()

 

5、连续性特征分布状况分析

(1)总消费金额(transTotalAmt)分布情况

(2)总消费笔数(transTotalCnt)与总消费金额(transTotalAmt) 之间的关系

seaborn包中

a) : kdeplot()函数绘制“核密度图”,用来估计数据的密度函数,展现数据分布特征。

b): regplot() 绘制 “回归关系图”,展现两个特征之间的回归关系

import seaborn as sns
import matplotlib.pyplot as plt# 建立画布ax1和ax2,及设置图像大小,设置subplots()函数中参数为(1,2)表示两画图呈一行两列
fig, [ax1,ax2] = plt.subplots(1, 2, figsize=(16, 5))# 在画布ax1中画出总消费金额的核密度图
sns.kdeplot(data['transTotalAmt'],shade=True,ax=ax1)# 在画布ax2中画出总消费笔数和总消费金额的回归关系图
sns.regplot(x='transTotalCnt',y='transTotalAmt',data=data,ax=ax2)

由图得知数据中,总消费金额为长尾分布,消费笔数与金额呈正相关。

 

6、年龄与开卡时长分布

import seaborn as sns
import matplotlib.pyplot as plt# 建立画布ax1和ax2,及设置图像大小,设置subplots()函数中参数为(1,2)表示一行两列
fig,[ax1,ax2] = plt.subplots(1,2,figsize=(16,6))# 在画布ax1中绘制年龄的直方图,颜色为红色
sns.distplot(data['age'],color='r',ax=ax1)# 在画布ax2中绘制开卡时长的直方图,颜色为默认值
sns.distplot(data['card_age'],ax=ax2)# 在画布ax1、ax2中设置标题
ax1.set_title('年龄分布')
ax2.set_title('开卡时长分布')# 显示汉语标注
plt.rcParams['font.sans-serif']=['SimHei'] 
plt.rcParams['font.family']=['sans-serif']

图为年龄与开卡时长的直方图。

可以看出,年龄和开卡时长的分布都属于偏态分布。客户年龄主要分布在25-45岁之间,客户开卡时长主要分布在0-30小时之间。

 

7、查看缺失值信息

# 计算特征缺失值个数
na_counts = data.isnull().sum()# 将na_counts取大于0的部分进行降序排序
missing_value = na_counts[na_counts > 0].sort_values(ascending=False)# 查看存在缺失值的特征
print(missing_value)

下面是输出结果:可见Default列有2个缺失值,占比很小可以选择删除整行,其他列缺失值很多,不可以直接删除。

 

8、离散型特征的缺失值处理

import pandas as pd
# 缺失值处理
# 只在subset中删除na
data.dropna(subset=['Default'],inplace=True) #删除sex中2行缺失值
filling_columns = ['sex','maritalStatus','threeVerify','idVerify','education']
for column in filling_columns:data[column].fillna('未知',inplace=True) # 其他缺失值填充为'位置'
# 查看存在缺失值的特征
na_counts = data.isnull().sum()
missing_value = na_counts[na_counts > 0].sort_values(ascending = False)
print(missing_value)

 9、离散型特征值的异常值处理

import pandas as pd
#可以看出 
#print(data[data['isCrime'] > 1]['isCrime'])
#查看每个列 分类状况 可以看出 有些列值异常
#for col in data.columns:
#    print(data[col].value_counts())
# 异常值处理 把 犯罪分类 2 替换为 0
data['isCrime'] = data['isCrime'].replace(2,0)# 查看处理后的数据情况
print(data['isCrime'].value_counts())

10、连续型特征(异常值发现与处理)

(1)查看最小值

# 所有连续型特征列名已保存在continuous_columns中
continuous_columns = ['age','cashTotalAmt','cashTotalCnt','monthCardLargeAmt','onlineTransAmt','onlineTransCnt','publicPayAmt','publicPayCnt','transTotalAmt','transTotalCnt','transCnt_non_null_months','transAmt_mean','transAmt_non_null_months','cashCnt_mean','cashCnt_non_null_months','cashAmt_mean','cashAmt_non_null_months','card_age']
# 查看数据各连续型特征的最小值
data_con_min = data[continuous_columns].min()
print(data_con_min)

(2)由(1)可见网上消费总额有小于0的情况。

# 从原始数据中筛选出网上消费金额小于0时,网上消费金额和网上消费笔数这两列
online_trans = data[data['onlineTransAmt'] < 0][['onlineTransAmt','onlineTransCnt']]
print(online_trans)

根据实际经验,网上消费笔数为0时,网上消费金额应该为0;

(3)把网上消费笔数为0时,网上消费金额置0

# 将网上消费笔数为0时的网上消费金额皆修改为0
#data[data['onlineTransCnt'] == 0]['onlineTransAmt'] = 0
data.loc[data['onlineTransCnt'] == 0,'onlineTransAmt'] = 0
# 查看修正后网上消费笔数为0时,网上消费金额与网上消费笔数
online_after = data[data["onlineTransCnt"]  == 0 ][["onlineTransAmt","onlineTransCnt"]] 
print(online_after)

(4)绘制连续性特征(网上消费金额)的盒图,查看消费金额的大致分布。

盒图的简介:

import seaborn as sns
import matplotlib.pyplot as plt 
fig,ax = plt.subplots(figsize=(8,6))
# 绘制盒图查看网上消费金额数据分布
sns.boxplot(data['onlineTransAmt'],ax=ax,orient='v')
plt.title('onlineTransAmt distribution')

(5)发现异常值后,异常值处理

去除网上消费金额大于2千万的数据

# 筛选出网上消费金额在2千万以下的数据样本,更新data
data = data[data['onlineTransAmt']<2.0e+07]
print(data.head())

11、数字编码(字符串型转换为数字)

利用map函数进行快速转换 

import numpy as np
import pandas as pddata["maritalStatus"] = data["maritalStatus"].map({"未知":0,"未婚":1,"已婚":2})
data['education']= data['education'].map({"未知":0,"小学":1,"初中":2,"高中":3,"本科以上":4})
data['idVerify']= data['idVerify'].map({"未知":0,"一致":1,"不一致":2})
data['threeVerify']= data['threeVerify'].map({"未知":0,"一致":1,"不一致":2})
data["netLength"] = data['netLength'].map({"无效":0,"0-6个月":1,"6-12个月":2,"12-24个月":3,"24个月以上":4})
data["sex"] = data['sex'].map({"未知":0,"男":1,"女":2})
data["CityId"] = data['CityId'].map({"一线城市":1,"二线城市":2,"其它":3})print(data.head())

12、One-Hot编码

对所有的非有序的特征列进行One-Hot编码

import numpy as np
import pandas as pddata = pd.get_dummies(data=data,columns=['maritalStatus','education','idVerify','threeVerify','Han','netLength','sex','CityId'])
print(data.columns)

 


http://chatgpt.dhexx.cn/article/6jJkKWR7.shtml

相关文章

数据挖掘项目总结文档

数据挖掘项目总结文档 1、文档概述 1.1 编写目的 记录本次实验思路及流程&#xff0c;备忘用。 1.2 适用对象 个人学习总结&#xff0c;描述有偏差之处陆续更进。 2、业务理解与分析定义 2.1 需求概述 针对传统网络入侵检测系统存在的误判以及漏检情况&#xff0c;采用数据挖掘…

数据挖掘开源项目立项

项目背景 因为最近一直都在搞数据挖掘类的项目&#xff0c;且现在国内的大数据潮火热。在前几天与群里的几位兄弟聊天所以有了做一个开源项目的想法&#xff0c;以前也搞过一个开源的项目&#xff0c;当时只是想把权限集中化做一下&#xff0c;项目的名称和地址是&#xff1a; …

数据挖掘项目(1)对数据进行探索和分析

1.数据类型的分析&#xff08;假设数据为data.csv&#xff09; 首先读入数据&#xff0c;这个数据是csv格式&#xff0c;可以用pandas来读&#xff0c;如果读不进来的时候&#xff0c;可以用记事本打开data.csv然后另存为data_2.csv并且保存为utf-8的编码格式。然后读取数据。…

python数据挖掘项目——航空公司客户价值分析(详解)

一、选题背景 信息时代的来临使得企业营销的焦点从产品中心转变为客户中心&#xff0c;客户关系管理成为企业的核心问题&#xff0c;客户关系管理的关键问题是客户分类&#xff0c;通过客户分类&#xff0c;区分不同客户的价值&#xff0c;企业针对不同价值的客户制定个性化的服…

网络通信协议分类

协议分类 通信的协议还是比较复杂的&#xff0c;java.net 包中包含的类和接口&#xff0c;它们提供低层次的通信细节。我们可以直接使用这些类和接口&#xff0c;来专注于网络程序开发&#xff0c;而不用考虑通信的细节。 java.net 包中提供了两种常见的网络协议的支持&#…

各种基础协议

了解几个概念&#xff1a; 1. HTTP 协议&#xff1a;基于TCP协议&#xff0c;超文本传输协议&#xff0c;对应于应用层&#xff0c;用于如何封装数据.。也就是在底层是基于socket&#xff0c; http只不过是在收发数据的时候定义了很多规则&#xff0c;http头信息之类。 TCP/I…

TCP协议格式

1、16位源端口号&#xff1a;16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是标识报文的返回地址。 2、16位目的端口号&#xff1a;16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。 3、32位序号&#xff1a;32位的序列号由…

以太网各种协议详解

板子处于复位状态时&#xff0c;先做好一系列的准备工作。 1、从EEROM中读取板子的MAC 地址&#xff08;事先已经写在地址0xFA to 0xFF 中了&#xff09;。 2、配置PHY 寄存器&#xff0c;并读取该寄存器的值&#xff0c;检查一下&#xff0c;此时的寄存器配置时候是合理的&am…

汽车通信协议系列1_通信协议类型

当前比较通用的五种协议&#xff0c;任何一款标准OBD2的车辆都会采用以下五种协议中的一种。以下几种按照物理层编码相关性来划分 ISO9141&#xff0c;ISO 14230.这类是以UART为基础的。 CAN ISO 11898&#xff08;车载网络&#xff09;&#xff0c;ISO15768&#xff0c;SAE J…

网络协议分类

Http协议&#xff1a;应用层。 tcp/udp协议&#xff1a;传输层。udp提供不可靠通信&#xff1a;无流控等。 ip协议&#xff1a;网络层。 TCP/IP是是一套协议族&#xff0c;是一种说法&#xff0c;由早期的某标准化组织制定&#xff0c;规定了使用tcp和ip等一系列协议的规范。…

IP协议及分类

文章目录 TCP/IP协议IP地址分类默认子网掩码网关公有IP地址和私有IP地址 基本环境设置连网介质及设备重点 TCP/IP协议 TCP/IP通信协议是目前最完整、最被广泛支持的通信协议&#xff0c;它可以让不同网络架构、不同操作系统的计算机之间通信&#xff0c;是Internet的标准通信协…

常见的协议汇总(小白个人理解,大佬勿喷)

背景 接触了一些芯片&#xff0c;发现所有的芯片而言&#xff0c;库和API接口随着芯片&#xff0c;开发环境甚至开发情况&#xff0c;公司都有着明显的区别。基于这种情况的话&#xff0c;了解协议的底层个人觉得是十分必要的&#xff0c;同时也是找工作的必备选项。所以对常见…

常用协议类型值

Ethertype ( 十六进制 ) 协议 0x0000 - 0x05DC IEEE 802.3 长度 0x0101 – 0x01FF 实验 0x0600 XEROX NS IDP 0x0660 0x0661 DLOG 0x0800 网际协议&#xff08;IP&#xff09; 0x0801 X.75 Internet 0x0802 NBS Internet 0x0803 ECMA Internet 0x0804 Chao…

TCP协议格式和特点

文章目录 1.协议格式&#xff1a;2.协议特性&#xff1a;2.1 面向链接2.1.1三次握手建立连接2.1.1四次挥手断开连接相关问题和知识点&#xff1a;1. 握手为啥三次&#xff0c;挥手是四次&#xff1f;2. 三次握手失败两端是如何处理的&#xff1f;3. SYN泛洪攻击是怎么回事?4. …

典型几种协议(协议以及作用)

一 .典型协议&#xff1a; 传输层&#xff1a; 常见的协议有 TCP/UDP 协议 应用层&#xff1a; 常见的协议有 HTTP&#xff0c;FTP 协议 网络层&#xff1a; 常见的协议有 IP 协议&#xff0c;ICMP 协议&#xff0c;IG…

ICMP协议 详解,ICMP协议的功能及实现原理,ICMP协议报文类型。

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「专栏简介」&#xff1a;此文章已录入专栏《计算机网络零基础快速入门》 ICMP协议 一、工作原理二、数据报格式三、报文类型 ICMP协议是IP的…

几个的常见基础协议类型数据格式以及协议内容简介

给大家简单梳理一下几种学习中常会出现的协议格式&#xff0c;咋们数通就像交通&#xff0c;各种各样的协议规则来规范大家&#xff0c;制定科学的管理手段来帮助大家快速&#xff0c;安全的到家。 一、 HDLC协议 HDLC叫高级链路控制协议&#xff08;High Level Data Link Cont…

几种常用协议介绍

几种常见协议介绍 TCP/IP协议&#xff0c;其实是一个协议集合&#xff0c;这个集合里面包含了网络通讯所需的所有协议&#xff0c;里面不仅有TCP(传输控制协议)、IP(网际协议)&#xff0c;还有UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等许多协议&#xff0c;还有物联网中…

个人如何申请注册公司邮箱?企业邮箱注册申请流程详解

大部分人可能知道邮箱&#xff0c;但是公司邮箱是什么&#xff1f;企业邮箱注册申请流程&#xff1f;个人如何申请注册公司企业邮箱&#xff1f; 在一家公司实习时人事告诉我使用公司邮箱&#xff0c;用我名字拼音命名的&#xff0c;还是无限容量、单次群发500封、邮件误删可以…

手把手教你申请CCC(City Colleges of Chicago)教育邮箱

如果你还不知道edu教育邮箱的好处&#xff0c;那么你就out了&#xff0c;很多大公司的的优惠福利专门针对学生群体。比如可以利用edu邮箱获得Office365免费使用权限&#xff0c;可以免费扩容Onedrive至1024GB&#xff1b;可以获得AutoCAD、3ds Max、Maya等在内70余款软件的3年免…