Python数据挖掘 数据预处理案例(以航空公司数据为例)

这篇具有很好参考价值的文章主要介绍了Python数据挖掘 数据预处理案例(以航空公司数据为例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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所示。
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析

三、设计方案

1、数据清洗:

a.首先将数据进行统计性分析,查找每列属性观测值中的空值个数最大值、最小值。得到的分析结果表如下表3-1所示。通过对原始数据观察发现数据中存在票价为空值的记录,同时存在票价最小值为0、折扣率最小值为0但总飞行公里数大于0的记录。票价为空值的数据可能是客户不存在乘机记录造成的。其他的数据可能是客户乘坐0折机票或者积分兑换造成的。
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
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.isnull())/col.size)
     print('\n判断缺失情况:\n\n',df_1)
     df_2 = df.dropna(how='any')#删除所有含有缺失值的行
     print(df_2.head(10))
     return df_2
		df_kong(df1)
		df_kong(df2)

e、合并数据并保存:

data_new1 = df_kong(df_drop(df1))
data_new2 = df_kong(df_drop(df2))
data_integrated = pd.concat([data_new1,data_new2],axis=1)
data_integrated.to_csv('data_integrated.csv')  # 保存清洗后的数据

f、异常值清除:

data = pd.read_csv('data_integrated.csv')
# data = data_new1
age = data['AGE'].dropna()
age = age.astype('int64')
# 绘制会员年龄分布箱型图
plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
fig = plt.figure(figsize = (5 ,10))
plt.boxplot(age,  patch_artist=True,
            labels = ['会员年龄'],  # 设置x轴标题
            boxprops = {'facecolor':'lightblue'})  # 设置填充颜色
plt.title('会员年龄分布箱线图')
# 显示y坐标轴的底线
plt.grid(axis='y')
plt.show()
plt.close()

# 箱型图显示年龄数据存在有大于100的异常值,下面予以修正
print('原始数据的形状为:',data.shape)
index = data['AGE'] > 100  # 去除年龄大于100的记录
data2 = data[~index]
print('数据清洗后数据的形状为:',data2.shape)
data2.to_csv('cleanedfile_01.csv')  # 保存清洗后的数据

age = data2['AGE'].dropna()
age = age.astype('int64')
# 绘制会员年龄分布箱型图
plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
fig2 = plt.figure(figsize = (5 ,10))
plt.boxplot(age,  patch_artist=True,
            labels = ['会员年龄'],  # 设置x轴标题
            boxprops = {'facecolor':'lightblue'})  # 设置填充颜色
plt.title('会员年龄分布箱线图')
# 显示y坐标轴的底线
plt.grid(axis='y')
plt.show()
plt.close()

data3 = pd.read_csv('cleanedfile_01.csv',encoding = 'utf-8')
print('原始数据的形状为:',data3.shape)

# 去除票价为空的记录
data3_notnull = data3.loc[data3['SUM_YR_1'].notnull() &
                                   data3['SUM_YR_2'].notnull(),:]
print('删除缺失记录后数据的形状为:',data3_notnull.shape)
# data3_notnull.to_csv('data3_notnull.csv')  # 保存清洗后的数据

# 只保留票价非零的,或者平均折扣率不为0且总飞行公里数大于0的记录。
index1 = data3_notnull['SUM_YR_1'] != 0
index2 = data3_notnull['SUM_YR_2'] != 0
index3 = (data3_notnull['SEG_KM_SUM']> 0) & (data3_notnull['avg_discount'] != 0)
cleanedfile_02 = data3_notnull[(index1 | index2) & index3]
print('数据清洗后数据的形状为:',cleanedfile_02.shape)
cleanedfile_02.to_csv('cleanedfile_finish1.csv')  # 保存清洗后的数据
2)数据集成
data_new1 = df_kong(df_drop(df1))
data_new2 = df_kong(df_drop(df2))
data_integrated = pd.concat([data_new1,data_new2],axis=1)#数据集成
data_integrated.to_csv('data_integrated.csv')  # 保存清洗后的数据
3)数据可视化

a、准备工作:

import pandas as pd
import matplotlib.pyplot as plt
datafile= 'cleanedfile_finish.csv'

b、各年份会员入会人数直方图绘制:

from datetime import datetime
ffp = data['FFP_DATE'].apply(lambda x:datetime.strptime(x,'%Y-%m-%d'))
ffp_year = ffp.map(lambda x : x.year)
# 绘制各年份会员入会人数直方图
fig = plt.figure(figsize = (8 ,5))  
plt.rcParams['font.sans-serif'] = 'SimHei'  
plt.rcParams['axes.unicode_minus'] = False
plt.hist(ffp_year, bins='auto', color='#0504aa')
plt.xlabel('年份')
plt.ylabel('入会人数')
plt.title('各年份会员入会人数')
plt.show()
plt.close

c、会员性别比例饼饼图绘制:

male = pd.value_counts(data['GENDER'])['男']
female = pd.value_counts(data['GENDER'])['女']
# 绘制会员性别比例饼图
fig = plt.figure(figsize = (7 ,4))  # 设置画布大小
plt.pie([ male, female], labels=['男','女'], colors=['lightskyblue', 'lightcoral'],
       autopct='%1.1f%%')
plt.title('会员性别比例')
plt.show()
plt.close

d、会员各级别人数条形图绘制:

lv_four = pd.value_counts(data['FFP_TIER'])[4]
lv_five = pd.value_counts(data['FFP_TIER'])[5]
lv_six = pd.value_counts(data['FFP_TIER'])[6]
# 绘制会员各级别人数条形图
fig = plt.figure(figsize = (8 ,5))  # 设置画布大小
plt.bar(x=range(3), height=[lv_four,lv_five,lv_six], width=0.4, alpha=0.8, color='skyblue')
plt.xticks([index for index in range(3)], ['4','5','6'])
plt.xlabel('会员等级')
plt.ylabel('会员人数')
plt.title('会员各级别人数')
plt.show()
plt.close()

e、会员年龄分布箱型图绘制:

age = data['AGE'].dropna()
age = age.astype('int64')
# 绘制会员年龄分布箱型图
fig = plt.figure(figsize = (5 ,10))
plt.boxplot(age,
            patch_artist=True,
            labels = ['会员年龄'],  # 设置x轴标题
            boxprops = {'facecolor':'lightblue'}) 
plt.title('会员年龄分布箱线图')
plt.grid(axis='y')
plt.show()
plt.close

f、最后乘机至结束时长箱型图绘制:

fig = plt.figure(figsize = (5 ,8))
plt.boxplot(lte,最后乘机至结束时长箱线图
            patch_artist=True,
            labels = ['时长'],  # 设置x轴标题
            boxprops = {'facecolor':'lightblue'})  
plt.title('会员最后乘机至结束时长分布箱线图')
plt.grid(axis='y')
plt.show()
plt.close

g、客户飞行次数箱型图绘制:

fig = plt.figure(figsize = (5 ,8))
plt.boxplot(fc,
            patch_artist=True,
            labels = ['飞行次数'], 
            boxprops = {'facecolor':'lightblue'}) 
plt.title('会员飞行次数分布箱线图')
# 显示y坐标轴的底线
plt.grid(axis='y')
plt.show()
plt.close

h、客户总飞行公里数箱型图绘制:

fig = plt.figure(figsize = (5 ,10))
plt.boxplot(sks,
            patch_artist=True,
            labels = ['总飞行公里数'], 
            boxprops = {'facecolor':'lightblue'})  
plt.title('客户总飞行公里数箱线图')
# 显示y坐标轴的底线
plt.grid(axis='y')
plt.show()
plt.close

i、会员兑换积分次数直方图绘制:

ec = data['EXCHANGE_COUNT']
fig = plt.figure(figsize = (8 ,5))  
plt.hist(ec, bins=5, color='#0504aa')
plt.xlabel('兑换次数')
plt.ylabel('会员人数')
plt.title('会员兑换积分次数分布直方图')
plt.show()
plt.close

j、计算相关矩阵并绘制热力图:

data_corr = data[['FFP_TIER','FLIGHT_COUNT','LAST_TO_END',
                  'SEG_KM_SUM','EXCHANGE_COUNT','Points_Sum']]
age1 = data['AGE'].fillna(0)
data_corr['AGE'] = age1.astype('int64')
data_corr['ffp_year'] = ffp_year
dt_corr = data_corr.corr(method = 'pearson')
print('相关性矩阵为:\n',dt_corr)
import seaborn as sns
plt.subplots(figsize=(10, 10)) 
sns.heatmap(dt_corr, annot=True, vmax=1, square=True, cmap='Blues')
plt.show()
plt.close

2、程序相关结果展示

1)数据清洗

a、数据统计性分析:
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
通过对原始数据观察发现数据中存在票价为空值的记录,同时存在票价最小值为0、折扣率最小值为0但总飞行公里数大于0的记录。票价为空值的数据可能是客户不存在乘机记录造成的。其他的数据可能是客户乘坐0折机票或者积分兑换造成的。所以后面我们将对这一部分数据进行清除操作。

c、重复值分析:
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
如图示,显示有重复数据,下面我们将重复数据进行展示。可以看出air_data01有71行重复数据。air_data02有1738行重复数据。
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
我们对重复数据执行删除操作。

d、缺失行进行分析:
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
根据观察,表格air_data01存在部分数据缺失,因为数据量较为庞大,所以我们对所有缺失的数据执行行删除操作。

e、重复数据与缺失数据删除前后数据对比:
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
f、异常值清除:

根据会员年龄分布箱型图,可以看出大部分会员年龄集中在30~50岁之间,极少量的会员年龄小于20岁或高于60岁,且存在一个超过100岁的异常数据。我们对该AGE数据中大于100的进行删除,所得结果如下图所示。
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析

2)数据集成

保存数据到‘cleanedfile_finish1.csv’用于后续数据可视化。
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析

3)数据可视化

a、各年份会员入会人数直方图绘制:
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
可以发现入会人数大致是随着年份的增加而增加,在2012年达到顶峰。2009年与2013年与趋势不符,有可能是采样的问题,有可能是其他类似政策的问题

b、会员性别比例饼饼图绘制:python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
可以发现入会男性比例远远高于女性。

c、会员各级别人数条形图绘制:
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
可以看出绝大多数会员为4级会员,仅有少数5级或者6级会员

d、箱型图绘制
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
由会员年龄分布箱线图可以看出绝大多数年龄位于30~50岁之间
最后一次乘机时间至观测窗口时长越短,表示客户对航空公司越满意。时间间隔越短同时也表示该客户可能是高价值客户。并且还可以从这个属性中看到公司的发展问题,如果时间间隔短的客户越来越少,说明该公司的运营出现了问题,需要及时调整营销策略。
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
通过图像可以很清晰的发现:客户的飞行次数与总飞行里程数明显分为两个群体,大部分客户集中在箱型图中的箱体中,少数客户位于箱体上方,这部分客户很可能就是高价值客户。

h、会员兑换积分次数直方图绘制:
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
通过图形可以看出:绝大多数兑换次数位于0~10次之间,这表明大部分客户很少进行积分兑换。

i、计算相关矩阵并绘制热力图:
python数据挖掘项目案例,python,数据挖掘,人工智能,数据分析
通过热力图可以看出:部分属性之间存在强相关性,比如总飞行公里数与票价收入,总累计积分,飞行次数。可以通过这些关联性强的属性进一步对数据进行挖掘分析。

如需要实验代码和数据,请私信,无偿提供,仅供学习交流哦~文章来源地址https://www.toymoban.com/news/detail-758994.html

到了这里,关于Python数据挖掘 数据预处理案例(以航空公司数据为例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据挖掘(2.1)--数据预处理

    1.1基础知识 数据 是 数据对象(Data Objects)及其属性(Attributes) 的集合。 数据对象 (一条记录、一个实体、一个案例、一个样本等)是对一个事物或者物理对象的 描述 。 数据对象的 属性 则是这个对象的 性质或特征, 例如一个人的肤色、眼球颜色等是这个人的属性。 每一行为一

    2024年02月02日
    浏览(30)
  • 数据挖掘(2.2)--数据预处理

    目录   二、数据描述 1.描述数据中心趋势 1.1平均值和截断均值  1.2加权平均值 1.3中位数(Median)和众数(Mode) 2.描述数据的分散程度 2.1箱线图 2.2方差和标准差 2.3正态分布 3.数据清洗 3.1数据缺失的处理 3.2数据清洗 描述数据的方法,包括描述数据中心趋势的方法如 均值、中位

    2024年02月01日
    浏览(27)
  • 数据挖掘 实验一、数据预处理

    一、 实验目的: (1) 熟悉 VC++编程工具和完全数据立方体构建、联机分析处理算法。 (2) 浏览拟被处理的的数据,发现各维属性可能的噪声、缺失值、不一致性等,针对存在的问题拟出采用的数据清理、数据变换、数据集成的具体算法。 (3) 用VC++编程工具编写程序,实

    2024年02月08日
    浏览(36)
  • 数据挖掘 | 实验一 数据的清洗与预处理

    1)了解数据质量问题、掌握常用解决方法; 2)熟练掌握数据预处理方法,并使用Python语言实现; PC机 + Python3.7环境(pycharm、anaconda或其它都可以) 清洗与预处理的必要性 在实际数据挖掘过程中,我们拿到的初始数据,往往存在缺失值、重复值、异常值或者错误值,通常这

    2023年04月08日
    浏览(34)
  • 【数据挖掘 | 数据预处理】缺失值处理 & 重复值处理 & 文本处理 确定不来看看?

    🤵‍♂️ 个人主页: @AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍 🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能硬件(虽然硬件还没开始玩,但一直

    2024年02月07日
    浏览(34)
  • 数据预处理在数据挖掘中的重要性

    数据挖掘作为从大量数据中提取有用信息和知识的过程,其结果的准确性和可靠性直接受到数据质量的影响。因此,数据预处理在数据挖掘中扮演着至关重要的角色。让我们探讨数据质量对数据挖掘结果的影响,并介绍常见的数据预处理方法以及它们如何提高数据挖掘的效果

    2024年03月20日
    浏览(37)
  • 数据挖掘实验(二)数据预处理【等深分箱与等宽分箱】

    在分箱前,一定要先排序数据,再将它们分到等深(等宽)的箱中。 常见的有两种分箱方法:等深分箱和等宽分箱。 等深分箱:按记录数进行分箱,每箱具有相同的记录数,每箱的记录数称为箱的权重,也称箱子的深度。 等宽分箱:在整个属性值的区间上平均分布,即每个

    2024年02月07日
    浏览(29)
  • GPT-4科研实践:数据可视化、统计分析、编程、机器学习数据挖掘、数据预处理、代码优化、科研方法论

    查看原文GPT4科研实践技术与AI绘图 GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。 例如在科研编程、绘图领域 : 1、编程建议和示例代码:  无论你使用的编程语言是Python、R、MATLAB还是其他语言,都可以为你提供相关的代码示例。

    2024年02月07日
    浏览(39)
  • python数据预处理

    输出结果如下: 观察可知,【销量】存在一个缺失值,本例将缺失值所在行进行删除处理 输出结果如下: 输出结果如下: 观察可知,箱线图上下边缘存在异常值,本例通过四分位法对异常值进行处理,即:超出上边缘的异常值让其落在上边缘,低于下边缘的异常值让其落在

    2024年02月13日
    浏览(29)
  • Python【二手车价格预测案例】数据挖掘

    随着代步工具的普及,“买卖车”需求激增。但对于部分预算有限的个体或家庭而言,购置一辆二手车更为明智。二手车的巨大供给需求催生了近年来日益壮大的二手车市场,但二手车的售卖面临着价格漂浮的问题。 因此,我们的目标是根据卖家或买家提供的参数信息计算价

    2023年04月09日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包