1、项目介绍

技术栈

采用 Python 语言开发,基于 Django 框架搭建后端服务,使用 MySQL 数据库进行数据存储,通过 requests 爬虫技术从中国天气网采集历史天气数据,前端利用 Echarts 实现数据可视化展示,并运用机器学习中的随机森林预测算法构建天气预测模型。

功能模块

· 注册登录
· 数据采集
· 首页(全国各省份气温地图)
· 各城市气温分析、天气分析、风向分析、风力分析
· 各城市天气数据列表
· 月份气温统计可视化分析
· 月份空气质量可视化分析
· 每日风向统计可视化分析
· 城市词云图分析、天气词云图分析
· 天气预测
· 个人中心
· 后台数据管理

项目介绍

本系统基于 Django 框架构建天气数据分析与可视化平台,通过 requests 爬虫技术从中国天气网自动采集各城市历史天气数据,经处理后存入 MySQL 数据库。系统提供全国各省份气温地图展示、各城市气温与风向风力分析、月份气温与空气质量统计、每日风向统计、城市与天气词云图等可视化功能。用户可通过选择城市、日期、风向等特征值,利用随机森林算法预测天气状况。后台支持天气信息、城市信息、用户信息的增删改查管理,为用户提供全面直观的天气数据服务。

2、项目界面

(1)中国各省份气温地图分布分析
该页面为天气数据分析可视化系统的首页,展示中国气温地图,可按日期筛选查看不同地区气温分布,页面上方设有城市、天气数据、数据可视化、数据词云图、天气预测、个人信息、后台管理等功能入口。
在这里插入图片描述

(2)各城市气温分析折线图、天气分析、风向分析、风力分析
该页面为天气数据分析可视化系统的城市分析页,展示广州的气温变化折线图,同时呈现天气类型、风向、风力的占比饼图,可直观查看该城市多维度天气数据的可视化分析结果。
在这里插入图片描述

(3)气温统计分析、极端天气分析
该页面为天气数据分析可视化系统的月度数据统计页,支持按月筛选,展示全国城市的平均温湿折线图、极端天气趋势图以及本月极端高温、低温的变化折线图,呈现多维度气象数据的月度统计分析。

在这里插入图片描述

(4)数据中心—按城市筛选查看天气数据
该页面为天气数据分析可视化系统的天气数据页,支持按城市筛选,以表格形式展示所选城市的天气统计信息,涵盖气温、空气质量、天气状况、风向风力等多维度气象数据,支持检索与分页查看。

在这里插入图片描述

(5)气温统计分析、平均空气质量统计分析
该页面为天气数据分析可视化系统的数据可视化页,支持按月筛选,展示本月空气质量良好度与恶劣度的趋势折线图,同时呈现当月平均空气质量统计柱状图,直观呈现多维度空气质量数据的可视化分析结果。

在这里插入图片描述

(6)各城市风力统计
该页面为天气数据分析可视化系统的数据可视化页,支持按城市筛选,以条形图展示所选城市不同日期的风力统计数据,直观呈现该城市风力的时间分布情况,实现风力数据的可视化分析。

在这里插入图片描述

(7)天气词云图分析、城市词云图分析
该页面为天气数据分析可视化系统的数据词云图页,生成心形天气词云,以不同大小和颜色呈现各类天气相关词汇,直观展示高频天气类型,直观呈现天气数据的词频分布与核心特征。

在这里插入图片描述

(8)天气预测-----选择城市、日期、风向,预测天气
该页面为天气数据分析可视化系统的天气预测页,支持选择城市、日期、风向等条件,提交后可生成对应条件下的天气预测结果,直观呈现指定条件的天气预测内容,实现天气预测功能。

在这里插入图片描述

(9)天气预测-----选择城市、日期、风向,预测天气
该页面为天气数据分析可视化系统的天气预测页,支持选择城市、日期、风向等条件,提交后可生成对应条件下的天气预测结果,直观呈现指定条件的天气预测内容,实现天气预测功能。

在这里插入图片描述

(10)注册登录
该页面为天气数据分析可视化系统的登录页,提供用户名和密码输入区域,支持记住密码选项,可点击登录按钮完成身份验证,还可选择创建新账号,是进入系统各项功能的权限入口。

在这里插入图片描述

(11)后台数据管理
该页面为天气数据分析可视化系统的后台管理页,以表格形式展示天气信息表,支持按城市搜索,可对天气数据进行增加、删除、保存等操作,同时支持分页查看,实现天气数据的后台运维与管理。

在这里插入图片描述

(12)数据采集
该页面为天气数据分析可视化系统的爬虫代码开发界面,展示Python爬虫核心代码,可实现多城市天气数据的自动化爬取、数据写入与存储,控制台同步输出爬取日志,为系统提供天气数据采集的底层支撑。
在这里插入图片描述

3、项目说明

一、技术栈简要说明

本系统采用 Python 语言开发,基于 Django 框架搭建后端服务,使用 MySQL 数据库进行数据存储,通过 requests 爬虫技术从中国天气网采集历史天气数据,前端利用 Echarts 实现数据可视化展示,并运用机器学习中的随机森林预测算法构建天气预测模型。

二、功能模块详细介绍

· 注册登录
该页面为系统登录页,提供用户名和密码输入区域,支持记住密码选项,用户可点击登录按钮完成身份验证,还可选择创建新账号,是进入系统各项功能的权限入口。

· 数据采集
该页面展示 Python 爬虫核心代码,可实现多城市天气数据的自动化爬取、数据写入与存储,控制台同步输出爬取日志,为系统提供天气数据采集的底层支撑。

· 首页(全国各省份气温地图)
该页面为系统首页,展示中国气温地图,可按日期筛选查看不同地区气温分布,页面上方设有城市、天气数据、数据可视化、数据词云图、天气预测、个人信息、后台管理等功能入口。

· 各城市气温分析、天气分析、风向分析、风力分析
该页面为城市分析页,展示特定城市的气温变化折线图,同时呈现天气类型、风向、风力的占比饼图,可直观查看该城市多维度天气数据的可视化分析结果。

· 各城市天气数据列表
该页面为天气数据页,支持按城市筛选,以表格形式展示所选城市的天气统计信息,涵盖气温、空气质量、天气状况、风向风力等多维度气象数据,支持检索与分页查看。

· 月份气温统计可视化分析
该页面为月度数据统计页,支持按月筛选,展示全国城市的平均温湿折线图、极端天气趋势图以及本月极端高温、低温的变化折线图,呈现多维度气象数据的月度统计分析。

· 月份空气质量可视化分析
该页面为数据可视化页,支持按月筛选,展示本月空气质量良好度与恶劣度的趋势折线图,同时呈现当月平均空气质量统计柱状图,直观呈现多维度空气质量数据的可视化分析结果。

· 每日风向统计可视化分析
该页面为数据可视化页,支持按城市筛选,以条形图展示所选城市不同日期的风力统计数据,直观呈现该城市风力的时间分布情况,实现风力数据的可视化分析。

· 城市词云图分析、天气词云图分析
该页面为数据词云图页,生成心形天气词云,以不同大小和颜色呈现各类天气相关词汇,直观展示高频天气类型,呈现天气数据的词频分布与核心特征。

· 天气预测
该页面为天气预测页,支持选择城市、日期、风向等条件,提交后可生成对应条件下的天气预测结果,实现基于随机森林算法的天气预测功能。

· 个人中心
该模块为用户提供个人信息管理功能,可查看和修改个人资料、密码等,支持用户个性化设置。

· 后台数据管理
该页面为后台管理页,以表格形式展示天气信息表,支持按城市搜索,可对天气数据进行增加、删除、保存等操作,同时支持分页查看,涵盖天气信息、城市信息、用户信息的管理,实现数据的后台运维与管理。

三、项目总结

本系统基于 Django 框架构建天气数据分析与可视化平台,通过 requests 爬虫技术从中国天气网自动采集各城市历史天气数据,经处理后存入 MySQL 数据库。系统提供全国各省份气温地图展示、各城市气温与风向风力分析、月份气温与空气质量统计、每日风向统计、城市与天气词云图等可视化功能,能够展示气温变化趋势、极端天气特征和空气质量状况。用户可通过选择城市、日期、风向等特征值,利用随机森林算法预测未来天气状况。后台支持天气信息、城市信息、用户信息的增删改查管理。该系统在能源管理、环境监测、农业规划、旅游出行和风险评估等方面具有重要的应用价值,为用户提供了准确直观的天气信息服务。

在这里插入图片描述

4、核心代码



# 城市数据分析
def cityChar(request):
    uname = request.session.get('username')
    userInfo = User.objects.get(username=uname)
    cites = getGlobalData()
    city = request.GET.get('city') or cites[0]
    print(city)

    # 1、气温
    date,maxTemp,minTemp = getCityMaxMinTemp(city)
    # 2、天气情况
    resultWeather = getWeatherListByCity(city)
    # 3、风向
    resultWind = getWindListByCity(city)
    # 4、风力
    resultWindOrder = getWindOrderListByCity(city)

    return render(request,'cityChar.html',{
        'userInfo':userInfo,
        'cites':cites,
        'defaultCity':city,
        'date':date,
        'maxTemp':maxTemp,
        'minTemp':minTemp,
        'resultWeather':resultWeather[:15],
        'resultWind':resultWind,
        'resultWindOrder':resultWindOrder
    })


#天气数据表
def tableData(request):
    uname = request.session.get('username')
    userInfo = User.objects.get(username=uname)
    cites = getGlobalData()
    city = request.GET.get('city') or cites[0]
    print(city)
    tableData = list(getTableData(city))
    return render(request,'tableData.html',{
        'userInfo':userInfo,
        'cites':cites,
        'defaultCity':city,
        'tableData':tableData
    })


#月份气温统计
def monthTempChar(request):
    uname = request.session.get('username')
    userInfo = User.objects.get(username=uname)
    # cites = getGlobalData()
    # city = request.GET.get('city') or cites[0]
    # print(city)
    dateList = getMonthData()
    date = request.GET.get('city') or dateList[0]   #原始代码
    # date = request.GET.get('date') or dateList[0]  # 确保使用正确的参数名
    print(date)
    xData,y1Data,y2Data = getAverageTemp(date)
    xDatas,y1Datas,y2Datas = getTopMinMaxTemp(date)
    cites = getGlobalData()
    city = request.GET.get('city') or cites[0]
    return render(request,'monthTempChar.html',{
        'userInfo':userInfo,
        'dateList':dateList,
        'defaultDate':date,
        'xData':xData,
        'y1Data':y1Data,
        'y2Data':y2Data,
        'xDatas': xDatas,
        'y1Datas': y1Datas,
        'y2Datas': y2Datas,
        'cites':cites
    })


#月份空气质量
def monthAirChar(request):
    uname = request.session.get('username')
    userInfo = User.objects.get(username=uname)
    cites = getGlobalData()
    city = request.GET.get('city') or cites[0]
    # print(city)
    dateList = getMonthData()
    date = request.GET.get('city') or dateList[0]
    print(date)
    xData,y1Data,y2Data = getAverageAir(date)
    row,col =getAirqua(date)

    return render(request,'monthAirChar.html',{
        'userInfo':userInfo,
        'dateList':dateList,
        'defaultDate':date,
        'xData': xData,
        'y1Data': y1Data,
        'y2Data': y2Data,
        'row':row,
        'col':col,
        'cites':cites
    })


#每日风向统计
def windChar(request):
    uname = request.session.get('username')
    userInfo = User.objects.get(username=uname)
    cites = getGlobalData()
    city = request.GET.get('city') or cites[0]
    print(city)

    xData,yData = getWindOreder(city)
    return render(request,'windChar.html',{
        'userInfo':userInfo,
        'cites':cites,
        'defaultCity': city,
        'xData':xData,
        'yData':yData
    })


#城市词云图
def titleCloud(request):
    uname = request.session.get('username')
    userInfo = User.objects.get(username=uname)
    cites = getGlobalData()
    city = request.GET.get('city') or cites[0]
    return render(request,'titleCloud.html',{
        'userInfo':userInfo,
        'cites':cites
    })

#天气词云图
def weatherCloud(request):
    uname = request.session.get('username')
    userInfo = User.objects.get(username=uname)
    cites = getGlobalData()
    city = request.GET.get('city') or cites[0]
    return render(request,'weatherCloud.html',{
        'userInfo':userInfo,
        'cites':cites
    })


#天气预测
def predict(request):
    uname = request.session.get('username')
    userInfo = User.objects.get(username=uname)
    windList = getWindList()
    dateList = getDateList()
    cites = getGlobalData()
    cites = getGlobalData()
    city = request.GET.get('city') or cites[0]
    if request.method == 'POST':
        defaultDate = request.POST.get('date') or dateList[0]
        defaultWind = request.POST.get('wind') or dateList[0]
        city = request.POST.get('city') or cites[0]
        print(defaultDate,defaultWind,city)
        print(defaultDate)
        result = preModel(1, [defaultDate, defaultWind,city])
        print(result)
        return render(request, 'predict.html', {
            'userInfo': userInfo,
            'dateList': dateList,
            'defaultDate': defaultDate,

            'windList': windList,
            'defaultWind':defaultWind,

            'cites': cites,
            'defaultCity': city,
            'result':result,
        })
    return render(request, 'predict.html', {
        'userInfo': userInfo,
        'windList':windList,
        'dateList':dateList,
        'cites': cites
    })
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐