【Python+Flask+Echarts】可视化练习题 ---- 2018年12月份1号-10号全国大部分城市的站点PM2.5检测



可视化练习题 ---- 2018年12月份1号-10号全国大部分城市的站点PM2.5检测

近些年空气污染在我国很多地区非常严重,其中PM2.5作为衡量空气质量的一个重要指标,当前数据为2018年12月份1号-10号全国大部分城市的站点检测数据。接下来我们将这些数据进行可视化来看下PM2.5的分布情况。


一、柱状图输出合肥、黄山、芜湖的PM2.5指数

数据预处理

import pandas  as pd
import numpy as np
from flask import Flask,render_template

# 利用柱状图输出合肥、黄山、芜湖的PM2.5指数,Y轴表示PM2.5的平均数,X轴表示城市名称

# 1.读取数据
data = pd.read_csv(r"G:\Projects\pycharmeProject-C\Flask\dataset\airpm25.txt",sep=",",names=['日期','pm','城市','地区'])
print(data.dtypes)
print(data.isnull().sum()) # 检查空值

# 2.提取有效信息
def city_info(city):
    data_city = data.loc[data['城市']==city,:]
    result = data_city['pm'].mean() # 获取pm均值
    return result
hefei = city_info("合肥")     # 提取合肥信息
huangshan = city_info("黄山") # 提取黄山信息
wuhu = city_info("芜湖")      # 提取芜湖信息
list = [hefei, huangshan, wuhu]  # 合并信息
names = ["合肥","黄山","芜湖"]

可视化Flask框架

app = Flask(__name__) # 实例化
@app.route("/")       # 构建视图 
def index():
    return render_template("airpm2501_柱状图.html",sheet = list,name_list = names)
if __name__ == '__main__':
    app.run(debug=True) # 运行

HTML前端渲染

<!DOCTYPE html>
<html lang="en" style="height:100%">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body style="height:100%">
<div style="height:100%" id="container"></div>
<script type="text/javascript" src="../static/echarts.min.js"></script>
<script type="text/javascript">
    var dom = document.getElementById("container");
    var myChart = echarts.init(dom);

    var names = [{
     
     % for item in name_list %}'{
     
     { item }}',{
     
     % endfor %}];
    var values = [{
     
     % for item in sheet %}{
     
     {
     
      item }},{
     
     % endfor %}];

    var option = null;
    option = {
     
     
       tooltip:{
     
     
         trigger:'axis',
         axisPointer:{
     
     
           type:'shadow'
         }
       },
       grid:{
     
     
         top:'5%',
         bottom:'3%',
         right:'4%',
         left:'4%',
         containLabel:true
       },
       legend:{
     
     
         show:true
       },
       xAxis:{
     
     
         type:'category',
         data:names
       },
       yAxis:{
     
     
         type:'value',
       },
       series:[
         {
     
     
            name:'PM平均值',
            type:'bar',
            data:values,
            itemStyle:{
     
                 # 柱状图item触发背景效果
               shadowBlur:10,
               shadowColor:'rgba(0,0,0,0.5)',
               shadowOffSetX:10
            }
         }
       ]
    };
    if (option && typeof option == "object"){
     
     
      myChart.setOption(option);
    }
</script>
</body>
</html>

在这里插入图片描述

返回顶部


二、折线图绘制合肥、黄山、芜湖的PM2.5平均值的变化

数据预处理

import numpy as np
import pandas as pd
from flask import Flask,render_template

# 用折线图,画出合肥、黄山、芜湖各城市随时间的pm2.5平均值的变化要求将输出的折线图保存成图像文件,Y轴表示pm2.5的平均值,X轴表示日期

# 1.读取数据
data = pd.read_csv(r"G:\Projects\pycharmeProject-C\Flask\dataset\airpm25.txt",sep=",",names=['日期','pm','城市','地区'])

# 2.转换日期格式
data['日期'] = [item[0:4]+"-"+item[4:6]+"-"+item[6:8] for item in data["日期"].astype("str")] # 首先转化日期数据格式
data['day'] = [item.split("-")[2] for item in data["日期"]]
# 提取日期信息 --- 几号
days = data['day'].drop_duplicates().values.tolist()
citys = ["合肥","黄山","芜湖"]
# 定义方法获取每周的信息
def catch():
    city_data = []
    for city in citys: # 遍历城市
        day_data = []
        for day in days: # 遍历日期
            data_info = data.loc[data['day']== day,:]    # 提取对应天数信息
            data_info = data_info.loc[data['城市'] == city,:] # 提取对应城市信息
            pm_mean = data_info['pm'].mean() # 求取对应城市某一月的pm均值
            day_data.append([day,city,pm_mean])
        city_data.append(day_data)
    return city_data
city_data = catch()

可视化Flask框架

app = Flask(__name__)
@app.route("/")
def index():
    return render_template("airpm2502_折线图.html",sheet = city_data)
if __name__ == '__main__':
    app.run(debug=True)

HTML渲染

<!DOCTYPE html>
<html lang="en" style="height:100%">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body style="height:100%">
<div style="height:100%" id="container"></div>
<script type="text/javascript" src="../static/echarts.min.js"></script>
<script type="text/javascript">
    var dom = document.getElementById("container");
    var myCharts = echarts.init(dom);

    var xlabel = [{
     
     %  for item in sheet.0 %}'{
     
     { item.0 }}',{
     
     % endfor %}];
    var data1 = [{
     
     %  for item in sheet.0 %}{
     
     {
     
      item.2 }},{
     
     % endfor %}];
    var data2 = [{
     
     %  for item in sheet.1 %}{
     
     {
     
      item.2 }},{
     
     % endfor %}];
    var data3 = [{
     
     %  for item in sheet.2 %}{
     
     {
     
      item.2 }},{
     
     % endfor %}];

    var option = null;
    option = {
     
     
       title:[
         {
     
     
            text:"合肥、黄山、芜湖各城市随时间的PM均值变化折线图",
            right:'35%'
         },{
     
     
            subtext:"2018年12月份",
            bottom:'0%',
            left:'50%'
         },{
     
     
            subtext:"PM平均值",
             textVerticalAlign:'auto',
            top:'50%',
            left:'0%'
         }
       ],
       tooltip:{
     
     
         trigger:'axis',
         axisPointer:{
     
     
           type:'cross'
         }
       },
       grid:{
     
     
         top:'8%',
         bottom:'3%',
         right:'4%',
         left:'4%',
         containLabel:true
       },
       legend:{
     
     
         show:true,
         top:'4%',
         right:'4%'
       },
       xAxis:{
     
     
         type:'category',
         data:xlabel,
         boundaryGap:true,
         axisTick:{
     
     
            show:true,
            alignWithLabel:true
         },
         axisLine:{
     
     
            show:true
         },
         axisLabel:{
     
     
            rotate:0,
            interval:0
         }
       },
       yAxis:{
     
     
         type:'value'
       },
       series:[
         {
     
     
            name:'合肥月度PM均值',
            type:'line',
            data:data1,
         },{
     
     
            name:'黄山月度PM均值',
            type:'line',
            data:data2,
         },{
     
     
            name:'芜湖月度PM均值',
            type:'line',
            data:data3,
         }
       ]
    };
    if (option && typeof option == "object"){
     
     
       myCharts.setOption(option);
    }
</script>
</body>
</html>

在这里插入图片描述

返回顶部


三、柱线混合图形画出合肥市的高新区和庐阳区的pm2.5的值。

数据预处理

import numpy as np
import pandas as pd
from flask import Flask,render_template

# 用柱线混合图形画出合肥市的高新区和庐阳区的pm2.5的值。要求将输出的折线图保存成图像文件,X轴表示时间,柱状表示高新区 的pm2.5的值,线形表示庐阳区的pm2.5的值。

# 1.读取数据
data = pd.read_csv(r"G:\Projects\pycharmeProject-C\Flask\dataset\airpm25.txt",sep=",",names=['日期','pm','城市','地区'])

# 2.转换日期格式
data['日期'] = [item[0:4]+"-"+item[4:6]+"-"+item[6:8] for item in data["日期"].astype("str")] # 首先转化日期数据格式
data['day'] = [item.split("-")[2] for item in data["日期"]]
# 提取日期信息 --- 几号
days = data['day'].drop_duplicates().values.tolist()
areas = ["高新区","庐阳区"]

# 定义方法获取区域信息
def catch():
    area_data = []
    for area in areas:
        for day in days:
            dataa = data.loc[data['地区'] == area, :] # 获取对应地区信息
            datab = dataa.loc[data['城市'] == "合肥", :] # 获取对应城市信息
            datac = datab.iloc[:, 1:].values.tolist() # 转变数据形式 --- 利于传输
        area_data.append(datac)
    return area_data
area_data = catch()

可视化Flask框架

# 可视化
app = Flask(__name__)
@app.route("/")
def index():
    return render_template("airpm2503_折柱混合图.html", sheet=area_data)
if __name__ == '__main__':
    app.run(debug=True)

HTML渲染

<!DOCTYPE html>
<html lang="en" style="height:100%">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body style="height:100%">
<div id="container" style="height:100%"></div>
<script type="text/javascript" src="../static/echarts.min.js"></script>
<script type="text/javascript">
    var dom = document.getElementById("container");
    var myCharts = echarts.init(dom);

    var x_label = [{
     
     % for item in sheet.0  %}'{
     
     {  item.3 }}',{
     
     % endfor %}];
    var data1 = [{
     
     % for item in sheet.0 %}{
     
     {
     
      item.0 }},{
     
     % endfor %}];
    var data2 = [{
     
     % for item in sheet.1 %}{
     
     {
     
      item.0 }},{
     
     % endfor %}];

    var option = null;
    option = {
     
     
       title:{
     
     
          text:"合肥市高新区、庐阳区PM值变化统计图",
          right:'35%'
       },
        tooltip:{
     
     
         trigger:'axis',
         axisPointer:{
     
     
           type:'cross'
         }
       },
       grid:{
     
     
         top:'8%',
         bottom:'3%',
         right:'4%',
         left:'4%',
         containLabel:true
       },
       legend:{
     
     
         show:true,
         top:'4%',
         right:'4%'
       },
       xAxis:{
     
     
         type:'category',
         data:x_label
       },
       yAxis:{
     
     
         type:'value'
       },
       series:[
         {
     
     
            name:'高新区PM值',
            type:'bar',
            data:data1,
            axisPointer:{
     
     
               type:'shadow'
            }
         },{
     
     
            name:'庐阳区PM值',
            type:'line',
            data:data2,
            axisPointer:{
     
     
              type:'cross'
            }
         }
       ]
    };
    if (option && typeof option == "object"){
     
     
      myCharts.setOption(option);
    }
</script>
</body>
</html>

在这里插入图片描述

返回顶部


猜你喜欢

转载自blog.csdn.net/qq_45797116/article/details/113847337
今日推荐