赞
踩
目录
今天,我们来可视化大屏链家的二手房源信息,因为网上的数据不够直观,准确,所以我们要对数据进行有效的挖掘,然后让数据能够一目了然,如果你们没有数据,可以点击这个链接,里面有数据采集文件,所以我们选择做可视化大屏,效果如下图
- # 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
一定要先设置功能图的位置,然后点击左上角的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') # 展示可视化大屏
- def main(self):
- self.info_data() # 运行数据概况函数
- self.page() # 运行可视化大屏函数
- 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() # 运行主函数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。