为了研究黑色星期五时超市交易额的影响因素,可以采用我们之前学过的绘图函数进行分析,本文致力于让大家学会用绘图函数进行案例分析。
本文目录
一、导入数据
首先导入绘图所需的数据。
import os #导入库
import pandas as pd #导入库
os.chdir(r'F:\公众号\10.黑色星期五购物数据') #设置文件存放路径
date = pd.read_csv('BlackFriday.csv') #读取数据
注:如需文中数据进行练习,可到公众号中回复“黑五购物数据”即可免费获取。
展示前几行数据如下:
二、影响交易额因素分析
1 年龄因素对交易额影响
首先分析年龄因素对交易额的影响,具体语句如下:
import matplotlib.pyplot as plt #导入库
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示问题
plt.rcParams['axes.unicode_minus'] = False # 解决中文显示问题
result = date[['Purchase']].groupby(date['Age']).mean() #按年龄分组,统计交易额平均值
plt.scatter(result['Purchase'], result.index, c=result['Purchase']) #以交易额为x轴和区分颜色,年龄为y轴绘制散点图
plt.colorbar() #绘制颜色条
plt.xlabel('交易额') #x轴标签
plt.ylabel('年龄段') #y轴标签
plt.title('不同年龄段交易额趋势') #标题
plt.show()
得到结果如下:
图一 不同年龄段交易额
由图一知,相对而言年龄越大交易额均值越大,但是在46到50岁的时候出现了一个反常现象。
2 居住时长因素对交易额影响
接着分析顾客在超市所在地居住时长因素对交易额的影响,具体语句如下:
result = date[['Purchase']].groupby(date['Stay_In_Current_City_Years']).mean() #按年龄分组,统计交易额平均值
plt.scatter(result['Purchase'], result.index, c=result['Purchase']) #以交易额为x轴和区分颜色,年龄为y轴绘制散点图
plt.colorbar() #绘制颜色条
plt.xlabel('交易额') #x轴标签
plt.ylabel('居住时长') #y轴标签
plt.title('不同居住时长对交易额影响') #标题
plt.show()
得到结果如下:
图二 不同居住时长对交易额影响
由图二知,在超市所在地居住时间2年左右的顾客平均交易金额最大,两者之间的关系整体呈现u字形。
3 年龄和居住时长因素对交易额影响
再根据居住时长和年龄因素绘制三维散点图,分析这两个因素对交易额的影响,具体语句如下:
import matplotlib.cm as cm #导入库
result = date[['Purchase']].groupby([date['Stay_In_Current_City_Years'], date['Age']]).mean() #按年龄分组,统计交易额平均值, resul
ax = plt.subplot(projection='3d')
ax.scatter(result['Purchase'], result.index.codes[0], result.index.codes[1], color=cm.ScalarMappable().to_rgba(result['Purchase'])) #绘制三维散点图
sm = plt.cm.ScalarMappable(norm=plt.Normalize(vmin=result['Purchase'].min(), vmax=result['Purchase'].max()))
plt.xlabel('交易额') #x轴标签
plt.ylabel('居住年数') #y轴标签
plt.title('不同居住时长和年龄段对交易额影响') #标题
plt.colorbar(sm) #显示对应数值的颜色条
plt.show()
得到结果如下:
图三 不同居住时长和年龄段对交易额影响
由图三知,整体而言年龄段越大,在超市所在地居住时间2年左右的顾客平均交易金额最大,但是看得不是很清晰。
接下来从相关性角度对所有因素进行两两相关性分析。
4 所有因素两两相关性分析
由于corr函数只对数值形数据计算相关系数,所以要先把字符形数据转成数值形,具体语句如下:
pd.set_option('display.max_columns', None) #设置最大显示列数
date['Age'] = date['Age'].apply(lambda x:x[0]) #取年龄段的第一数字替换年龄变量,方便相关性计算
date.loc[date['Stay_In_Current_City_Years']=='4+', 'Stay_In_Current_City_Years'] = 4 #把居住时长中的4+替换成4
date['Age'] = date['Age'].astype(int) #把年龄字段字符形转成数值形(整形)
date['Stay_In_Current_City_Years'] = date['Stay_In_Current_City_Years'].astype(int) #把居住时长字段字符形转成数值形(整形)
date.corr() #计算数据表字段的两两相关性
得到结果如下:
图四 两两相关性分析
由图四知,对交易额影响最大的因素是产品类别1,产品类别1、产品类别2、产品类别3相关性相对较高。
为了更清晰地展现相关性表,可以把这个表绘制成热力图,具体代码如下:
import seaborn as sns #导入库
sns.heatmap(date.corr()) #根据相关系数表绘制热力图
plt.show()
得到结果如下:
图五 两两相关性表热力图
由图五知,年龄和较多因素的关联性都较高,产品类别1、产品类别2、产品类别3相关性相对较高。
更进一步,可以绘制分层聚类热力图,具体代码如下:
sns.clustermap(date.corr()) #绘制分层热力图
plt.show()
得到结果:
图六 两两相关性分层聚类热力图
由图六知,产品类别1和产品类别2相关性较高首先聚为一类,再和产品类别3聚为一类。年龄和婚姻状态相关性较高首先聚为一类。
至此,在Python中绘图研究黑五超市交易额影响因素已全部讲解完毕,感兴趣的同学可以自己实现一遍
。