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

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

目录

一、实战场景

二、知识点

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 ceilimport csvimport jsonfrom flask import Flask, render_template, request, redirect, jsonifyfrom spiders.file_manager import FileManager# 初始化框架web = Flask(__name__)@web.route('/')def index():    # 首页    return redirect('/list')@web.route('/table/')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下载

菜鸟实战,持续学习!