数据整合:表的连接
- 数据导入
import pandas as pd
import os
os.chdir(r"E:\数据与脚本\5Preprocessing")
sale=pd.read_csv(r"sale.csv",encoding="gbk") # 有英文,所以改为gbk
sale
- 连接数据库
import sqlite3 # 可以连接大部分数据库
con = sqlite3.connect(':memory:') # 数据库连接
sale.to_sql('sale', con) # 将DataFrame注册成可用sql查询的表
newTable = pd.read_sql_query("select year, market, sale, profit from sale", con) # 也可使用read_sql
newTable.head()
数据清洗
错误值处理
- 连续变量–直方图, 分类变量–柱形图 , 观察错误值
- 错误值处理:缺失值替换
缺失值处理
建模时,模型越不精确越好。
- 缺失值 <20%:用均值或中位数填(右偏的用中位数)
- 20%<缺失值<80%:均值或中位数统计量填(右偏的用中位数),并生成指示(哑)变量
- 缺失值>80%:直接生成指示(哑)变量
# 查看是否缺失
camp.count()
7292
camp.describe()
9686
- 填补缺失值:补充缺失值+填虚拟指标+建模
vmean = camp['Age'].mean(axis=0, skipna=True)#提取均值,skipna=True计算去掉缺失值的均值
camp['Age_empflag'] = camp['Age'].isnull()#产生虚拟指标,判断是否是补充的缺失值
camp['Age']= camp['Age'].fillna(vmean) #用均值填补缺失值
camp['Age'].describe()
噪音值(离群值)
- 删除
- 盖帽法:小于0.001的用0.001的替代,大于0.99的用0.99替代
def blk(floor, root):
def f(x):
if x < floor:
x = floor
elif x > root:
x = root
return x
return f
q1 = camp['Age'].quantile(0.01) #计算百分位数,百分之一对应的分位点
q99 = camp['Age'].quantile(0.99)
blk_tot = blk(floor=q1, root=q99)
camp['Age']= camp['Age'].map(blk_tot)
camp['Age'].describe()
- 分箱法:
等深分箱(百分位数):pd.cut(camp['Age'],4)
等宽分箱(值域分箱):pd.qcut(camp['Age'],4)