【2024_CUMCM】数据预处理、数据分析、数据可视化 重采样、降采样、升采样

目录

2023-c题-问题1

问题分析 

偏度

峰度

箱线图 

读图

重采样、降采样、升采样

重采样

降采样

升采样

解题代码


2023-c题-问题1

问题分析 

问题说白了就是探究品类和销售量这两个数据他们各自内在联系,根据题意,我们先进行

据预处理,按照以往的步骤是针对缺失值、重复值、异常值。我认为这道题应该是探究特殊

,需要思考到情境下的特殊情况和特殊数据,再进行处理。然后就可以开始数据分析,通

过函数引入数量、均值、最值、百分位数、偏度、峰度等描述统计量,并通过数据可视化

如热力图、箱线图、折线图、条形图、直方图更清晰探究其关联关系。 

偏度

偏度(Skewness)是用来度量随机变量概率分布的不对称性的统计量。它可以帮助我们了解数据分布的倾斜方向和程度

当偏度 < 0 时,概率分布图左偏;当偏度 = 0 时,表示数据相对均匀地分布在平均值两侧,不一定是绝对的对称分布;当偏度 > 0 时,概率分布图右偏。

峰度

峰度(Kurtosis)是用来度量随机变量概率分布的陡峭程度的统计量。它可以帮助我们了解数据分布的尖峭或平坦程度。峰度的计算公式为:

峰度的取值范围为 [1, +∞)。完全服从正态分布的数据的峰度值为 3。峰度值越大,概率分布图越高尖;峰度值越小,越矮胖

箱线图 

是显示一组数据分散情况资料的统计图。

读图

 从图中可以看出,南山区的房价最高,南山区、宝安区、福田区等的异常值很多,说明这些地区大部分房价高于均值。

重采样、降采样、升采样

相关参数 

重采样

重采样是时间序列频率转换的过程,可以理解为调整数据的时间分辨率。在Python的Pandas库中,`resample`函数用于执行重采样操作。

重采样可以将高频数据聚合到低频率(降采样),也可以将低频数据转换为高频率(升采样)

降采样

降采样是指从大量数据中选择一部分代表性样本的过程。

降采样是将高频数据转换为低频数据的过程。在降采样时,需要考虑`closedlabel`参数,它们分别决定了时间区间的闭合端点和聚合值的标签位置。

例如,如果想要将每天的数据聚合为每月的数据,可以使用resample('M')方法,其中'M'代表月度频率。

升采样

升采样是指增加数据集中样本数量的过程。

升采样是将低频数据转换为高频数据的过程。在升采样中,主要是通过数据插值来填补缺失的值

例如,如果想要将每年的数据转换为每月的数据,可以使用resample('M')方法,并配合适当的插值方法(如ffill)来填充缺失的月份数据。

解题代码

# %%
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# %%
category = pd.read_excel('2023年数学建模C\附件1.xlsx')

# %%
data= pd.read_excel('2023年数学建模C\附件2.xlsx')

# %%
category

# %%
merge_data=pd.merge(data,category,how='left',on='单品编码')

# %%
merge_data.info()
merge_data

# %%
# 删除某列中的某个值
merge_data=merge_data[merge_data['销售类型']!='退货']

# %%
merge_data.drop(['扫码销售时间'],axis=1,inplace=True)

# %%
merge_data.drop(['是否打折销售'],axis=1,inplace=True)

# %%
merge_data.drop(['销售类型'],axis=1,inplace=True)

# %%
merge_data

# %%
# 透视表
pivot_table = merge_data.pivot_table(index='销售日期', columns='分类名称', values='销量(千克)', aggfunc='sum')
pivot_table

# %%
pivot_table.describe()

# %%
# 计算偏度
pivot_table.skew()

# %%
# 计算峰度
pivot_table.kurt()

# %%
df=pivot_table.resample('3M').sum()
df

# %%
dff=df.corr()
dff

# %%
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False

plt.rcParams['font.size'] = 12
plt.rcParams['xtick.labelsize']=12
plt.rcParams['ytick.labelsize']=12
plt.rcParams['axes.labelsize']=12
plt.rcParams['axes.titlesize']=12

# %%
plt.figure(figsize=(10, 6))
# 热力图上显示系数
sns.heatmap(dff, cmap='coolwarm', square=True, annot=True)
# sns.heatmap(dff, cmap='coolwarm', fmt=".2f", linewidths=.5, square=True, cbar_kws={"shrink": .5})
plt.title('各分类名称之间的相关系数热力图')
plt.show()

# %%
pivot_table2= merge_data.pivot_table(index='销售日期', columns='单品名称', values='销量(千克)', aggfunc='sum')
pivot_table2.describe()

# %%
pivot_table2.info()

# %%
pivot_table2

# %%
df2=pivot_table2.resample('3M').sum()

# %%
df_d=df2.describe()
df_d

# %%
# 计算峰度与偏度
s1=df2.skew()
s2=df2.kurt()
s1
d1=dict(s1)
d2=dict(s2)

# %%
df2_skew=pd.DataFrame(d1,index=['skew'],columns=s1.index)
df2_kurt=pd.DataFrame(d2,index=['kurt'],columns=s2.index)
df2_skew

# %%
# 按行合并
df_d = pd.concat([df_d, df2_skew, df2_kurt], axis=0)
df_d

# %%
# 选取前六列
dfff2 = df_d.iloc[:, :6]

# %%
# 画出折线图
dfff2.plot(kind='line', figsize=(10,8 ))
plt.title('各单品名称销量(千克)')
plt.show()

# %%
plt.figure(figsize=(10, 8))
sns.heatmap(dfff2, cmap='coolwarm', square=True, annot=True)
plt.title('各单品名称之间的相关系数热力图')
plt.show()

# %%
df_dd=pivot_table2.describe()
df_dd

# %%
label_list =df_dd.columns
# 从数据框中选择第一行数据,并使用sort_values()函数对其进行排序,使其按降序排列。
num_list1 =df_dd.iloc[0].sort_values(ascending=False)
plt.bar(label_list,num_list1)
plt.ylabel("销售数量")
plt.xticks(label_list)
plt.xlabel("单品名称")
plt.title("某公司2012-2013年前6个月出货量")
plt.legend()
plt.show()

# %%
x = df_dd.iloc[0].sort_values(ascending=False)  				#数据集
plt.boxplot(x)    				#垂直显示箱线图
plt.show()						#显示该图

# %%

 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 20:42:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 20:42:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 20:42:03       58 阅读
  4. Python语言-面向对象

    2024-07-11 20:42:03       69 阅读

热门阅读

  1. 【面试题】Golang (第一篇)

    2024-07-11 20:42:03       23 阅读
  2. vue2 使用 Socket.io 实现 WebSocket

    2024-07-11 20:42:03       24 阅读
  3. flink 大数据处理资源分配

    2024-07-11 20:42:03       19 阅读
  4. LiteOS GPIO中断处理

    2024-07-11 20:42:03       20 阅读
  5. python如何与前端交互

    2024-07-11 20:42:03       16 阅读