快乐学习Python,通过对用户和订单数据的分析,在实践中制定营销策略

小夏 科技 更新 2024-02-20

我是一名技术创作者

在互联网行业,电商领域绝对是数据分析使用最多的场所,各大电商平台都依靠数据分析来帮助他们挖掘用户订单增长机会。 例如,购买宝藏的核心思想是根据用户每天的浏览内容和停留时间,以及订单的相关性来推荐它。

在本文中,我们将通过一个真实的电子商务数据集进行分析,在回顾之前的内容的基础上,我们也可以感受到电子商务数据分析的分析过程。

最近,一家电子商务公司**需要策划一项促销活动,通过发送短信向客户发送广告和优惠,以吸引他们购物。 但是,由于预算和短信的限制,不可能发送给所有客户,因此有必要找出最有可能转换的人,并有针对性地发送促销信息。

基于以上要求,作为数据分析师,我们需要根据自己的需求制定自己的分析方案。 那么我们的任务是:

通过数据分析,找到最有可能转化的人群特征(如年龄、性别、地区等)。 通过数据分析,我们可以给出最合适的时间发送促销短信。 任务明确后,我们需要考虑完成上述任务需要哪些数据支持,并开始寻找数据部门提供相应的数据支持。

通过一顿饭的友情(唇)好(枪)合作(舌)商(战),最终从数据部得到以下数据:

用户行为表:过去6个月的用户行为数据。 即订单数据VIP数据:用户VIP会员开户数据。 用户数据:与用户个人信息相关的数据。 一旦我们有了数据,我们就可以尽力而为。

为了方便我们学习,我们需要自己模拟一些相关数据,如果不想模拟,可以联系***获取。

获取数据后,解压后可以看到以下文件:

user_beh**ior_time_resampled.CSV(用户行为数据)VIP用户CSV(VIP 用户数据)用户信息csv(用户数据) 我们先来看一下每个表的字段说明:

user_beh**ior_time_resampled.csvvip_users.csv

user_info.csv

从这里开始,我们将开始使用我们之前了解的一些包和库来读取数据,从 pandas 开始加载数据。

import pandas as pd

df_user_log = pd.read_csv("ecomm/user_beh**ior_time_resampled.csv")

df_vip_user = pd.read_csv("ecomm/vip_user.csv")

df_user_info = pd.read_csv("ecomm/user_info.csv")

df_user_log

df_vip_user

df_user_info

加载后,输出如下所示:

这里,df 用户日志表中有一个时间戳和时间戳字段,我们需要了解这两个字段的含义。

让我们看一下这两个字段的边界值。

time_stamp_max = str(df_user_log['time_stamp'].max())

time_stamp_min = str(df_user_log['time_stamp'].min())

print("time_stamp max: " + time_stamp_max, "time_stamp min: " + time_stamp_min)

timestamp_max = str(df_user_log['timestamp'].max())

timestamp_min = str(df_user_log['timestamp'].min())

print("timestamp max: " + timestamp_max, "timestamp min: " + timestamp_min)

输出如下:

time_stamp max: 1112, time_stamp min: 511

timestamp max: 86399.99327792758, timestamp min: 0.10787397733480476

如您所见,时间戳的最大值为 1112,最小值为 511,时间戳的最大值为 8639999 的最小值为 01。

从数据集的描述来看,用户行为表是用户 6 个月的行为,时间戳最多 1112,最小值为 511,看起来很像一个日期。 表示最短日期为 5 月 11 日,最长日期为 11 月 12 日。

那么既然时间戳是日期,那么时间戳会是特定时间吗? 时间戳的最大值为 86399,而一天中的最大秒数为 24*3600 = 86400。 如果这两个数字非常接近,则可以假定时间戳表示发生此行为的一天中的秒数。

解决了两个时间字段的问题,为了避免歧义,我们将时间戳列重命名为 date。

df_user_log.rename(columns=, inplace = true)

df_user_log

一旦我们读取了数据并理解了每个字段的含义,我们就可以开始清理数据了。

对于数据分析中使用的数据集,我们需要尽可能了解数据的完整性,不清理与我们的数据分析无关的字段也没关系。 但是,如果关键分析维度缺少部分,我们需要考虑是完成还是直接删除。

让我们先看一下缺失值:

df_user_log.isnull().sum()

输出如下:

user_id 0

item_id 0

cat_id 0

seller_id 0

brand_id 18132

date 0

action_type 0

timestamp 0

dtype: int64

从以上结果来看,日志表中缺少品牌数据的数据超过18000条,缺失率相对较低,为016%(1.8w 1098w),一般这个数量级不会影响数据分析的整体严谨性,我们暂且不处理。

df_user_info.isnull().sum()

输出如下:

user_id 0

age_range 2217

gender 6436

dtype: int64

从结果中可以看出,信息表中缺少 2217 个年龄数据和 6436 个缺失的性别字段。 但是我们对用户的年龄和性别进行了分析,完成度完全不规则,所以这里我们直接删除它。

df_user_info = df_user_info.dropna()

df_user_info

df_vip_user.isnull().sum()

输出:

user_id 0

merchant_id 0

label 0

dtype: int64

从结果来看,VIP桌没有丢失,不需要处理。

完成上述准备工作后,是时候开始我们的核心数据分析工作了。

还记得我们的分析任务吗? 第一个是针对需要推广的人,第二个是确定推广信息的发送时间。 因此,让我们专注于我们的两个任务,让我们做下一个工作。

让我们通过 DataFrame 的 value counts 函数看一下年龄分布

df_user_info.age_range.value_counts()

输出:

name: age_range, dtype: int64

除了未知数据外,我们可以发现 3 和 4 的值占比最大。 3 和 4 分别代表 25-30 岁和 30-34 岁。 然后我们用**来计算25-34岁的用户比例。

user_ages = df_user_info.loc[df_user_info["age_range"] != 0, "age_range"]

user_ages.loc[(user_ages == 3) |user_ages == 4) ]shape[0] / user_ages.shape[0]

输出:

可以看出,25-34岁年龄段的用户比例为58%。

(2)用户性别分析接下来,我们使用值计数函数来分析性别。

df_user_info.gender.value_counts()

输出:

name: gender, dtype: int64

就字段含义而言,0 代表女性,1 代表男性,2 代表未知。 由此可以得出结论,该平台的核心用户群体是女性,男性数量为235倍。

到现在为止,通过对用户群体的分析,我们已经可以得出结论,平台的核心用户是25-34岁的女性,但这种情况现实吗? 毕竟,我们只分析了注册用户信息,并没有将其与订单数据相结合。 也许只是注册的女性多了,订购的女性却少了。 所以下一步就是结合用户信息和订单数据,验证猜想是否合理。

如上所述,我们需要结合用户信息和订单信息来分析是否是女性具有更强的购买力。 但是用户数据和订单数据属于未使用的表,那我们该怎么办? 如果你看一下数据,我们可以看到 user 表和 order 表都有一个名为 user id 的字段,因此我们有办法将这两个表关联起来。

按用户 ID 关联两个表:

df_user_log = df_user_log.join(df_user_info.set_index('user_id'), on = 'user_id')

df_user_log

输出:

从上面的输出中可以看出,用户表的年龄和性别被合并到订单表中。 接下来,我们可以根据下单的用户来分析用户的性别和年龄。

df_user_log.loc[df_user_log["action_type"] == "order", ["age_range"]].age_range.value_counts()

输出:

name: age_range, dtype: int64

通过以上结果可以看出,订单的年龄段和用户信息的分析基本一致,25-34岁的人占比为599%。

df_user_log.loc[df_user_log["action_type"] == "order", ["gender"]].gender.value_counts()

输出:

name: gender, dtype: int64

从以上结果可以看出,下订单较多的还是女性。 至此,我们基本可以得出结论:我们向 25-34 岁的女性用户发送促销信息。 至此,任务已经接近一半,我们已经确定了发送短信的组。 但另一项任务是确定何时发送。 让我们继续前进。

在这里,我们将每个日期分组,看看哪个时间段的下订单的人最多。 由于数据是最近 6 个月的数据,那么我们将数据分为 6 组并查看:

df_user_log.loc[df_user_log["action_type"] == "order", ["date"]].date.value_counts(bins = 6)

输出:

name: date, dtype: int64

可以看出,10月11日至11月11日下单量最多。 分析完日期后,我们来看看哪个时间段的订单更多。

timestamp 字段存储每条记录的排序时间,即从当天午夜开始累积的秒数。 它并不直观,我们更希望能够根据小时级数据对其进行分析。 因此,让我们考虑根据时间戳列创建一个新的时间列来表示小时。

df_user_log.loc["time_hours_view"] = df_user_log["timestamp"]/3600

df_user_log

输出:

我们可以直接使用 Value Count 来统计新添加的 Time Hours View 字段,然后我们可以分配一天的小时级分布。 我们以两小时为单位查看分布情况,因此将其分为 12 组。

df_user_log.loc[df_user_log["action_type"] == "order", ["time_hours_view"]].time_hours_view.value_counts(bins = 12)

输出:

name: time_hours_view, dtype: int64

从以上结果可以看出,晚上 8 点到 10 点是最有序的至此,我们已经完成了根据要求分析数据的任务。 基本确定短信发送群的推广是:对于25-34岁的女性用户,发送短信的最佳时间是10月下旬至11月中旬的晚上8点至10点

欢迎关注***服务器端技术选型。

如果您有任何问题或其他需求,可以留言。

相似文章

    快乐学习Python,如何正确使用pandas处理时间类型数据?

    在日常数据分析中,数据通常按日期进行分析。例如,我们需要通过用户的下单时间来分析用户在不同时间段对产品的偏好 例如,使用访问日志的访问时间来分析系统的访问周期和负载,为不同时间段的资源分配提供依据。例如,通过用户较短的刷牙时间分析用户的行为特征和工作时间和工作类型 可以看出,在数据分析中,基于日期 ...

    快乐学习Python,数据分析方法获取数据公共数据或爬虫

    学习python数据分析的第一步是先获取数据,为什么数据采集是数据分析的第一步,很明显 数据分析,必须有数据才能分析。作为个人,您如何获得用于分析的数据集?获取数据集的第一种方法是获取业内有人编译的数据集。目前,大数据行业持续火爆,数据本身已经成为一个行业,其中自然包括数据集。这些由某人组合在一起的...

    Python 通过函数和常规类编写元类

    Python 可以通过函数和常规类编写元类。类对象是通过 type 在函数和常规类之间创建的。python 工厂函数定义了一个外部函数,该函数生成并返回嵌套函数,因此调用工厂函数将获得对嵌套函数的引用。有关详细信息,请参阅 Python 嵌套函数范围 任何可调用对象都可以用作元类,例如函数,只要它接...

    通过抖音生成操作提高用户留存率和转化率

    立即咨询定制解决方案 使用抖音提高用户留存率和转化率时,可以采取以下方法 .制定有效的内容策略 代理服务提供商可以帮助您为目标受众制定内容策略。根据不同的用户特点和兴趣,定期发布有趣 有用 引人入胜的内容,以吸引用户并增加他们的留存时间。.优化质量 在抖音上,质量对于用户留存和转化至关重要。代理运营...

    通过团体旅游和学习各种知识来提高整体素质的研究活动

    研究活动是一种以学生为主导的学习方式,侧重于让学生主动发现问题 积极主动地解决问题。在这个过程中,学生不仅可以学习知识,还可以锻炼实践能力 团队协作能力 领导能力等素质。研究活动一般以团体旅行 集中住宿等形式进行,通过与其他学生一起探索和研究不同的文化 自然环境 历史背景等,拓宽学生的视野和知识面。...