flask + Pandas + echarts 使用饼状图等将二手房数据进行分析+可视化

2023-11-02

目录

一、实战场景

二、知识点

python 基础语法

python 文件读写

pandas 数据处理

flask web 框架

echarts 图表

bootstrap

jinja 模版

三、菜鸟实战

初始化 Flask 框架,设置路由

各行政区房屋数量柱状图分析

区域二手房房源朝向分布情况

二手房单价最高Top10 图

echarts 渲染房屋数量柱状图

运行结果

运行截图

数据示例


一、实战场景

flask + Pandas + echarts 使用饼状图等将二手房数据进行分析+可视化

二、知识点

python 基础语法

python 文件读写

pandas 数据处理

flask web 框架

echarts 图表

bootstrap

jinja 模版

三、菜鸟实战

初始化 Flask 框架,设置路由

'''
Description: 分页读取并显示 csv 文件数据
'''
from math import ceil
import csv
import json

from flask import Flask, render_template, request, redirect, jsonify
from spiders.file_manager import FileManager

# 初始化框架
web = Flask(__name__)


@web.route('/')
def index():
    # 首页
    return redirect('/list')


@web.route('/table/<int:page_num>')
def table(page_num):
    # 分页读取并显示 csv 文件数据
    file_manager = FileManager()
    file = file_manager.get_data_file_path("tao365_detail.csv")

    # 若不指定limits默认为 5
    limits = request.args.get('limits', 5, type=int)

    def show_csv(reader, page=page_num, limits=limits):
        # 内部函数,根据limits和所在页数生成数据
        df = []
        for row in reader:
            if page_num * limits >= (reader.line_num - 1) > (page_num - 1) * limits:
                df.append(row)

        return df

    with open(file, 'r+', encoding='utf-8') as f:
        # 计算页面数
        row_length = len(f.readlines()) - 1
        pages = int(ceil(row_length / limits))

    with open(file, 'r+', encoding='utf-8') as f:
        # 计算数据
        reader = csv.reader(f)
        next(reader)
        df = show_csv(reader, page_num, limits)

    # 加载模版和模版数据
    return render_template('table.html', df=df, pages=pages, page_num=page_num, limits=limits)


@web.route('/table_detail')
def table_detail():
    # 二手房详情
    row = request.args.get('row').split(',')
    return render_template('table_detail.html', row=row)

@web.route('/list')
def list_house():
    # 二手房列表
    return render_template('list.html')

@web.route('/chart1')
def chart1():
    # 柱状图
    return render_template('chart1.html')

@web.route('/chart2')
def chart2():
    # 横向柱状图
    return render_template('chart2.html')

@web.route('/chartBie')
def chartBie():
    # 饼图
    return render_template('chartBie.html')

@web.route('/chart_data')
def chart_data():
    # 获取图标数据

    # 图标类型
    type = request.args.get("type")

    # 二手房数据
    file_name = 'chart00' + type+'.json'
    file_manager = FileManager()
    file = file_manager.get_data_file_path(file_name)
    # file = os.path.join(config.DATA_DIR,'chart00'+ type+'.json' )
    with open(file, encoding='utf8') as fp:
        data_list = json.load(fp)

    return jsonify(data_list)


# 启动 flask web 框架
web.run(debug=True)

各行政区房屋数量柱状图分析

def chart002(self):
    # 柱状图 - 展示各行政区房屋数量

    # 读取清洗后的数据文件
    result_df = self.read_clean_result_file()

    # 从字典对象导入数据
    df = pd.DataFrame(result_df)

    # 将数据根据地址分组
    g = df.groupby('地址')

    # 统计分组后的数量
    df_region = g.count()['小区']

    # 获取分组后的地址数据
    address = df_region.index.tolist()

    # 获取分组后的数量
    count = df_region.values.tolist()

    # 定义表格顶部title
    title = "各行政区房屋数量"

    # 定义表格顶部说明
    text = self.top_text

    # 定义图表title
    chart_title = '各行政区房屋数量'

    # 图表横坐标
    chart_x = '所在地区'

    # 图表纵坐标
    chart_y = '房源数量/套'

    # 图表单位
    unit = '套'

    # 图表类型
    types = 'bar'

    # 组装图表json数据
    data_json = {
        'data1': address,
        'data2': count,
        'title': title,
        'text': text,
        'chartTitle': chart_title,
        'chartX': chart_x,
        'chartY': chart_y,
        'unit': unit,
        'type': types
    }

    #  将json数据写入文件
    with open('../data/chart002.json', 'w', encoding='utf-8') as write_f:  # 打开本地文件

        json.dump(data_json, write_f, indent=4, ensure_ascii=False)  # python对象转换成json对象

区域二手房房源朝向分布情况

def chart005(self):
    # 柱状图 - 南京各区域二手房房源朝向
    
    # 读取清洗后的数据文件
    result_df = self.read_clean_result_file()

    # 从字典对象导入数据
    df = pd.DataFrame(result_df)

    # 将数据根据房屋朝向分组
    g = df.groupby('房屋朝向')

    # 统计分组后的数量
    df_region = g.count()['小区']

    # 获取分组后的房屋朝向分组数据
    address = df_region.index.tolist()

    # 获取分组后的房屋朝向数量
    count = df_region.values.tolist()

    # 定义表格顶部title
    title = "区域二手房房源朝向分布情况"

    # 定义表格顶部说明
    text = self.top_text

    # 定义图表说明
    chart_title = '各区域二手房房源朝向分布情况'

    # 定义图表横坐标
    chart_x = ''

    # 定义图表纵坐标
    chart_y = '建筑面积(㎡)'

    # 定义单位
    unit = ''

    # 定义图表类型
    types = 'bar'

    # 组装图表json数据
    data_json = {
        'data1': address,
        'data2': count,
        'title': title,
        'text': text,
        'chartTitle': chart_title,
        'chartX': chart_x,
        'chartY': chart_y,
        'unit': unit,
        'type': types
    }

    #  将json数据写入文件
    with open('../data/chart005.json', 'w', encoding='utf-8') as write_f:  # 打开本地文件

        json.dump(data_json, write_f, indent=4, ensure_ascii=False)  # python对象转换成json对象

二手房单价最高Top10 图

def chart008(self):
    # 横向柱状图 - 各面积区间房屋数量占比图
    
    # 读取清洗后的数据文件
    result_df = self.read_clean_result_file()

    # 从字典对象导入数据
    df = pd.DataFrame(result_df)

    # 取出每平方价格列前10的数据
    top_price = df.sort_values(by="每平方价格", ascending=False)[:10]
   
    # 取出每平方价格列前10的小区数据
    area0 = top_price['小区'].values.tolist()

    # 取出每平方价格列前10的价格数据
    count = top_price['每平方价格'].values.tolist()

    arr = []

    color_arr = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22",
                 "#17becf"
                 ]
    for k, i in enumerate(count):
        arr.append({'value': i, 'itemStyle': {'color': color_arr[k]}})
    # 定义表格顶部title
    title = "二手房单价最高Top10"

    # 定义表格顶部说明
    text = self.top_text

    # 图表title
    chart_title = '二手房单价最高Top10'

    # 组装图表json数据
    data_json = {
        'data1': area0,
        'data2': arr,
        'title': title,
        'text': text,
        'chartTitle': chart_title,
    }

    #  将json数据写入文件
    with open('../data/chart008.json', 'w', encoding='utf-8') as write_f:  # 打开本地文件

        json.dump(data_json, write_f, indent=4, ensure_ascii=False)  # python对象转换成json对象

echarts 渲染房屋数量柱状图

function drawCharts(data) {
    var optionMap = {
        title: {
            text: data.chartTitle,
            left: 'center',
        },
        tooltip: {
            trigger: 'axis',
            axisPointer: {
                type: 'shadow'
            },
        },
        toolbox: {
            feature: {
                saveAsImage: {
                    title: ''
                }
            }
        },
        grid: {
            left: '3%',
            right: '4%',
            bottom: '3%',
            containLabel: true
        },
        xAxis: {
            type: 'value',
            boundaryGap: [0, 0.01]
        },
        yAxis: {
            type: 'category',
            data: data.data1
        },
        series: [{
            type: 'bar',
            data: data.data2
        }, ]
    };
    //初始化echarts实例
    var myChart = echarts.init(document.getElementById('dom1'));

    //使用制定的配置项和数据显示图表
    myChart.setOption(optionMap);

}

运行结果

运行截图

* Serving Flask app 'app_tao06'

* Debug mode: on

* Running on http://127.0.0.1:5000

浏览器中打开 http://127.0.0.1:5000

数据示例

各区域房源朝向分布情况

各区域房屋数量统计

二手房户型占比统计

二手房单价最高Top10

源码链接

源码-flask+Pandas+echarts使用饼状图等将二手房数据进行分析+可视化-Python文档类资源-CSDN下载

菜鸟实战,持续学习!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flask + Pandas + echarts 使用饼状图等将二手房数据进行分析+可视化 的相关文章

  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

    当我尝试使用 uWSGI 启动 Flask 时 出现以下错误 我是这样开始的 gt cd gt root localhost uwsgi socket 127 0 0 1 6000 file path to folder run py ca
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject

随机推荐

  • Ubuntu下无法看到共享文件夹的解决办法

    参考 Ubuntu下无法看到共享文件夹的解决办法 作者 一只青木呀 发布时间 2020 08 07 10 09 04 网址 https blog csdn net weixin 45309916 article details 107856
  • 爆款小程序是如何诞生的?

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文首发在云 社区 未经许可 不得转载 作者 黄荣奎 腾讯云微信小程序解决方案负责人 今年可以说是小程序的元年 各类游戏 店商 旅游类的小程序如雨后春笋般涌现 我想在座的朋友大家或多
  • 使用公网访问内网IIS网站服务器【无需公网IP】

    使用公网访问内网IIS网站服务器 无需公网IP 文章目录 使用公网访问内网IIS网站服务器 无需公网IP 前言 1 注册并安装cpolar 2 创建隧道映射 3 获取公网地址 前言 这里介绍通过内网穿透 实现公网访问内网IIS网站服务器 都
  • C++ 时间函数整理详解

    一 时间概念 格林威治时间 GMT Greenwich Mean Time 格林威治皇家天文台为了海上霸权的扩张计划 在十七世纪就开始进行天体观测 为了天文观测 选择了穿过英国伦敦格林威治天文台子午仪中心的一条经线作为零度参考线 这条线 简
  • java连接mysql数据库测试用例

    文章目录 java连接mysql数据库测试用例超详细 1 新建一个 java project 2 在项目下新建一个lib文件夹 3 然后复制 mysql connector java jar 包到lib包下 4 在jar包上右键选择Buil
  • Xshell连接centOS7与CentOS7联网——一步到位

    参照 CSDN 这篇文章一看就明白了 就像引出 3 4 重构那样 我们也可以直接将配置前与配置后的对比状态列举出来 这样更省事 0 对于如下配置的宿主机 此处即为windows主机 1 编辑 虚拟网络编辑器 配置完毕后的状态如下 注 1 其
  • 【FPGA】一、FPGA简介

    文章目录 一 FPGA 简介 相关名词解释 FPGA基本构造 FPGA开发流程 硬件资源介绍 二 开发工具介绍 VScode Quartus II Vivado ModelSim Visio 总结 一 FPGA 简介 FPGA是Field
  • python交通信号灯检测yolov5交通信号灯识别,红绿灯检测,左转右转识别

    python交通信号灯检测yolov5交通信号灯识别 红绿灯检测 左转右转识别 交通信号灯的检测与识别是无人驾驶与辅助驾驶必不可少的一部分 其识别精度直接关乎智能驾驶的安全 一般而言 在实际的道路场景中采集的交通信号灯图像具有复杂的背景 且
  • 海思芯片查看系统内存和mmz内存的命令

    查看mmz内存的指令 cat proc media mem 解析 不仅可以看到mmz的总大小 已申请大小 剩余的内存多少 还可以查看申请的每块内存的大小 地址 名字等 查看系统内存的命令 cat proc meminfo
  • matlab显示函数表达式_MATLAB新手实战(二) 之二维图形绘制

    matlab 曲线参数设置表下面就一起来学习吧 注意 大家不会的东西或者是不懂得函数 请点击F1 寻求帮助 然后点击弹出窗口左下角的 open help browser 在搜索你想要的内容 一 首先来了解一下plot x y 函数吧 x和y
  • redis 哨兵模式

    1 Linux下 Redis集群搭建详解 主从 哨兵 linux redis集群搭建 程序员大佬超的博客 CSDN博客
  • D3交互式可视化Python自然语言工具包命名实体识别

    命名实体识别 NER 可能是信息提取的第一步 旨在将文本中的命名实体定位和分类为预定义的类别 例如人名 组织 位置 时间表达 数量 货币价值 百分比 等 NER 在自然语言处理 NLP 的许多领域都有使用 它可以帮助回答许多现实世界的问题
  • 【Cadence】Calculator计算sp的3dB带宽

    Cadence Calculator计算sp的3dB带宽 1 计算最大增益 2 cross函数 3 3dB带宽 下面演示如何在Cadence计算s参数 如增益 的3dB带宽 1 计算最大增益 ymax函数 2 cross函数 cross函数
  • 在flutter中如何使用图片/网络图片和ICON

    原文查看 图片及ICON 图片 Flutter中 我们可以通过Image来加载并显示图片 Image的数据源可以是asset 文件 内存以及网络 ImageProvider ImageProvider 是一个抽象类 主要定义了图片数据获取的
  • Python学习 - 异常处理

    Python学习 语法入门 https blog csdn net wanzijy article details 125287855 Python学习 数据类型 https blog csdn net wanzijy article de
  • 移动端判断是否为ios&网页适配ios安全区

    1 webkit touch callout属性用法极少 可参考 webkit touch callout CSS 层叠样式表 MDN supports webkit touch callout none iOS styles height
  • react性能优化方案

    优化shouldComponentUpdate生命周期的逻辑 避免不要的渲染和dom操作 在componentWillUnmount生命周期阶段 清楚定时器 订阅 监听等操作 为列表数据添加唯一标识key 使用PureComponent和m
  • 关于sql语句的闭合方式

    关于sql语句的闭合方式 前言 以前一直以为字符型的SQL语句只能用单引号或双引号闭合 数值型可以不用闭合 以为php的SQL语句能用括号闭合是因为PHP的特性 自己的基础实在不行 准备 建一张包含数值型和字符型字段的表 并插入数据 这里有
  • IDEA连接不上SVN,一直弹出authentication required

    如题 打开设置后去掉默认的勾选 重新输入用户名密码 更新代码成功 连接上之后可以再勾选上 不再受影响 如果仍然不好使 建议点击下方 Clear Auth Cache 按钮再试一下
  • flask + Pandas + echarts 使用饼状图等将二手房数据进行分析+可视化

    目录 一 实战场景 二 知识点 python 基础语法 python 文件读写 pandas 数据处理 flask web 框架 echarts 图表 bootstrap jinja 模版 三 菜鸟实战 初始化 Flask 框架 设置路由