# # 一、 导入项目
import pandas as pd
#
# # 文件路径为python文件位置下的相对路径
dwx = pd.read_excel("电商案例数据及数据说明/驱虫剂市场/电蚊香套装市场近三年交易额.xlsx", )
fmfz = pd.read_excel("电商案例数据及数据说明/驱虫剂市场/防霉防蛀片市场近三年交易额.xlsx")
msmc = pd.read_excel("电商案例数据及数据说明/驱虫剂市场/灭鼠杀虫剂市场近三年交易额.xlsx")
mz = pd.read_excel("电商案例数据及数据说明/驱虫剂市场/盘香灭蟑香蚊香盘市场近三年交易额.xlsx")
wxq = pd.read_excel("电商案例数据及数据说明/驱虫剂市场/蚊香加热器市场近三年交易额.xlsx")
wxp = pd.read_excel("电商案例数据及数据说明/驱虫剂市场/蚊香片市场近三年交易额.xlsx")
wxy = pd.read_excel("电商案例数据及数据说明/驱虫剂市场/蚊香液市场近三年交易额.xlsx")
# # 使用head()方法查看前5行数据
# print(dwx.head())
# # 使用tail()方法查看后5行数据
# print(dwx.tail())
# # 使用info()方法查看数据的字段及类型
# dwx.info()
#
#
# 用sum方法汇总数据
dwx_all = dwx['交易金额'].sum() # 汇总单张表格数据
fmfz_all = fmfz['交易金额'].sum()
msmc_all = msmc['交易金额'].sum()
mz_all = mz['交易金额'].sum()
wxq_all = wxq['交易金额'].sum()
wxp_all = wxp['交易金额'].sum()
wxy_all = wxy['交易金额'].sum()
# 二、合并数据
# 将7张表格的数据汇总并形成一张表
m_sum = pd.DataFrame(data=[dwx_all, fmfz_all, msmc_all, mz_all, wxq_all, wxp_all, wxy_all], columns=['销售额'],
index=['电蚊香', '防霉防蛀', '灭鼠灭虫', '灭蟑', '蚊香加热器', '蚊香片', '蚊香液'])
m_sumtext = pd.DataFrame(data=[dwx_all, fmfz_all, msmc_all, mz_all, wxq_all, wxp_all, wxy_all], columns=['销售额'],
index=['电蚊香', '防霉防蛀', '灭鼠灭虫', '灭蟑', '蚊香加热器', '蚊香片', '蚊香液'])
print(m_sum)
print(m_sumtext)
# 三、 补齐数据
dwx.rename(columns={'交易金额': '电蚊香'}, inplace=True)
fmfz.rename(columns={'交易金额': '防霉防蛀'}, inplace=True)
msmc.rename(columns={'交易金额': '灭鼠灭虫'}, inplace=True)
mz.rename(columns={'交易金额': '灭蟑'}, inplace=True)
wxq.rename(columns={'交易金额': '蚊香加热器'}, inplace=True)
wxp.rename(columns={'交易金额': '蚊香片'}, inplace=True)
wxy.rename(columns={'交易金额': '蚊香液'}, inplace=True)
# 开始合并数据
d = pd.merge(dwx, fmfz, on='时间')
for df in [msmc, mz, wxq, wxp, wxy]:
d = pd.merge(d, df, on='时间')
print(d)
print(d.head())
print(d.tail())
# 补齐缺失月份数据
# 预测一个叶子行业的12月数据
# 索引2017年12月分数据
t17 = d.where(d.时间 == '2017-12-1').dropna()
# 同理将2016年12月和2015年12月的数据也索引出来
t16 = d.where(d.时间 == '2016-12-1').dropna()
t15 = d.where(d.时间 == '2015-12-1').dropna()
# 将2015年,2016年,2017年三年的数据合并
t4 = pd.concat([t17, t16, t15])
# 由于我们的目的是用2015-2017年3年的12月份数据来进行回归建模,预测2018年12月数据
# 因此,此处我们选用2015,2016,2017作为x变量,每一年12月份的数据作为y变量
y = t4.drop('时间', axis=1)
# 设置x轴的年份。
x = [2017, 2016, 2015]
# 使用回归算法预测,先加载numpy和sklearn库。
import numpy as np
from sklearn import linear_model
# 将数据处理成回归模型所需要的形式。
x_train = np.array(x).reshape(-1, 1)
y_train = np.array(y.iloc[:, 0])
# 将线性模型实例化。
linear_reg = linear_model.LinearRegression()
# 训练模型。
linear_reg.fit(x_train, y_train)
# 输入自变量2018,预测2018年12月份的销售额。
y_2018_12 = linear_reg.predict(np.array([2018]).reshape(-1, 1)).round(1)
# 输出预测结果。
print(y_2018_12[0])
y_12 = []
for i in range(7):
y_train = np.array(y.iloc[:, i])
linear_reg = linear_model.LinearRegression()
linear_reg.fit(x_train, y_train)
y_pre = linear_reg.predict(np.array([2018]).reshape(-1, 1)).round(1)
y_12.append(y_pre[0])
# 打印2018年个叶子行业12月份的预测结果。
print("打印2018年个叶子行业12月份的预测结果")
print(y_12)
# 预测11月的数据
# 提取2015到2017年11月的数据。
t1 = d.where(d.时间 == '2017-11-1').dropna()
t2 = d.where(d.时间 == '2016-11-1').dropna()
t3 = d.where(d.时间 == '2015-11-1').dropna()
t = pd.concat([t1, t2, t3])
y1 = t.drop('时间', axis=1)
# 写FOR循环,得到2018年所有类目11月份的预测值。
y_11 = []
for i in range(7):
y1_train = np.array(y1.iloc[:, i])
linear_reg = linear_model.LinearRegression()
linear_reg.fit(x_train, y1_train)
y_pre = linear_reg.predict(np.array([2018]).reshape(-1, 1)).round(1)
y_11.append(y_pre[0])
# 打印2018年叶子行业11月份的预测结果。
print("得到2018年所有类目11月份的预测值")
print(y_11)
import datetime
a1 = datetime.datetime.strptime('2018-11-1', '%Y-%m-%d')
y_11.insert(0, a1)
print(y_11)
a2 = datetime.datetime.strptime('2018-12-1', '%Y-%m-%d')
y_12.insert(0, a2)
print(y_12)
d.iloc[34] = y_12
d.iloc[35] = y_11
print(d.tail())
d.sort_values(by='时间', ascending=False, inplace=True)
d.reset_index(inplace=True)
del d['index']
print(d.head())
d2 = d.drop('时间', axis=1)
d['col_sum'] = d2.apply(lambda x: x.sum(), axis=1)
print(d.head())
print("_______________")
# 将 '时间' 列转换为日期时间类型
d['时间'] = pd.to_datetime(d['时间'])
# 提取 '时间' 列中的年份并存储在 'year' 列中
d['year'] = d['时间'].apply(lambda x: x.year)
# 对除 'year' 和 '时间' 外的其他列进行分组求和操作
data_sum = d.drop(columns=['时间']).groupby('year').sum()
print(data_sum)
import matplotlib.pyplot as plt
year = list(data_sum.index)
x = range(len(year))
y = data_sum['col_sum']
with plt.style.context('ggplot'):
pl = plt.figure(figsize=(8, 6))
plt.rcParams['font.family'] = ['SimHei']
plt.plot(x, y)
plt.title("近三年驱虫机市场趋势图")
plt.xlabel('year')
plt.ylabel('交易额')
plt.xticks(x, year, fontsize=9, rotation=45)
plt.show()
with plt.style.context('ggplot'):
pl = plt.figure(figsize=(8, 6))
plt.rcParams['font.family'] = ['SimHei']
plt.plot(x, data_sum.iloc[:, 0])
plt.plot(x, data_sum.iloc[:, 1])
plt.plot(x, data_sum.iloc[:, 2])
for a, b in zip(x, data_sum.iloc[:, 2]):
plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', fontsize=8)
plt.rcParams['font.family'] = ['SimHei']
plt.plot(x, data_sum.iloc[:, 3])
plt.plot(x, data_sum.iloc[:, 4])
plt.plot(x, data_sum.iloc[:, 5])
plt.plot(x, data_sum.iloc[:, 6])
# 绘制驱虫市场各子市场占比趋势图
data_percentage = data_sum.copy()
for i in range(3):
data_percentage.iloc[i] = round(data_percentage.iloc[i] / data_percentage.iloc[i, -1] * 100, 2)
del data_percentage['col_sum']
with plt.style.context('ggplot'):
pl = plt.figure(figsize=(8, 6))
plt.plot(x, data_percentage.iloc[:, 0])
plt.plot(x, data_percentage.iloc[:, 1])
plt.plot(x, data_percentage.iloc[:, 2])
for a, b in zip(x, data_percentage.iloc[:, 2]):
plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', fontsize=8)
plt.plot(x, data_percentage.iloc[:, 3])
plt.plot(x, data_percentage.iloc[:, 4])
plt.plot(x, data_percentage.iloc[:, 5])
plt.plot(x, data_percentage.iloc[:, 6])
for a, b in zip(x, data_percentage.iloc[:, 6]):
plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', fontsize=8)
plt.title('近三年驱虫市场各子市场占比趋势')
plt.xlabel('year')
plt.ylabel('交易额')
plt.xticks(x, year, fontsize=9, rotation=45)
plt.legend(['电蚊香', '防霉防蛀', '灭鼠灭虫', '灭蟑', '蚊香加热器', '蚊香片', '蚊香液'])
plt.show()
2025.01.15python商业数据分析
2301_809177472024-12-28 18:47
相关推荐
minstbe几秒前
AI开发 - 算法基础 递归 的概念和入门(二)汉诺塔问题 递归的应用和使用注意 - Pythonweb1478621072315 分钟前
Python毕业设计选题:基于django+vue的疫情数据可视化分析系统岁月如歌,青春不败24 分钟前
HMSC联合物种分布模型susu108301891127 分钟前
python中Windows系统使用 pywin32 来复制图像到剪贴板,并使用 Selenium 模拟 Ctrl+V 操作Pocker_Spades_A29 分钟前
阿里云-通义灵码:在 PyCharm 中的强大助力(下)言之。31 分钟前
【Java】面试题 并发安全 (1)m0_7482345231 分钟前
2025最新版Java面试八股文大全chengxuyuan1213_37 分钟前
Python有哪些常用的库小白—人工智能1 小时前
有一个4*5的矩阵如下,要求编写程序计算总和与平均值,并找出其中值最大的那个元素输出,以及其所在的行号和列号。xiaosannihaiyl241 小时前
Scala语言的函数实现