大家好,我是欧K~
本期我们通过分析广州市30000+条已成交房源信息数据,分析一下广州市房价以及房源分布情况:
- 各区房源成交数量分布
- 各区房源成交价格分布
- 成交日期分布规律
- 等等
涉及到的库:
- Pandas — 数据处理
- Pyecharts — 数据可视化
可视化部分:
- 柱状图 — Bar
- 地图 — Map
- 饼图 — Pie
- 树图 — TreeMap
- 日历图 — Calendar
- 旭日图 — Sunburst
- 词云图 — stylecloud
- 组合组件 — Grid
希望对小伙伴们有所帮助,如有疑问或者需要改进的地方可以联系小编。
1. 导入模块
升级 pyecharts 包:
可视化部分需要用到 pyecharts==1.9.0,已安装其他低版本的需要升级,如果未安装过pyecharts,直接pip安装就是最新版本。
import datetime import stylecloud import pandas as pd from PIL import Image from pyecharts.charts import Map,Bar,Grid,Pie,Page,TreeMap,Sunburst,Calendar from pyecharts import options as opts from pyecharts.globals import ThemeType from pyecharts.globals import SymbolType
2. Pandas数据处理
2.1 读取数据
df = pd.read_excel('广州房屋成交信息.xlsx') df.head(10)
结果:
2.2 数据大小
df.shape
(30198, 11) ,可以看到一共有: 30198 条数据,包含成交日期、小区、户型、朝向、面积、楼层、城区、商圈、单价、总价等11个字段。
2.3 数据去重
df.drop_duplicates(subset=['成交日期','小区','户型','面积(㎡)','楼层'],keep='first',inplace=True) df.shape
(21806, 11),一共有: 21806 条非重复数据。
2.4 查看索引、数据类型和内存信息
df.info()
商圈列存在数据缺失,用 “未知” 填充:
df['商圈'].fillna('未知', inplace=True) df.isnull().sum()
2.5 查看数据列分布信息
df.describe()
面积最小值存在 1 平米,总楼层存在 0 层的情况,过滤掉这些值:
df = df[~((df['面积(㎡)'] < 10) | (df['总楼层'] == 0) | (df['户型'] == '0室0厅'))] df.describe()
2.6 成交日期处理
df['成交日期'] = df.iloc[:,0].apply(lambda x : x[:10]) df['成交日期'].unique()
3. Pyecharts可视化
3.1 广州市各区成交房源分布地图
df_region = df.groupby('城区')['小区'].count().to_frame('数量').reset_index() region = df_region['城区'].values.tolist() count = df_region['数量'].values.tolist() new = [x + '区' for x in region] m = ( Map(init_opts=opts.InitOpts(theme='dark',width='1000px', height='600px')) .add('', [list(z) for z in zip(new, count)], '广州', is_map_symbol_show=False ) .set_global_opts( title_opts=opts.TitleOpts(title='广州市各区成交房源分布', pos_left='center', pos_top='2%', title_textstyle_opts=opts.TextStyleOpts( color='#00BFFF', font_size=20, font_weight='bold' ), ), visualmap_opts=opts.VisualMapOpts(max_=3000, split_number=8, is_piecewise=True, pos_bottom='10%', pos_left='25%') ) )
效果:
3.2 广州市各区成交房源分布--矩形树图
tree = TreeMap(init_opts=opts.InitOpts(theme='chalk', width='1000px', height='800px')) tree.add( '房源分布', data, leaf_depth=1, label_opts=opts.LabelOpts(position='inside', formatter='{b}: {c}套'), levels=[ opts.TreeMapLevelsOpts( treemap_itemstyle_opts=opts.TreeMapItemStyleOpts( border_color='#555', border_width=4, gap_width=4 ) ), opts.TreeMapLevelsOpts( color_saturation=[0.3, 0.6], treemap_itemstyle_opts=opts.TreeMapItemStyleOpts( border_color_saturation=0.7, gap_width=2, border_width=2 ), ), opts.TreeMapLevelsOpts( color_saturation=[0.3, 0.7], color_mapping_by= 'value', treemap_itemstyle_opts=opts.TreeMapItemStyleOpts( border_color_saturation=0.6, gap_width=1 ), ), ], ) tree.set_global_opts( title_opts=opts.TitleOpts(title='广州市各区成交房源分布', pos_left='center', pos_top='2%', title_textstyle_opts=opts.TextStyleOpts(color='#00BFFF', font_size=20)), legend_opts=opts.LegendOpts(is_show=False) )
效果:
3.3 广州市各区成交房源分布--旭日图
s = ( Sunburst(init_opts=opts.InitOpts(theme='dark',width='1000px',height='800px')) .add( '', data_pair=data_pair, highlight_policy='ancestor', radius=[0, '100%'], sort_='null', levels=[ {}, {'r0': '20%','r': '45%', 'itemStyle': {'shadowBlur': 40,'shadowColor':'#333','borderColor': 'rgb(220,220,220)', 'borderWidth': 2}}, {'r0': '50%', 'r': '85%', 'label': {'align':'right','textShadowBlur': 15,'textShadowColor': '#333'}, 'itemStyle': {'shadowBlur': 40,'shadowColor':'#333','borderColor': 'rgb(220,220,220)', 'borderWidth': 1}}, ], ) .set_global_opts( title_opts=opts.TitleOpts(title='广州市各区\n\n成交房源分布',pos_left='center',pos_top='center', title_textstyle_opts=opts.TextStyleOpts(font_style='oblique', font_size=20,color='#00BFFF'),)) .set_series_opts(label_opts=opts.LabelOpts(font_size=14, formatter='{b}: {c}')) )
效果:
3.4 2020年广州市每日成交房源数量分布--日历图
c = ( Calendar(init_opts=opts.InitOpts(width='800px', height='500px')) .add('', data_c, calendar_opts=opts.CalendarOpts( pos_top='18%', pos_left='15%', range_='2020', daylabel_opts=opts.CalendarDayLabelOpts(name_map='cn', margin=10, label_font_size=12, label_color='#df65b0', ), monthlabel_opts=opts.CalendarMonthLabelOpts(name_map='cn', margin=10, label_font_size=12, label_color='#df65b0', is_show=True ) ), ) .set_global_opts( title_opts=opts.TitleOpts(title='2020年广州市每日成交房源数量分布',pos_left='40%',pos_top='5%', title_textstyle_opts=opts.TextStyleOpts(font_size=16,color='#00BFFF',font_weight='bold')), visualmap_opts=opts.VisualMapOpts( max_=150, orient='horizontal', pos_top='52%', pos_left='30%', is_piecewise=True, ), legend_opts=opts.LegendOpts(is_show=False), ) )
效果:
- 可以看到每年的6月至11月是房屋成交的高发期,尤其是11月份
- 由于工作的原因,周六、周日是最频繁的成交日期,其次是周一
3.5 广州市成交房源房型和售价分布--扇形图
p2 = ( Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK,width='1000px',height='600px')) .add('户型', p_data, radius=['40%', '70%']) .set_series_opts(label_opts=opts.LabelOpts( formatter="\n{b|{b}: }{d|{d}%}\n", rich={ "b": {"color": "#00c6d7","fontSize": 16, "lineHeight": 33, "fontWeight":700}, "d": {"color": "#fff000","fontSize": 16, "lineHeight": 33, "fontWeight":900}, },), ) .set_global_opts( title_opts=opts.TitleOpts( title='房屋户型占比', pos_left='center', pos_top='center', title_textstyle_opts=opts.TextStyleOpts( color='#00BFFF', font_size=28, font_weight='bold' ), ), visualmap_opts=opts.VisualMapOpts( is_show=False, min_=300, max_=10000, is_piecewise=False, dimension=0, range_color=['#ffffb2','#fecc5c','#fd8d3c','#f03b20','#bd0026'] ), legend_opts=opts.LegendOpts(is_show=False, pos_top='5%'), ) )
各房型占比:
总价区间占比:
- 房屋总价方面:100万以下房屋占比9%,100-300万的价格占比接近60%,600万以下占比达到95%左右
- 房屋户型方面:2居室占比45%左右,3居室占比达到42%
3.6 广州市成交房源数量TOP20小区--柱状图
效果:
3.7 小区--词云
stylecloud.gen_stylecloud( text=' '.join(df['小区'].values.tolist()), font_path=r'STXINWEI.TTF', palette='cartocolors.qualitative.Bold_5', max_font_size=100, icon_name='fas fa-home', background_color='#212529' )
效果:
4. 项目在线运行地址
篇幅原因,部分代码未展示,在线运行地址:https://www.heywhale.com/mw/project/6218568d0f3c810017c59085END
以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、点在看也可以分享让更多人知道