Python数据预处理
一、内容:
1、数据清洗
2、数据集成
3、数据可视化
二、实验数据
根据航空公司系统内的客户基本信息、乘机信息以及积分信息等详细数据,依据末次飞行日期( LAST_FLIGHT_DATE),以2014年3月31日为结束时间,选取宽度为两年的时间段作为分析观测窗口,抽取观测窗口2012年4月1日至2014年3月31日内有乘机记录的所有客户的详细数据形成历史数据,分为air_data01.xlsx、air_data02.xlsx总共62988条记录。其中包含了会员卡号、入会时间、性别、年龄、会员卡级别、工作地城市、工作地所在省份、工作地所在国家、观测窗口结束时间、观测窗口乘机积分、飞行公里数、飞行次数、飞行时间、乘机时间间隔、平均折扣率等44个属性,如下表2-1所示。
三、设计方案
1、数据清洗:
a.首先将数据进行统计性分析,查找每列属性观测值中的空值个数最大值、最小值。得到的分析结果表如下表3-1所示。通过对原始数据观察发现数据中存在票价为空值的记录,同时存在票价最小值为0、折扣率最小值为0但总飞行公里数大于0的记录。票价为空值的数据可能是客户不存在乘机记录造成的。其他的数据可能是客户乘坐0折机票或者积分兑换造成的。
b.紧接着是分别对air_data01、air_data02两个数据集进行读取,并进行重复数据筛选与删除,对绘制箱型图年龄和票价为空的记录等异常值进行发现与删除,保留清洗后的数据。
2.数据集成
这一步是将数据清洗后的air_data01、air_data02两个数据集合并存放在一个数据存储中(cleanedfile_finish.csv),目的是为了便于后续的数据挖掘工作。
3.数据可视化
使用数据集成后的新产生的多维数据集cleanedfile_finish.csv对数据进行可视化操作,并对表格中的统计数据完成直方图、饼图、条形图、箱型图、热力图的绘制。
四、实验结论
1、程序源代码
1)数据清洗
a、准备工作:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
b、数据统计性分析:
datafile= 'air_data01.xlsx' # 航空原始数据,第一行为属性标签
resultfile = 'explore.csv' # 数据统计性分析结果表
data = pd.read_excel(datafile)
datafile2= 'air_data02.xlsx'
resultfile2 = 'explore2.csv'
data2 = pd.read_excel(datafile2)
explore = data.describe(percentiles = [], include = 'all').T # T是转置
explore['null'] = len(data)-explore['count']
explore = explore[['null', 'max', 'min']]
explore.columns = ['空值数', '最大值', '最小值'] # 表头重命名
explore.to_csv('resultfile.csv') # 导出结果
explore2 = data2.describe(percentiles = [], include = 'all').T # T是转置
explore2['null'] = len(data)-explore2['count']
explore2 = explore2[['null', 'max', 'min']]
explore2.columns = ['空值数', '最大值', '最小值']
explore2.to_csv('resultfile2.csv')
datatemp = pd.concat([explore,explore2],axis=0)
datatemp.to_csv('data_Statistical analysis.csv') # 导出最终结果
通过对原始数据观察发现数据中存在票价为空值的记录,同时存在票价最小值为0、折扣率最小值为0但总飞行公里数大于0的记录。票价为空值的数据可能是客户不存在乘机记录造成的。其他的数据可能是客户乘坐0折机票或者积分兑换造成的。所以后面我们将对这一部分数据进行清除操作。
c、对数据集进行读取:
df1 = pd.read_excel('air_data01.xlsx')
df2 = pd.read_excel('air_data02.xlsx')
对重复数据进行删除:
def df_drop(df): #删除重复数据
print("yunxingle")
df_1 = df.duplicated() #进行重复判断
print("重复判断\n:",df_1)
df_2 = df[df.duplicated()]#显示重复数据sss
print("\n\n\n重复数据\n",df_2)
df_new = df.drop_duplicates() #删除重复数据
return df_new
df_drop(df1)
df_drop(df2)
d、对缺失行进行删除:
def df_kong(df):
df_1 = df.apply(lambda col:sum(col.<