西南天气数据的分析与应用| 【大数据毕设项目】大数据可视化大屏 选题推荐 附源码 文档指导+ppt+运行部署+课程设计 Hadoop SPark

51 阅读6分钟

💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐

西南天气数据的分析与应用系统介绍

《西南天气数据分析应用》是一个基于大数据技术构建的天气数据分析与可视化平台,该系统采用Hadoop+Spark大数据框架作为核心数据处理引擎,通过Python语言实现数据采集、清洗和分析功能,后端采用Django框架提供RESTful API接口,前端使用Vue+ElementUI构建用户交互界面,并集成Echarts图表库实现数据的多维度可视化展示。系统主要包含系统首页、天气信息管理、天气信息查询和个人中心四大核心模块,通过HDFS分布式文件系统存储海量天气数据,利用Spark SQL进行大数据查询和统计分析,结合Pandas和NumPy进行数据处理和计算,将复杂的天气数据转化为直观的图表和报表。系统支持对西南地区多个城市的温度、湿度、降雨量、风速等气象要素进行实时监控和历史趋势分析,为用户提供便捷的天气数据查询服务和决策支持,同时展示了大数据技术在气象数据分析领域的实际应用价值,为计算机专业学生提供了一个完整的大数据项目实践案例。

西南天气数据的分析与应用系统演示视频

演示视频

西南天气数据的分析与应用系统演示图片

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

西南天气数据的分析与应用系统代码展示

from pyspark.sql import SparkSession
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from .models import WeatherData
import mysql.connector

spark = SparkSession.builder.appName("WeatherDataAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()

@csrf_exempt
def weather_data_analysis(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        city = data.get('city', '')
        start_date = data.get('start_date', '')
        end_date = data.get('end_date', '')
        weather_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/weather_db").option("dbtable", "weather_data").option("user", "root").option("password", "password").load()
        filtered_df = weather_df.filter((weather_df.city == city) & (weather_df.date >= start_date) & (weather_df.date <= end_date))
        temp_stats = filtered_df.agg({"temperature": "avg", "humidity": "avg", "rainfall": "sum", "wind_speed": "avg"}).collect()[0]
        daily_avg = filtered_df.groupBy("date").agg({"temperature": "avg", "humidity": "avg"}).orderBy("date")
        trend_data = daily_avg.collect()
        temp_trend = [float(row['avg(temperature)']) for row in trend_data]
        humidity_trend = [float(row['avg(humidity)']) for row in trend_data]
        dates = [str(row['date']) for row in trend_data]
        correlation_matrix = filtered_df.select("temperature", "humidity", "rainfall", "wind_speed").toPandas().corr()
        extreme_weather = filtered_df.filter((filtered_df.temperature > 35) | (filtered_df.temperature < 0) | (filtered_df.rainfall > 50)).count()
        monthly_stats = filtered_df.withColumn("month", date_format("date", "yyyy-MM")).groupBy("month").agg({"temperature": "avg", "rainfall": "sum"}).collect()
        result = {
            'avg_temperature': float(temp_stats['avg(temperature)']),
            'avg_humidity': float(temp_stats['avg(humidity)']),
            'total_rainfall': float(temp_stats['sum(rainfall)']),
            'avg_wind_speed': float(temp_stats['avg(wind_speed)']),
            'temp_trend': temp_trend,
            'humidity_trend': humidity_trend,
            'dates': dates,
            'correlation': correlation_matrix.to_dict(),
            'extreme_weather_days': extreme_weather,
            'monthly_stats': [{'month': row['month'], 'avg_temp': float(row['avg(temperature)']), 'total_rain': float(row['sum(rainfall)'])} for row in monthly_stats]
        }
        return JsonResponse(result)

@csrf_exempt
def weather_data_visualization(request):
    if request.method == 'GET':
        city = request.GET.get('city', 'all')
        chart_type = request.GET.get('chart_type', 'temperature')
        if city == 'all':
            weather_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/weather_db").option("dbtable", "weather_data").option("user", "root").option("password", "password").load()
        else:
            weather_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/weather_db").option("dbtable", "weather_data").option("user", "root").option("password", "password").load().filter(col('city') == city)
        if chart_type == 'temperature':
            chart_data = weather_df.groupBy("city").agg({"temperature": "avg"}).collect()
            result_data = [{'name': row['city'], 'value': float(row['avg(temperature)'])} for row in chart_data]
        elif chart_type == 'rainfall':
            chart_data = weather_df.groupBy("city").agg({"rainfall": "sum"}).collect()
            result_data = [{'name': row['city'], 'value': float(row['sum(rainfall)'])} for row in chart_data]
        elif chart_type == 'trend':
            recent_data = weather_df.filter(weather_df.date >= (datetime.now() - timedelta(days=30)).strftime('%Y-%m-%d'))
            trend_data = recent_data.groupBy("date").agg({"temperature": "avg", "humidity": "avg"}).orderBy("date").collect()
            temp_data = [float(row['avg(temperature)']) for row in trend_data]
            humidity_data = [float(row['avg(humidity)']) for row in trend_data]
            date_labels = [str(row['date']) for row in trend_data]
            result_data = {'temperature': temp_data, 'humidity': humidity_data, 'dates': date_labels}
        weather_comparison = weather_df.groupBy("city", "date").agg({"temperature": "max", "temperature": "min"}).collect()
        seasonal_analysis = weather_df.withColumn("season", when((month(col("date")).isin([12, 1, 2])), "winter").when((month(col("date")).isin([3, 4, 5])), "spring").when((month(col("date")).isin([6, 7, 8])), "summer").otherwise("autumn")).groupBy("season").agg({"temperature": "avg", "rainfall": "sum"}).collect()
        return JsonResponse({
            'chart_data': result_data,
            'comparison_data': [{'city': row['city'], 'date': str(row['date']), 'max_temp': float(row['max(temperature)']), 'min_temp': float(row['min(temperature)'])} for row in weather_comparison[:20]],
            'seasonal_data': [{'season': row['season'], 'avg_temp': float(row['avg(temperature)']), 'total_rain': float(row['sum(rainfall)'])} for row in seasonal_analysis]
        })

@csrf_exempt
def weather_info_management(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        action = data.get('action', '')
        if action == 'add':
            city = data.get('city', '')
            date = data.get('date', '')
            temperature = float(data.get('temperature', 0))
            humidity = float(data.get('humidity', 0))
            rainfall = float(data.get('rainfall', 0))
            wind_speed = float(data.get('wind_speed', 0))
            weather_data = spark.createDataFrame([(city, date, temperature, humidity, rainfall, wind_speed)], ["city", "date", "temperature", "humidity", "rainfall", "wind_speed"])
            weather_data.write.format("jdbc").option("url", "jdbc:mysql://localhost:3306/weather_db").option("dbtable", "weather_data").option("user", "root").option("password", "password").mode("append").save()
            duplicate_check = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/weather_db").option("dbtable", "weather_data").option("user", "root").option("password", "password").load().filter((col('city') == city) & (col('date') == date))
            if duplicate_check.count() > 1:
                return JsonResponse({'status': 'error', 'message': '该城市该日期的数据已存在'})
        elif action == 'update':
            record_id = data.get('id', '')
            update_fields = {}
            if 'temperature' in data:
                update_fields['temperature'] = float(data['temperature'])
            if 'humidity' in data:
                update_fields['humidity'] = float(data['humidity'])
            if 'rainfall' in data:
                update_fields['rainfall'] = float(data['rainfall'])
            if 'wind_speed' in data:
                update_fields['wind_speed'] = float(data['wind_speed'])
            conn = mysql.connector.connect(host='localhost', user='root', password='password', database='weather_db')
            cursor = conn.cursor()
            set_clause = ', '.join([f"{key} = %s" for key in update_fields.keys()])
            values = list(update_fields.values()) + [record_id]
            cursor.execute(f"UPDATE weather_data SET {set_clause} WHERE id = %s", values)
            conn.commit()
            cursor.close()
            conn.close()
        elif action == 'delete':
            record_id = data.get('id', '')
            conn = mysql.connector.connect(host='localhost', user='root', password='password', database='weather_db')
            cursor = conn.cursor()
            cursor.execute("DELETE FROM weather_data WHERE id = %s", (record_id,))
            conn.commit()
            cursor.close()
            conn.close()
        elif action == 'batch_import':
            file_path = data.get('file_path', '')
            import_df = spark.read.option("header", "true").option("inferSchema", "true").csv(file_path)
            cleaned_df = import_df.filter(import_df.temperature.isNotNull() & import_df.humidity.isNotNull())
            validated_df = cleaned_df.filter((cleaned_df.temperature >= -50) & (cleaned_df.temperature <= 60) & (cleaned_df.humidity >= 0) & (cleaned_df.humidity <= 100))
            validated_df.write.format("jdbc").option("url", "jdbc:mysql://localhost:3306/weather_db").option("dbtable", "weather_data").option("user", "root").option("password", "password").mode("append").save()
            return JsonResponse({'status': 'success', 'message': f'成功导入{validated_df.count()}条数据'})
        return JsonResponse({'status': 'success', 'message': '操作完成'})

西南天气数据的分析与应用系统文档展示

在这里插入图片描述

💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐