数据挖掘学习记录一

数据挖掘的学习和细节思考

本次学习基于关于二手车价格数据的分析,根据他人的文章进行研究学习。通过细分步骤和深究每一步的意义,对于数据挖掘有一个更好的认识。
参考链接为:Datawhale 零基础入门数据挖掘-Task2 数据分析

一、环境的配置

1.python本身的安装和配置
2.IDE使用pycharm
3.进行numpy、pandas等的安装

二、数据的导入和对数据的观察

#通过以下的代码进行数据的导入
path = './datalab/231784/'#path为数据所在文件
Train_data = pd.read_csv(path+'used_car_train_20200313.csv', sep=' ')
Test_data = pd.read_csv(path+'used_car_testA_20200313.csv', sep=' ')
#注意这里的sep引号中是空格,意思是根据空格对数据进行划分(参考数据本身就是以空格划分的。所以在具体实施时,需要根据数据进行判断如何划分。)

在导入数据后,我们需要对数据进行观察。实际操作中对于数据的处理往往占用数据分析师大部分的时间,而对于数据的初期观察尤为重要。每个观察的方面都涉及到几个问题:

  1. 观察的目的是什么?
  2. 观察从如何进行?
  3. 观察结果怎么分析?

具体操作有几个方面,包括 .shape,.head(),.tail(),.info(),.describe()等

shape

Train_data.shape

返回数据集的大小,即行数×列数。
观察shape的目的仅为对数据有个初步的了解,知道其大概的大小,以方便后续研究。
head()和tail()

Test_data.head().append(Test_data.tail())
  1. 目的:对于数据首尾各阅读五条(默认),对数据进行一个简略的观察。
  2. 方式:函数返回
  3. 分析:通过观察数据的列名以及其他信息,对数据包含的元素进行分析。

info()

Train_data.info()
  1. 目的:通过info的返回值可以直观的了解数据每一列的情况,包括名称、类型、有多少空值。
  2. 方式:函数返回
  3. 分析:熟悉名称、类型、空值

describe()

Train_data.describe()
  1. 目的:对相关统计量进行初步了解。
  2. 方式:函数返回
  3. 分析:describe()会返回相关统计量,包含个数count、平均值mean、方差std、最小值min、中位数25% 50% 75% 、以及最大值 看这个信息主要是瞬间掌握数据的大概的范围以及每个值的异常值的判断,比如有的时候会发现999 9999 -1 等值这些其实都是nan的另外一种表达方式

三、判断数据

1、查看

Train_data.isnull().sum()
  1. 目的:查看数据每一列存在的NAN情况
  2. 方式:函数返回
  3. 分析:了解哪些列存在 NAN, 并把NAN的个数打印出来,如果 NAN个数很小一般选择填充,如果使用lgb等树模型可以直接空缺,让树自己去优化,但如果NAN过多,可以考虑删掉

在观察数据缺省值的过程中,也可以通过调用可视化函数,对数据进行分析,比如:

msno.matrix(Train_data.sample(250))
msno.bar(Train_data.sample(1000))

2、分析缺省列

  1. 对于缺省列中含有“-”等可看作NAN的值用NAN进行替换,将数据化成只有“有数据”和NAN两部分的的形式
  2. 对于严重倾斜的数据可以采取忽略处理。因为数据严重倾斜相当于几乎所有行的该列数据都是一样的,可看作没有影响的因子。对于严重倾斜的数据可以采取删除处理。

3、了解预测值的分布

通过对目标元素的统计,对数据有一个大概的了解

.value_counts()

通过displot()可以图像展示值的分布。
displot()中参数的具体意义为:

  1. hist:是否显示直方图
  2. kde:核密度估计
  3. bins:int或者list,控制直方图的划分
  4. rag:控制是否生成观测数值的小细条
  5. fit:控制拟合的参数分布图形,能够直观地评估它与观察数据的对应关系
  6. hist_kws, kde_kws, rug_kws, fit_kws参数接收字典类型,可以自行定义更多高级的样式
  7. norm_hist:若为True, 则直方图高度显示密度而非计数

其中参数fit是传入预定的分布类型,进行比对,再根据最相似的进行分析

4、对偏量进行研究

Train_data.skew()
Train_data.kurt()

通过skew()、kurt()两个函数进行研究
对于偏度和峰度的介绍:https://www.cnblogs.com/wyy1480/p/10474046.html

5、转换正态分布

plt.hist(np.log(Train_data['price']), orientation = 'vertical',histtype = 'bar', color ='red') 
  1. 目的:将数据转换成正态分布
  2. 方式:使用np.log()进行数据转换
  3. 分析:为何要转化成正态分布

四、特征分析

分离特征值

  1. 没有label codingY_train = Train_data['price']
  2. 有label coding,根据实际含义进行划分。

使用nunique()查看该序列(axis=0/1对应着列或行)的不同值的数量,可以对数据有一个大致的了解。

1、数字特征

1、相关性分析
price_numeric = Train_data[numeric_features]
correlation = price_numeric.corr()
print(correlation['price'].sort_values(ascending = False),'\n')

使用corr()得到相关系数矩阵,比如我们关心价格(price),那么就求关于price的关系矩阵。可以得到一个二维矩阵,取price一列,可以得到其他各项因素和price值的关系。可以使用plt.subplots()构造图像进行更直观表示。

2、偏度和峰值
3、可视化处理
f = pd.melt(Train_data, value_vars=numeric_features)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False)
g = g.map(sns.distplot, "value")

其中pd.melt参数

  1. frame:要处理的数据集
  2. id_vars:不需要被转换的列名
  3. value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了
  4. var_name和value_name是自定义设置对应的列名
  5. col_level :如果列是MultiIndex,则使用此级别

关于sns.FacetGrid,学习链接:sns.FacetGrid
可视化文章链接

2、类别特征

使用函数构造出特征箱型图、小提琴图、特征柱形图、频数可视化,并进行分析。

  1. 箱型图:最大的优点就是不受异常值的影响(异常值也称为离群值),可以以一种相对稳定的方式描述数据的离散分布情况。箱型图
  2. 小提琴图:小提琴图 (Violin Plot)是用来展示多组数据的分布状态以及概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。跟箱形图类似,但是在密度层面展示更好。在数据量非常大不方便一个一个展示的时候小提琴图特别适用。

五、总结

对于总结,使用这篇文章的一段话:
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值