【Python基础】案例分析:电商分析

电商分析

1 案例:某年淘宝双12部分购物数据

1.1 数据:某年淘宝双12部分购物数据;

来源:天池数据平台

1.2 分析目的:

  • 熟悉电商常用分析指标
  • 用户行为分析
  • 用户价值模型

2 熟悉数据

2.1 导入数据

import pandas as pd
fpath = r'data\data.csv'
pdata = pd.read_csv(fpath)
pdata.columns
Index(['user_id', 'item_id', 'behavior_type', 'user_geohash', 'item_category','time'],dtype='object')
字段字段说明提取说明
user_id用户标识抽样&字段脱敏(非真实ID)
item_id商品标识字段脱敏(非真实ID)
behavior_type用户对商品的行为类型包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。
user_geohash用户位置的空间标识,可以为空由经纬度通过保密的算法生成
item_category商品分类标识字段脱敏
time行为时间精确到 a cell.
pdata
user_iditem_idbehavior_typeuser_geohashitem_categorytime
0980478372324315621NaN42452014-12-06 02
1977261363835835901NaN58942014-12-09 20
298607707647497121NaN28832014-12-18 11
398662432320593836196nn52n65622014-12-06 10
4981459082902085201NaN139262014-12-16 21
.....................
1225690193812622378365755195q6d6a112014-12-13 21
12256902938126221777247531NaN123112014-12-14 21
12256903938126222343914431NaN87652014-12-11 16
122569049381262226452000195q6dqc79512014-12-08 22
122569051084045353626997971NaN98472014-12-03 19

12256906 rows × 6 columns

# 数据量大小
len(pdata)
12256906
#判断缺失数据计算
missAll = pdata.isnull().sum()
missAll
user_id                0
item_id                0
behavior_type          0
user_geohash     8334824
item_category          0
time                   0
dtype: int64
#统计缺失字段
missField = missAll[missAll>0] 
missField
user_geohash    8334824
dtype: int64

2.2 基本分析

指标:PV与UV

  • PV(访问量):Page View,览量/点击量(包括重复浏览)。
  • UV(独立访客):Unique Visitor, 独立用户或者设备访问量。。
#将字符串时间转成Timestamp
pdata['ts'] = pd.to_datetime(pdata['time'])
pdata['hour'] = pdata.ts.map(lambda item: item.hour)
pdata['day'] =pdata.ts.map(lambda item: item.date())
pdata
user_iditem_idbehavior_typeuser_geohashitem_categorytimetshourday
0980478372324315621NaN42452014-12-06 022014-12-06 02:00:0022014-12-06
1977261363835835901NaN58942014-12-09 202014-12-09 20:00:00202014-12-09
298607707647497121NaN28832014-12-18 112014-12-18 11:00:00112014-12-18
398662432320593836196nn52n65622014-12-06 102014-12-06 10:00:00102014-12-06
4981459082902085201NaN139262014-12-16 212014-12-16 21:00:00212014-12-16
..............................
1225690193812622378365755195q6d6a112014-12-13 212014-12-13 21:00:00212014-12-13
12256902938126221777247531NaN123112014-12-14 212014-12-14 21:00:00212014-12-14
12256903938126222343914431NaN87652014-12-11 162014-12-11 16:00:00162014-12-11
122569049381262226452000195q6dqc79512014-12-08 222014-12-08 22:00:00222014-12-08
122569051084045353626997971NaN98472014-12-03 192014-12-03 19:00:00192014-12-03

12256906 rows × 9 columns

#PV分析:每天访问量
daily_pv = pdata.groupby('day')['user_id'].count()
daily_pv
day
2014-11-18    366701
2014-11-19    358823
2014-11-20    353429
2014-11-21    333104
2014-11-22    361355
2014-11-23    382702
2014-11-24    378342
2014-11-25    370239
2014-11-26    360896
2014-11-27    371384
2014-11-28    340638
2014-11-29    364697
2014-11-30    401620
2014-12-01    394611
2014-12-02    405216
2014-12-03    411606
2014-12-04    399952
2014-12-05    361878
2014-12-06    389610
2014-12-07    399751
2014-12-08    386667
2014-12-09    398025
2014-12-10    421910
2014-12-11    488508
2014-12-12    691712
2014-12-13    407160
2014-12-14    402541
2014-12-15    398356
2014-12-16    395085
2014-12-17    384791
2014-12-18    375597
Name: user_id, dtype: int64
# UV分析:每天独立用户数
tmp = pdata.groupby('day')['user_id']
#每个分组去重,并统计数量
daily_uv = tmp.apply(lambda x:x.drop_duplicates().count())
daily_uv
day
2014-11-18    6343
2014-11-19    6420
2014-11-20    6333
2014-11-21    6276
2014-11-22    6187
2014-11-23    6373
2014-11-24    6513
2014-11-25    6351
2014-11-26    6357
2014-11-27    6359
2014-11-28    6189
2014-11-29    6224
2014-11-30    6379
2014-12-01    6544
2014-12-02    6550
2014-12-03    6585
2014-12-04    6531
2014-12-05    6367
2014-12-06    6440
2014-12-07    6422
2014-12-08    6564
2014-12-09    6566
2014-12-10    6652
2014-12-11    6894
2014-12-12    7720
2014-12-13    6776
2014-12-14    6668
2014-12-15    6787
2014-12-16    6729
2014-12-17    6643
2014-12-18    6582
Name: user_id, dtype: int64
#PV与UV的数据可视化
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(10,4))
plt.plot(daily_pv.index.values,daily_pv.values, 'r')
plt.xticks(rotation=30)
plt.figure(figsize=(10,4))
plt.plot(daily_uv.index.values,daily_uv.values, 'g')
plt.xticks(rotation=30)
plt.show()

在这里插入图片描述
在这里插入图片描述

用户购买次数分布:

  • 这一期间每个用户支付次数
  • 统计每个用户支付次数
  • 使用直方图展示

步骤:

  • 过滤数据:行为为支付
  • 分组:根据user_id分组,groupby
  • 统计:使用count方法分组
  • 可视化:使用hist方法直方图显示方法直方图显示
user_bynums=pdata[pdata.behavior_type==4].groupby('user_id')['behavior_type'].count()
user_bynums.plot.hist()
<AxesSubplot: ylabel='Frequency'>


在这里插入图片描述

user_bynums
user_id
4913          6
6118          1
7528          6
7591         21
12645         8..
142376113     1
142412247    12
142430177     5
142450275    40
142455899    13
Name: behavior_type, Length: 8886, dtype: int64

用户复购

  • 复购:用户两天以上有购买行为

复购率:复购行为用户数/有购买行为的用户总数

#实现方式1
#根据用户与时间分组,并查看数据
redata =pdata[pdata.behavior_type==4].groupby(['user_id', 'day']).count()
redata
item_idbehavior_typeuser_geohashitem_categorytimetshour
user_idday
49132014-12-011101111
2014-12-072222222
2014-12-111101111
2014-12-131101111
2014-12-161101111
...........................
1424558992014-11-241101111
2014-11-262202222
2014-11-301101111
2014-12-031101111
2014-12-042202222

49201 rows × 7 columns

#重置索引
redata = redata.reset_index()
redata
user_iddayitem_idbehavior_typeuser_geohashitem_categorytimetshour
049132014-12-011101111
149132014-12-072222222
249132014-12-111101111
349132014-12-131101111
449132014-12-161101111
..............................
491961424558992014-11-241101111
491971424558992014-11-262202222
491981424558992014-11-301101111
491991424558992014-12-031101111
492001424558992014-12-042202222

49201 rows × 9 columns

#根据user_id分组,并统计day的数量
ret = redata.groupby('user_id')['day'].count()
ret
user_id
4913         5
6118         1
7528         6
7591         9
12645        4..
142376113    1
142412247    7
142430177    5
142450275    8
142455899    7
Name: day, Length: 8886, dtype: int64
#获取数量大于1的数据,计算复购率
ret[ret>1].count()/ret.count()
0.8717083051991897
#实现方式2
#根据user_id分组
re_data=pdata[pdata.behavior_type==4].groupby('user_id')
re_data
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001D4D067CA50>
'''
使用apply方法对分组数据进行处理,
每个apply方法处理的user_id对应的series对象
使用unique获取唯一值
使用len方法获取长度
'''
re_data = re_data['day'].apply(lambda x:len(x.unique()))
re_data
user_id
4913         5
6118         1
7528         6
7591         9
12645        4..
142376113    1
142412247    7
142430177    5
142450275    8
142455899    7
Name: day, Length: 8886, dtype: int64
#计算复购率
re_data[re_data>1].count()/re_data.count()
0.8717083051991897

用户复购时间间隔

复购间隔:

  • 按时间排序
  • 用户第1次购物时间:day1
  • 用户第2次购物时间:day2 , 间隔:day2-day1
  • 用户第3次购物时间:day3 , 间隔:day3-day2
  • 用户第N次购物时间:dayn , 间隔:dayn-dayn-1

要求:时间间隔大于0间间隔大于0

p = pd.Series([1,2,7,4,10])
p.diff(1)
0    NaN
1    1.0
2    5.0
3   -3.0
4    6.0
dtype: float64
#删除缺省值
p.diff(2).dropna()
2    6.0
3    2.0
4    3.0
dtype: float64
#分组
userbuy=pdata[pdata.behavior_type==4].groupby('user_id')
#对天进行处理
#lambda的每个x为分组后的series对象
# series对象排序,并使用diff方法计算,并去除缺省值
day_interval = userbuy.day.apply(lambda x:x.sort_values().diff(1).dropna())
C:\Users\26822\AppData\Local\Temp\ipykernel_22972\2976211149.py:6: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.day_interval = userbuy.day.apply(lambda x:x.sort_values().diff(1).dropna())
day_interval
user_id            
4913       7829893    6 days10689246   0 days11629048   4 days3285878    2 days11629584   3 days...  
142455899  6697898    0 days9798799    4 days6698066    3 days1345137    1 days7372987    0 days
Name: day, Length: 111319, dtype: timedelta64[ns]
day_interval=day_interval.map(lambda x:x.days)
day_interval
user_id            
4913       7829893     610689246    011629048    43285878     211629584    3..
142455899  6697898     09798799     46698066     31345137     17372987     0
Name: day, Length: 111319, dtype: int64
day_interval = day_interval[day_interval>0]
day_interval
user_id            
4913       7829893     611629048    43285878     211629584    3
7528       9688333     4..
142455899  6698002     24209399     29798799     46698066     31345137     1
Name: day, Length: 40315, dtype: int64
#统计每个时间数量,并绘制柱状图
day_interval.value_counts().plot(kind='bar')
plt.title('times')
plt.xlabel('days')
_ = plt.ylabel('gap_count')


在这里插入图片描述

#用户购物行为及分组
#时间间隔大于1天
day_interval = pdata[pdata.behavior_type == 4].groupby('user_id').day.apply(lambda x:x.sort_values().diff(1).dropna())
#获取天数
day_interval = day_interval.map(lambda x:x.days)
#统计数量,并绘制柱状图
day_interval.value_counts().plot(kind='bar')
plt.title('times')
plt.xlabel('days')
_ = plt.ylabel('interval_count')
C:\Users\26822\AppData\Local\Temp\ipykernel_22972\1184355078.py:3: FutureWarning: The behavior of array concatenation with empty entries is deprecated. In a future version, this will no longer exclude empty items when determining the result dtype. To retain the old behavior, exclude the empty entries before the concat operation.day_interval = pdata[pdata.behavior_type == 4].groupby('user_id').day.apply(lambda x:x.sort_values().diff(1).dropna())

在这里插入图片描述

AARRR模型

  • Acquisition 用户获取
  • Activation 用户激活
  • Retention 提高留存
  • Revenue 增加收入
  • Referral 传播推荐

AARRR模型描述了用户/客户/访客需经历的五个环节,以便企业获取价值。

关键点:通过模型提高留存和转化率

  • 获取用户:获取用户方式,获取用户渠道,获取用户成本,用户定位等,例如:应用下载量,安装量,注册量
  • 活跃度:日活,月活,使用时长,启动次数等
  • 留存率:次日留存,周留存率,不同邻域用户,留存周期不同,例如:微博,1周未登录,可以视为流失用户;
  • 收入:APA(活跃付费用户数),ARPU(平均每用户收入), ARPPU(平均每付费用户收入);提高活跃度、提高留存率是增加收入基础。
  • 传播推荐:用户自发传播,例如平多多砍价,核心:产品过硬:产品过硬率
event_type_count = pdata.groupby('behavior_type').size()
#重置索引并修改列名
event_type_count = event_type_count.reset_index().rename(columns={0:'total'})
#重置索引
event_type_count = event_type_count.set_index('behavior_type')
event_type_count
total
behavior_type
111550581
2242556
3343564
4120205
# 将层级1视为基准
event_type_count['pre'] = (event_type_count.total/event_type_count.total[1])*100
event_type_count
totalpre
behavior_type
111550581100.000000
22425562.099946
33435642.974430
41202051.040684
字段字段说明提取说明
user_id用户标识抽样&字段脱敏(非真实ID)
item_id商品标识字段脱敏(非真实ID)
behavior_type用户对商品的行为类型包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。
user_geohash用户位置的空间标识,可以为空由经纬度通过保密的算法生成
item_category商品分类标识字段脱敏
time行为时间精确到小时级别

3 用户价值分析

RFM模型是衡量当前用户价值和客户潜在价值的重要工具和手段

  • R:最近一次消费(Recency)
  • F:消费频率(Frequency)
  • M:消费金额(Monetary)

3.1 R理解:

  • 用户最近一次消费
  • R值越小,说明用户的价值越高,例如:最近一次消费1个月,最近一次消费10个月
  • R值非常大,说明该用户可能为流失用户;

3.2 F理解:

  • 消费频率,指定时间内购买次数;
  • 问题:一些商品购买频次较低,所以会将时间忽略,以购买次数为主;
  • 不同品类产品,对F的理解不一样;例如:电子类产品频率较低;化妆品,衣服等消费品购买频次较高

3.3 M理解:

  • 一定时间范围内,用户消费金额,消费金额越大,价值越高3.3 M理解:
#计算R,最近购物时间
#排序
tmp = pdata.sort_values('day')
#过滤数据,只保留购物的数据
tmp = tmp[tmp['behavior_type']==4]
#保留最后一个值,生成bool索引,删除最后一个,对应值为Flase
tindex = tmp.duplicated(subset=['user_id'], keep='last')
#boolean索引变化, 将False设置为True
sindex = tindex == False
#获取过滤后数据
tdata = tmp[sindex]
tdata
user_iditem_idbehavior_typeuser_geohashitem_categorytimetshourday
694662249598175176268691497rjjab112702014-11-18 182014-11-18 18:00:00182014-11-18
79176591418783263798146894NaN80952014-11-18 112014-11-18 11:00:00112014-11-18
754922461454609134625812499ui5e6120672014-11-18 192014-11-18 19:00:00192014-11-18
10056408869850411058213004NaN66692014-11-18 102014-11-18 10:00:00102014-11-18
19618581124859592285348734NaN2922014-11-18 112014-11-18 11:00:00112014-11-18
..............................
3195761315142582811726634NaN15142014-12-18 102014-12-18 10:00:00102014-12-18
118885911238480071069824004956k2js117502014-12-18 142014-12-18 14:00:00142014-12-18
32271674987159847827433496kajt426312014-12-18 112014-12-18 11:00:00112014-12-18
669691413647086134783665949rf42od104722014-12-18 102014-12-18 10:00:00102014-12-18
86189138195859233230327849r5frl3132882014-12-18 172014-12-18 17:00:00172014-12-18

8886 rows × 9 columns

#数量
len(tmp.groupby('user_id'))
8886
pd.to_datetime(tdata['day'])
6946622    2014-11-18
7917659    2014-11-18
7549224    2014-11-18
10056408   2014-11-18
1961858    2014-11-18...    
319576     2014-12-18
11888591   2014-12-18
3227167    2014-12-18
6696914    2014-12-18
8618913    2014-12-18
Name: day, Length: 8886, dtype: datetime64[ns]
tdl = pd.to_datetime('2014-12-20') - pd.to_datetime(tdata['day'])
tdata['tdays'] = tdl.dt.days
tdata
SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value insteadSee the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copytdata['tdays'] = tdl.dt.days
user_iditem_idbehavior_typeuser_geohashitem_categorytimetshourdaytdays
694662249598175176268691497rjjab112702014-11-18 182014-11-18 18:00:00182014-11-1832
79176591418783263798146894NaN80952014-11-18 112014-11-18 11:00:00112014-11-1832
754922461454609134625812499ui5e6120672014-11-18 192014-11-18 19:00:00192014-11-1832
10056408869850411058213004NaN66692014-11-18 102014-11-18 10:00:00102014-11-1832
19618581124859592285348734NaN2922014-11-18 112014-11-18 11:00:00112014-11-1832
.................................
3195761315142582811726634NaN15142014-12-18 102014-12-18 10:00:00102014-12-182
118885911238480071069824004956k2js117502014-12-18 142014-12-18 14:00:00142014-12-182
32271674987159847827433496kajt426312014-12-18 112014-12-18 11:00:00112014-12-182
669691413647086134783665949rf42od104722014-12-18 102014-12-18 10:00:00102014-12-182
86189138195859233230327849r5frl3132882014-12-18 172014-12-18 17:00:00172014-12-182

8886 rows × 10 columns

#重置索引
rdata = tdata.set_index('user_id')
#设置R值
rdata['R'] = (rdata.tdays <= rdata.tdays.mean()).astype('i')
#过滤R列
rdata = rdata[['R']]
rdata
R
user_id
495981750
1418783260
614546090
869850410
1124859590
......
1315142581
1238480071
498715981
1364708611
819585921

8886 rows × 1 columns

#计算F
#根据user_id分组,并且根据购物时间进行数量统计
fdata = tmp.groupby(['user_id']).time.count()
#重置索引
fdata = fdata.reset_index()
fdata = fdata.set_index('user_id')
fdata.columns = ['F']
fdata.F = pd.qcut(fdata.F, 2,['0','1'])
fdata
F
user_id
49130
61180
75280
75911
126450
......
1423761130
1424122471
1424301770
1424502751
1424558991

8886 rows × 1 columns

# 数据集合并(R与F)
rfdata = pd.merge(rdata, fdata, left_index=True, right_index=True)
rfdata['RF'] = rfdata.R.astype(str).str.cat(rfdata.F)
rfdata
RFRF
user_id
495981750000
1418783260000
614546090000
869850410000
1124859590000
............
1315142581111
1238480071111
498715981111
1364708611111
819585921111

8886 rows × 3 columns

def func(value):v = '一般用户'if value == '00':v = '一般用户'elif value == '01':v = '重要保持'elif value == '10':v = '重要发展'elif value == '11':v = '重要价值'return vrfdata['level'] = rfdata.RF.map(func)
rfdata
RFRFlevel
user_id
495981750000一般用户
1418783260000一般用户
614546090000一般用户
869850410000一般用户
1124859590000一般用户
...............
1315142581111重要价值
1238480071111重要价值
498715981111重要价值
1364708611111重要价值
819585921111重要价值

8886 rows × 4 columns

#分组统计
rf = rfdata.groupby('RF').F.count()
#创建DataFrame对象
rf = rf.reset_index()
#修改列名
rf = rf.rename(columns = {'F':'count'})
rf
RFcount
0002540
101966
2101948
3113432
_ = rf.plot.bar(x = 'RF', y='count')


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/455975.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可拖拽表单可以用在哪些领域?

如果想要实现高效率的办公&#xff0c;可以通过低代码技术平台及可拖拽表单实现。什么服务商专业研发低代码技术平台产品&#xff1f;流辰信息拥有丰厚的研发技术功底和市场经验&#xff0c;可以助力企业做好数据管理工作&#xff0c;实现流程化办公&#xff0c;一起进入数字化…

【C语言】C的数据类型

数据类型决定&#xff1a; 1.数据所占内存字节数 2.数据取值范围 3.可以进行的操作 1. 数据类型决定&#xff1a;数据所占内存字节数 数据类型16位编译器32位编译器64位编译器int2字节4字节4字节char1字节1字节1字节float4字节4字节4字节double8字节8字节8字节 2. 数据类型决…

正点原子-STM32通用定时器学习笔记(1)

1. 通用定时器简介&#xff08;F1为例&#xff09; F1系列通用定时器有4个&#xff0c;TIM2/TIM3/TIM4/TIM5 主要特性&#xff1a; 16位递增、递减、中心对齐计数器&#xff08;计数值&#xff1a;0~65535&#xff09;&#xff1b; 16位预分频器&#xff08;分频系数&#xff…

VXLAN:虚拟化网络的强大引擎

1.什么是VXLAN VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff0c;虚拟扩展局域网&#xff09;&#xff0c;是由IETF定义的NVO3&#xff08;Network Virtualization over Layer 3&#xff09;标准技术之一&#xff0c;是对传统VLAN协议的一种扩展。VXLAN的特…

【Python 实战】---- 实现向指定PDF指定页面指定位置插入图片

1. 需求 想要能否实现批量自动为多个pdf加盖不同六格虚拟章(不改变pdf原有分辨率和文字可识别性);改在pdf首页上方空白位置,一般居中即可;如可由使用者自主选择靠页边距更好,以便部分首页上方有字的文件时人工可微调位置。2. 需求分析 直接将 pdf 文件转换为图片,在将图…

AI绘画生成器爆改“土味中式”,你的丑图有救了!

最近“爆改”一词再度流行起来&#xff0c;指对人或物的外表进行大改造&#xff0c;主打一个反差感!万物皆可“爆改”?那怎么少得了我们室内设计呢!那么今天我们就借助AI绘画生成器&#xff0c;爆改别墅样板间&#xff0c;把陈旧的中式红木风改成现在设计圈的网红“宋韵”风格…

机器学习 | 基于网格搜索的SVM超参数调节

机器学习模型被定义为一个数学模型&#xff0c;其中包含许多需要从数据中学习的参数。然而&#xff0c;有一些参数&#xff0c;称为超参数&#xff0c;这些参数不能直接学习。它们通常是由人类在实际训练开始前根据直觉或经验和试验选择的。这些参数通过提高模型的性能&#xf…

RabbitMQ-3.发送者的可靠性

发送者的可靠性 3.发送者的可靠性3.1.生产者重试机制3.2.生产者确认机制3.3.实现生产者确认3.3.1.开启生产者确认3.3.2.定义ReturnCallback3.3.3.定义ConfirmCallback 3.发送者的可靠性 首先&#xff0c;我们一起分析一下消息丢失的可能性有哪些。 消息从发送者发送消息&#…

docker部署笔记系统flatnotes

效果 安装 创建目录 mkdir -p /opt/flatnotes/data && cd /opt/flatnotes/ chmod -R 777 /opt/flatnotes/ 创建并启动容器(可以自己修改账户和密码) docker run -d \ --restart unless-stopped \ --name flatnotes \ -p "10040:8080" \ -v "/dat…

linux k8s 源码编译及单集群测试

目录 概述实践安装插件docker 在线安装containerd安装二进制安装yum安装修改containder配置文件 cnietcdrsyncgo设置golang代理 安装CFSSL下载kubernetes代码编译启动本地单节点集群问题k8s没有被正常启动该如何k8s正常启动日志测试 结束 概述 此文详细说明在 centos 7上编译 k…

情人节送什么礼物既有面又不会出错?2024年情人节礼物指南来啦!

在浪漫的情人节&#xff0c;挑选一份既能表达心意又能展现品味的礼物是许多人关注的问题。为了帮助大家轻松应对这个甜蜜的日子&#xff0c;我们特别整理了一份2024年情人节礼物推荐清单。从珠宝、护肤品到黑科技&#xff0c;每一份礼物都充满着爱意和惊喜。 1. 久戴无负担的护…

【成品论文】2024美赛B题完整成品论文23页+3小问matlab代码+数据集汇总

2024 年美国大学生数学建模竞赛&#xff08;2024 美赛&#xff09;B 题&#xff1a; 2024 MCM 问题 B: 搜寻潜水艇 题目翻译&#xff1a; Maritime Cruises Mini-Submarines (MCMS)是一家总部位于希腊的公司&#xff0c;专门制造能够携 带人类到达海洋最深处的潜水艇。潜水艇是…