Python读取CSV文件+flask+echarts可视化实现的过程


前言

记录一下自己零基础实现Python读取CSV文件+flask+echarts可视化实现的过程,

关键:

  1. 查找资料了解已经成熟的实例,去看去分析。
  2. 找到源码,尝试改动,观察页面变化印证自己的想法。

一、整体组件

二、app.py

代码如下:

from flask import Flask,render_template
import pandas as pd

app = Flask(__name__)

@app.route('/')
def index():
   
    filename = './templates/data.csv' #注意CSV文件具体位置
    data = pd.read_csv(filename)
    dates = data['DATE'].values.tolist()  #从CSV文件提取到数据1和数据2
    value = data['TMAX'].values.tolist()  

    return render_template('index.html', xaxis=dates,value=value) #渲染HTML文件并传值

if __name__ == "__main__":
    app.run(host='127.0.0.1', debug=False)

二.index.html

代码如下:

<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title>刘凯凯的大屏幕</title>
    <script type="text/javascript" src="../static/js/jquery.js"></script>
    <link rel="stylesheet" href="../static/css/comon0.css">
</head>
<script type="text/javascript" src="../static/js/loading.js"></script>
<script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@5.3.3/dist/echarts.min.js"></script>
<script type="text/javascript" src="../static/js/china.js"></script>


<body>

<!--这是一个动态的粒子效果图,设置了透明度为0.2-->
<div class="canvas" style="opacity: 0.9">
    <iframe frameborder="0" src="../static/js/index.html" style="width: 100%; height: 100%"></iframe>
</div>

<!--这是一个在正式页面加载进来之前显示的加载小动画,文字可以修改-->
<div class="loading">
    <div class="loadbox"><img src="../static/picture/loading.gif"> 我正在加载中...</div>
</div>

<div class="head">

    <h1>超级天气预测平台</h1>

    <div class="weather">
        <img src="../static/picture/weather.png"><span>我是天气</span>
        <span id="showTime"></span>
    </div>

<!--    尝试放到js里面-->
    <script type="text/javascript" src="../static/js/showtime.js"></script>

</div>

<div class="mainbox">
    <ul class="clearfix">

        <!--        第1栏 -->
        <li>
            <div class="boxall" style="height: 8.2rem;width: 19.6rem">
                <div class="allnav" id="echart1" style="width: 1300px;height:500px;" ></div>
                <div class="boxfoot"></div>
            </div>
    </ul>
</div>
<div class="back"></div>

#从这开始引入echarts图表,上面需要加echarts的js样式
#id命名在上面被调用
<div id="echart1" ></div>
<script type="text/javascript">
    var dom = document.getElementById('echart1');
    var myChart = echarts.init(dom, null, {
      renderer: 'canvas',
      useDirtyRect: false
    });
    var app = {};

    var option;

    let base = +new Date(1968, 9, 3);
let oneDay = 24 * 3600 * 1000;
let date = [];           #这里进行数据填入,但是要注意flask框架下引入格式为:{{dates|safe}}
let data = [Math.random() * 300];
for (let i = 1; i < 20000; i++) {
  var now = new Date((base += oneDay));
  date.push([now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/'));
  data.push(Math.round((Math.random() - 0.5) * 20 + data[i - 1]));
}
option = {
  tooltip: {
    trigger: 'axis',
    position: function (pt) {
      return [pt[0], '10%'];
    }
  },
  title: {
    left: 'center',
    text: 'Large Area Chart'
  },
  toolbox: {
    feature: {
      dataZoom: {
        yAxisIndex: 'none'
      },
      restore: {},
      saveAsImage: {}
    }
  },
  xAxis: {
    type: 'category',
    boundaryGap: false,
    data: date
  },
  yAxis: {
    type: 'value',
    boundaryGap: [0, '100%']
  },
  dataZoom: [
    {
      type: 'inside',
      start: 0,
      end: 10
    },
    {
      start: 0,
      end: 10
    }
  ],
  series: [
    {
      name: 'Fake Data',
      type: 'line',
      symbol: 'none',
      sampling: 'lttb',
      itemStyle: {
        color: 'rgb(255, 70, 131)'
      },
      areaStyle: {
        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
          {
            offset: 0,
            color: 'rgb(255, 158, 68)'
          },
          {
            offset: 1,
            color: 'rgb(255, 70, 131)'
          }
        ])
      },
      data: data
    }
  ]
};

    if (option && typeof option === 'object') {
      myChart.setOption(option);
    }

    window.addEventListener('resize', myChart.resize);
  </script>
</body>
</html>

3.运行展示


  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个简单的二手房数据爬虫+Flask前端展示+Echarts可视化大项目的实现: 1. 爬虫部分 我们可以使用爬虫框架Scrapy来实现爬虫部分,具体步骤如下: 1)创建一个Scrapy项目 在终端中输入以下命令: ``` scrapy startproject house_spider ``` 这将会创建一个名为house_spider的Scrapy项目。 2)定义Item 在items.py文件中,定义我们需要爬取的字段,例如: ``` import scrapy class HouseSpiderItem(scrapy.Item): title = scrapy.Field() price = scrapy.Field() area = scrapy.Field() address = scrapy.Field() ``` 3)编写Spider 在spiders文件夹下创建一个名为house.py的Spider,定义爬取的规则和如何处理爬取到的数据。例如,我们可以从链家网爬取二手房数据: ``` import scrapy from house_spider.items import HouseSpiderItem class HouseSpider(scrapy.Spider): name = 'house' allowed_domains = ['lianjia.com'] start_urls = ['https://bj.lianjia.com/ershoufang/'] def parse(self, response): for item in response.css('.sellListContent li'): house = HouseSpiderItem() house['title'] = item.css('.title a::text').get() house['price'] = float(item.css('.totalPrice span::text').get()) house['area'] = float(item.css('.houseInfo span:nth-child(2)::text').re_first('\d+\.\d+')) house['address'] = item.css('.positionInfo a::text').get() yield house ``` 4)运行爬虫 在终端中输入以下命令,即可运行爬虫并输出结果: ``` scrapy crawl house -o houses.csv ``` 这将会把爬取到的数据保存到一个名为houses.csvCSV文件中。 2. Flask前端展示 我们可以使用Flask框架来实现前端展示部分,具体步骤如下: 1)创建一个Flask应用 在app.py文件中,创建一个Flask应用: ``` from flask import Flask, render_template import pandas as pd app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') ``` 2)读取爬取到的数据 在app.py文件中,读取CSV文件中的数据,并转化为Pandas DataFrame: ``` df = pd.read_csv('houses.csv') ``` 3)编写API接口 在app.py文件中,编写API接口,用于返回数据给前端: ``` from flask import jsonify @app.route('/data') def data(): return jsonify(df.to_dict(orient='records')) ``` 4)启动Flask应用 在终端中输入以下命令,即可启动Flask应用: ``` export FLASK_APP=app.py flask run ``` 3. Echarts可视化 我们可以使用Echarts实现可视化部分,具体步骤如下: 1)在index.html中引入Echarts库和jQuery库: ``` <script src="https://cdn.jsdelivr.net/npm/echarts@5.1.0/dist/echarts.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> ``` 2)在index.html中定义一个容器用于展示Echarts图表: ``` <div id="chart" style="width: 800px;height:400px;"></div> ``` 3)在index.html中编写JavaScript代码,用于调用API接口获取数据,并绘制Echarts图表: ``` <script> $(function() { $.getJSON('/data', function(data) { var chart = echarts.init(document.getElementById('chart')); var option = { title: { text: '二手房价格与面积关系图' }, tooltip: { trigger: 'axis', formatter: function(params) { return params[0].name + '<br/>' + params[0].data.area + '㎡' + '<br/>' + params[0].data.price + '万'; } }, xAxis: { type: 'value', name: '面积(㎡)', nameLocation: 'middle', nameGap: 25 }, yAxis: { type: 'value', name: '价格(万)', nameLocation: 'middle', nameGap: 45 }, series: [{ type: 'scatter', data: data, symbolSize: function(val) { return Math.sqrt(val.area); }, label: { show: true, formatter: function(params) { return params.data.title; } } }] }; chart.setOption(option); }); }); </script> ``` 4)刷新页面,即可看到二手房价格与面积关系的Echarts图表。 以上就是一个简单的二手房数据爬虫+Flask前端展示+Echarts可视化大项目的实现。当然,这只是一个简单的示例,实际项目中还需要考虑更多的细节和性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ykmk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值