首先载入各种包:
import pandas as pd import numpy as np from collections import Counter from sklearn import preprocessing from matplotlib import pyplot as plt %matplotlib inline import seaborn as sns plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体设置-黑体 plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题 sns.set(font='SimHei') # 解决Seaborn中文显示问题
读入数据:这里数据是编造的
data=pd.read_excel('dummy.xlsx')
本案例的真实数据是这样的:
对数据进行多方位的查看:
实际情况中可能会有很多行,一般用head()看数据基本情况
data.head() #查看长啥样 data.shape #查看数据的行列大小 data.describe()
#列级别的判断,但凡某一列有null值或空的,则为真 data.isnull().any() #将列中为空或者null的个数统计出来,并将缺失值最多的排前 total = data.isnull().sum().sort_values(ascending=False) print(total) #输出百分比: percent =(data.isnull().sum()/data.isnull().count()).sort_values(ascending=False) missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent']) missing_data.head(20)
也可以从视觉上直观查看缺失值:
import missingno missingno.matrix(data) data=data.dropna(thresh=data.shape[0]*0.5,axis=1) #至少有一半以上是非空的列筛选出来
#如果某一行全部都是na才删除: data.dropna(axis=0,how='all')
#默认情况下是只保留没有空值的行 data=data.dropna(axis=0)
#统计重复记录数 data.duplicated().sum() data.drop_duplicates()
对连续型数据和离散型数据分开处理:
data.columns #第一步,将整个data的连续型字段和离散型字段进行归类 id_col=['姓名'] cat_col=['学历','学校'] #这里是离散型无序,如果有序,请参考map用法,一些博客上有写 cont_col=['成绩','能力'] #这里是数值型 print (data[cat_col]) #这里是离散型的数据部分 print (data[cont_col])#这里是连续性数据部分
对于离散型部分:
#计算出现的频次 for i in cat_col: print (pd.Series(data[i]).value_counts()) plt.plot(data[i])
#对于离散型数据,对其获取哑变量 dummies=pd.get_dummies(data[cat_col]) dummies
对于连续型部分:
#对于连续型数据的大概统计: data[cont_col].describe() #对于连续型数据,看偏度,一般大于0.75的数值做一个log转化,使之尽量符合正态分布,因为很多模型的假设数据是服从正态分布的 skewed_feats = data[cont_col].apply(lambda x: (x.dropna()).skew() )#compute skewness skewed_feats = skewed_feats[skewed_feats > 0.75] skewed_feats = skewed_feats.index data[skewed_feats] = np.log1p(data[skewed_feats]) skewed_feats
#对于连续型数据,对其进行标准化 scaled=preprocessing.scale(data[cont_col]) scaled=pd.DataFrame(scaled,columns=cont_col) scaled
m=dummies.join(scaled) data_cleaned=data[id_col].join(m) data_cleaned
看变量之间的相关性:
data_cleaned.corr()
#以下是相关性的热力图,方便肉眼看 def corr_heat(df): dfData = abs(df.corr()) plt.subplots(figsize=(9, 9)) # 设置画面大小 sns.heatmap(dfData, annot=True, vmax=1, square=True, cmap="Blues") # plt.savefig('./BluesStateRelation.png') plt.show() corr_heat(data_cleaned)
如果有觉得相关性偏高的视情况删减某些变量。
#取出与某个变量(这里指能力)相关性最大的前四个,做出热点图表示 k = 4 #number of variables for heatmap cols = corrmat.nlargest(k, '能力')['能力'].index cm = np.corrcoef(data_cleaned[cols].values.T) sns.set(font_scale=1.25) hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values) plt.show()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
理想中,我们获取的数据都是一样的格式,可是现实中,会有许多脏数据,有时候是数据太冗余,有时候是数据缺失,有时候是同一种类数据拥有不同的数据格式。比如生日,有的人使用阿拉伯数字,有的人使用英文简写,有的人则是加入了中文字符。 如果只是简单的某一列数据问题,我们可以写一个脚本进行处理,可是,当数据太复杂,数据量太大,我们自己编写脚步就太浪费时间和精力了。有没有什么可视化工具,可以像操作Excel表格很
本文向大家介绍8段用于数据清洗Python代码(小结),包括了8段用于数据清洗Python代码(小结)的使用技巧和注意事项,需要的朋友参考一下 最近,大数据工程师Kin Lim Lee在Medium上发表了一篇文章,介绍了8个用于数据清洗的Python代码。 数据清洗,是进行数据分析和使用数据训练模型的必经之路,也是最耗费数据科学家/程序员精力的地方。 这些用于数据清洗的代码有两个优点:一是由函数
本文向大家介绍JSP清除页面缓存常用方法小结,包括了JSP清除页面缓存常用方法小结的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了JSP清除页面缓存常用方法。分享给大家供大家参考,具体如下: 一、清除页面缓存 在jsp页里 在html页里: 二、清除cookie 三、清除session 清除session方法 在页面关闭时清除session,需要捕获windows.onclose事件,再调
本文向大家介绍python实现数据清洗(缺失值与异常值处理),包括了python实现数据清洗(缺失值与异常值处理)的使用技巧和注意事项,需要的朋友参考一下 1。 将本地sql文件写入mysql数据库 本文写入的是python数据库的taob表 其中总数据为9616行,列分别为title,link,price,comment 2。使用python链接并读取数据 查看数据概括 说明数据的导入是正确的,
本文向大家介绍js中数组的常用方法小结,包括了js中数组的常用方法小结的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了js中数组的常用方法。分享给大家供大家参考,具体如下: push 方法 该方法会把一个元素或一组元素(数组)添加到当前数组的末尾。 eg: arr1的结果是[1, 2, 3, 4, 5] concat 方法 该方法会把两个数组或元素组合在一起,但是不会改变调用者的结构 eg
数据清洗和特征挖掘的工作是在灰色框中框出的部分,即“数据清洗=>特征,标注数据生成=>模型学习=>模型应用”中的前两个步骤。 灰色框中蓝色箭头对应的是离线处理部分。主要工作是 从原始数据,如文本、图像或者应用数据中清洗出特征数据和标注数据。 对清洗出的特征和标注数据进行处理,例如样本采样,样本调权,异常点去除,特征归一化处理,特征变化,特征组合等过程。最终生成的数据主要是供模型训练使用。 灰色框中