python数据分析实战五_简单的python数据分析实战——黑五销售数据分析
黑色星期五(通过消费者行为进行销售研究)
背景描述:关于零售商店中黑色星期五的55万个观测数据集。它包含不同类型的数字或分类变量,包含缺失值。
1、理解数据 数据包含538K行,12列。各列含义如下:User_ID 用户ID
Product_ID 产品ID
Gender 用户性别
Age 年龄分布
Occupation 占用
City_Category 城市类别A,B,C
Stay_In_Current_City_Years 在当前城市停留的年数(0,1,2,3,4+)
Marital_Status 婚姻情况(0未婚,1已婚)
Product_Category_1 产品分类1
Product_Category_2 产品分类2
Product_Category_3 产品分类3
Purchase 购买金额(美元)
1、提出问题:
根据数据提炼出4个指标:
(1、客单价
(2、城市类别消费占比
(3、主要消费人群(分类标准包括年龄,性别,婚姻状况)
#导入需要的包
import pandas as pd
import numpy as np
from pandas import DataFrame as df
#读取csv数据,数据类型‘object’
BlackFridayDf = pd.DataFrame.from_csv('E:/Jupyter/black-friday/BlackFriday.csv',index_col=None)
#df.frame_csv默认将第一列设为索引,参数index_col=Mone可以设置无索引
C:\anaconda\lib\site-packages\ipykernel_launcher.py:2: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls
#查看文件大小
BlackFridayDf.shape
(537577, 12)
#查看各列数据类型
BlackFridayDf.dtypes
User_ID int64
Product_ID object
Gender object
Age object
Occupation int64
City_Category object
Stay_In_Current_City_Years object
Marital_Status int64
Product_Category_1 int64
Product_Category_2 float64
Product_Category_3 float64
Purchase int64
dtype: object
2数据清洗
1、选择子集
删去占用及产品序列
#选取需要的列重新定义DF
BlackFridayDf = BlackFridayDf.loc[:,['User_ID','Product_ID','Gender','Age','City_Category','Stay_In_Current_City_Years','Marital_Status','Purchase']]
BlackFridayDf.head()
2、不需要重命名列名
3、处理缺失数据
print('删除前大小:',BlackFridayDf.shape)
删除前大小: (537577, 8)
BlackFridayDf = BlackFridayDf.dropna()
print('删除后大小:',BlackFridayDf.shape)
删除后大小: (537577, 8)
文件大小并没有变化,说明Kaggle上的这份数据还是很规整的。
4、数据类型转换(本案例无需转换),合规性检查
#BlackFridayDf['User_ID'] = BlackFridayDf['User_ID'].astype('object')
#将User_ID列数据类型转换为‘Object’型
#数据合理性检查,purchase值需大于0
BlackFridayDf.describe()
3、构建模型
第一个指标
客单价=总消费金额/消费次数
总消费次数:同一天内,同一个人发生的所有消费算作一次消费 根据列名User_ID,如果值相同,只保留1条,将重复的数据删除
kpi1_Df = BlackFridayDf.drop_duplicates(subset='User_ID')
#总消费次数=行数
Total = kpi1_Df.shape[0]
print('总消费次数:',Total)
总消费次数: 5891
Total_Purchase = kpi1_Df.loc[:,'Purchase'].sum()
print('总消费金额=',Total_Purchase)
总消费金额= 58858381
kpi1 = Total_Purchase//Total
print('客单价 =%.0f$' %kpi1)
客单价 = 9991 $
第二个指标
统计城市类别人均消费占比
#复制数据
group_Df = kpi1_Df
group_Df = group_Df.reset_index(drop=True)
group_Df.head()
#分组
gb=group_Df['Purchase'].groupby(group_Df['City_Category'])
gb
变量gb是一个GroupBy对象,它实际上还没有进行任何计算,只是含有一些有关分组键df['Purchase']的中间数据而已,然后我们可以调用GroupBy的mean方法来计算分组平均值
gb.mean()
City_Category
A 10047.071770
B 10040.603398
C 9945.804715
Name: Purchase, dtype: float64
三个数据很接近,可见城市类别对人均消费金额影响不大
第三个指标
主要消费人群(从年龄,性别,婚姻状况三个角度分析)
groupby函数仍感觉有一些繁琐;我用习惯了Excel的数据透视表功能,想能不能再python中也使用类似的函数。 查阅资料后发现,df.pivot_table()函数就是数据透视表啦!
#查询函数用法
df.pivot_table?
#透视年龄与消费金额
kpi1_Df.pivot_table(index=['Age'],values=['Purchase'],aggfunc=(np.mean,np.sum,np.count_nonzero))可以看出,26-35年龄区间的消费次数最多,客单价也是最高的;整体基本呈正态分布;
#接着利用透视观察性别和消费金额的联系
kpi1_Df.pivot_table(values='Purchase',index='Gender',aggfunc=(np.mean,np.sum,np.count_nonzero))没想到吧!男士的消费次数远远多于女士的消费次数!均值也比女士要大!回到现实中分析,可能是男士都黑五买礼物送心爱的女士吧~
#接着利用透视观察婚姻状况和消费金额的联系
kpi1_Df.pivot_table(values='Purchase',index='Marital_Status',aggfunc=(np.mean,np.sum,np.count_nonzero))未婚人士的消费次数更多!金额也更大!
#接着利用透视观察性居住年限和消费金额的联系
kpi1_Df.pivot_table(values='Purchase',index='Stay_In_Current_City_Years',aggfunc=(np.mean,np.sum,np.count_nonzero))发现刚搬来城市一年多的人会更倾向于在黑五消费,购买商品
结论:刚搬来城市1年多,年龄在26-35岁之间的的未婚男士消费次数更多,金额也更大,消费能力相对来说是最强的。
总结:业务知识薄弱,无法找到更多关键指标,需加强业务知识的了解;
统计知识薄弱,无法从更多维度对数据进行分析,需要学习统计方面的知识;
代码需要多多联系,代码敲一遍可能理解了,但是需要多练习才能熟练运用;
分析的过程更多是基于业务知识和统计知识来展开的,有了明确的指标定义和方法,学习python会更加有效。
python数据分析实战五_简单的python数据分析实战——黑五销售数据分析相关推荐
- python中输入字符串_简单讲解Python中的字符串与字符串的输入输出
简单讲解Python中的字符串与字符串的输入输出 发布于 2016-03-26 14:35:42 | 110 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面向 ...
- python中len用法_简单介绍Python中的len()函数的使用
简单介绍Python中的len()函数的使用 函数:len() 1:作用:返回字符串.列表.字典.元组等长度 2:语法:len(str) 3:参数:str:要计算的字符串.列表.字典.元组等 4:返回 ...
- python画圆花_简单实现python画圆功能
本文实例为大家分享了python实现画圆功能的具体代码,供大家参考,具体内容如下 import numpy as np import matplotlib.pyplot as plt from mat ...
- python变量作用域图解_简单了解Python变量作用域正确使用方法
在写代码的时候,免不了要使用变量.但程序中的一个变量并不一定是在哪里都可以被使用,根据情况不同,会有不同的"有效范围". 看这样一段代码: def func(x): print ( ...
- python打开excel窗口_简单介绍python在CMD界面读取excel所有数据
这篇文章主要介绍了python在CMD界面读取excel所有数据,帮助大家更好的利用python办公,感兴趣的朋友可以了解下 代码 import xlrd import os from prettyt ...
- python携程使用_简单了解python gevent 协程使用及作用
简介 没有切换开销.因为子程序切换不是线程切换,而是由程序自身控制,没有线程切换的开销,因此执行效率高, 不需要锁机制.因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断 ...
- python 表格格式输出_简单介绍python输出列表元素的所有排列形式
今天小编就为大家分享一篇浅谈python输出列表元素的所有排列形式,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 例如: ['a', 'b', 'c'] 输出 ['a', 'b', ...
- 用python爬取网络图片_简单实现Python爬取网络图片
本文实例为大家分享了Python爬取网络图片的具体代码,供大家参考,具体内容如下 代码: import urllib import urllib.request import re #打开网页,下载器 ...
- len函数python返回值类型_简单介绍Python中的len()函数的使用
01状态机介绍 游戏中的状态机一般都是有限状态机,简写为FSM(有限状态机),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型. 状态机的每一个状态至少需要有以下三个操作: ...
最新文章
- android找不到aar包
- 【leetcode】1007. Minimum Domino Rotations For Equal Row
- 推荐场景中召回模型的演化过程
- java netty聊天室_netty实现消息中心(二)基于netty搭建一个聊天室
- 对症下药教你清除电脑中的木马
- 如何成为一位杰出的程序员
- C++之static关键字探究
- gcc可以编译python程序吗_GCC编译C语言程序完整演示
- LeetCode-144-Binary Tree Preorder Traversal
- 序列化和反序列化的概念
- jQuery 视频教程-佟刚-专题视频课程
- 关于微软必应词典客户端的案例分析
- linux下游戏制作工具,在Linux下可用Wine安装和运行D5Power游戏制作工具、蜂窝助手...
- 告别动态规划,连刷40道动规算法题,我总结了动规的套路
- 【高等数学】第一章 函数与极限——第六节 极限存在准则 两个重要极限
- 你要如何衡量你的人生?
- CDbCriteria CArrayDataProvider zii.widgets.grid (1)
- 若依微服务版登录流程源码分析1
- VS使用C++开发桌面程序
- 生信数据库ID大总结-想踏入生信大门的你值得拥有
热门文章
- openstack安装newton版本keyston部署(一)
- 机器学习分类器——案例(opencv sklearn svm ann)
- 关于组队学习的一点想法
- 关于 Redlock 的讨论
- java开发面试自我介绍模板_java求职自我介绍范文_java工程师面试个人介绍
- Gitea在windows平台的安装和简单使用教程
- 腾讯安全与青藤云安全合作升级,助力客户完成年度大型攻防实战
- web返回的数据集格式_200G倾斜数据无插件web端预览!兼容三端,有容乃大—MapGIS M3D数据格式...
- 2011 Asia Beijing Regional Online Contest-1004 hdu4043 FXTZ II
- crh寄存器_端口配置寄存器CRH怎么弄?