2022.3.9回顾:特征工程:数据清洗、转换、选择、提取
数据清洗:
一、数据探索
第一步:导入数据并了解基本结构,字段类型等
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import datetime as datetime
data = pd.read_excel(r'movie.xlsx')
data.head()
data.describe()
data.dtypes
data.info()
data.shape
二、数据类型一致性检查处理
关于一些类型转换跟取舍(再修改!!)
#数据的一致性检查:筛选出movie_name一列中不是str类型的行
#函数isinstance(object, classinfo)用来判断一个对象是否是一个已知的类型,类似type()。如果对象object的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False
strlist = []
for i in data['movie_name'].index: #遍历参数
if isinstance(data['movie_name'][i],str)==False: #不是str 则 添加到strlist中
strlist.append(i)
data['movie_name'][strlist]
#检查电影名中是否存在特殊的或者非法的字符 "adfsec","打发打发"
strlist2 = []
for i in data['movie_name'].index:
if data['movie_name'][i] in ['?','#','$']:
strlist2.append(i)
data['movie_name'][strlist2]
strlist.extend(strlist2) #拼接到一起
data = data[~(data['movie_name'].index.isin(strlist))] #取反
三、缺失值检查处理
#空缺值检查,True表示有空值,False则无
data.isna().any()
#或者数出来
data.isnull().sum()
data.count()
# 空缺率(分母是data.count(),应该data.shape[0]也可以)
data_kql = (data.shape[0]-data.count())/data.count()
#或者
data_kql = (data[data.duplicated()].count())/data.count()
# 空缺值处理,数值类型可以填充均值、众数、模型预测的值等等,定性的/字符类型可以用众数或者NaN
data['movie_score'].fillna(data['movie_score'].mean(),inplace=True)
# 也可以直接删除
data.dropna(inplace=True)
# 只显示movie_score有空值的行
data[data['movie_score'].isna()]
四、重复值检查处理
#检查重复值,False没有重复则不需要处理
data.duplicated().any()
#重复率
data[data.duplicated()].count()/data.count()
五、离群值检查处理
箱线图我还不是很会!!
#分箱
percentlier = data['movie_time_consuming'].quantile([0,0.25,0.5,0.75,1])
percentlier
#看到电影时长最小值为1,最大值为5400,显然不合理
# data = data[data['movie_time_consuming']!=5400 | 1 ]
# 一个一个离群数值排除比较麻烦,后续可以进行一个范围的限制