首页 > 其他分享 >整体消费趋势分析

整体消费趋势分析

时间:2022-11-23 10:00:33浏览次数:72  
标签:消费 df 整体 month 付款 2018 众数 2017 趋势


整体消费趋势分析_开发语言

介绍两个数据分析思路,三个数据分析方法和一个数据可视化工具:

1)分析思路
2)统计值分析法
3)分布分析法
4)对比分析法
5)Seaborn 绘图

做数据分析,最主要的目标是为了发现问题,定位原因,然后解决问题,最后验证效果

整体趋势分析,它的主要目的是为了发现问题

不管是已知的问题,还是并未知的问题,都需要在解决问题之前,研究一下现状,看看事实上到底是哪里存在问题,存在什么样的问题,我要分析的问题到底是不是真的是一个问题。

我们研究现状、发现问题时,采用同一个逻辑和方法,可以让我们的分析思路更加清晰流畅,不会东一筢西一扫帚,无头苍蝇一般地一股脑扎到一个漩涡里。

三、分析思路

这里,给大家介绍两个常用而且好用的思路:

1)从整体到局部
2)从单变量到多变量

3.1 从整体到局部

从整体到局部,就是我们先看看大局是什么样的。

比如对于我们这个项目来说,我们的数据具有这样几个字段:订单号、顾客ID、订单时间、付款金额、商品ID、商品描述,由​​订单号​​​我们能得出​​交易数​​​,由​​顾客ID​​​我们能得出​​顾客数​​​,由​​付款金额​​​我们能得出​​销售额​​​,由​​商品ID​​​我们能得出​​销售量​​。

那我们接下来就可以先从大局出发,看看宏观关键指标的情况如何,像销售额,顾客数,交易数,销售量这几个指标就是既直观又关键的指标。

当我们在分析这些指标的状态和趋势时,就会有一些发现,接着就可以进一步去研究局部的变量,层层深入地去挖掘问题背后的原因,这就是从整体到局部。

3.2 从单变量到多变量

从单变量到多变量,是指最开始分析的时候,我们先只看一个变量的情况。

当我们把所有的单个变量了解清楚后,再增加到两个变量之间的关系。

比如研究完销售额,顾客数,交易数,销售量这几个单个变量后,我想看看销售额和顾客数之间是什么样的关系等等。

有了分析思路了,我们还需要采用一些分析方法。

在对单变量分析的过程中,我们可以进一步采用的分析方法有:

1)统计值分析
2)分布分析
3)对比分析

四、统计值分析

统计值分析法就是用统计值探索数据的特征

整体消费趋势分析_seaborn_02

 

4.1 df.mode()

当我们想要求取 dataframe 中的众数时可以用 ​​df.mode()​​ 方法,所谓众数是指数据集中出现次数最多的数值,一个集合的众数可能只有一个也可能有多个。它的使用方法是:

df.mode()
import pandas as pd  
# 建立一个 dataframe
df = pd.DataFrame({"A":[4,4,5,4],
"B":[5,5,3,2],
"C":[10,10,10,3]})
# 找到每一列的众数
df.mode()

整体消费趋势分析_python_03

 

可以看到我们得到了 df 中的每一列的众数。

此外还需要注意一点,当一个 Series 对象中含有多个众数的时候,​​mode()​​ 会将所有的众数连带其索引一起返回,这个时候如果我们需要提取其中的某一个众数,就要用结果的索引去提取,请看下面这个例子:

import pandas as pd 
s = pd.Series([1, 1, 1, 1, 3, 3, 3, 3, 5, 5, 5, 5])
x = s.mode()
print('x 是\n {}'.format(x))
print('第一个众数是 {}'.format(x[0]))

整体消费趋势分析_开发语言_04

 其实,不管 Series 对象中是包含多个众数,还是只包含一个众数,​​mode()​​​ 返回的结果都会是 ​​索引 值​​​ 的格式,所以,即使是只有一个众数,当我们只想获取这个众数的​​值​​​时,就需要用到 ​​mode()[0]​​ 的方式,来将第一个众数的值提取出来,

4.2 df.std()

当我们想要求出 dataframe 中数值类型字段的标准差时可以用 ​​df.std()​​,使用方法是:

import pandas as pd  
# 建立一个 dataframe
df = pd.DataFrame({"A": [10, 18, 11],
"B": [13, 15, 8],
"C": [9, 20, 3]})
# 计算每一列的标准差
df.std()

整体消费趋势分析_开发语言_05

 

可以看到我们得到了 df 中的每一列的标准差。

小结一下:

整体消费趋势分析_数据挖掘_06

 导入所需要的包和数据集。

# 导入所需要的库
import pandas as pd
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
# 设置中文字体
plt.rcParams['font.family'] = ['Source Han Sans CN']
# 读取数据集
df = pd.read_csv('./工作/clean_data.csv')
# 取 2017 年和 2018 年的数据
df = df[(df['年份'] == 2017) | (df['年份'] == 2018)]
df.head(2)

整体消费趋势分析_seaborn_07

 现在我们已经有了一个通过第一步清理好的数据集 clean_data.csv,我们在这个数据集中根据日期字段生成了一个新的字段,即最后一个字段星期几,它代表的是付款日期是星期几,生成方法是:

df['星期几'] = df['订单时间'].dt.weekday

根据上面代码块中的方法,直接生成的数字是从 0 到 6 的,0表示星期一,6表示星期日,如果大家觉得理解不直观,还可以在后面​​+1​​。

# 1. 计算'付款金额'字段的平均数
avg = df['付款金额'].mean()
print('付款金额的平均数是{}'.format(avg))
# 2. 计算'付款金额'字段的众数
most = df['付款金额'].mode()[0]
print('付款金额的众数是{}'.format(most))
# 3. 计算'付款金额'字段的标准差
st = df['付款金额'].std()
print('付款金额的标准差是{}'.format(st))
# 4. 计算'付款金额'字段的值域
ran = df['付款金额'].max() - df['付款金额'].min()
print('付款金额的值域是{}'.format(ran))

整体消费趋势分析_数据分析_08

 五、分布分析法

分布分析法是指以某个条件对数据进行分组,研究各组的频数或者占比的,并且了解了几个可以表现分布情况的可视化形式,我们还将项目中数据集的字段进行组合并且找到了合适的展现方式:

整体消费趋势分析_开发语言_09

 

# 数一数'星期几'中每一类出现了几次,即'星期几'中每一类卖出了多少件商品
weekday_count = df['星期几'].value_counts()
# 求出商品的总件数
sum_count = df['星期几'].value_counts().sum()
# 用每一类包含的商品件数 / 商品的总件数,得出一个 list,其中每个元素代表各类销售量所占的比例
weekday_count_ratio = weekday_count / sum_count
# 画出饼图
weekday_count_ratio.plot(kind='pie', autopct='%.2f%%', figsize=(7, 7), label='')
plt.show()

整体消费趋势分析_seaborn_10

 通过前面的两种分析方法,我们已经能够提炼出一些我们关心并且很重要的指标了,有了指标之后,我们接下来要用到一个特别常用的分析方法:对比分析法,它可以让这些指标真正地反映出问题。

六、对比分析法

对比分析法可以帮我们更准确地发现问题,还了解了两种对比对象,和三种对比方式:

整体消费趋势分析_开发语言_11

 并且用项目数据的字段与对比对象和对比方式进行了各种组合得到了多种分析的维度:

整体消费趋势分析_python_12

 

# 分组聚合得到每年每月的付款金额的平均值
df_mean = df.groupby(['年份', '月份'])['付款金额'].mean()
# 将上面得到的多级索引 Series 对象转换成 DataFrame 对象
year_month_sales_mean = df_mean.unstack(level=0)
# 画出折线图
year_month_sales_mean.plot(kind='line', figsize=(10, 10))
# 设置x轴标签
plt.xlabel('月份')
# 设置y轴标签
plt.ylabel('消费金额')
# 设置图片标题
plt.title('2017-2018年每月平均消费金额线性对比图')
plt.show()

整体消费趋势分析_开发语言_13

 以上提到的三种分析方法,都离不开数据可视化,我们已经了解了可视化的工具 Matplotlib,这里我们再看一种也很好用的库:Seaborn

七、Seaborn 绘图

Seaborn 与 Matplotlib 的对比和它的优势:

整体消费趋势分析_数据分析_14

 下面来总结一下它的使用方法: 在使用时需要先导入 seaborn 包,即 ​​import seaborn as sns​​。

想要画柱形图时,可以先使用最简单的语法 ​​sns.barplot(x, y, data)​​​,其中 : ​​x​​​ 是作为横坐标的字段, ​​y​​​ 是作为纵坐标的字段, ​​data​​ 是我们要作图的 dataframe 名称。

也可以在此基础之上添加更多的参数 ​​sns.barplot(x, y, data, ci, hue, palette)​​​,其中: ​​ci = None​​​ 可以将图形中的误差区间去掉,
​​​hue​​​ 设置为某个字段就可以根据这个字段进行分类,
​​​palette​​ 可以设置图形的颜色风格。

整体消费趋势分析_python_15

 

整体消费趋势分析_seaborn_16

 

做出 2017 年与 2018 年每个月的顾客数的柱状对比图。

# 导入 seaborn 库
import seaborn as sns
# 1. 分组聚合得到 2017 年各个月份的消费用户数和消费金额总和
# 先挑出数据集中年份是 2017 年的数据
df_2017 = df[df['年份'] == 2017]
# 分组聚合得到每个月中每个顾客的付款金额总和,并对年份求平均
df_2017_month_customer = df_2017.groupby(['月份','顾客ID']).agg({'付款金额':'sum', '年份':'mean'})
# 对上述结果进行行索引重置,转换成 dataframe
df_2017_month_customer = df_2017_month_customer.reset_index()
# 在 df_2017_month_customer 的基础上,分组聚合得到每个月的顾客数、付款金额总和,并对年份求平均
df_2017_month = df_2017_month_customer.groupby('月份').agg({'顾客ID':'count','付款金额':'sum', '年份':'mean'})
# 对上述结果进行行索引重置,转换成 dataframe
customers_payment_2017 = df_2017_month.reset_index()
# 2. 用和上面同样的步骤,分组聚合得到 2018 年各个月份的消费用户数和消费金额总和
# 先挑出数据集中年份是 2018 年的数据
df_2018 = df[df['年份'] == 2018]
# 分组聚合得到每个月中每个顾客的付款金额总和,并对年份求平均
df_2018_month_customer = df_2018.groupby(['月份','顾客ID']).agg({'付款金额':'sum', '年份':'mean'})
# 对上述结果进行行索引重置,转换成 dataframe
df_2018_month_customer = df_2018_month_customer.reset_index()
# 在 df_2018_month_customer 的基础上,分组聚合得到每个月的顾客数、付款金额总和,并对年份求平均
df_2018_month = df_2018_month_customer.groupby('月份').agg({'顾客ID':'count','付款金额':'sum', '年份':'mean'})
# 对上述结果进行行索引重置,转换成 dataframe
customers_payment_2018 = df_2018_month.reset_index()
# 用 append 将 2017 年和 2018 年数据整合到一个 dataframe 里
customers_payment_all = customers_payment_2017.append(customers_payment_2018).reset_index(drop=True)
# 设置画布大小
plt.rcParams['figure.figsize'] = 10, 6
# 作柱状图表示 2017-2018 年各个月份顾客数的趋势
sns.barplot(x='月份', y='顾客ID', data=customers_payment_all, palette='Blues', hue='年份')
# 设置 x 轴标签
plt.xlabel('月份')
# 设置 y 轴标签
plt.ylabel('顾客数')
# 设置图片标题
plt.title('2017-2018年每月顾客数柱状对比图')

整体消费趋势分析_数据挖掘_17

 如果在绘制 Seaborn 图形时想要更改颜色风格,可以将 ​​palette='Blues'​​​ 设置成其他的参数,具体可以参考官方文档 ​​palette颜色选择​​​,常用的简单设置模式可以参考下图,比如设置成 ​​palette='bright'​​,颜色就会变成明亮色系的。

整体消费趋势分析_开发语言_18

 总结一下

整体消费趋势分析_seaborn_19

 

标签:消费,df,整体,month,付款,2018,众数,2017,趋势
From: https://blog.51cto.com/u_15888443/5879773

相关文章

  • 数据报告 | 新冠疫情对美国民众消费行为的影响
    ​​本文由前嗅数据研究院出品  自2020年COVID-19爆发以来,美国人的生活方式和人际关系发生了巨大变化。前嗅数据研究院分别从疫情下美国民众消费观念、生活方式、消费......
  • 十年交易干货:我是如何做好趋势跟踪交易的?
    恍惚间,交易已过10多年。期间的酸甜苦辣,真的只有每个交易者自己知道。伴随着不断小亏的无奈,毫无突破的苦闷,领悟再进步的这种螺旋式上升。很多趋势交易者苦于不知道如何处理......
  • 未来10年,软件开发技术的8个发展趋势
    英文| ​​https://medium.com/better-programming/software-developer-trends-of-2020-and-beyond-d1b955bc46b8​​翻译|web前端开发新的一个十年来到,随之而来的是对......
  • 第二节 nginx整体结构、进程模型
    一、nginx的整体结构1、master进程和worker进程概览(父子关系)启动nginx进程,用ps-ef|grepnginx打印出进程来,可以看到一个master进程,一个worker进程第一列:UID,进程所属......
  • Zookeeper服务消费者
    1、建Module2、改POM!--SpringBoot整合zookeeper客户端--><dependency><groupId>org.springframework.cloud</groupId><artifact......
  • EurekaClient端-----将注册进EurekaServer成为服务消费
    1、建Module2、改POM<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client<......
  • cloud-consumer-order80 微服务消费者订单Module模块
    1、建cloud-provider-payment80012、改POM<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http:......
  • JVM虚拟机(整体架构、类文件结构)我来了~~~
    虚拟机1.1发展历程1.1.1java往事​ Java诞生在一群懒惰、急躁而傲慢的程序天才之中。​ 1990年12月,Sun的工程师PatrickNaughton被当时糟糕的SunC++工具折磨的快疯......
  • 未来五年数字化发展的趋势是什么?
    未来五年数字化发展必然迎来高潮期,虽然疫情或将持续而无法终结,市场环境或许有点捉摸不透,但企业数字化转型依旧迫在眉睫,中国制造2025也是政府工作的重中之重,向制造强国迈进的......
  • 整体二分
    动态第k大,第k小,离线下来。考虑第k小怎么求,二分一个数值,然后扫一遍有多少小于等于\(mid\)的。一次nlogn,多次\(n^2log\),既然你的是我的,我的就是你的,你做的就是我做的,我做......