首页 » Python » 作业3:订单数据常见分析方法及案例

作业3:订单数据常见分析方法及案例

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# coding=utf-8
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


# 设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 设置正常显示字符
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(9,5),facecolor='white',dpi=200)


# 1.用户画像分析(user表)
# 读取数据
users_data = pd.read_csv("内容/data/users.csv",encoding="utf-8")
print(users_data.info())
print(users_data.head())

# 用户性别的分布
sex_gp = users_data.groupby("gender").count()
print(sex_gp)
male_num = sex_gp['id']['MALE']
female_num = sex_gp['id']['FEMALE']
labels = ['Male','Female']
sizes = [male_num,female_num]
explode = (0,0)
plt.pie(sizes,explode=explode,labels=labels,shadow=False,startangle=90,autopct='%1.1f%%')
plt.title("顾客男女比例")
plt.show()

# 用户年龄的分布
age_gp = users_data.groupby("age").count()
print(age_gp)
# 这里发现有用户写了20xx的年龄 猜测是写成了出生年月。所以要计算下
users_data['age'] = users_data['age'].apply(lambda x: 2020.0-x if 1924.0 <= x <= 2014.0 else x)
age_gp = users_data.groupby("age").count()
print(age_gp)

x = age_gp.index
y = age_gp['id']
plt.bar(x=x, height=y, color='steelblue', alpha=1)
plt.title("用户年龄的分布")
plt.xlabel("年龄段")
plt.ylabel("用户数")
plt.show()

# 用户设备的分布
device_gp = users_data.groupby('first_device_type').count()
print(device_gp)
device_gp.sort_values(by="id",ascending=False,inplace=True)
x = device_gp.index
y = device_gp['id']
plt.figure(figsize=(9,5),facecolor='white',dpi=200)
plt.bar(x=x, height=y, color='steelblue', alpha=1)
for x1, y1 in zip(x, y):
    plt.text(x1, y1-y1/2, str(y1), ha='center', va='bottom', fontsize=10)
plt.title("用户设备的分布")
plt.xlabel("设备类型")
plt.ylabel("用户数")
plt.show()


# 用户目的地的分布
address_gp = users_data.groupby('country_destination').count()
print(address_gp)
address_gp.sort_values(by="id",ascending=False,inplace=True)
x = address_gp.index
y = address_gp['id']
plt.figure(figsize=(9,5),facecolor='white',dpi=200)
plt.bar(x=x, height=y, color='steelblue', alpha=1)
for x1, y1 in zip(x, y):
    plt.text(x1, y1-y1/2, str(y1), ha='center', va='bottom', fontsize=10)
plt.title("用户目的地的分布")
plt.xlabel("目的地")
plt.ylabel("用户数")
plt.show()

# 2、推广渠道分析(user表)
# 每月新增用户趋势;
users_data['date_account_created'] = users_data['date_account_created'].astype('datetime64')
users_data['month_year_account_created'] = users_data['date_account_created'].apply(lambda x: x.strftime('%Y-%m'))
newly_added_month = users_data.groupby('month_year_account_created').count()
# print(newly_added_month)
x = newly_added_month.index
y = newly_added_month['id']
plt.figure(figsize=(9,5),facecolor='white',dpi=200)
plt.plot(x, y, linestyle='-')
plt.xticks(rotation=80)
plt.xlabel("日期",fontsize=10)
plt.ylabel("新增用户数",fontsize=10)
plt.title("每月新增用户趋势",fontsize=10)
plt.show()


# 不同推广渠道的注册量与转化率,转化率计算:通过该渠道注册数/总用户数
users_allnum = users_data['id'].count()
print(users_allnum)
users_channel_num = users_data.groupby('affiliate_channel').count().sort_values(by="id",ascending=False)
print(users_channel_num)
x = users_channel_num.index
y = users_channel_num['id']
plt.figure(figsize=(9,5),facecolor='white',dpi=200)
plt.bar(x=x, height=y, color='steelblue', alpha=1)
for x1, y1 in zip(x, y):
    plt.text(x1, y1-y1/2, str(y1), ha='center', va='bottom', fontsize=10)
plt.title("不同推广渠道的注册量")
plt.xlabel("渠道类型")
plt.ylabel("注册量")
plt.show()

# 转化率
x = users_channel_num.index
y = (users_channel_num['id']/users_allnum).round(decimals=3)
plt.figure(figsize=(9,5),facecolor='white',dpi=200)
plt.bar(x=x, height=y, color='steelblue', alpha=1)
for x1, y1 in zip(x, y):
    plt.text(x1, y1-y1/2, str(y1*1000/10)+"%", ha='center', va='bottom', fontsize=10)
plt.title("不同推广渠道的注册转化率")
plt.xlabel("渠道类型")
plt.ylabel("转化率")
plt.show()
# 不同营销广告内容的注册量与转化率,转化率计算:通过该营销广告注册数/总用户数

users_tracked_num = users_data.groupby('first_affiliate_tracked').count().sort_values(by="id",ascending=False)
# print(users_tracked_num)
x = users_tracked_num.index
y = users_tracked_num['id']
plt.figure(figsize=(9,5),facecolor='white',dpi=200)
plt.bar(x=x, height=y, color='steelblue', alpha=1)
for x1, y1 in zip(x, y):
    plt.text(x1, y1-y1/2, str(y1), ha='center', va='bottom', fontsize=10)
plt.title("不同广告内容的注册量")
plt.xlabel("广告内容类型")
plt.ylabel("注册量")
plt.show()

# 转化率
x = users_tracked_num.index
y = (users_tracked_num['id']/users_allnum).round(decimals=3)
plt.figure(figsize=(9,5),facecolor='white',dpi=200)
plt.bar(x=x, height=y, color='steelblue', alpha=1)
for x1, y1 in zip(x, y):
    plt.text(x1, y1-y1/2, str(y1*1000/10)+"%", ha='center', va='bottom', fontsize=10)
plt.title("不同广告内容的注册转化率")
plt.xlabel("广告内容类型")
plt.ylabel("转化率")
plt.show()

# 3、转化漏斗分析(session表与user结合)
# 总用户数
# 总用户计算方法:对sessions表中的user_id统计数量(去重),得出sessions表中所有的用户数量
sessions_data = pd.read_csv('内容/data/sessions.csv',encoding='utf-8',engine='python')
sessions_num_nall = sessions_data['user_id'].nunique()
print('总用户数量为:{}'.format(sessions_num_nall))
# 注册用户占比(注册用户总数量 / 用户总数量)
# 注册用户计算方法:通过sessions表中的用户与注册用户表进行内关联,统计出sessions表中已注册用户数量
sessions_merge_users = sessions_data.merge(users_data,how="inner",left_on='user_id',right_on='id')
sessions_merge_users_num_nall = sessions_merge_users['user_id'].nunique()
print('注册用户数量为:{}'.format(sessions_merge_users_num_nall))
print('注册用户占比为:{:.2f}%'.format(sessions_merge_users_num_nall/sessions_num_nall*100))
# 活跃用户(非僵尸用户)占比(活跃用户总数量 / 用户总数量)
# 活跃用户计算方法:按照用户的操作总次数,如果用户操作产品大于等于10次,就可以说明用户为偏活跃的用户
sessions_gp_activer = sessions_data.groupby('user_id').count()
# print(sessions_gp_activer)
active_users = sessions_gp_activer[sessions_gp_activer['secs_elapsed'] >= 10]
# print(active_users)
print('活跃用户数量为:{}'.format(len(active_users)))
print('活跃用户占比为:{:.2f}%'.format(len(active_users)/sessions_num_nall*100))
# 下单用户占比(下单用户总数量 / 用户总数量)
# 下单用户计算方法:用户行为中“reservations”为预定(下单)操作,通过统计进行了“reservations”的用户(并去重),得出下单用户的数量
sessions_gp_order = sessions_data[sessions_data['action_detail']=='reservations']
# print(sessions_gp_order)
order_users = sessions_gp_order['user_id'].unique()

print('下单用户数量为:{}'.format(len(order_users)))
print('下单用户占比为:{:.2f}%'.format(len(order_users)/sessions_num_nall*100))

原文链接:作业3:订单数据常见分析方法及案例,转载请注明来源!

0