天池龙珠计划_金融风控训练营链接
学习文章链接
从本篇文章中学习到了许多第一次接触到的知识点。
使用设置chunksize参数的方法,尽量避免直接对过大的dataframe直接操作,以从csv文件读取数据为例,可以通过read_csv方法的chunksize参数,设定读取的行数,返回一个固定行数的迭代器,每次读取只消耗相应行数对应的dataframe的内存,从而可以有效的解决内存消耗过多的问题。
data_train_sample = pd.read_csv("train.csv",nrows=5)
#设置chunksize参数,来控制每次迭代数据的大小
i = 0 # 控制输出
chunker = pd.read_csv("train.csv",chunksize=5)
for item in chunker:
print(type(item))
#
print(len(item))
i+=1
if i >= 4: # 由于数据量过大,限制输出4条就跳出循环
break
#5
data.isnull()#查看所有缺失值
data.isnull().any()#获取含有缺失值的列
data.isnull().all()#获取全部为NA的列
data.isnull().sum()#获取缺失值合集
data.dropna() #删除缺失值
此外,可以使用pandas 或sklearn 替换缺失值,还可以使用lgb模型可以自动处理缺失值。
文章中使用的方法
#nan可视化
missing = data_train.isnull().sum()/len(data_train)
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()
missingno库可以将数据中的缺失值可视化展示,而且使用起来非常简单。
import missingno as msno
msno.matrix(data, labels=True)#无效数据密度显示(矩阵显示)
msno.bar(data)#条形图显示
msno.heatmap(data)#热图相关性显示
msno.dendrogram(data)#树状图显示
特征一般都是由类别型特征和数值型特征组成,而数值型特征又分为连续型和离散型。
#过滤数值型类别特征
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)
通过get_numerical_serial_fea函数将数据过滤分类为连续型和离散型。
#每个数字特征得分布可视化
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")
#转化成时间格式 issueDateDT特征表示数据日期离数据集中日期最早的日期(2007-06-01)的天数
data_train['issueDate'] = pd.to_datetime(data_train['issueDate'],format='%Y-%m-%d')
startdate = datetime.datetime.strptime('2007-06-01', '%Y-%m-%d')
data_train['issueDateDT'] = data_train['issueDate'].apply(lambda x: x-startdate).dt.days
>>> from datetime import datetime
>>> cday = datetime.strptime('2017-8-1 18:20:20', '%Y-%m-%d %H:%M:%S')
>>> print(cday)
2017-08-01 18:20:20
透视表是一种可以对数据动态排布并且分类汇总的表格格式。或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能,而在pandas中它被称作pivot_table。
pivot_table(data, values=None, index=None, columns=None,aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
#pivot_table有四个最重要的参数index、values、columns、aggfunc
#透视图 索引可以有多个,“columns(列)”是可选的,聚合函数aggfunc最后是被应用到了变量“values”中你所列举的项目上。
pivot = pd.pivot_table(data_train, index=['grade'], columns=['issueDateDT'], values=['loanAmnt'], aggfunc=np.sum)
利用好数据透视表能更好地进行数据分析。
pandas_profiling,这个库只需要一行代码就可以生成数据EDA报告。
pandas_profiling基于pandas的DataFrame数据类型,可以简单快速地进行探索性数据分析。
对于数据集的每一列,pandas_profiling会提供以下统计信息:
1、概要:数据类型,唯一值,缺失值,内存大小
2、分位数统计:最小值、最大值、中位数、Q1、Q3、最大值,值域,四分位
3、描述性统计:均值、众数、标准差、绝对中位差、变异系数、峰值、偏度系数
4、最频繁出现的值,直方图/柱状图
5、相关性分析可视化:突出强相关的变量,Spearman, Pearson矩阵相关性色阶图
并且这个报告可以导出为HTML,非常方便查看。
import pandas_profiling
pfr = pandas_profiling.ProfileReport(data_train)
pfr.to_file("./example.html")
在本次学习打卡中,我了解到了很多新的知识点以及实用的库。例如:
[1] pandas性能提升之利用chunksize参数对大数据分块处理
[2] missingno官方文档
[3] 一文看懂pandas的透视表pivot_table
[4] pandas_profiling :教你一行代码生成数据分析报告