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

article/2025/9/26 23:33:23

1.数据类型的分析(假设数据为'data.csv')

首先读入数据,这个数据是csv格式,可以用pandas来读,如果读不进来的时候,可以用记事本打开'data.csv'然后另存为'data_2.csv'并且保存为'utf-8'的编码格式。然后读取数据。

import pandas as pd
'''read data'''
data = pd.read_csv('data_2.csv')
row, col = data.shape

在Variable explorer 里可以看到读入的data,在这里为了方便给出部分数据,从下图中可以看到数据中既有数字,也有汉字,字符,时间数据,此外还有缺失值nan,除此之外还有一些对数据分类没有用的特征,因此接下来我们需要对数据进行无关特征的剔除。

2.无关特征剔除

在此数据中,由于是金融数据并预测贷款用户是否会逾期,暂时将两个对分类结果无关的特征剔除

data.drop('bank_card_no',axis = 1, inplace = True)
data.drop('id_name',axis = 1, inplace = True)

3.缺失值处理一

对于缺失值,最简单的方法就是将所有缺失的数据删掉(data=data.dropna()),但是如果缺失数据较多时会造成可用数据量减少,此数据原始数据为:4754×90,如果将缺失全部删掉,数据为1534×90,因此需要对此数据进行填补,在对此数据进行填补前需要先考虑数据的缺失情况。为避免缺失数据过多造成填补的结果有偏差,本次对数据的特征或者样本超过0.2%的进行删除。(这是根据此数据情况进行删除的,数据的缺失率不同,删除缺失的情况也不同)

data=data.dropna()
def miss_row(data):row,col = data.shaperow_miss = []del_ = []for i in range(row):w = data.iloc[i,:].isnull().sum()ratio = w.sum()/rowrow_miss.append(ratio)if ratio > 0.002:del_.append(i)row_miss = pd.Series(row_miss)row_percent = row_miss.sort_values(axis = 0,ascending = False)data_ = data[row_percent<0.002]return row_percent, data_def miss_col(data):col_percent = (data.isnull().sum()/data.isnull().count()).sort_values(ascending=False)names = col_percent[col_percent<0.002].indexdata_ = data[names]return col_percent, data_row_percent, data_0 = miss_row(data)
col_percent, data_1 = miss_col(data_0)
data_1.to_csv('data_clear.csv')

3.数据类型转换

这里定义了一个函数w2_n,用来将非数值类型的数据转换为数值,方便后续处理。

from sklearn.preprocessing import LabelEncoder
def w2_n(data):data_label_num = data.copy()class_le = LabelEncoder()#用class_le.fit_transform将其转换data_label_num['reg_preference_for_trad'] = class_le.fit_transform(data_label_num['reg_preference_for_trad'].values)data_label_num['source'] = class_le.fit_transform(data_label_num['source'].values)data_label_num['loans_latest_time'] = class_le.fit_transform(data_label_num['loans_latest_time'].values)data_label_num['latest_query_time'] = class_le.fit_transform(data_label_num['latest_query_time'].values)#转换完成,我们可以看下转换后的类别情况
#    label= np.unique(data_label_num['reg_preference_for_trad'])return data_label_num
data = w2_n(data)

5.缺失值处理二

在第3步中只是对部分缺失值进行了删除但是并没有对其进行填补,这一步即对上述缺失数据进行填补,此处采用 的是em方法进行填补(是在github中看到的一个比较简单好用的方法https://github.com/eltonlaw/impyute),也可以用其他的方法。个人觉得目前最好的方法是2018年ICML中的一篇论文GAIN: Missing Data Imputation using Generative Adversarial Nets,感兴趣的可以看看:paper链接http://medianetlab.ee.ucla.edu/papers/ICML_GAIN.pdf;补充材料链接http://medianetlab.ee.ucla.edu/papers/ICML_GAIN_Supp.pdf。

此处采用的方法在填补之后会将数据的columns消掉,所以在填补之前需要先保存数据的列名以及提取出类别标签'status'

import impyute as impylabel = data['status']#get label
data_2.drop('status',axis = 1, inplace = True)
names = data_2.columnsdata_com = impy.em(np.array(data_2,dtype = np.float))

5.删除方差较小的特征(对分类结果影响较小)

这里用sklearn中VarianceThreshold,

from sklearn.feature_selection import VarianceThreshold#删除方差较小的特征
var = VarianceThreshold(threshold=1.0)   # 将方差小于等于1.0的特征删除。 默认threshold=0.0
data = var.fit_transform(data) 

6.数据归一化(0-1之间)

def min_max(data):Min_Val = np.zeros(data.shape[1])Max_Val = np.zeros(data.shape[1])for i in range(data.shape[1]):Min_Val[i] = np.min(data[:,i])data[:,i] = data[:,i] - np.min(data[:,i])Max_Val[i] = np.max(data[:,i])data[:,i] = data[:,i] / (np.max(data[:,i]) - np.min(data[:,i]) + 1e-6)return data
data = min_max(data)

7.划分训练测试数据集(这里使用的是训练数据70%,测试数据30%,也可以使用K折交叉验证)

在划分好测试训练数据后是将数据打乱,然后选择训练和测试数据的编号

def split(data,label):train_rate = 0.7row,col = data.shapetrainNo = int(row*train_rate)idx = np.random.permutation(row)train_data = data[idx[0:trainNo],:]test_data = data[idx[trainNo:],:]train_label = label[idx[0:trainNo]]test_label = label[idx[trainNo:]]return train_data, train_label, test_data, test_label
train_data, train_label, test_data, test_label = split(data,label)

8.对数据进行分类

from tqdm import tqdm
def RF_classify(train_data, train_label, test_data, test_label):forest = RandomForestClassifier(n_estimators=15, random_state=0, n_jobs=-1)  forest.fit(train_data, train_label) #training
#    pre_rf = forest.predict(x_test)ac_train = forest.score(test_data, test_label)return ac_train
ac = []
for i in tqdm(range(1000)):train_data, train_label, test_data, test_label = split(data_4,label)acc = RF_classify(train_data, train_label, test_data, test_label)ac.append(acc)print('The RF classify acc:.{:.4}'.format(np.mean(ac)))

到此基本就已经结束了,不过这里使用的都是一些基本简单的方法来进行数据分类的一个过程,其中包括数据的处理包括类别转换,缺失值处理,特征选择(这里只用了一个方差的,其他的许多方法后续再写,最后用了一个随机森林进行分类)


http://chatgpt.dhexx.cn/article/2ymMBNQk.shtml

相关文章

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年免…

工大校园邮箱申请流程

由于pycharm破解日益复制&#xff0c;代理服务器总是被封杀&#xff0c;只好老老实实合法使用&#xff0c;但还是要免费的方法&#xff0c;那就申请学生邮箱&#xff0c;毕竟钱不是问题&#xff0c;穷才是。 第一步打开这个网址&#xff0c;登陆一下 https://cas.bjut.edu.cn…