北京房价分析案例

  • 关于数据分析,首先要明确分析目的(分析问题、业务现状、业务指导等),然后确定数据源(抓取、业务数据、打点、报表等),再进行数据清洗、处理与分析,最终得到结论。
# 明确分析目的
# 了解北京房价总体情况,为自己买房做指导# 引入使用的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 加载数据文件
df = pd.read_csv('./beijing_houst_price.csv')# 如果有警告信息:Columns have mixed types,需要设置dtype
df = pd.read_csv('./beijing_houst_price.csv', dtype={'id':'str', 'tradeTime':'str', 'livingRoom':'str', 'drawingRoom':'str', 'bathRoom':'str'})
df.head()   #对数据进行大致预览,做到心中有数

# 数值类列的常用统计值
df.describe()

# 查看各列非空值数量
df.count()# 开始数据清理# 看下是否有重复数据
df[df.duplicated()]
# 假如id都是正确的值,看看有没有重复的
df[df['id'].duplicated()]# tradeTime列数据清洗
df['tradeTime'].value_counts()# 年份跨度比较大,有些年份可能数据比较少
# 看下每年数据的数量,确定是否要删除数据少的年份
# 先将字符串转为日期格式,方便使用内置函数
df['tradeTime'] = pd.to_datetime(df['tradeTime'])
# 查看下数据类型
df.dtypes
# 统计下每年的数据量
df['tradeTime'].dt.year.value_counts()# 其他年份数据太少,只统计2012年~2017年的数据
# df[df['tradeTime'].dt.year < 2012]
df.drop(df[df['tradeTime'].dt.year < 2012].index, inplace=True)
# df[df['tradeTime'].dt.year > 2017].index
df.drop(df[df['tradeTime'].dt.year > 2017].index, inplace=True)# 在看下每年的数据量
df['tradeTime'].dt.year.value_counts()
# totalPrice清洗
# 看最大值最小值,最小值有点不太合理,可以根据自己的需求删除小于某个值的数据
# 例如可以先看下小于50万的数据
df[df['totalPrice'] < 50]
# 删除100万以下的
df.drop(df[df['totalPrice'] < 100].index, inplace=True)# square列看最大值最小值,都是合理的,而且没有空值,所以不用清洗
# 中间的其他列本次不分析,暂时忽略
# communityAverage最大值最小值合理,不过有空值,需要处理下
df[df['communityAverage'].isnull()]
# 删除空值(也可以使用平均值填充)
df.drop(df[df['communityAverage'].isnull()].index, inplace=True)
# 数据清洗完毕,开始分析# 常用统计值
df.describe()

# 二手房市场的状况可以简单分析下总价、单价、面积等信息
# 时长的冷热可以参考成交量、关注人数等信息
# 均价日趋势
# 统计每日所有房源的平均单价
df_price = df.groupby('tradeTime').mean()['price']
# 按照索引排序
df_price.sort_index(inplace=True)
# 画出趋势图
# 图太小了,设置下size
# plt.figure(figsize=(10,10))
df_price.plot()

# 总价各区间房源数
bins_arr = np.arange(100, 1850, 50)
bins = pd.cut(df['totalPrice'], bins_arr)
totalPrice_counts = df['totalPrice'].groupby(bins).count()
totalPrice_counts
# 这样看意义不大,因为有几年的涨幅比较大
# 可以看每年的数据
# 为了方便处理,增加年份列
df['year'] = df['tradeTime'].dt.year
df
# 以2017年为例
# 其他年份类似,可以定义成一个方法
df_2017 = df[df['year'] == 2017]
bins_arr = np.arange(100, 1850, 50)
bins = pd.cut(df_2017['totalPrice'], bins_arr)
bin_counts = df_2017['totalPrice'].groupby(bins).count()
print(bin_counts)
# 画图看下
bin_counts.plot()
# 可以过滤出感兴趣的总价区间继续分析# 总价在300万~500万的房源占比
#len(df_2017[(df_2017['totalPrice'] > 300) & (df_2017['totalPrice'] < 500)]) / len(df_2017)
# 可以看出市面上供给最多的是总价300万~500万的房源

# 面积各区间房源数
bins_arr = np.arange(10, 210, 10)
bins = pd.cut(df_2017['square'], bins_arr)
square_count = df_2017['square'].groupby(bins).count()
plt.figure(figsize=(10,10))square_count.plot()
# 从图可以看到200平米以上的就很少了,可以根据自己的需求在缩小下面积的范围
square_count
#

北京的老旧小区很多,所以50-60,60-7-这两个区间房源最多

# 总价各区间关注人数
bins_arr = np.arange(100, 1850, 50)
bins = pd.cut(df_2017['totalPrice'], bins_arr)
print(bins)
followers_count = df_2017.groupby(bins).sum()
print(df_2017.groupby(bins))
print(followers_count)
#plt.figure(figsize=(10,10))
#print(df_2017[df['totalPrice'] >1750].sum().followers)
print(df_2017[df['totalPrice'] >1750].sum()['followers'])
#followers_count.plot()
# 面积各区间关注人数,均价各区间关注人数等指标计算方法类似
# 也可以调整不同的分桶值

2、2018年北京积分落户数据分析

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 读取文件
luohu_data = pd.read_csv('./bj_luohu.csv', index_col = 'id')
# describe()展示一些基本信息
luohu_data.describe()
# 按照company分组并计算每组个数
# groupby默认会把by的这个列作为索引列返回,可以设置下as_index=False
company_data = luohu_data.groupby('company', as_index=False).count()
[['company','name']]
# 重命名列名称
company_data.rename(columns={'name':'people_count'}, inplace=True)
# 按照某一列排序
company_sorted_data = company_data.sort_values('people_count', ascending=False)
company_sorted_data
# 按条件过滤
# 只有一人的公司
company_sorted_data[company_sorted_data['people_count'] == 1]
# 人数前50的公司
company_sorted_data.head(50)
# 分数分布
# 按照步长5分桶统计下分数的分布
bins = np.arange(90, 130, 5)
bins = pd.cut(luohu_data['score'], bins)
bin_counts = luohu_data['score'].groupby(bins).count()
# 处理index
bin_counts.index = [ str(x.left) + '~' + str(x.right) for x in bin_counts.index
]
bin_counts.plot(kind='bar', alpha=1, rot=0)
plt.show()
# 年龄分布
# 出生日期转为年龄
luohu_data['age'] = ((pd.to_datetime('2019-07') -
pd.to_datetime(luohu_data['birthday'])) / pd.Timedelta('365 days'))
luohu_data.describe()
bins = np.arange(20, 70, 5)
bins = pd.cut(luohu_data['age'], bins)
bin_counts = luohu_data['age'].groupby(bins).count()
bin_counts.index = [ str(x.left) + '~' + str(x.right) for x in bin_counts.index
]
bin_counts.plot(kind='bar', alpha=1, rot=0)
plt.show()

Python案例之Numpy + Pandas——北京房价分析、2018年北京积分落户数据分析相关推荐

  1. 【Python学习】使用pandas和matplotlib分析1949-2016年中国各省市历年GDP数据

    [Python学习]使用pandas和matplotlib分析1949-2016年中国各省市历年GDP数据 导入包 读取数据 设置颜色列表 绘图分析 导入包 由于我是在jupyter notebook ...

  2. 【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(4)

    1. 删除所有存在缺失值的行 语法: df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) 参数: axis : ...

  3. python爬取二手房信息_刚刚接触PythonR?教你爬取分析赶集网北京二手房数据(附详细代码)...

    原标题:刚刚接触Python&R?教你爬取分析赶集网北京二手房数据(附详细代码) 源 /数据森麟文 /徐涛 前言: 本文主要分为两部分:Python爬取赶集网北京二手房数据&R对爬取的 ...

  4. python建筑案例_Python数据分析实战-链家北京二手房价分析

    前言 最近在自学Python,通过学习大家的分享案例,看到使用Python进行较多的主要4个方面:爬虫,数据处理,数据可视化以及机器学习建模.对我来说目标就是: 熟练使用numpy pandas 进行 ...

  5. python用于统计学_R 和 Python (numpy scipy pandas) 用于统计学分析,哪个更好?

    用R做过Python擅长的,也用Python做过R擅长的.有一天,打开官网,看到两句话,豁然开朗. R:R is a free software environment for statistical ...

  6. python北京房价预测_python分析——2018北京房价降了吗

    数据来源:python 爬取的链家官网二手房交易数据 数据量:有效数据约30万条,包含信息:'行政区','片区', '小区', '格局', '面积', '楼层', '建成年代', '建成年', '楼体 ...

  7. 【项目实战】北京二手房房价分析与预测

    项目简介 本项目根据个人需求进行北京二手房信息的数据分析,通过数据分析观察住房特征规律,利用机器学习模型进行简单的预测. 数据源 通过爬虫爬取第三方房屋中间商网站(链家和安居客)获取数据源,仅供学习使 ...

  8. RFM模型的理解和python案例分析

    RFM模型是什么 RFM是客户关系管理(CRM:Customer Relationship Management)中一种重要的分析模型,通过研究一个客户的交易时间.交易频率和交易总金额来衡量客户的价值 ...

  9. Python房价分析和可视化<anjuke二手房>

    Python房价分析和可视化<anjuke二手房> 本文是Python数据分析实战的房价分析系列,本文分析二线城市贵阳的二手房. 数据获取 本文的数据来源于2022年7月anjuke的二手 ...

  10. Python数据分析(全) #超长预警 #思维导图 #matplotlib #numpy #pandas

    数据分析 一.基础概念及环境 1. 数据分析概念 2. anaconda 2.3 安装 2.2 基本操作 二.matplotlib 1. 简介 2. 基本要点 3. 使用方法 3.1 最简单形式 3. ...

最新文章

  1. 简单探讨JavaScript 与 TypeScript之间的联系
  2. Nokia是否还有未来 - 小议诺基亚和微软的战略布局
  3. 大图剪切工具,大图分割工具
  4. 听说你想去大厂看妹子,带你看看阿里软件测试岗四轮面试是怎么样的?
  5. 大规模知识图谱的构建
  6. 小白科普:Java EE vs J2EE vs Jakarta EE
  7. vue/cli3 配置vux
  8. 代换-置换网络(SP网络)
  9. date字段 http 头文件_HTTP头文件获取
  10. PETS:伯克利大神Sergey Levine指导的概率集成轨迹采样算法
  11. 超级终端连接华为交换机_Win8系统如何使用超级终端连接华为交换机?
  12. 卡尔曼滤波算法-Kalman filter
  13. 【时间序列】时间序列数据的缺失填补方法总结
  14. 手机RAM ROM TF
  15. Unity手游优化总概
  16. 《秘密全在小动作上》读书笔记
  17. 第几天(2018蓝桥杯-第一题)
  18. 论文笔记:Object Detection in 20 Years: A Surve(目标检测20年研究综述)
  19. 解决阿里云此手机号码绑定的账户数已达上限的方法
  20. 你好你好你好你好你好你好

热门文章

  1. Pandas RuntimeWarning: More than 20 figures have been opened. Figures created plt.close()也不起作用
  2. mysql failover_MySQL 8.0.22 新特性Async Replication Auto failover
  3. php向mysql写入_PHP向MySql中插入数据
  4. 做“合规”的数据处理者 | 一文图解《网络数据安全管理条例》
  5. 使用linux内核仿真ZNS(zoned namespace SSD)
  6. spring cloud搭建教程
  7. 乐MAX2 乐视X820_官方线刷包_救砖包_解账户锁
  8. Wiradius计费系统功能说明
  9. java 读取文件inputstream_使用Inputstream读取文件
  10. 这些个适合oier的网站丫太有趣了吧(不定期更新中)