当前位置:   article > 正文

Pyecharts可视化二手房信息_关于房价房源还可以画什么图

关于房价房源还可以画什么图

目录

一、前言

 二、代码实现过程

        1、导包

        2、创建类

        3、查看数据概况

        4、画柱状图一

        5、画柱状图二

        6、画饼图

        7、 画词云图一

        8、画词云图二

        9、画水球图

        10、画可视化大屏

        11、运行主函数 

        12、创建实例对象

三、以下是完整代码


一、前言

今天,我们来可视化大屏链家的二手房源信息,因为网上的数据不够直观,准确,所以我们要对数据进行有效的挖掘,然后让数据能够一目了然,如果你们没有数据,可以点击这个链接,里面有数据采集文件,所以我们选择做可视化大屏,效果如下图 

 二、代码实现过程

         1、导包

  1. # coding=utf-8
  2. import pyecharts.options as opts
  3. import pandas as pd
  4. import pymysql
  5. import warnings
  6. from pyecharts.charts import Bar,Pie,WordCloud,Liquid,Page
  7. from pyecharts.globals import ThemeType

        2、创建类

  1. class Lianjia_anylize(object):
  2. def __init__(self):
  3. warnings.filterwarnings('ignore') # 忽略警告
  4. self.con=pymysql.connect(host='localhost',port=3306,user='root',password='123456',database='lianjia',charset='utf8') # 创建与MySQl的链接
  5. self.data=pd.read_sql('select * from house',self.con) # 读取数据

        3、查看数据概况

  1. def info_data(self):
  2. print(self.data) # 查看数据
  3. print(self.data.info()) # 查看数据类型
  4. print(self.data.describe()) # 查看数据描述

         4、画柱状图

  1. def bar1(self):
  2. data2 = self.data[['total_price', 'price']].astype(float) # 转换数据类型
  3. data2['address']=self.data[['address']]
  4. data3 = data2[['address','total_price', 'price']].nlargest(10,['total_price','price']) # 查找总价和单价价格前10的小区
  5. bar1 = (
  6. Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=1)) # 定义主题风格
  7. .add_xaxis(data3.index.tolist()) # 添加x轴
  8. .add_yaxis('总价(万)', data3['total_price'].tolist(), itemstyle_opts=opts.ItemStyleOpts(color='#FAFAD2')) # 添加y轴
  9. .set_global_opts(
  10. title_opts=opts.TitleOpts(title='房子总价前10的小区'), # 设置标题
  11. datazoom_opts=[opts.DataZoomOpts(is_show=True), opts.DataZoomOpts(type_='inside')], # 设置区域缩放条
  12. toolbox_opts=opts.ToolboxOpts(is_show=True) # 设置工具箱
  13. )
  14. )
  15. bar1.render('house1.html') # 展示柱状图
  16. return bar1

         5、画柱状图二

  1. def bar2(self):
  2. data2 = self.data[['total_price', 'price']].astype(float) # 转换数据类型
  3. data2['address']=self.data[['address']]
  4. data3 = data2[['address','total_price', 'price']].nlargest(10,['total_price','price']) # 查找总价和单价价格前10的小区
  5. bar2 = (
  6. Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=2)) # 定义主题风格
  7. .add_xaxis(data3.index.tolist()) # 添加x轴
  8. .add_yaxis('元/平方米', data3['price'].tolist())
  9. .set_global_opts(
  10. title_opts=opts.TitleOpts(title='房子单价前10小区'), # 设置标题
  11. datazoom_opts=[opts.DataZoomOpts(is_show=True), opts.DataZoomOpts(type_='inside')], # 设置区域缩放条
  12. toolbox_opts=opts.ToolboxOpts(is_show=True) # 设置工具箱
  13. )
  14. )
  15. bar2.render('house2.html') # 展示柱状图二
  16. return bar2

          6、画饼图

  1. def pie(self):
  2. data3 = self.data[['decoration']].value_counts() # 查看售卖房源的装修程度
  3. pie = (
  4. Pie(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=3)) # 定义主题风格
  5. .add('装修程度', [list(z) for z in zip(data3.index.tolist(), data3.values.tolist())], center=["35%", "50%"]) # 将数据转化为列表并添加
  6. .set_global_opts(title_opts=opts.TitleOpts(title='出售房屋的总体装修程度'), # 设置标题
  7. legend_opts=opts.LegendOpts(pos_left="15%")) # 设置图例位置
  8. .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 设置提示框内容
  9. )
  10. pie.render('house3.html') # 展示饼图
  11. return pie

        7、 画词云图

  1. def wordcloud1(self):
  2. data4 = self.data[['address']].value_counts() # 查看售卖房屋频率较高的小区
  3. wordcloud1 = (
  4. WordCloud(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=4)) # 定义主题风格
  5. .add('出售房屋数量', [list(z) for z in zip(data4.index.tolist(), data4.values.tolist())], word_size_range=[6, 66]) # 将数据转换为列表并添加数据,定义词云图的大小
  6. .set_global_opts(title_opts=opts.TitleOpts(title='出售房屋数量的各小区'), # 设置标题
  7. tooltip_opts=opts.TooltipOpts(is_show=True))
  8. )
  9. wordcloud1.render('house4.html') # 展示词云图一
  10. return wordcloud1

        8、画词云图二

  1. def wordcloud2(self):
  2. data6 = self.data[['type_']].value_counts() # 查看售卖房屋类型的小区
  3. print(data6)
  4. wordcloud2 = (
  5. WordCloud(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=5)) # 定义主题风格
  6. .add('出售房屋类型的数量', [list(z) for z in zip(data6.index.tolist(), data6.values.tolist())], # 将数据转换为列表并加载数据
  7. word_size_range=[10, 100])
  8. .set_global_opts(title_opts=opts.TitleOpts(title='出售房屋类型的数量'), # 设置标题
  9. tooltip_opts=opts.TooltipOpts(is_show=True))
  10. )
  11. wordcloud2.render('house5.html') # 展示词云图二
  12. return wordcloud2

         9、画水球图

  1. def liquid(self):
  2. data5 = self.data[['total_price']].astype(float).mean()*0.01 # 转换数据类型,查看售卖房源的平均总价
  3. print(data5)
  4. liquid = (
  5. Liquid(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=6)) # 定义主题风格
  6. .add('平均价格/万', [data5.tolist(), 0]) # 加载数据
  7. )
  8. liquid.render('house6.html') # 展示水球图
  9. return liquid

         10、画可视化大屏

一定要先设置功能图的位置,然后点击左上角的Save config进行下载功能图的位置文件,然后将文件的路径添加到cfg_file这个参数里面,如果你比较懒,可以点击这个链接,里面有我设置好的位置文件

  1. def page(self):
  2. page = (
  3. Page(layout=Page.DraggablePageLayout) # 设置自定义位置格式
  4. .add(
  5. self.bar1(), # 添加以上的功能图
  6. self.bar2(),
  7. self.pie(),
  8. self.wordcloud1(),
  9. self.wordcloud2(),
  10. self.liquid()
  11. )
  12. .render()
  13. )
  14. Page.save_resize_html('render.html',
  15. cfg_file='./chart_config2.json', # 加载你设置的各图的位置文件
  16. dest='house.html') # 展示可视化大屏

        11、运行主函数 

  1. def main(self):
  2. self.info_data() # 运行数据概况函数
  3. self.page() # 运行可视化大屏函数

        12、创建实例对象

  1. if __name__ == '__main__':
  2. lianjia = Lianjia_anylize() # 创建实例对象
  3. lianjia.main() # 运行主函数

三、以下是完整代码

  1. # coding=utf-8
  2. import pyecharts.options as opts
  3. import pandas as pd
  4. import pymysql
  5. import warnings
  6. from pyecharts.charts import Bar, Pie, WordCloud, Liquid, Page
  7. from pyecharts.globals import ThemeType
  8. class Lianjia_anylize(object):
  9. def __init__(self):
  10. warnings.filterwarnings('ignore') # 忽略警告
  11. self.con = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='lianjia',
  12. charset='utf8') # 创建与MySQl的链接
  13. self.data = pd.read_sql('select * from house', self.con) # 读取数据
  14. def info_data(self):
  15. print(self.data) # 查看数据
  16. print(self.data.info()) # 查看数据类型
  17. print(self.data.describe()) # 查看数据描述
  18. def bar1(self):
  19. data2 = self.data[['total_price', 'price']].astype(float) # 转换数据类型
  20. data2['address'] = self.data[['address']]
  21. data3 = data2[['address', 'total_price', 'price']].nlargest(10, ['total_price', 'price']) # 查找总价和单价价格前10的小区
  22. bar1 = (
  23. Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=1)) # 定义主题风格
  24. .add_xaxis(data3.index.tolist()) # 添加x轴
  25. .add_yaxis('总价(万)', data3['total_price'].tolist(),
  26. itemstyle_opts=opts.ItemStyleOpts(color='#FAFAD2')) # 添加y轴
  27. .set_global_opts(
  28. title_opts=opts.TitleOpts(title='房子总价前10的小区'), # 设置标题
  29. datazoom_opts=[opts.DataZoomOpts(is_show=True), opts.DataZoomOpts(type_='inside')], # 设置区域缩放条
  30. toolbox_opts=opts.ToolboxOpts(is_show=True) # 设置工具箱
  31. )
  32. )
  33. bar1.render('house1.html') # 展示柱状图一
  34. return bar1
  35. def bar2(self):
  36. data2 = self.data[['total_price', 'price']].astype(float) # 转换数据类型
  37. data2['address'] = self.data[['address']]
  38. data3 = data2[['address', 'total_price', 'price']].nlargest(10, ['total_price', 'price']) # 查找总价和单价价格前10的小区
  39. bar2 = (
  40. Bar(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=2)) # 定义主题风格
  41. .add_xaxis(data3.index.tolist()) # 添加x轴
  42. .add_yaxis('元/平方米', data3['price'].tolist())
  43. .set_global_opts(
  44. title_opts=opts.TitleOpts(title='房子单价前10小区'), # 设置标题
  45. datazoom_opts=[opts.DataZoomOpts(is_show=True), opts.DataZoomOpts(type_='inside')], # 设置区域缩放条
  46. toolbox_opts=opts.ToolboxOpts(is_show=True) # 设置工具箱
  47. )
  48. )
  49. bar2.render('house2.html') # 展示柱状图二
  50. return bar2
  51. def pie(self):
  52. data3 = self.data[['decoration']].value_counts() # 查看售卖房源的装修程度
  53. pie = (
  54. Pie(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=3)) # 定义主题风格
  55. .add('装修程度', [list(z) for z in zip(data3.index.tolist(), data3.values.tolist())],
  56. center=["35%", "50%"]) # 将数据转化为列表并添加
  57. .set_global_opts(title_opts=opts.TitleOpts(title='出售房屋的总体装修程度'), # 设置标题
  58. legend_opts=opts.LegendOpts(pos_left="15%")) # 设置图例位置
  59. .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 设置提示框内容
  60. )
  61. pie.render('house3.html') # 展示饼图
  62. return pie
  63. def wordcloud1(self):
  64. data4 = self.data[['address']].value_counts() # 查看售卖房屋频率较高的小区
  65. wordcloud1 = (
  66. WordCloud(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=4)) # 定义主题风格
  67. .add('出售房屋数量', [list(z) for z in zip(data4.index.tolist(), data4.values.tolist())],
  68. word_size_range=[6, 66]) # 将数据转换为列表并添加数据,定义词云图的大小
  69. .set_global_opts(title_opts=opts.TitleOpts(title='出售房屋数量的各小区'), # 设置标题
  70. tooltip_opts=opts.TooltipOpts(is_show=True))
  71. )
  72. wordcloud1.render('house4.html') # 展示词云图一
  73. return wordcloud1
  74. def wordcloud2(self):
  75. data6 = self.data[['type_']].value_counts() # 查看售卖房屋类型的小区
  76. print(data6)
  77. wordcloud2 = (
  78. WordCloud(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=5)) # 定义主题风格
  79. .add('出售房屋类型的数量', [list(z) for z in zip(data6.index.tolist(), data6.values.tolist())], # 将数据转换为列表并加载数据
  80. word_size_range=[10, 100])
  81. .set_global_opts(title_opts=opts.TitleOpts(title='出售房屋类型的数量'), # 设置标题
  82. tooltip_opts=opts.TooltipOpts(is_show=True))
  83. )
  84. wordcloud2.render('house5.html') # 展示词云图二
  85. return wordcloud2
  86. def liquid(self):
  87. data5 = self.data[['total_price']].astype(float).mean() * 0.01 # 转换数据类型,查看售卖房源的平均总价
  88. print(data5)
  89. liquid = (
  90. Liquid(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION, chart_id=6)) # 定义主题风格
  91. .add('平均价格/万', [data5.tolist(), 0]) # 加载数据
  92. )
  93. liquid.render('house6.html') # 展示水球图
  94. return liquid
  95. def page(self):
  96. page = (
  97. Page(layout=Page.DraggablePageLayout) # 设置自定义位置格式
  98. .add(
  99. self.bar1(), # 添加以上的功能图
  100. self.bar2(),
  101. self.pie(),
  102. self.wordcloud1(),
  103. self.wordcloud2(),
  104. self.liquid()
  105. )
  106. .render()
  107. )
  108. Page.save_resize_html('render.html',
  109. cfg_file='./chart_config2.json', # 加载你设置的各图的位置文件
  110. dest='house.html') # 展示可视化大屏
  111. def main(self):
  112. self.info_data() # 运行数据概况函数
  113. self.page() # 运行可视化大屏函数
  114. if __name__ == '__main__':
  115. lianjia = Lianjia_anylize() # 创建实例对象
  116. lianjia.main() # 运行主函数

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

闽ICP备14008679号