2023高教社数学建模国赛C题 - 蔬菜类商品的自动定价与补货决策(数据预处理部分)附详细代码

C题用到了vlookup函数将所有数据同类项进行合并,公式如下:

单品类:=VLOOKUP(C2,[附件1.xlsx]Sheet1!A$2:D$252,2,FALSE)
大类: =VLOOKUP(C2,[附件1.xlsx]Sheet1!A$2:D$252,4,FALSE)
批发价格: =VLOOKUP(C2,[附件3.xlsx]Sheet1!B$2:C$55983,2,FALSE)
单品损耗率: =VLOOKUP(H2,[附件4.xlsx]Sheet1!B$2:CS252,2,FALSE)

价格=单位成本*(1+加成率)

单位成本=(固定成本总额+变动成本总额)

加成率=(固定成本总额+变动成本总额)销售量×1+售价-进价进价)

所以带入到excel中的计算公式如下:

=((J2*D2+K2/100*D2)/D2)*(1+(E2-J2)/J2)

我们得到表格如下图所示:

附件 1 6 个蔬菜品类的商品信息 (数据无异常) 附件 2 销售流水明细数据附件 3 蔬菜类商品的批发价格附件 4 蔬菜类商品的近期损耗率注 (1) 附件 1 中,部分单品名称包含的数字编号表示不同的供应来源。

(2) 附件 4 中的损耗率反映了近期商品的损耗情况,通过近期盘点周期的数据计算得到。

相关库导入

In

 [122]:

i

m

p

o

r

t

pandas

a

s

pd

i

m

p

o

r

t

numpy

a

s

np

i

m

p

o

r

t

matplotlib

.

pyplot

a

s

plt

i

m

p

o

r

t

matplotlib

i

m

p

o

r

t

seaborn

a

s

sns

i

m

p

o

r

t

warnings

warnings

.

filterwarnings

(

"ignore"

)

            

#忽略警告信息

plt

.

rcParams

[

'font.sans-serif'

]

=

[

'SimHei'

]

myfont

=

matplotlib

.

font_manager

.

FontProperties

(

fname

=

r"simhei.ttf"

)

导入数据集

In

 [4]:

In

 [5]:

In

 [6]:

In

 [7]:

df1

=

pd

.

read_excel

(

r"附件1.xlsx"

)

df2

=

pd

.

read_excel

(

r"附件2.xlsx"

)

df3

=

pd

.

read_excel

(

r"附件3.xlsx"

)

df4

=

pd

.

read_excel

(

r"附件4.xlsx"

)

数据查看

In

 [9]:

单品编码

单品名称

分类编码

分类名称

df1

.

head

(

)

Out[9]:

0   102900005115168           牛首生菜 1011010101

花叶类

1      102900005115199 四川红香椿 1011010101

花叶类

2    102900005115625 本地小毛白菜 1011010101

花叶类

3   102900005115748               白菜苔 1011010101

花叶类

4   102900005115762                  苋菜 1011010101

花叶类

 [11]:

Out[11]:

0

1

2

3

4

销售日期

2020-07-01 00:00:00

2020-07-01 00:00:00

2020-07-01 00:00:00

2020-07-01 00:00:00

2020-07-01 00:00:00

df2

.

head

().

T

扫码销售时间

09:15:07.924

09:17:27.295

09:17:33.905

09:19:45.450

09:20:23.686

单品编码

102900005117056

102900005115960

102900005117056

102900005115823

102900005115908

销量(千克)

0.396

0.849

0.409

0.421

0.539

销售单价(/千克)

7.6

3.2

7.6

10.0

8.0

销售类型

销售

销售

销售

销售

销售

In

 [12]:

是否打折销售

0

1

2

3

4

日期

2020-07-01 00:00:00

2020-07-01 00:00:00

2020-07-01 00:00:00

2020-07-01 00:00:00

2020-07-01 00:00:00

df3

.

head

().

T

Out[12]:

                                  单品编码 102900005115762          102900005115779       102900005115786      102900005115793                                                     102900005115823

In

 [13]:

批发价格

(

/

千克

)

3.88

6.72

3.19

9.24

7.03

0

1

2

3

4

小分类编码

101

1010201

101

1010402

101

1010101

101

1010801

101

1010504

df4

.

head

().

T

Out[13]:

                                                   小分类名称           花菜类 水生根茎类           花叶类          食用菌          辣椒类

                    平均损耗率(%)_小分类编码_不同值           15.51               13.65               12.83                 9.45                 9.24

问题1 蔬菜类商品不同品类或不同单品之间可能存在一定的关联关系,请分析蔬菜各品类及单品销售量的分布规律及相互关系。

In

 [68]:

<

class 'pandas.core.frame.DataFrame'

>

RangeIndex: 878503 entries, 0 to 878502

解题思路:提取蔬菜各类销售数据,对蔬菜品类各品类(/单品),进行描述性统计or可视化绘制散点、柱状图等,

检验正态性,正态使用皮尔逊,不是正态就使用斯皮尔曼。

df2

.

info

(

)

Data columns (total 7 columns):

#   Column      Non-Null Count   Dtype        

---  ------      --------------   -----        

  1. 销售日期        878503 non-null  datetime64[ns]
  2. 扫码销售时间      878503 non-null  object       
  3. 单品编码        878503 non-null  int64        
  4. 销量(千克)      878503 non-null  float64      
  5. 销售单价(元/千克)  878503 non-null  float64      
  6. 销售类型        878503 non-null  object       
  7. 是否打折销售      878503 non-null  object        dtypes: datetime64[ns](1), float64(2), int64(1), object(3)

In

 [82]:

In

 [137]:

memory usage: 46.9+ MB

#蔬菜单销量(按月份统计)

df_1

=

df2

.

iloc

[

:

,

[

0

,

2

,

3

,

4

,

5

]

]

df_1

=

df_1

[

df_1

[

'销售类型'

]

!

=

'退货'

]

#销售量,所以退货不考虑

# (每年每月销售量)

df_1

[

'月份'

]

=

df_1

[

'销售日期'

].

dt

.

month

df_1

[

'年月'

]

=

df_1

[

'销售日期'

].

dt

.

strftime

(

'%Y-%m'

)

销售日期

单品编码

销量

(

千克

)

销售单价

(

/

千克

)

销售类型

月份

年月

0

2020-07-01

1029000051

17056

0.396

7.6

销售

7

2020-07

 [138]: df_1 Out[138]:

    1. 2020-07-01     102900005115960  0.849 3.2      销售 7           2020-07
    2. 2020-07-01     102900005117056  0.409 7.6      销售 7           2020-07
    3. 2020-07-01     102900005115823  0.421 10.0    销售 7           2020-07
    4. 2020-07-01     102900005115908  0.539 8.0      销售 7           2020-07

                            ...                    ...                                ...                  ...                               ...                ...        ...               ...

  1. 2023-06-30     102900005115250  0.284 24.0    销售 6           2023-06
  2. 2023-06-30     102900011022764  0.669 12.0    销售 6           2023-06
  3. 2023-06-30     102900005115250  0.125 24.0    销售 6           2023-06
  4. 2023-06-30     102900011016701  0.252 5.2      销售 6           2023-06
  5. 2023-06-30     102900011022764  0.803 12.0    销售 6           2023-06

878042 rows × 7 columns

单品编码

单品名称

分类名称

#品类表

df1_data

=

df1

.

iloc

[:

,

[

0

,

1

,

3

]]

df1_data

In [159]: Out[159]:

0

102900005115168

牛首生菜

花叶类

1

102900005115199

四川红香椿

花叶类

2

102900005115625

本地小毛白菜

花叶类

3

102900005115748

白菜苔

花叶类

4

102900005115762

苋菜

花叶类

...

...

...

...

246

106958851400125

海鲜菇(袋)(4)

食用菌

247

106971533450003

海鲜菇(包)

食用菌

248

106971533455008

海鲜菇(袋)(3)

食用菌

249

106973223300667

虫草花(盒)(2)

食用菌

250

106973990980123

和丰阳光海鲜菇(包)

食用菌

251 rows × 3 columns

In

 [160]:

单品编码

销量

(

千克

)

月份

0

1029000051

17056

0.396

7

df_1

.

iloc

[

:

,

[

1

,

2

,

5

]

]

Out[160]:

  1. 102900005115960    0.849 7
  2. 102900005117056    0.409 7
  3. 102900005115823    0.421 7
  4. 102900005115908    0.539 7

                            ...                                ...                  ...         ...

  1. 102900005115250     0.284 6
  2. 102900011022764     0.669 6
  3. 102900005115250     0.125 6
  4. 102900011016701     0.252 6
  5. 102900011022764     0.803 6

878042 rows × 3 columns

 [161]:

In

 [158]:

Out[158]:

单品编码

分类名称

#表合并(添加品类信息)

data

=

pd

.

merge

(

df_1

.

iloc

[:

[

,

1

,

2

,

5

,

]]

df1_data

,

on

=

"单品编码"

,

how

=

"left"

)

df1_data

# df_1

0

102900005115168

花叶类

1

102900005115199

花叶类

2

102900005115625

花叶类

3

102900005115748

花叶类

4

102900005115762

花叶类

...

...

...

246

106958851400125

食用菌

247

106971533450003

食用菌

248

106971533455008

食用菌

249

106973223300667

食用菌

250

106973990980123

食用菌

251 rows × 2 columns

探究蔬菜各品类

In

 [162]:

单品编码

销量

(

千克

)

月份

单品名称

分类名称

0

1029000051

17056

0.396

7

泡泡椒

(

精品

)

辣椒类

df_1_data1

=

data

.

pivot_table

(

index

=

"月份"

,

columns

=

"分类名称"

,

values

=

"销量(千克)"

,

aggfunc

=

[

np

.

sum

,

]

fill_value

=

0

)

In [163]: data Out[163]:

  1. 102900005115960    0.849 7         大白菜 花叶类
  2. 102900005117056    0.409 7 泡泡椒(精品) 辣椒类
  3. 102900005115823    0.421 7         上海青 花叶类
  4. 102900005115908    0.539 7         菜心 花叶类

                            ...                                ...                  ...        ...                      ...                ...

  1. 102900005115250     0.284 6 西峡花菇(1) 食用菌
  2. 102900011022764     0.669 6         长线茄         茄类
  3. 102900005115250     0.125 6 西峡花菇(1) 食用菌
  4. 102900011016701     0.252 6 芜湖青椒(1) 辣椒类
  5. 102900011022764     0.803 6         长线茄         茄类
  6. rows × 5 columns

 [164]:

df_1_data1

Out[164]:

sum

                           分类名称 水生根茎类 花叶类 花菜类 茄类                  辣椒类 食用菌

月份

  1. 6092.274 17857.651    4103.958      1799.962      10205.431    9827.299
  2. 4065.083 14572.100    3437.325      1850.245      9684.989      7594.469
  3. 2516.076 13915.576    2579.784      1561.455      8915.800      5732.215
  4. 1395.519 13553.790    2533.346      1828.698      7392.322      4684.421
  5. 887.212   14104.847    2704.914      2477.506      6618.500      4054.720
  6. 1198.471 13297.080    2495.009      2568.890      5944.559      3913.553
  7. 2740.537 17398.938    4471.245      2900.921      6140.154      4514.817
  8. 4507.877 24516.036    4926.903      2736.189      9886.956      5298.255
  9. 3773.185 18738.509    3594.150      1518.448      6760.253      5063.409
  10. 4938.264 19239.292    3911.686      1402.145      7949.724      8547.848
  11. 3592.062 14944.403    3884.538      937.199        6162.623      8159.765 12 4900.992      16521.331    3146.919      860.461        5983.801      8740.955

In

 [112]:

In

 [116]:

Out[116]:

col

=

[]

f

o

r

i

i

n

df_1_data1

.

columns

:

   

i

=

i

[

1

]

   

i

=

str

(

i

)

   

col

.

append

(

''

.

join

(

i

))

df_1_data1

.

columns

=

col

# df_1_data1.reset_index()

df_1_data1

                                   水生根茎类 花叶类 花菜类 茄类                  辣椒类 食用菌

月份

  1. 6092.274        17857.651    4103.958      1799.962      10205.431    9827.299
  2. 4065.083        14572.100    3437.325      1850.245      9684.989      7594.469
  3. 2516.076        13915.576    2579.784      1561.455      8915.800      5732.215
  4. 1395.519        13553.790    2533.346      1828.698      7392.322      4684.421
  5. 887.212           14104.847    2704.914      2477.506      6618.500      4054.720
  6. 1198.471         13297.080    2495.009      2568.890      5944.559      3913.553
  7. 2740.537        17398.938    4471.245      2900.921      6140.154      4514.817
  8. 4507.877        24516.036    4926.903      2736.189      9886.956      5298.255
  9. 3773.185        18738.509    3594.150      1518.448      6760.253      5063.409
  10. 4938.264        19239.292    3911.686      1402.145      7949.724      8547.848
  11. 3592.062        14944.403    3884.538      937.199        6162.623      8159.765
  12. 4900.992        16521.331    3146.919      860.461        5983.801      8740.955
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布凯彻-劳斯基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值