当前位置:   article > 正文

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

数据分析可视化及flask

目录

一、实战场景

二、知识点

python 基础语法

python 文件读写

pandas 数据处理

flask web 框架

echarts 图表

bootstrap

jinja 模版

三、菜鸟实战

初始化 Flask 框架,设置路由

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

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

二手房单价最高Top10 图

echarts 渲染房屋数量柱状图

运行结果

运行截图

数据示例


一、实战场景

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

二、知识点

python 基础语法

python 文件读写

pandas 数据处理

flask web 框架

echarts 图表

bootstrap

jinja 模版

三、菜鸟实战

初始化 Flask 框架,设置路由

  1. '''
  2. Description: 分页读取并显示 csv 文件数据
  3. '''
  4. from math import ceil
  5. import csv
  6. import json
  7. from flask import Flask, render_template, request, redirect, jsonify
  8. from spiders.file_manager import FileManager
  9. # 初始化框架
  10. web = Flask(__name__)
  11. @web.route('/')
  12. def index():
  13. # 首页
  14. return redirect('/list')
  15. @web.route('/table/<int:page_num>')
  16. def table(page_num):
  17. # 分页读取并显示 csv 文件数据
  18. file_manager = FileManager()
  19. file = file_manager.get_data_file_path("tao365_detail.csv")
  20. # 若不指定limits默认为 5
  21. limits = request.args.get('limits', 5, type=int)
  22. def show_csv(reader, page=page_num, limits=limits):
  23. # 内部函数,根据limits和所在页数生成数据
  24. df = []
  25. for row in reader:
  26. if page_num * limits >= (reader.line_num - 1) > (page_num - 1) * limits:
  27. df.append(row)
  28. return df
  29. with open(file, 'r+', encoding='utf-8') as f:
  30. # 计算页面数
  31. row_length = len(f.readlines()) - 1
  32. pages = int(ceil(row_length / limits))
  33. with open(file, 'r+', encoding='utf-8') as f:
  34. # 计算数据
  35. reader = csv.reader(f)
  36. next(reader)
  37. df = show_csv(reader, page_num, limits)
  38. # 加载模版和模版数据
  39. return render_template('table.html', df=df, pages=pages, page_num=page_num, limits=limits)
  40. @web.route('/table_detail')
  41. def table_detail():
  42. # 二手房详情
  43. row = request.args.get('row').split(',')
  44. return render_template('table_detail.html', row=row)
  45. @web.route('/list')
  46. def list_house():
  47. # 二手房列表
  48. return render_template('list.html')
  49. @web.route('/chart1')
  50. def chart1():
  51. # 柱状图
  52. return render_template('chart1.html')
  53. @web.route('/chart2')
  54. def chart2():
  55. # 横向柱状图
  56. return render_template('chart2.html')
  57. @web.route('/chartBie')
  58. def chartBie():
  59. # 饼图
  60. return render_template('chartBie.html')
  61. @web.route('/chart_data')
  62. def chart_data():
  63. # 获取图标数据
  64. # 图标类型
  65. type = request.args.get("type")
  66. # 二手房数据
  67. file_name = 'chart00' + type+'.json'
  68. file_manager = FileManager()
  69. file = file_manager.get_data_file_path(file_name)
  70. # file = os.path.join(config.DATA_DIR,'chart00'+ type+'.json' )
  71. with open(file, encoding='utf8') as fp:
  72. data_list = json.load(fp)
  73. return jsonify(data_list)
  74. # 启动 flask web 框架
  75. web.run(debug=True)

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

  1. def chart002(self):
  2. # 柱状图 - 展示各行政区房屋数量
  3. # 读取清洗后的数据文件
  4. result_df = self.read_clean_result_file()
  5. # 从字典对象导入数据
  6. df = pd.DataFrame(result_df)
  7. # 将数据根据地址分组
  8. g = df.groupby('地址')
  9. # 统计分组后的数量
  10. df_region = g.count()['小区']
  11. # 获取分组后的地址数据
  12. address = df_region.index.tolist()
  13. # 获取分组后的数量
  14. count = df_region.values.tolist()
  15. # 定义表格顶部title
  16. title = "各行政区房屋数量"
  17. # 定义表格顶部说明
  18. text = self.top_text
  19. # 定义图表title
  20. chart_title = '各行政区房屋数量'
  21. # 图表横坐标
  22. chart_x = '所在地区'
  23. # 图表纵坐标
  24. chart_y = '房源数量/套'
  25. # 图表单位
  26. unit = '套'
  27. # 图表类型
  28. types = 'bar'
  29. # 组装图表json数据
  30. data_json = {
  31. 'data1': address,
  32. 'data2': count,
  33. 'title': title,
  34. 'text': text,
  35. 'chartTitle': chart_title,
  36. 'chartX': chart_x,
  37. 'chartY': chart_y,
  38. 'unit': unit,
  39. 'type': types
  40. }
  41. # 将json数据写入文件
  42. with open('../data/chart002.json', 'w', encoding='utf-8') as write_f: # 打开本地文件
  43. json.dump(data_json, write_f, indent=4, ensure_ascii=False) # python对象转换成json对象

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

  1. def chart005(self):
  2. # 柱状图 - 南京各区域二手房房源朝向
  3. # 读取清洗后的数据文件
  4. result_df = self.read_clean_result_file()
  5. # 从字典对象导入数据
  6. df = pd.DataFrame(result_df)
  7. # 将数据根据房屋朝向分组
  8. g = df.groupby('房屋朝向')
  9. # 统计分组后的数量
  10. df_region = g.count()['小区']
  11. # 获取分组后的房屋朝向分组数据
  12. address = df_region.index.tolist()
  13. # 获取分组后的房屋朝向数量
  14. count = df_region.values.tolist()
  15. # 定义表格顶部title
  16. title = "区域二手房房源朝向分布情况"
  17. # 定义表格顶部说明
  18. text = self.top_text
  19. # 定义图表说明
  20. chart_title = '各区域二手房房源朝向分布情况'
  21. # 定义图表横坐标
  22. chart_x = ''
  23. # 定义图表纵坐标
  24. chart_y = '建筑面积(㎡)'
  25. # 定义单位
  26. unit = ''
  27. # 定义图表类型
  28. types = 'bar'
  29. # 组装图表json数据
  30. data_json = {
  31. 'data1': address,
  32. 'data2': count,
  33. 'title': title,
  34. 'text': text,
  35. 'chartTitle': chart_title,
  36. 'chartX': chart_x,
  37. 'chartY': chart_y,
  38. 'unit': unit,
  39. 'type': types
  40. }
  41. # 将json数据写入文件
  42. with open('../data/chart005.json', 'w', encoding='utf-8') as write_f: # 打开本地文件
  43. json.dump(data_json, write_f, indent=4, ensure_ascii=False) # python对象转换成json对象

二手房单价最高Top10 图

  1. def chart008(self):
  2. # 横向柱状图 - 各面积区间房屋数量占比图
  3. # 读取清洗后的数据文件
  4. result_df = self.read_clean_result_file()
  5. # 从字典对象导入数据
  6. df = pd.DataFrame(result_df)
  7. # 取出每平方价格列前10的数据
  8. top_price = df.sort_values(by="每平方价格", ascending=False)[:10]
  9. # 取出每平方价格列前10的小区数据
  10. area0 = top_price['小区'].values.tolist()
  11. # 取出每平方价格列前10的价格数据
  12. count = top_price['每平方价格'].values.tolist()
  13. arr = []
  14. color_arr = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22",
  15. "#17becf"
  16. ]
  17. for k, i in enumerate(count):
  18. arr.append({'value': i, 'itemStyle': {'color': color_arr[k]}})
  19. # 定义表格顶部title
  20. title = "二手房单价最高Top10"
  21. # 定义表格顶部说明
  22. text = self.top_text
  23. # 图表title
  24. chart_title = '二手房单价最高Top10'
  25. # 组装图表json数据
  26. data_json = {
  27. 'data1': area0,
  28. 'data2': arr,
  29. 'title': title,
  30. 'text': text,
  31. 'chartTitle': chart_title,
  32. }
  33. # 将json数据写入文件
  34. with open('../data/chart008.json', 'w', encoding='utf-8') as write_f: # 打开本地文件
  35. json.dump(data_json, write_f, indent=4, ensure_ascii=False) # python对象转换成json对象

echarts 渲染房屋数量柱状图

  1. function drawCharts(data) {
  2. var optionMap = {
  3. title: {
  4. text: data.chartTitle,
  5. left: 'center',
  6. },
  7. tooltip: {
  8. trigger: 'axis',
  9. axisPointer: {
  10. type: 'shadow'
  11. },
  12. },
  13. toolbox: {
  14. feature: {
  15. saveAsImage: {
  16. title: ''
  17. }
  18. }
  19. },
  20. grid: {
  21. left: '3%',
  22. right: '4%',
  23. bottom: '3%',
  24. containLabel: true
  25. },
  26. xAxis: {
  27. type: 'value',
  28. boundaryGap: [0, 0.01]
  29. },
  30. yAxis: {
  31. type: 'category',
  32. data: data.data1
  33. },
  34. series: [{
  35. type: 'bar',
  36. data: data.data2
  37. }, ]
  38. };
  39. //初始化echarts实例
  40. var myChart = echarts.init(document.getElementById('dom1'));
  41. //使用制定的配置项和数据显示图表
  42. myChart.setOption(optionMap);
  43. }

运行结果

运行截图

* 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下载

菜鸟实战,持续学习!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/164898
推荐阅读
相关标签
  

闽ICP备14008679号