python带你对北京二手房进行数据分析,看看大概都什么价位

news2024/11/15 10:33:57

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

今天我们的目的想必大家看标题就能明白了~

准备

首先,我们要提前准备好数据

然后打开我们的数据分析工具: Jupyter

代码及效果展示

导入模块

# 导入做数据处理的模块pandas
import pandas as pd
# 导入绘图模块pyecharts,*号代表模块里面的所有图形
from pyecharts.charts import *
from pyecharts import options as opts

数据处理

1.读取数据

导入数据

设置编码encoding='gbk'

设置解释器为engine='python'

df = pd.read_csv('二手房数据.csv', encoding='gbk', engine='python')
df

=

2.查看表格数据描述

describe可以直接计算数值类型数据的平均值,标准差

df.describe()

3.查看表格是否有数据缺失

通过isnull查找出包含缺失值的字段

然后进行求和,计算每一列的缺失数据的数量

df.isnull().sum()

可以看到电梯数据缺失8257行

4.查看电梯列共有几种值

通过unique可以统计数据里面出现了几种值

方便后面进行填充

df['电梯'].unique()

5.缺失值填充

用“未知”填充缺失值

缺失值的处理方式有两种

第一种删除,第二种填补

  • 缺失值少,就直接删除

  • 缺失值多,就进行填补

这里缺失值占比较多,所以进行填补

df['电梯'].fillna('未知',inplace=True)
# 填补之后查看是否还有缺失值
df.isnull().sum()

6.查看房屋朝向数据

查看朝向值的种类

df['朝向'].unique()

朝向数据包含了‘西南’和‘南西’两个方向,将其合并为一个方向‘西南’:

# replace(被替换的值,替换后的值):
df['朝向'] = df['朝向'].str.replace('南西','西南')
df['朝向'].unique()

可以看到,丰台、朝阳、海淀、昌平在售的房源数量最多,高达12000多套,占了总量的1/2

🎯 博主文章素材、解答、源码、教程领取处:点击

Pyecharts可视化

1.统计各城区二手房数据

# 这里我们要用到分组
g = df.groupby('市区')
df_region = g.count()['小区']
region = df_region.index.tolist()
count = df_region.values.tolist()
df_region

1.各城区二手房数量北京市地图
# 各城区二手房数量北京市地图
new = [x + '区' for x in region]
m = (
        Map()
        .add('北京市', [list(z) for z in zip(new, count)], '北京')
        .set_global_opts(
            title_opts=opts.TitleOpts(title='北京市二手房各区分布'),
            visualmap_opts=opts.VisualMapOpts(max_=3000),
        )
    )
m.render_notebook()

2.各城区二手房数量-平均价格柱状图
df_price = g.mean()['价格(万元)']
df_price = round(df_price,2)
price = df_price.values.tolist()
bar = (
    Bar()
    .add_xaxis(region)
    .add_yaxis('数量',count,
              label_opts=opts.LabelOpts(is_show=True)
              )
    .extend_axis(
        yaxis=opts.AxisOpts(
            name='价格(万元)',
            type_='value',
            min_=200,
            max_=900,
            interval=100,
            axislabel_opts=opts.LabelOpts(formatter='{value}')
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title='各城区二手房数量-平均价格柱状图'),
        tooltip_opts=opts.TooltipOpts(
            is_show=True, trigger="axis", axis_pointer_type="cross"
        ),
        xaxis_opts=opts.AxisOpts(
            type_="category",
            axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
        ),
        yaxis_opts=opts.AxisOpts(name='数量',
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=False),)
    )
)
line2 = (
    Line()
    .add_xaxis(xaxis_data=region)
    .add_yaxis(
        series_name="价格",
        yaxis_index=1,
        y_axis=price,
        label_opts=opts.LabelOpts(is_show=True),
        z=10
        )
)
bar.overlap(line2)
grid = Grid()
grid.add(bar, opts.GridOpts(pos_left="5%", pos_right="20%"), is_control_axis_index=True)
grid.render_notebook()

3.二手房价格最低Top15
top_price = df.sort_values(by='价格(万元)')[:15]
top_price

area0 = top_price['小区'].values.tolist()
count = top_price['价格(万元)'].values.tolist()

bar = (
    Bar()
    .add_xaxis(area0)
    .add_yaxis('数量', count, category_gap='50%')
    .set_global_opts(
        yaxis_opts=opts.AxisOpts(name='价格(万元)'),
        xaxis_opts=opts.AxisOpts(name='数量'),
        datazoom_opts=opts.DataZoomOpts(type_='slider')
    )
)
bar.render_notebook()

4 二手房总价与面积散点图
s = (
    Scatter()
    .add_xaxis(df['面积(㎡)'].values.tolist())
    .add_yaxis('',df['价格(万元)'].values.tolist())
    .set_global_opts(xaxis_opts=opts.AxisOpts(type_='value'))
)
s.render_notebook()

5.房屋朝向饼图
g = df.groupby('朝向')
g.count()['小区']

df_direction =  g.count()['小区']
df_direction

directions = df_direction.index.tolist()
count = df_direction.values.tolist()

c1 = (
    Pie(init_opts=opts.InitOpts(
            width='800px', height='600px',
            )
       )
        .add(
        '',
        [list(z) for z in zip(directions, count)],
        radius=['20%', '60%'],
        center=['40%', '50%'],
#         rosetype="radius",
        label_opts=opts.LabelOpts(is_show=True),
        )    
        .set_global_opts(title_opts=opts.TitleOpts(title='房屋朝向占比',pos_left='33%',pos_top="5%"),
                        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%",pos_top="25%",orient="vertical")
                        )
        .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{c} ({d}%)'),position="outside")
    )
c1.render_notebook()

6.装修情况/有无电梯玫瑰图
g1 = df.groupby('装修情况')
g1.count()['小区']
g2 = df.groupby('电梯')
g2.count()['小区']

df_fitment =  g1.count()['小区']
df_direction =  g2.count()['小区']
df_fitment

fitment = df_fitment.index.tolist()
count1 = df_fitment.values.tolist()

directions = df_direction.index.tolist()
count2 = df_direction.values.tolist()

bar = (
    Bar()
    .add_xaxis(fitment)
    .add_yaxis('', count1, category_gap = '50%')
    .reversal_axis()
    .set_series_opts(label_opts=opts.LabelOpts(position='right'))    
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(name='数量'),
        title_opts=opts.TitleOpts(title='装修情况/有无电梯玫瑰图(组合图)',pos_left='33%',pos_top="5%"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="90%",pos_top="58%",orient="vertical")
    )
)

c2 = (
    Pie(init_opts=opts.InitOpts(
            width='800px', height='600px',
            )
       )
        .add(
        '',
        [list(z) for z in zip(directions, count2)],
        radius=['10%', '30%'],
        center=['75%', '65%'],
        rosetype="radius",
        label_opts=opts.LabelOpts(is_show=True),
        )    
        .set_global_opts(title_opts=opts.TitleOpts(title='有/无电梯',pos_left='33%',pos_top="5%"),
                        legend_opts=opts.LegendOpts(type_="scroll", pos_left="90%",pos_top="15%",orient="vertical")
                        )
        .set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{c} \n ({d}%)'),position="outside")
    )

bar.overlap(c2)
bar.render_notebook()

7.二手房楼层分布柱状图
g = df.groupby('楼层')
df_floor = g.count()['小区']
df_floor

floor = df_floor.index.tolist()
count = df_floor.values.tolist()
bar = (
    Bar()
    .add_xaxis(floor)
    .add_yaxis('数量', count)
    .set_global_opts(
        title_opts=opts.TitleOpts(title='二手房楼层分布柱状缩放图'),
        yaxis_opts=opts.AxisOpts(name='数量'),
        xaxis_opts=opts.AxisOpts(name='楼层'),
        datazoom_opts=opts.DataZoomOpts(type_='slider')
    )
)
bar.render_notebook()

8.房屋面积分布柱状图
area_level = [0, 50, 100, 150, 200, 250, 300, 350, 400, 1500]    
label_level = ['小于50', '50-100', '100-150', '150-200', '200-250', '250-300', '300-350', '350-400', '大于400']    
jzmj_cut = pd.cut(df['面积(㎡)'], area_level, labels=label_level)        
df_area = jzmj_cut.value_counts()
df_area

area = df_area.index.tolist()
count = df_area.values.tolist()

bar = (
    Bar()
    .add_xaxis(area)
    .add_yaxis('数量', count)
    .reversal_axis()
    .set_series_opts(label_opts=opts.LabelOpts(position="right"))
    .set_global_opts(
        title_opts=opts.TitleOpts(title='房屋面积分布纵向柱状图'),
        yaxis_opts=opts.AxisOpts(name='面积(㎡)'),
        xaxis_opts=opts.AxisOpts(name='数量'),
    )
)
bar.render_notebook()

结论

丰台、朝阳、海淀、昌平在售的房源数量最多,高达12000多套,占了总量的1/2。

东城区、西城区和海淀区二手房平均售价最高,均在800万元以上。

二手房面积多集中于0-400平米,价格在0-3000万元居多。

房屋朝向约50%是坐北朝南的

推荐往期文章

🎯 博主所有文章素材、解答、源码、教程领取处:点击

对python感兴趣的小伙伴也可以看一下博主其他相关文章哦~

python小介绍:

python是什么?工作前景如何?怎么算有基础?爬数据违法嘛?。。

python数据分析前景:

用python分析“数据分析”到底值不值得学习,以及学完之后大概能拿到多少工资

python基础自测题:

Python 800 道习题 (°ー°〃) 测试你学废了嘛

最后推荐一套Python视频给大家,希望对大家有所帮助:

全套教程!你和大佬只有一步之遥【python教程】

尾语

要成功,先发疯,下定决心往前冲!

学习是需要长期坚持的,一步一个脚印地走向未来!

未来的你一定会感谢今天学习的你。

—— 心灵鸡汤

本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝

👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57951.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java计算机毕业设计ssm社会救援力量信息管理统计系统6q3cn(附源码、数据库)

java计算机毕业设计ssm社会救援力量信息管理统计系统6q3cn(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支…

flask入门教程之小项目实践

前面的2个章节对flask的一些简单操作进行了说明(后面再慢慢补充进阶内容) flask入门教程之请求与响应 flask入门教程之数据库保存 这个章节主要是根据前2个章节学到的内容,进行一个简单的学生信息增删改查的项目实践。 项目的简单介绍&#…

学习Java编程知识 必知要点

Java 是全球最受欢迎的编程语言之一,在世界编程语言排行榜 TIOBE 中,Java 一直霸占着前三名,有好多年甚至都是第一名。那么如此强大的Java你真的了解他的知识体系吗?他的学习路线你知道吗? 1. Java虚拟机——JVM JVM&a…

启动eureka服务端客户端报java.net.ConnectException: Connection refused: connect的错误

Request execution failed with message: java.net.ConnectException: Connection refused: connect1.先检查eureka服务端和客户端模块中的pom文件中是否引入了相对应的server和client的依赖 2.主启动类上是否加了对应启动注解: EnableEurekaServer //服务端的启动…

frp内网穿透搭建-宝塔版

一、搭建frp准备 下载frp部署文件:https://github.com/fatedier/frp/releases把防火墙安全端口打开,默认7500,7000,其他的自行设置打开,如阿里云服务器要打开端口规则。 二、配置frps服务端 把frps、frps.ini、LICE…

Java并发编程—java异步Future的迭代过程

在我们java多线程中,我想做一件事儿,但是我又不想影响主线程的执行,很多铁子都会想到用异步任务完成,这个时候我们的主角FutureTask就登场了。 一、FutureTask介绍 FutureTask提供了对Future的基本实现,是一个可取消的…

aws batch 在eks上配置计算环境和提交任务

文档 Getting started with Amazon Batch on Amazon EKSAmazon EKS jobsMemory and vCPU considerations for Amazon Batch on Amazon EKS batch不会管理集群,只是会管理节点(自动扩缩)并运行任务。batch在eks中单独管理自身资源&#xff0…

异常Exception

1.异常是什么? 程序中可能出出现的问题 2.异常体系的最上层父类是谁?异常分为几类 父类:Exception 异常分为两类:编译时异常、运行时异常 3.编译时异常和运行时异常的区别 编译时异常:除了RuntimeException和他的子类…

华为悦盒ec6108v9c使用ADB卡刷Linux(Ubuntu)

1. adb连接华为ec6108v9c: adb连接盒子IP: adb connect 192.168.3.4进入adb shell: adb shell在安卓后台终端输入以下命令,读取盒子的 reg name 管脚对应名称: cat /dev/block/mmcblk0p1 | grep -a hi3798m 2. 用Hitool工具制作对应你盒子reg名称的烧…

Python测试进阶(一)

文章目录测试框架pytestMarkskip参数化异常处理数据驱动Allure集成生成报告Fixture基操作用域yield数据共享自动应用参数化ini运行规则配置命令行参数指定/忽略执行目录配置日志插件开发常用插件分布式并发自定义插件打包发布hook小结测试框架 先了解unittest问题分析 自动化测…

SAS,Stata,HLM,R,SPSS和Mplus分层线性模型HLM分析学生受欢迎程度数据

全文链接:http://tecdat.cn/?p10809本文用于比较六个不同统计软件程序(SAS,Stata,HLM,R,SPSS和Mplus)的两级分层线性模型的过程和输出(点击文末“阅读原文”获取完整代码数据&#…

Java项目:SSM学生会管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为管理员、学生两种角色, 管理员角色包含以下功能: 管理员登陆,管理学生,管理机构,活动信息发布,部门管理,职位…

仿SpringBoot启动Dome实现

文章目录前言环境搭建依赖项目结构实现启动获取服务器自动配置启动Tomcat总结前言 填一下以前这篇博文:如何纯注解整合Spring SpringMVC Mybatis埋下的坑,我们来简单的了解一下SpringBoot它做的一些自动配置是怎么一回事,同时也看看SpringBo…

【人民币识别】人民币序列号识别【含GUI Matlab源码 908期】

⛄一、简介 本文描述的人民币序列号识别系统实现了从图像预处理到识别结果的过程, 而序列号识别是本文的重要内容.以序列号区域为研究对象, 主要包括图像预处理、图像分割以及序列号识别等过程。 1 图像预处理 人民币图像总体上来说灰度偏高, 灰度值基本上都大于150 (对8位25…

具有平滑正曲线边界的一般凸体的精确闭式闵可夫斯基研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

Minecraft 1.19.2 Forge模组开发 04.动画效果物品

我们本次实现一个具有动画效果的物品,本次演示的模型代码均在文末给出 效果演示效果演示效果演示 首先,请确保你的开发包中引入了geckolib依赖,相关教程请参考:Minecraft 1.19.2 Forge模组开发 03.动画生物实体 1.首先我们要使用geckolib制…

(三)操作系统的运行环境

文章目录一、操作系统的运行机制1. 时钟管理2. 中断机制3. 原语4. 系统数据结构5. 系统调用二、操作系统体系结构1. 传统的操作系统结构(大内核)第一代:无结构OS第二代:模块化结构OS:模块-接口法OS第三代:分…

[附源码]计算机毕业设计springboot学习帮扶网站设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

坦克大战②

1. 我方坦克发射单颗子弹 当发射一颗子弹后,就相当于启动一个线程来控制它的位置坐标;Hero[我方坦克]有子弹的对象,当按下J时,就创建一个发射子弹的线程,通过坐标变化让子弹不停的移动,形成一个射击的效果&…

redis 集群搭建的三种方式

文章目录一、Redis主从二、Redis哨兵三、Redis集群一、Redis主从 二、Redis哨兵 三、Redis集群 下载redis wget http://download.redis.io/releases/redis-5.0.3.tar.gz解压redis tar zxvf redis-5.0.3.tar.gz进行重命名 mv redis-5.0.3 redis安装gcc yum install gcc进入red…