ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-04-25

2021-04-25 21:30:37  阅读:191  来源: 互联网

标签:25 04 fea numerical value train 2021 data col


一.学习知识点概括

 本篇文章让我们了解了如何对数据集整体概况进行分析,了解变量间相互关系、变量与预测值之间存在关系。其次,了解到了缺失值和唯一值,并且深入数据懂得如何查看数据类型。也了解到数据之间的相关关系。这篇文章让我对数据集有了更深的了解。

二.学习内容

1.导入数据分析及可视化过程需要的库

*查询当前pip3版本,看是否需要升级。
cmd窗口输入:pip3 show pip

2.读取文件

data_test_a = pd.read_csv('testA.csv')#用pd读取数据集?

~读取文件的部分(适用于文件特别大的场景)
*nrows参数,设置读取文件的前多少行,nrows是一个大于等于0的整数。

data_test_a = pd.read_csv('testA.csv',nrows(5))#读取文件前五行

*分块读取
设置chunksize参数

i = 0  # 控制输出
chunker = pd.read_csv("train.csv",chunksize=5)
for item in chunker:#遍历chunker
    print(type(item))#输出打印item类型
    #<class 'pandas.core.frame.DataFrame'>
    print(len(item))#返回item字符串长度
    i+=1
    if i >= 4:   # 由于数据量过大,限制输出4条就跳出循环
        break

3.总体了解

*用.shape查看数据集的样本个数和原始特征维度

data_test_a.shape

*用info()来熟悉数据类型

data_train.info()

data.info()显示所有信息,但不会显示是否存在非空值(?)

*describe()
总体粗略的查看数据集各个特征的一些基本统计量
在python pandas中,对于一维数组,describe会返回一系列参数,count,mean,std,min,25%,50%,75%,max。

data_train.describe()

describe()返回值的解释如下:
a、count:返回数组的个数,如上述为4个元素,所以返回为4;
b、mean:返回数组的平均值,1 3 5 9的平均值为4.5;
c、std:返回数组的标准差;
d、min:返回数组的最小值;
e、25%,50%,75%:返回数组的三个不同百分位置的数值,也就是统计学中的四分位数,其中50%对应的是中位数。
f、max:返回列表的最大值。

*在读取的基础上添加数据

data_train.head(3).append(data_train.tail(3))

head(),append()函数

head()根据位置返回对象的前n行。如果你的对象中包含正确的数据类型, 则对于快速测试很有用。此方法用于返回数据帧或序列的前n行(默认值为5)。

append()函数可在原来的基础上添加数据集
如下图799997-799999即为所添加的数据集
在这里插入图片描述

4.查看数据集中特征缺失值,唯一值等

*查看缺失特征中缺失率大于50%的特征

have_null_fea_dict = (data_train.isnull().sum()/len(data_train)).to_dict()#看不懂啊555
fea_null_moreThanHalf = {}
for key,value in have_null_fea_dict.items():
    if value > 0.5:
        fea_null_moreThanHalf[key] = value
fea_null_moreThanHalf

*具体的查看缺失特征及缺失率

# nan可视化
missing = data_train.isnull().sum()/len(data_train)#跟上面差不多
missing = missing[missing > 0]
missing.sort_values(inplace=True)#sort_values()是pandas中比较常用的排序方法
missing.plot.bar()#用pandas中plot.bar()画柱状图

在这里插入图片描述
纵向了解哪些列存在 “nan”, 并可以把nan的个数打印,主要的目的在于查看某一列nan存在的个数是否真的很大,如果nan存在的过多,说明这一列对label的影响几乎不起作用了,可以考虑删掉。如果缺失值很小一般可以选择填充。
另外可以横向比较,如果在数据集中,某些样本数据的大部分列都是缺失的且样本足够的情况下可以考虑删除。
(不懂,先记住!!)

*查看训练集测试集中特征属性只有一值的特征

one_value_fea = [col for col in data_train.columns if data_train[col].nunique() <= 1]
one_value_fea_test = [col for col in data_test_a.columns if data_test_a[col].nunique() <= 1]
one_value_fea

查出来的说明它只有唯一值或者全部缺失啦!

5.查看特征的数值类型有哪些,对象类型有哪些

numerical_fea = list(data_train.select_dtypes(exclude=['object']).columns)#列表输出数据
category_fea = list(filter(lambda x: x not in numerical_fea,list(data_train.columns)))
numerical_fea
#过滤数值型类别特征
def get_numerical_serial_fea(data,feas):#定义函数
    numerical_serial_fea = []
    numerical_noserial_fea = []
    for fea in feas:#遍历
        temp = data[fea].nunique()
        if temp <= 10:
            numerical_noserial_fea.append(fea)
            continue
        numerical_serial_fea.append(fea)
    return numerical_serial_fea,numerical_noserial_fea
numerical_serial_fea,numerical_noserial_fea = get_numerical_serial_fea(data_train,numerical_fea)
numerical_serial_fea

*数值连续型变量分析

#每个数字特征得分布可视化
# 这里画图估计需要10-15分钟
f = pd.melt(data_train, value_vars=numerical_serial_fea)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False)
g = g.map(sns.distplot, "value")

查看某一个数值型变量的分布,查看变量是否符合正态分布,如果不符合正太分布的变量可以log化后再观察下是否符合正态分布。
如果想统一处理一批数据变标准化 必须把这些之前已经正态化的数据提出
正态化的原因:一些情况下正态非正态可以让模型更快的收敛,一些模型要求数据正态(eg. GMM、KNN),保证数据不要过偏态即可,过于偏态可能会影响模型预测结果。

我们用value_counts()等函数看了特征属性的分布,但是图表是概括原始信息最便捷的方式!!

6. 变量分布可视化

7.时间格式数据处理及查看

这两部分的代码看的不是很懂啊 就不放上来了 等我看懂了再补上!!

三.学习问题与解答

这次的学习很多的问题都是出在代码上,比如一些Python上的语法或者函数我没有见过,还有一些因为不符合逻辑导致运行不出来的问题。这些问题能搞懂的都在刚刚写内容的时候标注在代码旁边了,或者已经记住了!

四.学习思考和总结

这次关于数据集的学习让我收获了很多。总结下来就是这一次的学习通过敲代码学习了很多数据分析的知识,包括导入,读取,增添数据集,还有了解到特征数值,虽然现在只是学到了皮毛,但是还是会继续学习的。

标签:25,04,fea,numerical,value,train,2021,data,col
来源: https://blog.csdn.net/m0_48523433/article/details/116135034

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有