项目代码

import pandas as pd  

from sqlalchemy import create_engine  

import numpy as np

import matplotlib.pyplot as plt  

from sklearn.linear_model import LinearRegression  

from sklearn.svm import SVR  

from sklearn.metrics import r2_score  

数据读取及存库

# 1. 创建MySQL数据库的连接,假设已经在本地搭建好了mysql数据库

engine = create_engine('mysql+mysqlconnector://root:ck1992@localhost/mydatabase')

chunksize = 100  # 可以根据实际调整,防止数据量太大。内存溢出。

def store_data():

     for chunk in pd.read_csv(r'C:\Users\ckdev\Desktop\project\total.csv', chunksize=chunksize):  

     chunk.to_sql('my_table_total', engine, if_exists='append', index=False)

#store_data()

数据集清洗及预处理

def get_data():  

    query = "SELECT * FROM my_table_total"  

    train = pd.read_sql_query(query, engine)

    return train

def clean_and_process_data():

    data_source = get_data()

    train,test = data_source.iloc[:-10],data_source.tail(10)

    train_list = []

    for items in train.values:

        item_list = [items[0].replace('/','-'),items[1],items[3],items[7],items[19]]

        train_list.append(item_list)

    train = pd.DataFrame(np.array(train_list))

    train.columns = ['date', 'requestcount', 'peoplecount', 'viewtime', 'slodcount']

    test_list=[]

    for items in test.values:

        item_list = [items[0].replace('/','-'),items[1],items[3],items[7],items[19]]

        test_list.append(item_list)

    test = pd.DataFrame(np.array(test_list))

    test.columns = ['date', 'requestcount', 'peoplecount', 'viewtime', 'slodcount']

    print(train.head())

    print(test.head())

    return train,test

#clean_and_process_data()

划分训练、测试数据集

def get_feature_model():

    train,test = clean_and_process_data()

    x_train = train.drop(['date','slodcount'], axis=1)

    y_train = train['slodcount']

    x_test = test.drop(['date','slodcount'], axis=1)

    y_test = test['slodcount']

    print(x_train.head())

    print(y_train.head())

    print(x_test.head())

    print(y_test.head())

    return x_train,y_train,x_test,y_test

#get_feature_model()

引入算法库,训练数据集,借助算法的回归、分类特点,预测测试集数据结果,将预测结果和真实结果对比,评估算法模型准确度

def evlu_train():

    x_train,y_train,x_test,y_test = get_feature_model()

   

    # 线性回归模型  

    linear_reg = LinearRegression()  

    linear_reg.fit(x_train, y_train)  

    y_pred_lin = linear_reg.predict(x_test)  

    print('y_pred_lin',y_pred_lin)

    print('y_test',y_test)

    r2_lin = r2_score(y_test, y_pred_lin)

    # 支持向量回归模型  

    svr_reg = SVR(kernel='rbf', C=100, gamma=0.1)  # 使用RBF核,并设置C和gamma参数  

    svr_reg.fit(x_train, y_train)  

    y_pred_svr = svr_reg.predict(x_test)  

    print('y_pred_svr',y_pred_svr)

    r2_svr = r2_score(y_test, y_pred_svr)  

    print('y_test',y_test)

    print(f"Linear Regression R^2: {r2_lin}")  

    print(f"Support Vector Regression R^2: {r2_svr}")

    return y_pred_lin,y_test

#evlu_train()

数据可视化,借助python库

def view_data():

    y_pred_lin,y_test = evlu_train()

    #定义x轴列表x_list用于存放数据编号,定义y轴列表用于存放预测准度百分比

    x_list,y_list = [],[]

    for i in range(len(y_test)-1):

        x_list.append(i+1)

        score = int(int(y_pred_lin[i])/int(y_test[i])*100)

        if score > 100:

            score = 200 - score

        y_list.append(score)

    print(x_list)

    print(y_list)

    # 折线图  

    plt.plot(x_list, y_list, label='Data 1')  

    # 添加标签和标题  

    plt.xlabel('X-axis')

    plt.ylabel('Y-axis')  

    plt.title('slodcount')  

    plt.legend()  

plt.show()

view_data()

电商销量预测和可视化

陈柯

摘  要:随着电子商务的飞速发展,准确预测商品销量成为企业制定营销策略、库存管理、以及物流规划等决策的重要依据。本文基于阿里云天池数据集https://tianchi.aliyun.com/dataset/132865​​​​​​

,利用数据清洗与预处理技术、特征模型建立、数据挖掘算法准确度评估等手段,对电商销量进行了预测,并通过数据可视化技术将预测结果和关键信息直观地展示出来。本研究不仅提高了电商销量预测的准确度,也为电商企业提供了有效的决策支持工具。

关键词:电商销量预测;数据挖掘;数据清洗;特征模型;数据可视化

引言

电子商务的兴起改变了传统的商业模式,使商品销售数据呈现出复杂性和多样性。为了有效应对市场变化,电商企业需要能够准确预测商品销量。本文利用机器学习算法,结合数据清洗、特征选择和模型评估等技术,对电商销量进行了深入研究,并通过数据可视化技术将预测结果展现出来。

  1. 电商销量数据集的清洗和预处理

电商销量数据集从阿里云天池平台,可从链接https://tianchi.aliyun.com/dataset/132865下载获取。该数据集记录了2016-06-01到2021-11-05每天的数据,数据集中包含电商产品的浏览量、访客数、人均浏览量、平均停留时间、跳失率、成交客户数、成交单量、成交金额、客单价、成交商品件数、成交转换率等35列数据。根据观察发现,影响销量(成交商品件数)最相关的是浏览量、访客数、平均停留时间这3列数据,所以我将从上面的35列的数据中利用数据清洗和处理技术把日期、浏览量、访客数、平均停留时间和销量这5列数据提取出来并做相应的处理[1]。该过程涉及到数据的入库和读取和数据清洗和处理两个方面,我将在下面内容中详细介绍,代码实现部分请参考附录A。

数据集的存储和读取,在电商销量的清洗和预处理之前,我们需要先把数据集存入数据库中,以防数据的丢失,也方便其他人对该数据的访问。由于数据集是规则的csv文件数据,所以选择mysql数据库表来进行存储,本项目使用python、pandas、sqlalchemy和query实现数据的存储和读取[2]。首先,使用 pandas 的 read_excel 函数从total.csv文件中读取数据,这个函数可以方便地处理各种csv文件格式。接下来,使用 sqlalchemy 的 create_engine 函数创建一个数据库引擎,该引擎用于与 MySQL 数据库建立连接。为了将 pandas DataFrame 中的数据存入 MySQL 数据库,使用 sqlalchemy 的 to_sql 方法。但在此之前,需要确保目标表已经存在,或者可以使用 sqlalchemy 的 ORM(对象关系映射)功能来自动创建表[3]。最后通过pandas的read_sql_query函数并自定义sql查询语句,实现数据的读取。数据集的清洗和预处理,通过上面的操作,我们得到一个pandas的二位数组数据[4]。但该数据包含了电商产品的浏览量、访客数、人均浏览量、平均停留时间、跳失率和成交客户数等35个方面的数据,不是我们想要的数据,这里的清洗方法是循环遍历该二位数组的1953条数据,从每条数据中取出日期、浏览量、访客数、平均停留时间和销量的数据值并存入列表,然后再把该列表放入一个另一个列表,由此形成一个新的二维数组数据,最后pandas定义一个空的df直接读取新的二维数组数据即可完成数据的清洗。通过上面的操作,我们把日期、浏览量、访客数、平均停留时间和销量这5个数据之外的数据过滤掉了,但是还有划分训练集和测试集,后续的工作无法开展,这里通过pandas的iloc函数读取后10行之外的数据形成训练集,使用tail函数读取最后10行数据形成测试集,但训练集和测试集没有列标,再次使用column函数为训练集和测试集的日期、浏览量、访客数、平均停留时间和销量分别打上标记date,requestcount,peoplecount,viewtime,slodcount。到此数据的清洗和处理工作完成,请参考图1观察效果[5]。

                          

                                                           图1 数据清洗和处理效果图

  1. 特征模型创建

特征模型的创建是从处理好的数据中提取特征和目标变量,方便后续的模型训练和算法准确度评估。代码实现部分请参考附录B,根据上面的输出结果,对于训练集,我们只需要通过pandas的drop函数从训练集把date和slodcount列删除就可得到特征x_train,使用pandas从训练集获取slodcount列数据就可得到目标变量y_train;对于测试集,使用pandas的drop函数从训练集数据把date和slodcount列删除就可得到特征x_test,使用pandas从训练集获取slodcount列数据就可得到目标变量y_test。下面是x_train,y_train,x_test,y_test的输出head,请参考图2观察特征模型效果[6]。

                           

                        

                                                              图2 特征模型效果图                 

                            

  1. 算法选择和准确度评估

在进行挖掘算法准确度评估之前,我们需要根据sklearn库支持的算法进行选择,sklearn支持预测的算法包括决策树、支持向量机、线性回归、逻辑回归和k临近值等[7]。代码实现部分请参考附录C,本项目使用sklearn库线性回归和支持向量回归做数据挖掘,其中支持向量回归和线性回归使用R²分数来评估算法模型准确性(R²衡量了模型对数据的拟合程度。其值范围在0到1之间,其中1表示模型完美地拟合了数据,而0表示模型没有提供比简单平均值更好的预测)。根据其中准确性较高的算法来进行数据挖掘,根据图3,我们发现线性回归R²分数为0.925,准确度较高;而支持向量回归的R²分数为-1.35,准确度极差。所以sklearn线性回归跟特征模型很匹配,选择其来进行模型训练和预测[8]。

                           

                                                           图3 支持向量回归和线性回归R²分数

  1. 模型训练及销量预测

模型训练需要把训练特征和训练目标变量导入算法模型进行训练,而销量预测需要把测试特征导入模型从而获取预测值。代码实现部分请参考附录C,根据上面的算法选择结果,我们使用sklearn库的线性回归函数LinearRegression来做模型训练,首先使用LinearRegression的方法fit分别导入x_train和y_train完成模型训练,然后使用其predict函数并导入测试特征x_test可获取预测结果,根据图4的输出结果,可以看到预测值y_pred_lin和真实值y_test的具体数值。y_pred_lin值为65720、58424、50939、57605、162038、127157、115432、147748、81564、69735,去掉了小数部分。y_test值为70933、61350、50947、49439、166430、158939、122303、157298、75303、52268。最后通过pandas把y_pred_lin和y_test以及日期写进数据库,保存其预测结果,方便后续进行数据可视化[9]。

                                    

                                   

                                                                     图4 销量预测值和真实值图        

  1. 数据可视化

数据可视化需要展示预测的准确度,代码实现部分请参考附录D,x轴为2021-10-27到2021-11-4这9天的数据,简单标记为1、2、3、4、5、6、7、8、9。y轴为销量预测的准确度(0-100),通过循环遍历y_pred_lin和y_test,如果y_pred_lin小于等于y_test,直接计算y_pred_lin占y_test的百分比然后乘以100,如果y_pred_lin大于y_test,则计算用2倍y_test与y_pred_lin的差值占y_test的百分比然后乘以100。然后再用Matplotlib可视化库的折线图进行展示,请参考图5[10]。

                           

                                                                        图5 销量预测准确度分布图

          

                                                                           图6 销量预测图

          

                                           图7 真实销量图

  1. 结论

 本文基于阿里云天池数据集,对电商销量预测进行了深入研究。通过数据清洗与预处理、特征模型建立、数据挖掘算法准确度评估等步骤,我们成功地建立了预测模型,并对销量进行了准确预测。同时,我们还利用数据可视化技术将预测结果和关键信息直观地展示出来。未来,我们将进一步探索更先进的机器学习算法和数据可视化技术,以提高电商销量预测的准确性和实用性。

参考文献

  1. 龙宇,张童童.Pandas在模拟训练器材统计中的应用[J].福建电脑,2024,40(03):60-64.DOI:10.16707/j.cnki.fjpc.2024.03.012.
  2. 胡世洋,刘威.基于Pandas的农产品产销数据预处理研究[J].电脑知识与技术,2023,19(30):55-58.DOI:10.14004/j.cnki.ckt.2023.1589.
  3. 华振宇.两个Python第三方库:Pandas和NumPy的比较[J].电脑知识与技术,2023,19(01):71-73+76.DOI:10.14004/j.cnki.ckt.2023.0041.
  4. 林海,叶小玲.Sklearn数据挖掘技术在职业院校人才招聘中的应用[J].现代计算机,2020,(24):20-26.
  5. 屠海彪,颜亦磊,刘凯锐,等.一种高效的支持向量机回归补偿算法[J].信息技术与信息化,2021,(11):36-42.
  6. 王凯文,李宏滨.基于多元线性回归的空气质量指数预测模型[J].信息记录材料,2024,25(02):1-3+7.DOI:10.16009/j.cnki.cn13-1295/tq.2024.02.008.
  7. 谯衡,伍华骅,薛剑波,等.基于多元线性回归的年度销量预测方法[J].商业观察,2024,10(06):111-114.
  8. 邹心怡.基于多元线性回归模型的赣州市PM_(2.5)质量浓度模拟[J].科技与创新,2024,(08):133-135.DOI:10.15913/j.cnki.kjycx.2024.08.039..
  9. 皇锦展.基于机器学习的复合式干法分选机分选指标预测研究[D].中国矿业大学,2023.DOI:10.27623/d.cnki.gzkyu.2023.001294.
  10. 陆凡.基于Matplotlib的高互动性可视化系统设计与实现[J].信息与电脑(理论版),2023,35(15):17-20.

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐