数据预处理总结

数据预处理总结

一、数据加载

import pandas
1、excel数据:

常见的读取方式

pd.read_excel('lol.xlsx',engine='openpyxl')
pd.read_excel('数据分析题目.xlsx',engine='openpyxl',sheet_name='题目用数据')

一个文件夹有多个excel表格时,如何读取?

import os
os.chdir('/mypython/datas/驱虫剂市场')#导入数据

获取文件名

import glob
filenames=glob.glob('*市场近三年交易额.xlsx')#读取符合条件的文件名

定义读取并处理一个文件的函数

def load_xlsx(filename):
    # 抽取子类目名
    colname = re.search(r'.*(?=市场)',filename).group()
    # 读文件
    df = pd.read_excel(filename)
    # 如果时间列是整数,修正为日期时间格式
    if df['时间'].dtypes == 'int64':
        df['时间'] = pd.to_datetime(df['时间'],unit='D',origin=pd.Timestamp('1899-12-30'))
#       df['时间'] = pd.TimedeltaIndex(df['时间'],unit='D') + dt.datetime(1899,12,30)
    # 重命名列名(交易金额)为子类目名
    df.rename(columns={df.columns[1]:colname},inplace=True)
    # 设置时间列为行索引
    df = df.set_index('时间')
    return df

根据文件名读取多个文件形成列表

dfs = [load_xlsx(i) for i in filenames]

将列表中的数据横向拼接(第一列的时间几乎完全相同)

df = pd.concat(dfs,axis=1).reset_index()   #将时间变成一列,将索引变成列,重置索引
2、csv文件
df=pd.read_csv('./ml-100k/u.data',sep='\t',encoding='utf-8',header=None)
df_movie=pd.read_csv('./ml-100k/u.item',sep='|',encoding='iso8859-1',header=None)
#sep表示分隔符
3、sql文件
import sqlite3
conn= sqlite3.connect('recruit.db')
df=pd.read_sql('select * from recruit',conn)
4、html文件
pd.read_html('Data_View.html',index_col='Unnamed: 0')

二、数据探索

1.空值探索
df.isna().any()
df.isna().mean()
credit.notnull().all()
  • 查看每列空值个数
explore=df.describe(percentiles=[],include='all').T
explore['null']=len(df)-explore['count']#行数-非空个数
2.描述性探索
df.info()
df.describe()

三、数据清洗

1、异常值处理

(1)数值处理

  • 盖帽法处理
#定义盖帽罚函数
def block(x):
    qu = x.quantile(.9)
    out = x.mask(x>qu,qu)#这里代表如果x大于qu,换成qu,不然保留x本身
    return(out)
  • 箱线图的方式剔除异常值
#下四分位#x先使用tolist转换成列表,再通过索引取值
low_num=result_salary.sort_values().tolist()[int(0.25*len(result_salary))]
#上四分位
high_num=result_salary.sort_values().tolist()[int(0.75*len(result_salary))]
#上四位异常值边界
high_num+1.5 *(high_num-low_num)
#下四位异常值边界
low_num-1.5 *(high_num-low_num)
  • 3sigma剔除异常值
#上边界值
result_salary.mean()+3*result_salary.std()
#下边界值
result_salary.mean()-3*result_salary.std()

(2)文本处理

  • 正则表达式处理
#去除非中英文字符
import re
re.sub(r'[^a-z\u4E00-\u9Fa5]+',' ','haod ---??hdgjd',flags=re.I)
  • 好用的文本处理的库:shorttext(安装大小:430M)

(3)空值填充

df.fillna("新上市股票")

(4)表格变形

  • 交叉制表
df2=pd.crosstab(df.用户,df.电影,values=df.评分,aggfunc=np.average)
  • 混淆矩阵
from sklearn.metrics import confusion_matrix#混淆矩阵
cm = confusion_matrix(li_test_target,y_)
# 作图:Recall------“正确被检索的正样本item(TP)"占所有"应该检索到的item(TP+FN)"的比例
plot_confusion_matrix(cm,[0,1],title='Recall:%0.3f'%(cm[1,1]/(cm[1,0] + cm[1,1])))
2、特征缩放
from sklearn.preprocessing import StandardScaler
#0,1标准化,减去平均值,除以标准差
standScaler = StandardScaler() 
cols = ['Time','Amount']
credit2[cols] = standScaler.fit_transform(credit2[cols])
3、smote样本均衡化
  1. 过采样(oversampling),增加正样本使得正、负样本数目接近,然后再进行学习。
  2. 欠采样(undersampling),去除一些负样本使得正、负样本数目接近,然后再进行学习

​ SMOET的基本原理是:采样最邻近算法,计算出每个少数类样本的K个近邻,从K个近邻中随机挑选N个样本进行随机线性插值,构造新的少数样本,同时将新样本与原数据合成,产生新的训练集。

from imblearn.over_sampling import SMOTE
smote = SMOTE()
# ndarray
X_train_new,y_train_new = smote.fit_resample(X_train,y_train)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值