Pyecharts可视化二手房信息

目录

一、前言

 二、代码实现过程

        1、导包

        2、创建类

        3、查看数据概况

        4、画柱状图一

        5、画柱状图二

        6、画饼图

        7、 画词云图一

        8、画词云图二

        9、画水球图

        10、画可视化大屏

        11、运行主函数 

        12、创建实例对象

三、以下是完整代码


一、前言

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

 二、代码实现过程

         1、导包

# coding=utf-8
import pyecharts.options as opts
import pandas as pd
import pymysql
import warnings
from pyecharts.charts import Bar,Pie,WordCloud,Liquid,Page
from pyecharts.globals import ThemeType

        2、创建类

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

        3、查看数据概况

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

         4、画柱状图一

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

         5、画柱状图二

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

          6、画饼图

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

        7、 画词云图一

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

        8、画词云图二

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

         9、画水球图

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

         10、画可视化大屏

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

    def page(self):
        page = (
            Page(layout=Page.DraggablePageLayout)  # 设置自定义位置格式
            .add(  
                self.bar1(),  # 添加以上的功能图
                self.bar2(),
                self.pie(),
                self.wordcloud1(),
                self.wordcloud2(),
                self.liquid()
            )
            .render()
        )
        Page.save_resize_html('render.html',
                              cfg_file='./chart_config2.json',  # 加载你设置的各图的位置文件
                              dest='house.html')  # 展示可视化大屏

        11、运行主函数 

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

        12、创建实例对象

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

三、以下是完整代码

# coding=utf-8
import pyecharts.options as opts
import pandas as pd
import pymysql
import warnings
from pyecharts.charts import Bar, Pie, WordCloud, Liquid, Page
from pyecharts.globals import ThemeType


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

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

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

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

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

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

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

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

    def page(self):
        page = (
            Page(layout=Page.DraggablePageLayout)  # 设置自定义位置格式
            .add(
                self.bar1(),  # 添加以上的功能图
                self.bar2(),
                self.pie(),
                self.wordcloud1(),
                self.wordcloud2(),
                self.liquid()
            )
            .render()
        )
        Page.save_resize_html('render.html',
                              cfg_file='./chart_config2.json',  # 加载你设置的各图的位置文件
                              dest='house.html')  # 展示可视化大屏

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


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

  • 4
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值