2025.01.15python商业数据分析

复制代码
# # 一、 导入项目
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()
相关推荐
GGGGGGGGGGGGGG.11 分钟前
使用dockerfile创建镜像
java·开发语言
请为小H留灯11 分钟前
Python中很常用的100个函数整理
开发语言·python
达斯维达的大眼睛40 分钟前
QT小项目-简单的记事本
开发语言·qt
轩宇^_^41 分钟前
C++ 类与对象的实际应用案例详解
开发语言·c++
oioihoii42 分钟前
从零到多页复用:我的WPF MVVM国际化实践
开发语言·c#·wpf
c7_ln1 小时前
编程视界:C++命名空间
开发语言·c++·笔记
七月初七771 小时前
Excel多级联动下拉菜单设置
python·excel·pandas
Serendipity_Carl1 小时前
Pandas数据清洗实战之清洗猫眼电影
python·pycharm·数据分析·pandas
Serendipity-Solitude1 小时前
c++中的数学函数库(少)
开发语言·c++
.昕..2 小时前
(二)seacmsv9注入管理员账号密码+orderby+limit
python·网络安全