基于python某汽车销量数据分析系统的设计与实现_第1页
基于python某汽车销量数据分析系统的设计与实现_第2页
基于python某汽车销量数据分析系统的设计与实现_第3页
基于python某汽车销量数据分析系统的设计与实现_第4页
基于python某汽车销量数据分析系统的设计与实现_第5页
已阅读5页,还剩21页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

[17],但这个模型的弊端是数据准备、预处理、参数调整的过程较为繁琐耗时,而AutoARIMA省去了序列平稳化、确定d值、创建ACF值和PACF图,确定p值和q值的过程,让整个过程简单了很多。本文试图通过建立模型预测比亚迪汽车2024年的销量。详细代码可在附录A查看。4.1数据预处理 首先导入数据处理库pandas、科学计算库numpy、绘图库matplotlib和seaborn以及statsmodels库。AutoARIMA模型在statsmodels库中已经封装好。导入数据之后需要对数据进行处理,主要包括:删除无关的列,只保留销量列;对时间列处理成“2015年01月”这样的格式,并将时间列作为索引列。 新的DataFrame格式如图4-1所示:图4-1当然,上图只是展示了数据的样式,并没有展示所有的数据。 接下来再使用df.isnull().sum()方法查看数据缺失值,结果返回了0,发现不存在缺失值。4.2查看时序分布图 调用pandas的绘图方法(效果和matplotlib绘图一样)绘制时序分布图,代码如下:plt.figure(figsize=(12,5))df.sales.plot(rot=30)plt.show()时序分布图如图4-2所示:图4-2 观察上图可以发现,比亚迪汽车的销量数据存在趋势性与季节性,判断数据为非平稳的时间序列,且波幅大小有变化,需要对原数据进行处理。 接下来,将index转换为DatetimeIndex,使用pandas的DatetimeIndex方法。4.3划分训练集与测试集 选取2023年的12个月数据为测试集,其余为训练集,关键代码如下:df_train=df.iloc[:-12,]df_test=df.iloc[-12:,]4.4周期性分析和平稳性分析 seasonal_decompose函数可以分解时间序列,提取序列的趋势、季节和随机效应, 绘制的图表如图4-3所示:图4-3由上图可知,比亚迪汽车的销量整体呈上升趋势,序列具有周期长度为12个月的季节变动,序列的残差基本稳定。当原序列的前后数值相差较大或者数量级相差较大时,一般取对数将指数趋势转化为线性趋势,而且还不会改变变量之间的统计性质,同时得到较平稳的序列。接下来,对原数据取对数并再次查看时序分布图,时序分布图如图4-4所示:图4-4与原序列相比,对数变换后的时间序列的波幅基本一致了,仍然存在趋势性与季节性。4.5建立模型 AutoARIMA与SARIMAX相比则无需手动遍历参数,较为方便。其通用步骤为加载数据、预处理数据(输入单变量,删除其他列)、拟合AutoARIMA(在单变量序列上拟合模型)、在验证集上进行预测(对验证集进行预测)、计算RMSE(用验证集上的预测值和实际值检查RMSE值)。 建模结果如图4-10所示:图4-5 得到的模型为SARIMAX(1,0,1)x(1,0,[1,2],12)。4.6预测销量 预测的时间段为2023年1月至2024年12月,其中2023年的预测数据主要用于和现有数据做对比。打印预测值的rmse值,为45527.69,说明预测月销量与真实月销量相差45527.69辆,预测效果较好。再次查看时序预测图,如图4-6所示:图4-6 由图中可以看出,预测的销量数据均在95%置信区间内,2024年的销量呈现出平稳趋势,未出现销量大增或骤减的情况。5可视化大屏5.1搭建Flask框架 Flask是一个基于Python的Web开发框架,它以灵活、微框架著称REF_Ref162743919\r\h[18],基于werkzeug的轻量级web框架,可提高web应用的开发效率。首先,需要实例化一个Flask对象,然后设置一个路由,路由就是处理url到Python函数之间关系的程序,在Flask框架中通过@app.route装饰器来表示。也就是说,客户端将请求发送给web服务器,web服务器再将请求发送给Flask程序示例,程序示例需要知道每个url请求要运行哪些代码,所以需要建立一个url到python函数的映射。最基本的flask程序如下:fromflaskimportFlask#从flask包中导入Flask类app=Flask(__name__)#创建一个Flask对象@app.route('/')#@app.route是一个装饰器defhello_world():return'helloFlask!'if__name__=='__main__':#启动这个WEB服务app.run()#默认为5000端口本文在路由(也就是装饰器@app.route)下定义了一个index函数,函数接收了make_tables.py文件或者说模块中写好的制作图表的函数,将接收到的数据Flask的方法处理好之后传递给前端模板index.html。模板是一个包含响应文本的文件(通常是html文件),模板中允许包含“占位变量”来表示动态的内容,“占位变量”最终会被真实的值所替换,模板最终也会被解析成响应的字符串,这一过程称为“渲染”。本文还专门写了一个CSS层叠样式表的文件,用于index.html文件的页面布局、调整位置和大小等。CSS文件的部分代码如下 :#left1{position:absolute;width:50%;hieght:50%;top:10%;left:0}5.2创建pyecharts图表制作程序本文单独创建了一个用于制作pyecharts图表的python文件make_tables,该文件中读取了carsales.csv文件数据,并调用pyecharts模块制作了图表,并在函数中将图表返回。该文件只负责制作图表,制作好的图表交由主程序调用即可。这样做的好处是方便代码的阅读和维护,使框架的逻辑更为清晰,不至于混乱。在主程序app.py中调用make_tables中的方法的关键代码如图5-1所示:图5-15.3实现前后端数据交互前端的数据展示部分,本文利用了单独的css文件index.css对页面进行了布局,同时由于需要制作pyecharts图表,本文还下载并调用了echart.js文件以对主页面index.html进行图表展示。在index.html中,在<head>标签下通过<script>标签导入了echarts.js文件,通过<link>标签导入了层叠样式表css文件index.css。在index.html的<body>标签下定义了8个div标签,用于存放图表,并给每个div标签定义了一个唯一的id属性。如图5-2所示:图5-25.4可视化大屏展示运行主程序05app.py,05是基于对程序的编号,运行界面如图5-1所示:图5-3在浏览器的地址栏中输入如下url::5000,其中是设置ip地址,5000是默认端口号,在浏览器端展示的可视化大屏如图5-2所示:图5-46总结与展望本研究通过时间序列分析,揭示了影响比亚迪汽车销量的因素,还为未来的销量预测和策略制定提供了科学依据。未来研究可以进一步探索其他潜在影响因素,通过进一步的数据挖掘,通过进一步寻找相关数据集,如消费者对新能源车和燃油车的看法调查问卷等数据集,以进一步探索影响汽车销量的因素。通过对数据进行可视化对了解比亚迪汽车销量数据、新能源汽车的发展历程和未来发展趋势、甚至是推动汽车产业发展具有重要意义。通过数据爬取、清洗与可视化分析,获取准确、直观的销量数据,为企业、政府和消费者提供决策参考。Python的数据分析和可视化技术揭示了消费者需求、历史销量和未来趋势,支持企业销售策略、政府产业政策和消费者购车决策。这种数据分析方法在市场研究、决策制定等领域也有广泛应用。深入分析比亚迪汽车销量数据,为新能源汽车行业提供数据支持,推动产业良性发展。本文也存在很多不足之处,比如数据不够丰富,虽然获取到了2015年至2023年的各个品牌车型的5万多条销量数据等,但没有获取到有关消费者偏好、政府的补贴力度等方面的数据,这些数据有待进一步查找和挖掘。最后,在建模分析阶段,模型的参数还存在优化的空间。

参考文献金朝力、冉黎黎.《北京商报》.2024年1月12日.第003版.第一页贾丽洁.X市新能源汽车推广影响因素分析及优化策略研究[D].暨南大学,2018.AndreaM,JohanJ,ThomasP,etal.Dotaxincentivesaffecthouseholdsadoptionofgreencars?ApanelstudyoftheStockholmcongestiontax[J].EnergyPolicy,2014,74(3):286-299.SanghamitraCM,LisaR.FactorsinfluencingearlybatteryelectricvehicleadoptioninIreland[J].RenewableandSustainableEnergyReviews,2020,118.GreenspanA,CohenD.MotorVehicleStocks,Scrappage,andSales[J].TheReviewofEconomicsandStatistics,1999,81(03):369–383.陈璐.基于ARIMA季节模型的新能源汽车市场前景预测研究[J].知识经济,2019,(01):55-56.童芳,兰凤崇,陈吉清.新能源汽车发展影响因素分析及保有量预测[J].科技管理研究,2016,36(17):112-116.杨冰融.基于多元线性回归与BP神经网络的乘用车市场预测模型[D].武汉:华中科技大学硕士学位论文,2017.JaeHK,GunwooL,JiYP,etal.ConsumerintentionstopurchasebatteryelectricvehiclesinKorea[J].EnergyPolicy,2019,132:736-743.何春丽.新能源汽车市场需求与政策导向研究[D].西南财经大学,2020.郭瑾.《基于Python的招聘数据爬取与数据可视化分析研究》.轻工科技.2024年第40卷第2期.曹培、林永意.基于scrapy的岗位推荐系统的设计与实现.无线互联科技.2023年第12月.王帅.基于Selenium框架的反爬虫程序设计与实现.信息记录材料.2023年6月.第24卷第6期.林岚、吴水才.基于JupyterNotebook的信号与系统课程综合实验平台.中国现代教育装备.2021年9月总第369期.林文婧.Python和Pyecharts的数据可视化技术应用.集成电路应用.2024年.02期.陈靖斌.比亚迪二十年磨一剑:从备受质疑到领跑新能源汽车行业.中国经营报.2024年3月11日.第C08版.黎婷婷等.基于ARIMA模型的乌鲁木齐市水痘发病趋势预测分析.实用预防医学.2024.3.黄勇.《FlaskWeb全栈开发实战》.2022年7月第一版.附录A以下为AutoARIMA建模模型预测核心代码。(1)数据预处理:importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签plt.rcParams['axes.unicode_minus']=False#用来正常显示负号df=pd.read_csv('./data/carsales.csv',dtype={'时间':str})df=df[df['厂商'].isin(['比亚迪','腾势汽车','仰望','方程豹'])]deffunc(x):x=x[:4]+'年'+x[4:]+'月'returnxdf['时间']=df['时间'].apply(func)df=df.groupby('时间')['销量'].sum().to_frame()df.columns=['sales']df=df.rename_axis('date')df.index=pd.to_datetime(df.index.str.replace("年","-").str.replace("月",""))df.index=pd.DatetimeIndex(df.index.values,freq=df.index.inferred_freq)#查看缺失值没有缺失值df.isnull().sum()#查看时序分布图plt.figure(figsize=(12,5))df.sales.plot(rot=30)plt.show()(2)分析与模型建立fromstatsmodels.tsa.seasonalimportseasonal_decompose#划分训练集和测试集,选择最近的12个月为测试集df_train=df.iloc[:-12,]df_test=df.iloc[-12:,]#对时间序列进行季节分解并绘制可视化decomposition=seasonal_decompose(df_train.sales,model='multiplicative')fig=decomposition.plot()fig.set_size_inches(15,12)plt.show()#对数变换和一阶差分df_train['sales_ln']=np.log(df_train.sales)df_train['sales_ln_diff1']=df_train.sales_ln.diff(periods=1)df_train.dropna(subset=['sales_ln_diff1'],inplace=True)#查看差分之后的时序图plt.figure(figsize=(12,5))df_train.sales_ln_diff1.plot()plt.show()#二阶差分,取步长为12df_train['sales_ln_diff12']=df_train.sales_ln_diff1.diff(periods=12)df_train.dropna(subset=['sales_ln_diff12'],inplace=True)#平稳性检验(ADF检验)和白噪声检验fromstatsmodels.tsa.stattoolsimportadfullerasadf#ADF检测时间序列的数据平稳性fromstatsmodels.stats.diagnosticimportacorr_ljungbox#检测时间序列数据中是否存在自相关性print('adfullertestp-value:',adf(df_train.sales_ln_diff12)[1])#检测数据是否平稳print(acorr_ljungbox(df_train.sales_ln_diff12,lags=1))#绘制查看自相关系数与偏相关系数fromstatsmodels.graphics.tsaplotsimportplot_pacf,plot_acffig,ax=plt.subplots(nrows=1,ncols=2,figsize=(12,4))plot_acf(df_train.sales_ln_diff12,ax=ax[0]).show()plot_pacf(df_train.sales_ln_diff12,ax=ax[1]).show()(3)ARIMA模型构建(模型摘要、诊断图和预测)importpmdarimaaspmfromstatsmodels.tsa.arima_modelimportARIMAsmodel=pm.auto_arima(df_train.sales_ln,start_p=1,start_q=1,test='adf',max_p=3,max_q=3,m=12,start_P=0,seasonal=True,stationary=True,information_criterion='aic',error_action='ignore',suppress_warnings=True,stepwise=False)smodel.summary()smodel.plot_diagnostics(figsize=(15,10))plt.show()(4)预测与评估pred_ln,confint_ln=smodel.predict(n_periods=12,return_conf_int=True)pred=pd.Series(np.power(np.e,pred_ln),index=df_test.index)lower_confint=pd.Series(np.power(np.e,confint_ln[:,0]),index=df_test.index)upper_confint=pd.Series(np.po

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论