数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。数据清洗是与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。
数据清洗主要是处理缺失数据、重复数据、错误数据等。
处理缺失值常用方法:
- 删除数据:根据缺失情况,按行删除或者按列删除
- 度量填补缺失值:可以根据数据属性,采用均值、中位数、众数等中心度量值来填补缺失数据
- 预测填补缺失值:可以将缺失属性作为因变量,建立分类或回归模型,对缺失值进行建模填补
案例一:预处理部分地区数据
- 读取北京地区的数据
- 读取天津地区的数据
- 检测file_data_bjinfo中的数据,返回True的表示是重复数据
- 检测file_data_tjinfo中的数据,返回True的表示是重复数据
- 对北京地区的数据,删除重复值
- 检测天津地区的数据是否存在缺失值
- 计算天津地区常住人口的平均数,设置float类型,并保留两位小数,并且以字典映射的方式进行填充
- 对北京地区信息进行异常值检测。并且用箱型图进行表示
- 对天津地区信息进行异常值检测。并且用箱型图进行表示
- 对两地数据进行合并
# 读取北京地区的数据
import pandas as pd
with open("北京地区信息.csv") as f:
file_data_bjinfo = pd.read_csv(f)
# 读取天津地区的数据
with open("天津地区信息.csv") as f:
file_data_tjinfo = pd.read_csv(f)
# 检测file_data_bjinfo中的数据,返回True的表示是重复数据
dup_bj = file_data_bjinfo.duplicated()
print(dup_bj)
# 检测file_data_tjinfo中的数据,返回True的表示是重复数据
dup_tj = file_data_tjinfo.duplicated()
print(dup_tj)
# 对北京地区的数据,删除重复值
drop_dup_bj = file_data_bjinfo.drop_duplicates()
print(drop_dup_bj)
# 检测天津地区的数据是否存在缺失值
print(pd.isnull(file_data_tjinfo))
# 计算天津地区常住人口的平均数,设置float类型,并保留两位小数
avg = float("{:.2f}".format(file_data_tjinfo['常住人口(万人)'].mean()))
# 以字典映射的方式进行填充
values = {'常住人口(万人)':avg}
file_data_tjinfo = file_data_tjinfo.fillna(value=values)
print(file_data_tjinfo)
# 对北京地区信息进行异常值检测。并且用箱型图进行表示
from matplotlib import pyplot as plt
plt.rcParams['font.family']=['STFangsong'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
file_data_bjinfo.boxplot()
plt.show()
# 对天津地区信息进行异常值检测。并且用箱型图进行表示
file_data_tjinfo.boxplot()
plt.show()
# 对两地数据进行合并
print(pd.concat([file_data_bjinfo,file_data_tjinfo],join='inner',axis=0,ignore_index=True))
数据
北京地区信息.csv
省级单位,地级单位,县级单位,区划类型,行政面积(K㎡),户籍人口(万人),男性,女性,GDP(亿元),常住人口(万人)
北京,北京,西城区,市辖区,51,146.47,72.88,73.59,3602.36,125.9
北京,北京,东城区,市辖区,42,97.41,47.91,49.5,2061.8,87.8
北京,北京,丰台区,市辖区,306,115.33,58.39,56.95,1297.03,225.5
北京,北京,西城区,市辖区,51,146.47,72.88,73.59,3602.36,125.9
北京,北京,朝阳区,市辖区,455,210.91,105.43,105.48,5171.03,385.6
北京,北京,房山区,市辖区,1990,81.28,40.76,40.52,606.61,109.6
北京,北京,丰台区,市辖区,306,115.33,58.39,56.95,1297.03,225.5
北京,北京,石景山区,市辖区,84,38.69,19.87,18.82,482.14,63.4
北京,北京,海淀区,市辖区,431,240.2,120.08,120.12,5395.16,359.3
北京,北京,房山区,市辖区,1990,81.28,40.76,40.52,606.61,109.6
北京,北京,通州区,市辖区,906,74.68,37.08,37.6,674.81,142.8
北京,北京,顺义区,市辖区,1020,62.74,31.12,31.61,1591.6,107.5
北京,北京,昌平区,市辖区,1344,61.14,30.72,30.41,753.39,201
北京,北京,大兴区,市辖区,1036,68.38,34.02,34.36,1796.95,169.4
北京,北京,门头沟区,市辖区,1451,25.12,12.8,12.32,157.86,31.1
北京,北京,怀柔区,市辖区,2123,28.29,14.13,14.16,259.41,39.3
北京,北京,平谷区,市辖区,950,40.2,20.22,19.98,218.31,43.7
北京,北京,密云区,市辖区,2229,43.59,21.77,21.82,251.13,48.3
北京,北京,延庆区,市辖区,1994,28.42,14.32,14.11,122.66,32.7
天津地区信息.csv
省级单位,地级单位,县级单位,区划类型,行政面积(K㎡),户籍人口(万人),男性,女性,GDP(亿元),常住人口(万人)
天津,天津,和平区,市辖区,10,42.32,20.37,21.95,802.62,35.19
天津,天津,河东区,市辖区,39,75.79,38.06,37.73,290.98,97.61
天津,天津,河西区,市辖区,37,83.2,40.83,42.37,819.85,99.25
天津,天津,南开区,市辖区,39,87.28,43.3,43.98,652.09,114.55
天津,天津,河北区,市辖区,27,63.42,31.86,31.56,415.67,89.24
天津,天津,红桥区,市辖区,21,51.66,25.93,25.73,208.16,56.69
天津,天津,东丽区,市辖区,460,37.7,18.83,18.87,927.08,76.04
天津,天津,西青区,市辖区,545,14.85,19.85,20.38,1040.27,85.37
天津,天津,津南区,市辖区,401,44.83,22.35,22.48,810.16,89.41
天津,天津,北辰区,市辖区,478,40.39,20.09,20.3,1058.14,
天津,天津,武清区,市辖区,1570,92.27,45.86,46.41,1151.65,119.96
天津,天津,宝坻区,市辖区,1523,71.1,35.72,35.39,684.07,92.98
天津,天津,滨海新区,市辖区,2270,128.18,66.04,62.14,6654,299.42
天津,天津,宁河区,市辖区,1414,40,20.21,19.79,525.37,49.57
天津,天津,静海区,市辖区,1476,59.79,30.35,29.44,667.83,79.29
天津,天津,蓟州区,市辖区,1593,86.24,43.86,42.38,392.55,91.15