小标
2019-02-11
来源 :
阅读 1209
评论 0
摘要:本文主要向大家介绍了【云计算】pandas数据预处理踩坑,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。
本文主要向大家介绍了【云计算】pandas数据预处理踩坑,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。
在建模预测时遇见一个问题:预测结果中正例极少,导致准确率虽然很高,但是召回率非常低,0.01以下,查看了数据比例,训练集有三万多条,其中有两万多条正例,这个比例很均衡,但是为什么召回率这么低呢?
后来发现,在抽取数据的地方就有问题,特征抽出来都是0,那么,为什么是0呢?
在这里总结一下可能遇到的坑。
读取数据:
pd.read_csv('test.csv',names = []) 如何保留index并且将结果存成DataFrame?
答:使用reset_index()函数。df.reset_index() 如何将层级索引“推平”?也就是取消层级显示,
答:使用unstack()函数 join有顺序的差别
答:如果处理好names的问题,merge非常好用。另外,concat是拼接,可以横着拼(axis = 1),默认竖着拼(axis=0) 有Nan怎么办?
答:具体问题具体分析,如果是观看次数这类,缺失值可以补充0代表没看过,使用fillna(0)。如果是温度等等可以使用平均值或中位数。 数据处理常用的显示信息函数:
df.info() 显示df的所有信息,包括行列个数名字占用内存数等等 df.head() 默认显示前5列,在括号里可以改成10,20,,, df.tail() 后5列,同上 type(df) 显示df的类型,在python脚本中非常常用 len(df) 显示df的长度。
另外,apply也是合并数据的绝佳选择。在这里贴一个简单的预处理程序,希望以后忘记的时候常回来看看。原始数据是招商银行一个比赛的数据。
#coding:utf-8
import pandas as pd
import numpy as np
import time
import xgboost as xgb
import operator
from sklearn.model_selection import StratifiedKFold
from sklearn.decomposition import PCA
def Max_action_count(x):
return np.max(x)
def Min_action_count(x):
return np.min(x)
def Median_action(x):
return x.median()
def Skew_action(x):
skew = np.power((x - np.std(x))/np.mean(x),3)
return skew
def Kurt_action(x):
kurt = np.power((x - np.std(x))/np.mean(x),4)
return kurt
# 读取个人信息
train_agg = pd.read_csv('train_agg.csv',sep='\t')
test_agg = pd.read_csv('test_agg.csv',sep='\t')
agg = pd.concat([train_agg,test_agg],copy=False)
# 日志信息
train_log = pd.read_csv('train_log.csv',sep='\t')
test_log = pd.read_csv('test_log.csv',sep='\t')
log = pd.concat([train_log,test_log],copy=False)
# 用户唯一标识
train_flg = pd.read_csv('train_flg.csv',sep='\t')
test_flg = pd.read_csv('submit_sample.csv',sep='\t')
test_flg['FLAG'] = -1
del test_flg['RST']
flg = pd.concat([train_flg,test_flg],copy=False)
# 特征抽取
log['OCC_TIM'] = log['OCC_TIM'].apply(lambda x:time.mktime(time.strptime(x, "%Y-%m-%d %H:%M:%S")))
log = log.sort_values(['USRID','OCC_TIM'])
log['next_time'] = log.groupby(['USRID'])['OCC_TIM'].diff(-1).apply(np.abs)
log_time = log.groupby(['USRID'],as_index=False)['next_time'].agg({
'next_time_mean':np.mean,
'next_time_std':np.std,
'next_time_min':np.min,
'next_time_max':np.max,
'next_time_avg':np.average,
'next_time_median':np.median,
'next_time_var':np.var,
'next_time_nanmean':np.nanmean,
'next_time_nanmeadian':np.nanmedian,
'next_time_nanstd':np.nanstd,
'next_time_nanvar':np.nanvar
})
log_evt = pd.DataFrame()
log_evt['USRID'] = np.unique(log['USRID'])
for i in range(3):
name = 'EVT_LBL' + str(i)
log[name] = log['EVT_LBL'].apply(lambda x: x.split('-')[i])
# print(log['EVT_LBL' + str(i)])
log_event = log.groupby(['USRID', name], as_index=False)['EVT_LBL'].count()
# print(log_event)
log_event = log_event.groupby(['USRID'], as_index=False)['EVT_LBL'].agg({
name + 'max': np.max,
name + 'min': np.min,
name + 'mean': np.mean,
name + 'std': np.std,
name + 'median': np.median,
name + 'average': np.average,
name + 'nanmean': np.nanmean,
name + 'nanstd': np.nanstd,
name + 'nanmedian':np.nanmedian,
name + 'var':np.var,
name + 'nanvar':np.nanvar
})
log_evt = pd.merge(log_evt, log_event, on='USRID', how='left')
log_action = log.groupby(['USRID', 'TCH_TYP'])['OCC_TIM'].count().unstack().reset_index()
log_action.rename(columns={0: 'APP', 1: 'web', 2: 'H5'}, inplace=True) # ['OCC_TIM'].
log_action.fillna(0)
# print(log_action.iloc[:,[1,2]].head())
log_action['Max_action'] = log_action.iloc[:, [1, 2]].apply(Max_action_count, axis=1)
log_action['Min_action'] = log_action.iloc[:, [1, 2]].apply(Min_action_count, axis=1)
log_action['kurt'] = log_action.iloc[:, [1, 2]].apply(Kurt_action, axis=1)
log_action['skew'] = log_action.iloc[:, [1, 2]].apply(Skew_action, axis=1)
log_action['median'] = log_action.iloc[:, [1, 2]].apply(Median_action, axis=1)
data = pd.merge(agg,flg,on=['USRID'],how='left',copy=False)
data = pd.merge(data,log_evt,on=['USRID'],how='left',copy=False)
data = pd.merge(data,log_action,on=['USRID'],how='left',copy=False)
data = pd.merge(data,log_time,on = ['USRID'],how='left',copy=False)
# pca = PCA(n_components='mle')
# pca.fit(data.fillna(0))
# print(pca.explained_variance_ratio_)
# pcaFeature = pca.fit_transform(data)
# pcaFeature = pd.DataFrame(pcaFeature)
# pcaFeature['user_id'] = data['USRID']
#
# data = pd.merge(data, pcaFeature,on='USRID')
print(data.info())
data.to_csv('Data.csv',index=None)
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号