尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Python天气预测与可视化实战:从API数据到线性回归完整指南

Python天气预测与可视化实战:从API数据到线性回归完整指南 简介这是一份面向高校计算机或数据科学方向本科生的Python期末大作业级项目资源聚焦天气预测建模与多维度可视化实践解决课程设计中数据获取、特征工程、模型训练与结果呈现的一整套技术闭环问题。压缩包共27个文件含4个核心Python脚本main.py、GetData.py、ProcessData.py、GetModel.py、4个CSV数据集train/test/valid/今日中国天气、12张可视化效果图JPG格式、1个训练完成的模型文件Model.pkl及HTML报告和Markdown使用文档整体仅1.43MB轻量易部署。已有1568人学习下载适合作为高分结课项目直接提交——无需修改即可运行涵盖从实时天气爬取、时间序列预处理、LSTM/XGBoost等模型实现到折线图、热力图、地图分布等交互式可视化全流程。目录结构清晰模块职责分明配套文档详述环境配置、参数说明与结果解读显著降低复现门槛。 期末大作业选“Python天气预测天气可视化”这个题我是非常推荐的。理由很简单数据好拿、模型好讲、图表好看三样占全了答辩时老师想刁难你都找不到角度。但我也得说实话这个题每年都有大量学生做砸砸掉的几乎都是同一批原因——数据抓不下来、预测代码跑不通、图是画出来了但丑得没法看、文档写得比代码还随便。这篇文章我把整个项目从设计思路到代码实现到文档撰写完整拆一遍所有步骤都按“期末大作业能拿高分”的标准来你直接照着抄。我默认你的基础是Python入门水平会装库、会写函数但没做过完整项目。如果你连环境安装都不太熟也没关系文章里每一步都详细说。下面开始。1. 项目整体设计先想清楚再动手写代码1.1 这个项目到底要解决什么问题期末大作业的题目一般是这样的风格“基于Python完成一个实际应用要求包含数据获取、数据处理、算法实现、结果展示。”听起来很空但落到天气预测可视化这个方向就变得非常具体数据获取拿到某个城市过去一段时间的天气数据最高温、最低温、天气状况等。数据处理把杂乱的数据整理成能送入模型的格式。算法实现用机器学习或统计学方法预测未来几天温度。结果展示用图表把历史数据、预测结果可视化出来。文档交付写清楚怎么安装、怎么运行、结果怎么理解。这个题目好在哪第一天气数据是公开的不需要你自己造数据第二预测任务有明确的输入输出老师和学生都能看得懂第三可视化效果好一张折线图放上去项目完整度立刻拉满。对期末大作业来说这种“能看懂、能跑通、能展示”的项目比那些花里胡哨但没人看得懂的方向要稳得多。我带的很多学生一开始想用深度学习做天气预测说什么LSTM、Transformer听起来很高端。但我都会劝他们冷静期末大作业的时间通常是两到三周你光是把LSTM的环境跑通就要花一周数据量和特征维度又不支持这种复杂模型最后训练出来的效果可能比简单线性回归还差。评分主要看你的设计合理性、代码完整度、文档规范度和答辩表现而不是模型有多复杂。用线性回归或ARIMA这种经典算法把流程讲明白一样拿高分甚至更容易拿高分。1.2 技术栈选型每个库都是干什么的这个项目的技术栈非常标准我按“数据获取→数据处理→预测建模→可视化→文档整理”这条线给你列出核心依赖库环节库作用数据获取requests请求API或网页拿原始数据数据处理pandas数据清洗、转换、构建DataFrame数值计算numpy数组运算、科学计算预测建模scikit-learn线性回归等机器学习算法可选建模statsmodelsARIMA时间序列模型可视化matplotlib静态折线图、柱状图、散点图可视化增强pyecharts交互式图表输出HTML文档辅助jupyter实验过程记录答辩展示用为什么选这套组合而不是别的matplotlib是Python可视化的基本功必须会pyecharts是加分项交互式图表会让人感觉你的项目“有产品思维”scikit-learn是主流机器学习库文档详尽、封装友好期末项目用它不会出错。这里特别强调一下不要一上来就装一堆库。我见过太多学生项目还没开始就先装了一堆高大上的包结果环境冲突、版本不兼容光解决报错就消耗了三天。基础三件套“requests pandas matplotlib”先装好跑通了再加不迟。1.3 代码结构从单文件到分模块期末大作业最容易出现的问题就是“一个main.py写800行所有功能揉在一坨”。这种代码老师打开一看就头大即使功能正常印象分也会打折扣。我的建议是分成几个文件清晰又美观weather_project/ ├── data/ │ └── weather_history.csv # 缓存的历史天气数据 ├── src/ │ ├── __init__.py │ ├── data_fetcher.py # 数据获取模块 │ ├── data_processor.py # 数据清洗与特征工程 │ ├── predictor.py # 预测模型 │ └── visualizer.py # 可视化模块 ├── output/ │ ├── temperature_trend.png # 生成的图表 │ └── prediction_report.html # 交互式报告 ├── requirements.txt # 依赖库清单 ├── README.md # 使用说明 ├── 实验报告.md # 课程设计文档 └── main.py # 主程序入口有的同学觉得这样太麻烦但我告诉你这个结构是“一分钱一分货”。第一模块化让代码的可读性大幅提升答辩时老师问“某个功能在哪个文件、怎么实现的”你可以直接指给他看第二测试和调试更方便哪个环节出错了直接定位到对应文件第三这也是评分标准里的“软件工程规范”部分很多评分表里专门有这一项。2. 数据获取与预处理预测准不准一半看数据2.1 数据来源别爬网页用公开API很多同学一说到“获取天气数据”第一反应就是写爬虫去抓天气网站。但我不建议期末作业这么干。原因很简单很多天气网站的页面结构是动态加载的你需要用Selenium反爬工具麻烦而且爬虫程序有不稳定性网站稍微改一下DOM结构你的代码就废了答辩前一天数据突然抓不下来想哭都来不及。我推荐直接用公开的天气API。这里介绍一个非常适合教学和期末作业的接口——Open-Meteo这是一个开放气象接口不需要注册、不需要API Key、完全免费支持历史天气查询和未来天气预报数据覆盖全球主要城市。用起来极其简单直接发一个HTTP请求就能拿到JSON格式的数据。接口示例https://api.open-meteo.com/v1/forecast?latitude39.90longitude116.40dailytemperature_2m_max,temperature_2m_minpast_days30forecast_days7timezoneAsia%2FShanghai参数说明latitude和longitude目标城市的经纬度。北京是39.90、116.40上海是31.23、121.47其他城市可以在地图软件里查。daily你要获取的每日数据字段。temperature_2m_max是最高温temperature_2m_min是最低温。past_days30获取过去30天的数据。forecast_days7同时获取未来7天的预报数据这个数据后面可以用来验证你模型的预测效果。timezoneAsia%2FShanghai时区设置保证日期是北京时间。这个接口真的非常适合期末项目数据格式规范、没有反爬限制、返回的JSON结构清晰容易解析。你可以在浏览器里直接打开这个链接看看返回结果就是一个标准的JSON里面包含每天的日期、最高温、最低温。如果你还想展示“更真实”的天气状况晴、多云、小雨等这个接口也支持加一个字段dailyweather_code就行返回一个天气代码需要对照代码表转成文字。不过对期末项目来说温度和降水可能是最直观的不用过度设计。2.2 用requests拉数据并保存到本地获取数据的代码非常简单我用一段完整的Python代码演示import requests import pandas as pd def fetch_weather_data(city_name, lat, lon, past_days30, forecast_days7): 获取历史和预报天气数据 url https://api.open-meteo.com/v1/forecast params { latitude: lat, longitude: lon, daily: temperature_2m_max,temperature_2m_min,weather_code, past_days: past_days, forecast_days: forecast_days, timezone: Asia/Shanghai } resp requests.get(url, paramsparams, timeout10) resp.raise_for_status() # 如果请求失败会抛出异常 data resp.json()[daily] df pd.DataFrame({ date: data[time], tmax: data[temperature_2m_max], tmin: data[temperature_2m_min], weather_code: data[weather_code] }) df[city] city_name return df if __name__ __main__: df fetch_weather_data(北京, 39.90, 116.40) df.to_csv(data/weather_history.csv, indexFalse, encodingutf-8-sig) print(f成功获取 {len(df)} 天数据)这里有几个细节要注意第一encodingutf-8-sig很重要。如果你用默认的utf-8保存CSV之后用Excel打开会乱码因为Excel默认不认utf-8的头。加-sig后缀会在文件头加一个BOM标记Excel就能正确识别了。这种细节老师可能不会直接加分但看到你项目里的CSV文件能直接用Excel打开会觉得你做事认真。第二timeout10是必须的。很多初学者写requests请求时不加超时参数一旦网络抖动程序会卡住几分钟都没反应。加上超时后请求失败会快速抛出异常方便你捕获处理。这个习惯在真实开发中尤其重要。第三建议把请求到的数据保存成CSV缓存到本地。一方面你没网的时候也能跑通项目另一方面答辩现场如果网络出了状况你还能靠缓存数据正常演示。我遇到过不止一次答辩时校园网突然变慢、API请求超时的情况有缓存数据就不会尴尬。2.3 数据清洗处理缺失值和异常值拿到了原始数据接下来是数据处理环节。期末大作业里这个环节做得好不好直接决定预测模型的上限。天气API返回的数据一般是干净的但你自己处理的数据可能来自各种渠道难免有缺失值。比如某一天请求失败了或者某个字段返回了null。处理方式很简单df pd.read_csv(data/weather_history.csv) # 1. 检查缺失值 print(df.isnull().sum()) # 2. 删除缺失行或向前填充 df df.dropna() # 3. 处理异常值比如某天温度突然变成99度明显是错误数据 df df[df[tmax] 50] df df[df[tmin] -50] # 4. 检查日期是否连续如果有缺失日期就补上 df[date] pd.to_datetime(df[date]) df df.sort_values(date)异常值处理在天气这种场景下有个高效思路看数据是否落在合理区间。中国大部分城市的气温不会超过50摄氏度也不会低于零下50摄氏度超出这个范围就很可能是接口错误或传输问题直接过滤掉即可。还有一个容易被忽略的点weather_code字段。这个代码代表天气状况比如0表示晴天61表示小雨等等。它虽然是数值但不能直接当数值特征塞进模型里因为1和2之间没有大小关系。如果你想用天气状况作为预测特征需要做编码处理这个下一节详细说。2.4 特征构造把一个日期变成模型能用的东西到这里就涉及一个初学者最容易困惑的问题模型输入什么输出什么假设我们要预测“未来第7天的最高温”输入不能是“2024-12-20”这个字符串得把它转换成一个模型能理解的数值特征。最朴素、也最容易讲清楚的方法就是“日期序号”——把数据集里的第一条记录记为1第二天记为2以此类推。df[days] range(len(df))这样我们就有了一个最简单的线性关系tmax a * days b。模型的任务就是根据历史数据学出这个a和b。这个方法虽然简单但胜在“答辩好讲”你的输入特征、输出标签、模型参数全都是透明的老师一问你就答得上来。如果你想做得更完整一点可以增加两个特征day_of_year一年中的第几天用df[date].dt.dayofyear得到表示季节信息。天气状况的独热编码把weather_code分类变成多列0/1特征。用线性回归实现相同功能还会用到scikit-learn库这个库封装好了训练接口非常方便。3. 预测模块实现让“预测”真的跑起来3.1 最简单的温度预测线性回归下面是一段可运行的完整预测代码注释我已经写得很详细你直接能用from sklearn.linear_model import LinearRegression import numpy as np import pandas as pd def train_and_predict(df, future_days7): 用线性回归预测未来最高温 data df.sort_values(days) # 特征日期序号形状必须是 (n_samples, 1) X data[days].values.reshape(-1, 1) # 标签历史最高温 y data[tmax].values # 训练模型 model LinearRegression() model.fit(X, y) # 构造未来的日期序号从最后一个日期的下一个开始 last_day data[days].max() future_X np.arange(last_day 1, last_day 1 future_days).reshape(-1, 1) # 预测 pred model.predict(future_X) return pred, model df pd.read_csv(data/weather_history.csv) pred, model train_and_predict(df) print(未来7天预测最高温, pred)跑完之后你可能会发现预测出来的未来7天温度全都是一样的趋势无论是上升还是下降几乎就是一条直线。这是非常正常的因为线性回归本身就是拟合一个线性趋势只有“日期序号”这一个特征时它学到的就是“每天温度按固定速率变化”。这不算错误而是模型表达能力的局限。你可以在答辩时主动说“我的模型只考虑了时间趋势这一个特征所以预测结果比较平滑它本质上是一个趋势预测模型。”这句话一出口老师就明白你真的理解了模型原理。3.2 用ARIMA做更“像样”的时间序列预测如果你不想被老师问“你就用了个线性回归”这个问题问倒可以考虑加一个ARIMA模型做对比。ARIMA差分自回归移动平均模型是时间序列分析的经典方法用在天气数据上会比单纯线性回归更专业。安装库pip install statsmodels核心代码from statsmodels.tsa.arima.model import ARIMA def predict_with_arima(df, future_days7): 用ARIMA模型预测温度序列 series df.set_index(date)[tmax] # 训练ARIMA模型p5, d1, q0 是常见起步配置 model ARIMA(series, order(5, 1, 0)) model_fit model.fit() # 未来7天预测 pred model_fit.forecast(stepsfuture_days) return pred这里解释一下ARIMA的三个参数你要能在答辩时用大白话讲明白p模型用过去多少个时间点的数据来做预测相当于“回顾窗口”。d需要对数据做几阶差分才能让序列平稳。天气数据有明显季节性取1通常够用。q模型的误差项需要考虑过去几期的误差一般取0或1。ARIMA的好处是它更适合时间序列数据能捕捉到一些短期波动预测曲线不会是一条笔直的线。但代价是它比线性回归复杂需要调参而且数据量太少时效果不稳定。我的建议是两个模型都写在项目里答辩时对比分析这个亮点就很足了。3.3 预测结果怎么评价MAE和RMSE期末大作业最容易忽略的一环就是模型评估。很多人预测完了直接画图完全不提“你的预测准不准”这其实是拿高分的关键机会。最简单的做法把数据集分成训练集和测试集比如前70%做训练后30%做测试。用训练集训练模型再用测试集做预测最后拿预测值和真实值对比。from sklearn.metrics import mean_absolute_error, mean_squared_error # 划分前80%训练后20%测试 train df[df[days] int(len(df) * 0.8)] test df[df[days] int(len(df) * 0.8)] model LinearRegression() model.fit(train[days].values.reshape(-1, 1), train[tmax].values) pred_test model.predict(test[days].values.reshape(-1, 1)) mae mean_absolute_error(test[tmax], pred_test) rmse np.sqrt(mean_squared_error(test[tmax], pred_test)) print(fMAE平均绝对误差: {mae:.2f}°C) print(fRMSE均方根误差: {rmse:.2f}°C)MAE的含义是“平均每个样本预测误差了多少度”比如2.5就表示平均预测值和真实值差2.5摄氏度。RMSE在MAE基础上更偏向惩罚大误差。这两个指标在期末报告里写一行整个项目的专业度就上来了。如果你的测试集MAE在2到3摄氏度之间恭喜你这个结果已经相当不错了。天气系统本身混沌性很强长期精确预测几乎不可能短期内平均误差2.5度是一个非常合理的水平。4. 天气可视化让大作业看起来“高级”的关键4.1 matplotlib基础图表历史趋势与预测对比可视化是大作业的“脸面”。代码写的再乱只要图表干净美观、要素齐全老师的第一印象就不会差。我建议至少要画三张图历史30天最高温/最低温折线图。未来7天预测温度折线图和最近几天历史数据放一起。温度与天气状况的对照柱状图。先解决新手最头疼的中文乱码问题。matplotlib默认字体不支持中文直接写中文会变成方块。必须手动设置中文字体import matplotlib.pyplot as plt # 开启中文显示这条代码放在画图之前 plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei, PingFang SC] plt.rcParams[axes.unicode_minus] False # 解决负号显示异常这段配置我每次写可视化代码都必加不然后面一定是乱码重灾区。SimHei是Windows自带的黑体Microsoft YaHei是微软雅黑Mac上用PingFang SC。同一行里把多个字体都列进去程序会自动选一个可用的。然后画图def plot_temperature(df, pred, future_dates): # 准备数据 hist_dates pd.to_datetime(df[date]) hist_tmax df[tmax] hist_tmin df[tmin] # 画布 plt.figure(figsize(12, 6)) # 历史数据曲线 plt.plot(hist_dates, hist_tmax, label历史最高温, markero, linewidth2) plt.plot(hist_dates, hist_tmin, label历史最低温, markero, linewidth2) # 预测数据曲线 plt.plot(future_dates, pred, label预测最高温, linestyle--, markers, colorred, linewidth2) # 图例、标题、网格 plt.legend() plt.title(未来7天温度预测) plt.xlabel(日期) plt.ylabel(温度 (°C)) plt.grid(True, alpha0.3) # 保存图片 plt.savefig(output/temperature_trend.png, dpi150, bbox_inchestight) plt.show()dpi150让图片足够清晰答辩PPT里放大也不会模糊bbox_inchestight可以裁剪掉多余的留白图面更紧凑。4.2 pyecharts交互式图表给老师“眼前一亮”的加分项matplotlib画出来的图是静态图片视觉上比较朴素。如果你想让项目更有“产品感”建议加一个pyecharts的交互式图表输出成HTML文件。它可以鼠标悬停显示数值、缩放、切换图例演示体验完全不一样。安装pip install pyecharts下面画一个“历史与预测温度对比”的交互式折线图from pyecharts.charts import Line from pyecharts import options as opts def create_interactive_chart(df, pred, future_dates): dates pd.to_datetime(df[date]).dt.strftime(%m-%d).tolist() future_labels pd.to_datetime(future_dates).strftime(%m-%d).tolist() line Line() line.add_xaxis(dates[-15:] future_labels) # 展示最近15天未来7天 line.add_yaxis( 历史最高温, df[tmax].values[-15:].tolist() [None] * len(future_labels), is_smoothTrue, symbolcircle, ) line.add_yaxis( 预测最高温, [None] * 15 pred.tolist(), is_smoothTrue, symboldiamond, linestyle_optsopts.LineStyleOpts(type_dashed), ) line.set_global_opts( title_optsopts.TitleOpts(title北京温度预测报告), tooltip_optsopts.TooltipOpts(triggeraxis), legend_optsopts.LegendOpts(pos_top5%), ) line.render(output/prediction_report.html)这里用了一个小技巧历史数据和预测数据拼接在同一个x轴上但历史部分的预测值是None预测部分的历史值是None。这样两条线不会因为数据缺失而断裂而是自然地展示“历史延续到未来”的效果。None在pyecharts里会被处理成断点或不显示正好达到我们要的效果。4.3 多城市对比与天气状况标记如果预测单个城市觉得内容单薄可以做一个“多城市温度对比图”。在数据获取时循环调用API拿到北京、上海、广州、成都四个城市的数据然后在同一张图上画四条线。这个做法的好处是“画面信息量”立刻翻倍而且实现几乎不增加任何复杂度def plot_multi_city(cities): plt.figure(figsize(12, 6)) for name, lat, lon in cities: df fetch_weather_data(name, lat, lon) plt.plot(pd.to_datetime(df[date]), df[tmax], labelname, markero) plt.title(多城市最高温对比) plt.xlabel(日期) plt.ylabel(温度 (°C)) plt.legend() plt.grid(True, alpha0.3) plt.savefig(output/multi_city_temperature.png, dpi150)这里给一个避坑提醒不同城市的数据量必须一致否则日期轴会对不齐。API返回的数据通常都是连续的正常不会出问题但如果某个城市某次请求失败就会缺数据。稳妥的做法是在数据清洗阶段做一次日期对齐校验确保所有城市的日期范围一致。天气状况的标记可以这样实现在折线图的下方用不同颜色的散点标注每天的天气代码或者直接在图上每个点旁边标注“晴”“雨”“阴”等文字。标注文字时要注意位置偏移避免重叠通常是plt.annotate配合xytext调整偏移量。这个细节能让评委觉得你做了更细致的分析工作。5. 使用文档与答辩准备高分的关键不只是代码5.1 README.md怎么写照这个模板套就行很多同学把代码写完README随手写三行“这是一个天气预测项目运行main.py即可”就算交差。但我告诉你README是老师看你的第一份文档它的质量直接影响整体印象分。一份合格的README至少包含以下部分# 基于Python的天气预测与可视化系统 ## 项目简介 本项目基于Python实现天气数据的获取、分析与可视化。通过公开气象API获取城市历史天气数据使用线性回归/ARIMA模型预测未来7天最高温度并利用matplotlib实现静态可视化、pyecharts实现交互式可视化。 ## 技术栈 - Python 3.9 - requests, pandas, numpy - scikit-learn, statsmodels - matplotlib, pyecharts ## 项目结构 目录树 ## 快速开始 1. 安装依赖pip install -r requirements.txt 2. 运行主程序python main.py 3. 查看输出output目录下生成图表和HTML报告 ## 代码说明 ### 数据获取模块 简要说明接口、参数、函数用法 ### 预测模块 说明模型、特征、评估指标 ### 可视化模块 说明图表类型、生成方式 ## 实验结果 贴一张预测效果图附MAE/RMSE指标 ## 注意事项 - 使用API需要联网 - 如需更换城市修改main.py中的经纬度参数这个模板的核心逻辑是让一个完全不了解项目的人在5分钟内跑通项目并看懂设计。你写的时候想象自己是“第一次拿到这份代码的助教”按照README的指引能不能顺利运行就知道哪里没写清楚了。5.2 实验报告老师最想看的是“过程”而不是“结果”课程设计报告和普通的实验报告写法类似。有的同学直接在网上找模板把项目信息填进去就完事。但我建议你重点写清楚“你遇到了什么问题、怎么解决的”这部分是报告的灵魂。推荐报告结构需求分析题目要求、目标拆解、功能模块划分。总体设计系统架构、模块关系、技术选型理由。详细设计关键代码段 代码解释尤其是数据获取、模型训练、可视化三块。系统测试用几个城市分别测试展示输出记录运行时间。结果分析预测误差、模型优劣、可视化效果评价。总结与展望项目解决了什么问题哪些地方可以改进。参考文献课程教材、官方文档、相关论文。这里插一句“总结与展望”不要写空话比如“未来可以使用深度学习模型提高预测准确率”这种话老师听几百遍了。你可以写具体的改进方案比如“计划加入湿度、气压、风速等特征使用随机森林回归替换线性回归”。有具体方案说明你真的想过后续怎么做印象分会更好。5.3 答辩环节这5个问题必须提前准备答辩是期末大作业评分的重要环节。下面这些问题是老师最常问的你提前想好答案就不会当场卡壳。问题1你为什么选择线性回归回答思路线性回归是监督学习中最经典的模型可解释性强、训练速度快、适合小规模数据探索。本项目主要目标是验证“天气预测可视化”的完整流程先用线性回归建立基线后续可以在此之上引入更复杂模型。问题2你的模型预测准确率怎么样回答思路不用说“准确率”温度预测通常用误差指标。你可以说“模型在测试集上的平均绝对误差是2.3摄氏度说明平均预测值和真实值相差大约2.3度。温度预测本身是一个连续值回归问题2.3度的误差在短中期天气预测中是比较合理的水平。”问题3如果给你更多的特征你会怎么改进回答思路增加湿度、气压、风速、降雨量等气象特征增加历史同期数据作为季节特征考虑使用随机森林或者XGBoost这类非线性模型或者用更长时间的数据做训练集。一定要说得具体。问题4你的可视化模块用了哪些库它们有什么区别回答思路matplotlib是Python底层绘图的经典库适合生成静态图适合论文报告pyecharts是基于ECharts的交互式可视化库输出HTML文件可以在浏览器中交互查看展示效果更加生动。问题5数据量不大时你的模型预测为什么还比较准回答思路短期温度具有一定的连续性线性回归捕捉到“近期温度的平均水平和趋势”后未来几天的预测偏差就不会太大。但如果遇到极端天气寒潮、降雨模型就会失效这也是线性模型的局限性。这个回答既承认了优点也坦诚了不足反而更可信。6. 实操过程中踩过的坑与排查实录6.1 常见问题速查表我根据自己实操和带学生过程中真实遇到的问题整理了一张速查表每一个都是真实踩过的坑问题现象可能原因解决方法ModuleNotFoundError: No module named sklearnscikit-learn未安装或安装失败执行pip install scikit-learn装不上就换镜像源pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simplematplotlib画图出现方块乱码中文字体未设置添加plt.rcParams[font.sans-serif] [SimHei]和plt.rcParams[axes.unicode_minus] FalseAPI请求超时或失败网络问题或接口访问频率过高增加timeout10在循环请求多个城市时加time.sleep(1)控制频率pyecharts生成的HTML文件打开是空白版本问题或未加载ECharts脚本确认pyecharts版本是1.x以上用pip install pyecharts --upgrade升级HTML文件必须通过网络加载JS资源确保联网预测结果所有值几乎一样特征过于单一线性模型表达了平均值增加特征如季节、天气状况或改用ARIMA等时间序列模型CSV文件用Excel打开乱码编码不是UTF-8-BOMto_csv时设置encodingutf-8-sig6.2 环境配置与复现用虚拟环境隔离项目依赖期末项目常常在多个环境下运行比如你电脑上装了Python 3.11但你之前在另一个项目里装了很多乱七八糟的包。为了防止依赖冲突我强烈建议你为每个项目单独创建虚拟环境。# 创建虚拟环境 python -m venv venv # 激活环境Windows venv\Scripts\activate # 激活环境Mac/Linux source venv/bin/activate # 安装依赖 pip install -r requirements.txt然后生成requirements.txt让别人能一条命令装好所有依赖pip freeze requirements.txt你还可以手动精简一下这个文件只保留直接使用的库并注明版本号。一个干净的requirements.txt长这样requests2.31.0 pandas2.1.4 numpy1.26.2 scikit-learn1.3.2 matplotlib3.8.2 pyecharts2.0.5 statsmodels0.14.1有人可能觉得“版本号写的这么死不是给自己找麻烦吗”其实不是。期末作业提交后老师可能要在自己电脑上运行版本不一致很容易出兼容性错误。锁定版本能最大程度保证“走到哪都能复现”这个原则在真实工程里同样适用。6.3 时间不够怎么办优先级排序法如果你现在距离提交只剩3天不用慌按下面这个优先级冲刺第一优先数据获取 线性回归 一张matplotlib图。这是项目的基本盘能跑通就能交差。第二优先补上README和实验报告。哪怕只有5页也要把“能跑通”这件事清楚地写出来配上截图。第三优先加一个ARIMA对比模型或者pyecharts交互图。如果不加也能拿个不错的分数只是少了亮点。千万不要做的事死磕LSTM或者调参把前面已经能跑的部分都拖垮了。期末大作业的评分离不开整体完整度一个能完整跑通的简单项目永远胜过一个半吊子的复杂项目。另外还有个实用小技巧所有截图提前准备好包括运行命令截图、预测结果截图、图表截图全部放到报告里和PPT里。现场演示时万一出状况你也能指着截图讲完整套流程。这不是投机取巧是我见过很多现场演示翻车后的“后悔药”。最后聊聊我自己的体会这类项目我陪不少学生跑完过有一个观察特别明显做得好的学生几乎都能在答辩时把自己的项目“讲出故事来”——数据哪里来的、拿到数据怎么清理、为什么选这个模型、误差有多大、哪些地方还能改。老师其实不太在意你的模型多先进更在意你对项目是不是真懂。把每一步的原理和取舍搞清楚比多跑几个模型有用得多。还有个小建议如果你时间有富余可以顺手把项目传到代码托管平台README写好。这不只是为了展示更是给自己留一个随时能翻出来的存档以后写简历、找实习这段经历都是一句话就能讲清楚的实战项目。按这个思路走你的大作业拿高分基本是稳的。本文还有配套的精品资源点击获取
返回列表