import json
import pandas as pd
from flask import Flask, jsonify, render_template, redirect, url_for, session, flash,request
import pymysql
from pyspark.sql.types import StringType
from sqlalchemy import create_engine,text
from forms import loginForm
app = Flask(__name__)
app.config['SECRET_KEY'] = '123456'
@app.route("/")
def index():
return render_template("index.html")
@app.route("/echart1")
def echart1():
# 连接到MySQL数据库
engine = create_engine('mysql+pymysql://root:786120564@127.0.0.1/tianqi')
connection = engine.connect()
# 从数据库中读取数据
df = pd.read_sql(sql=text('SELECT 城市,风向,风速,时间 FROM 24h where 城市="北京"'), con=connection)
# 定义一个函数来将风向转换为文本
def get_wind_direction(x):
if (x > 337.5) or (x <= 22.5):
return "N"
elif (x > 22.5) and (x <= 67.5):
return "NE"
elif (x > 67.5) and (x <= 112.5):
return "E"
elif (x > 112.5) and (x <= 157.5):
return "SE"
elif (x > 157.5) and (x <= 202.5):
return "S"
elif (x > 202.5) and (x <= 247.5):
return "SW"
elif (x > 247.5) and (x <= 292.5):
return "W"
elif (x > 292.5) and (x <= 337.5):
return "NW"
else:
return None
df['风向'] = df['风向'].apply(get_wind_direction)
df['时间'] = df['时间']
print(df)
# 将 '时间' 列转换为时间戳
df['时间'] = pd.to_datetime(df['时间'])
df['时间'] = df['时间'].apply(lambda x: x.timestamp())
# 将三列数据组成一个数组
array = df[['时间', '风速', '风向']].to_numpy()
print(array)
# 渲染模板并传入图表对象
return jsonify(array.tolist())
@app.route("/echart2")
def echart2():
# 连接到MySQL数据库
engine = create_engine('mysql+pymysql://root:786120564@127.0.0.1/tianqi')
query = "SELECT 温度,相对湿度 FROM 24h WHERE 城市='北京'"
df = pd.read_sql(sql=text(query), con=engine.connect())
array = df.values.tolist()
print(array)
return jsonify(array)
@app.route("/echart3")
def echart3():
# 连接到MySQL数据库
engine = create_engine('mysql+pymysql://root:786120564@127.0.0.1/tianqi')
# 查询SQL语句
query = "SELECT 城市,日期,最高温度,最低温度 FROM tempchart where 城市='北京'"
# 使用pandas读取数据
df = pd.read_sql(sql=text(query), con=engine.connect())
# 转换日期格式
df['日期'] = pd.to_datetime(df['日期'], format='%Y-%m-%d')
# 筛选日期
df = df[df['日期'] < '2023-04-20']
# 提取数据
date = df['日期'].apply(lambda x: x.strftime('%Y-%m-%d')).tolist()
array1 = df['最高温度'].tolist()
array2 = df['最低温度'].tolist()
return jsonify({'date':date,'array1':array1,'array2':array2})
@app.route("/echart4")
def echart4():
# 连接到MySQL数据库
engine = create_engine('mysql+pymysql://root:786120564@127.0.0.1/tianqi')
# 查询SQL语句
query = "SELECT 城市,日期,白天温度,夜晚温度 FROM predict where 城市='北京'"
# 使用pandas读取数据
df = pd.read_sql(sql=text(query), con=engine.connect())
df['日期'] = pd.to_datetime(df['日期'], format='%Y-%m-%d')
date = df['日期'].tolist()
array1 = df['白天温度'].tolist()
array2 = df['夜晚温度'].tolist()
return jsonify({'date': date, 'array1': array1, 'array2': array2})
@app.route("/echart5")
def echart5():
# 连接到MySQL数据库
engine = create_engine('mysql+pymysql://root:786120564@127.0.0.1/tianqi')
# 从MySQL数据库中获取数据
query = "SELECT 城市,降雨量 FROM rain24h"
df = pd.read_sql(sql=text(query), con=engine.connect())
# 选取并显示前十个降雨量最高的城市
top_10_rainfall = df.sort_values('降雨量', ascending=False).head(10)
print(top_10_rainfall)
# 将城市和降雨量分别存储在列表中
city = top_10_rainfall['城市'].tolist()
array = top_10_rainfall['降雨量'].tolist()
return jsonify({'array':array,'city':city})
@app.route("/echart6")
def echart6():
# 连接到MySQL数据库
engine = create_engine('mysql+pymysql://root:786120564@127.0.0.1/tianqi')
# 从MySQL数据库中获取数据
query = "SELECT 城市,降雨量 FROM rain1h"
df = pd.read_sql(sql=text(query), con=engine.connect())
# 选取并显示前十个降雨量最高的城市
top_10_rainfall = df.sort_values('降雨量', ascending=False).head(10)
print(top_10_rainfall)
# 将城市和降雨量分别存储在列表中
city = top_10_rainfall['城市'].tolist()
array = top_10_rainfall['降雨量'].tolist()
return jsonify({'array':array,'city':city})
import cpca
# 编写将城市名称转换为省份名称的函数
def get_province(city):
location = cpca.transform([city])
return location.iloc[0]["省"]
@app.route("/echart7")
def echart7():
# 连接到MySQL数据库
engine = create_engine('mysql+pymysql://root:786120564@127.0.0.1/tianqi')
# 从MySQL数据库中获取数据
query = "SELECT 城市,温度 FROM day"
df = pd.read_sql(sql=text(query), con=engine.connect())
print(df)
# 将 get_province() 函数应用于城市列,并添加省份列
df['province'] = df['城市'].apply(get_province)
# 根据省份列进行分组,并计算每个省份的平均温度
df = df.groupby('province')['温度'].mean().reset_index()
df.columns = ['province', 'avg(温度)']
# 将结果转换为键值对列表
array = df.to_dict('records')
array = [{'name': i['province'], 'value': round(i['avg(温度)'], 2)} for i in array]
print(array)
return jsonify(array)
if __name__ == "__main__":
app.run(debug=True,port=5004)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
当我们想要了解某个地区的天气趋势,或者进行天气数据的分析时,爬取并可视化天气数据是一个有趣而且有用的项目。在这篇博客中,我将介绍如何使用Python来爬取天气数据,并对其进行数据可视化分析。我们将使用Python中的一些流行的库,如Requests、pandas和flask来构建气象数据可视化网站
资源推荐
资源详情
资源评论
收起资源包目录
气象数据可视化.zip (35个子文件)
气象数据可视化
allcsv
tempchart.csv 957KB
predict.csv 581KB
rain24h.csv 587B
dataday.csv 165KB
data24h.csv 3.52MB
citycode.csv 35KB
rain1h.csv 564B
app.py 6KB
tianqi.sql 8.86MB
templates
register.html 848B
login.html 2KB
admin.html 1KB
index.html 28KB
add.html 850B
edit.html 892B
read me 339B
爬取城市code.py 865B
爬虫.py 6KB
static
font
DS-DIGI.TTF 24KB
DS-DIGII.TTF 24KB
DS-DIGIB.TTF 24KB
DS-DIGIT.TTF 25KB
js
echarts.all.js 7KB
china.js 60KB
echarts.min.js 753KB
jquery-1.11.1.min.js 94KB
echart1.js 0B
css
normalize.css 8KB
bootstrap.css 193KB
comon0.css 5KB
images
loading.gif 701B
1.jpg 85KB
bg.jpg 252KB
head_bg.png 8KB
forms.py 555B
共 35 条
- 1
资源评论
britlee
- 粉丝: 62
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 20240420-扬州高中小学部风雨操场转换层条件图r.dwg
- 小猫咪邮件在线发送系统源码v1.1,支持添加附件
- 永磁电机铜耗估算表-Excel-v1.0
- 参考资料-人工智能对劳动力市场的影响机制研究.pdf
- 协同供应链集成产品介绍V71sp1.rar
- 上市公司-人工智能的采纳程度面板数据(2003-2021年).xlsx
- 参考资料-人工智能技术应用对就业的影响及作用机制研究-来自制造业企业的微观证据.pdf
- 第5章spring-mvc请求映射处理
- 2023-04-06-项目笔记 - 第一百十六阶段 - 4.4.2.114全局变量的作用域-114 -2024.04.27
- 协同供应链集成产品介绍V70.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功