import json
import pandas as pd
from flask import Flask, jsonify, render_template, redirect, url_for, session, flash,request
from pyecharts.charts import Map, HeatMap, Pie, Line, Bar
import pymysql
from pyecharts import options as opts
from 空气质量指数数据可视化.forms import loginForm
app = Flask(__name__)
app.config['SECRET_KEY'] = '123456'
def connt():
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='786120564', database='kongqi')
cursor = conn.cursor()
return cursor,conn
def close(cursor,conn):
cursor.close()
conn.close()
@app.route("/index")
def index():
return render_template("index.html")
@app.route("/")
def main():
return redirect(url_for('login'))
@app.route('/login', methods=['POST','GET'])
def login():
if request.method == 'GET':
form = loginForm()
return render_template('login.html', form=form)
form = loginForm(data=request.form)
print(form.username.data, form.password.data)
if form.validate_on_submit():
cursor, conn = connt()
cursor.execute('SELECT * FROM user where username=%s and password=%s',(form.username.data, form.password.data))
# 获取查询结果
user = cursor.fetchall()
close(cursor, conn)
if user:
flash('验证通过,登录成功')
return redirect(url_for('index'))
flash('没有校验成功')
return render_template('login.html', form=form)
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
# 处理表单提交
username = request.form['username']
password = request.form['password']
# 执行 SQL 更新
sql = "INSERT INTO user (username,password) values(%s,%s)"
cursor, conn = connt()
cursor.execute(sql, (username, password))
conn.commit()
close(cursor, conn)
# 重定向到用户列表页
return redirect('/login')
else:
return render_template('register.html')
# @app.route("/")
# def index():
# map_data = echart1()
# hot_data = echart2()
# pie_data = echart3()
# line_data = echart4()
# pie1_data = echart5()
# bar_data = echart6()
# return render_template("index.html",map_data=map_data,hot_data =hot_data, pie_data=pie_data,line_data=line_data,pie1_data=pie1_data,bar_data=bar_data)
# return render_template("index.html")
import cpca
# 编写将城市名称转换为省份名称的函数
def get_province(city):
location = cpca.transform([city])
return location.iloc[0]["省"]
def search(sql):
db_params = {
"host": "127.0.0.1",
"user": "root",
"password": "786120564",
"database": "kongqi",
"port": 3306,
"charset": "utf8mb4", # Adjust the charset based on your database configuration
}
# Establish a connection to the MySQL database
conn = pymysql.connect(**db_params)
try:
# Use pandas to read data from MySQL
df = pd.read_sql(sql, con=conn)
finally:
# Close the database connection
conn.close()
return df
@app.route("/echart1")
def echart1():
name_dic = {'北京': '北京市', '天津': '天津市', '河北': '河北省', '山西': '山西省', '内蒙古': '内蒙古自治区',
'辽宁': '辽宁省', '吉林': '吉林省'
, '黑龙江': '黑龙江省', '上海': '上海市', '江苏': '江苏省', '浙江': '浙江省', '安徽': '安徽省',
'福建': '福建省', '江西': '江西省',
'山东': '山东省', '河南': '河南省', '湖北': '湖北省', '湖南': '湖南省', '广东': '广东省',
'广西': '广西壮族自治区', '海南': '海南省',
'重庆': '重庆市', '四川': '四川省', '贵州': '贵州省', '云南': '云南省', '西藏': '西藏自治区',
'陕西': '陕西省',
'甘肃': '甘肃省', '青海': '青海省', '宁夏': '宁夏回族自治区', '新疆': '新疆维吾尔自治区'}
query = "SELECT cityname, AVG(aqi) AS avg_aqi FROM data GROUP BY cityname"
df = search(query)
# Apply the get_province function to the "cityname" column
df['province'] = df['cityname'].apply(get_province)
# Group by "province" and calculate the average of "avg_aqi"
df_grouped = df.groupby("province")['avg_aqi'].mean().reset_index()
# Convert DataFrame to lists for provinces and values
provinces = df_grouped['province'].tolist()
values = df_grouped['avg_aqi'].astype(int).tolist()
print('provinces', provinces)
print('values', values)
c = (
Map(init_opts=opts.InitOpts(width='350px',
height='300px',
page_title='page'))
.add("省份", [list(z) for z in zip(provinces, values)], "china",name_map=name_dic,is_map_symbol_show=True)
.set_global_opts(
title_opts=opts.TitleOpts(title="2022年全国各省份平均aqi",title_textstyle_opts=(opts.TextStyleOpts(color='white')),pos_left='center'),
visualmap_opts=opts.VisualMapOpts(max_=100, split_number=5, is_piecewise=True,textstyle_opts=(opts.TextStyleOpts(color='white'))),
)
).set_series_opts(label_opts=opts.LabelOpts(is_show=True,color="white"))
# map_data = c.render_embed()
chart_data = c.dump_options_with_quotes()
return jsonify(chart_data)
@app.route("/echart2")
def echart2():
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='786120564',
db='kongqi')
df = pd.read_sql("SELECT aqi,pm2_5,pm10,so2,no2,co,o3 FROM data", con=conn)
corr_df = df.corr()
values = corr_df.values
x_data = df.columns.tolist()
triplets = []
for i, row in enumerate(values):
for j, value in enumerate(row):
triplets.append((i, j, round(value,2)))
c = (
HeatMap()
.add_xaxis(x_data)
.add_yaxis(
"污染物相关性",
x_data,
triplets,
label_opts=opts.LabelOpts(is_show=True, position="inside"),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="污染物相关性",title_textstyle_opts=(opts.TextStyleOpts(color='white'))),
legend_opts=opts.LegendOpts(
pos_top="20px",
pos_left="center",
textstyle_opts=opts.TextStyleOpts(color="#FFFFFF", font_size=14),
selected_mode="multiple",
),
xaxis_opts=opts.AxisOpts(
name_gap=30,
axislabel_opts=opts.LabelOpts(color="#FFFFFF", font_size=12),
axisline_opts=opts.AxisLineOpts(is_on_zero=False),
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(width=1))
),
yaxis_opts=opts.AxisOpts(
name_gap=30,
axislabel_opts=opts.LabelOpts(color="#FFFFFF", font_size=12),
axisline_opts=opts.AxisLineOpts(is_on_zero=False),
axistick_opts=opts.AxisTickOpts(is_show=True),
splitline_opts=opts.SplitLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(width=1))
),
visualmap_opts=opts.VisualMapOpts(max_=1, min_=-1, pieces=[
{"min": 0.5, "max": 1,"label": '0.5-1'},
{"min": 0.2, "max": 0.5,"label": '0.2-0.5'},
{"min": 0, "max": 0.2,"label": '0-0.2'},
{"min": -1, "max": 0, "label": '-1-0'},
],is_piecewise = True,textstyle_opts=(opts.TextStyleOpts(color='whit
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
空气质量指数数据可视化(pandas).zip (29个子文件)
空气质量指数数据可视化(pandas)
chuli.py 411B
app.py 20KB
res.py 4KB
templates
register.html 1KB
login.html 2KB
index.html 5KB
map.html 10KB
air_2022.csv 5.77MB
kongqi.sql 11.55MB
static
font
DS-DIGI.TTF 0B
DS-DIGII.TTF 0B
DS-DIGIB.TTF 0B
DS-DIGIT.TTF 0B
js
js.js 110B
echarts.all.js 7KB
china.js 117KB
echarts.min.js 727KB
jquery-1.11.1.min.js 94KB
jquery.js 82KB
echart1.js 0B
css
style.css 4KB
bootstrap.css 193KB
images
loading.gif 701B
bg3.png 193KB
img2.png 2KB
head.jpg 3KB
bg.png 657KB
img1.png 3KB
forms.py 555B
共 29 条
- 1
资源评论
britlee
- 粉丝: 65
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 维伦触摸屏开机初始化和自动返回主界面
- (精品)通信电源培训教材-理论知识.ppt
- 基于python开发一个支持多用户在线的FTP程序
- python:编写数据分析代码 生成数据,写入表格,从表格中读取数据,数据展示,数据排序 计算数据最大值,最小值,均值,中位数
- (考研复试)数据库笔记.doc
- Java开发的实验教学平台.rar
- 矩阵运算-基于numpy矩阵运算实现ESTI-CS算法.zip
- TI杯大奖赛本科组+研究生组论文+源代码+PCB基于msp430的智能宿舍
- 圆三角形矩形检测数据集VOC+YOLO格式228张3类别.7z
- TI杯大奖赛本科组+研究生组论文+源代码+PCB基于MSP430的智能电能表设计
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功