第一部分:折线图(实例,华为手机和小米手机2023年销售量走势(数据自拟))
代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
# 设置中文显示字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False
# 生成2023年1月至12月的销量数据(示例数据,实际销量需要根据实际情况)
np.random.seed(0) # 设置随机种子,以便结果可重复
months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
# 假设华为手机销量在500000到1000000之间,小米手机销量在300000到700000之间
huawei_sales = np.random.randint(500000, 1000000, size=12)
xiaomi_sales = np.random.randint(300000, 700000, size=12)
# 创建DataFrame
df = pd.DataFrame({
'月份': months,
'华为手机销量': huawei_sales,
'小米手机销量': xiaomi_sales
})
# 保存为Excel文件
df.to_excel('华为与小米2023年销量.xlsx', index=False)
# 绘制销售走向图
plt.figure(figsize=(10, 5)) # 设置图表大小
plt.plot(df['月份'], df['华为手机销量'], label='华为手机销量', marker='o') # 绘制华为手机销量
plt.plot(df['月份'], df['小米手机销量'], label='小米手机销量', marker='s') # 绘制小米手机销量
plt.title('2023年华为与小米手机销量走向') # 设置图表标题
plt.xlabel('月份') # 设置x轴标签
plt.ylabel('销量(台)') # 设置y轴标签
plt.legend() # 显示图例
plt.grid(True) # 显示网格
plt.show() # 显示图表
结果:
好啦!持续更新,不断总结,也希望能够帮助到大家!
第二部分:使用灰色预测,预测2024年12个月两家手机厂商的销售量
代码:
import numpy as np
import pandas as pd
from scipy.optimize import fsolve
def GM11(x, n):
"""
灰色预测模型
x:输入数据序列
n:预测步数
"""
x1 = np.cumsum(x) # 累加生成序列
z1 = (x1[:len(x1)-1] + x1[1:])/2.0 # 紧邻均值生成序列
z1 = z1.reshape((len(z1),1))
B = np.append(-z1, np.ones_like(z1), axis=1)
Y = x[1:].reshape((len(x)-1,1))
# 计算参数 a 和 u
[[a],[u]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)
# 预测数据
result = [x[0]]
for i in range(1, len(x)+n):
result.append((x[0]-u/a)*(1-np.exp(a))*np.exp(-a*(i)))
return np.array(result)
# 读取Excel文件
df = pd.read_excel('华为与小米2023年销量.xlsx')
# 提取华为和小米的销售数据
huawei_sales = df['华为手机销量'].values
xiaomi_sales = df['小米手机销量'].values
# 使用灰色预测模型预测2024年的销量(12个月)
huawei_forecast = GM11(huawei_sales, 12)
xiaomi_forecast = GM11(xiaomi_sales, 12)
# 创建2024年的月份列表
months_2024 = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
# 创建包含2024年预测数据的DataFrame
df_forecast = pd.DataFrame({
'月份': months_2024,
'华为手机预测销量': huawei_forecast[-12:].round().astype(int),
'小米手机预测销量': xiaomi_forecast[-12:].round().astype(int)
})
# 打印预测结果
print("2024年预测销量:")
print(df_forecast)
# 保存预测结果到Excel文件
df_forecast.to_excel('华为与小米2024年预测销量.xlsx', index=False)
# 绘制2023年实际销量和2024年预测销量的对比图
import matplotlib.pyplot as plt
from pylab import mpl
# 设置中文显示字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False
plt.figure(figsize=(12, 6))
# 绘制2023年实际销量
plt.plot(df['月份'], df['华为手机销量'], label='2023年华为实际销量', marker='o')
plt.plot(df['月份'], df['小米手机销量'], label='2023年小米实际销量', marker='s')
# 绘制2024年预测销量
plt.plot(df_forecast['月份'], df_forecast['华为手机预测销量'], label='2024年华为预测销量', marker='o', linestyle='--')
plt.plot(df_forecast['月份'], df_forecast['小米手机预测销量'], label='2024年小米预测销量', marker='s', linestyle='--')
plt.title('2023年实际销量与2024年预测销量对比')
plt.xlabel('月份')
plt.ylabel('销量(台)')
plt.legend()
plt.grid(True)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
效果:
解释:
下面这一部分,我使用gpt直接生成的,因为公式太难编辑了!
(1)累加生成序列
(2)均值生成序列
(3)构建矩阵方程
[[a],[u]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)
(4)预测公式
result.append((x[0]-u/a)*(1-np.exp(a))*np.exp(-a*(i)))
好啦!持续更新,不断总结,也希望能够帮助到大家!