数据蛙强化课程第二期

链家二手房数据分析

2019-05-03  本文已影响3人  执小生

0观察数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei']     
plt.rcParams['axes.unicode_minus']=False

%matplotlib inline
plt.rcParams['figure.figsize']=(10,6)    
f=open(r'链家二手房.csv')
df=pd.read_csv(f)

# 以下数据清洗、整理过程
# 1、重命名字段
df.rename(columns={'小区名称':'village','户型':'house_type','面积':'area','区域':'district','楼层':'floorlevel','朝向':'toward',
                  '价格(W)':'total_price','单价(平方米)':'unit_price','建筑时间':'construction_time'},inplace=True)
# 2、“楼层”字段处理
df['floor_level']=df.floorlevel.str.extract('(\D+)/')
df['floor']=df.floorlevel.str.extract('/(.*)层')
df.drop('floorlevel',axis=1,inplace=True)
df['floor']=df['floor'].astype(float)

# 3、‘建筑时间’字段处理
df['construction_time']=df.construction_time.str.extract('(\d+)年建')
df['construction_time']=pd.to_datetime(df.construction_time,format='%Y').values.astype('datetime64[Y]')

01上海二手房整体情况的描述统计

new_df=df[~df.district.isin(['崇明','金山','静安'])]

02上海二手房单价分布情况:

sns.distplot(new_df.unit_price,bins=20)
plt.title('上海二手房单价分布情况')
fig,axes=plt.subplots(1,2,figsize=(16,4))
axes0,axes1=axes.flatten()
# 单价各城区单价分布箱线图
sns.boxplot(x='district',y='unit_price',data=new_df,ax=axes0)
axes0.set_title('各城区单价分布箱线图')
# 单价各城区总价分布箱线图
sns.boxplot(x='district',y='total_price',data=new_df,ax=axes1)
axes1.set_title('各城区总价分布箱线图')
plt.ylim(0,3000)
new_df.groupby('district').unit_price.mean().sort_values().plot.barh()
new_df.groupby('district').total_price.mean().sort_values().plot.barh()
# 部分小区在售房源数量小于10,不具有统计意义,因此删除掉在售房源小于10套的小区
drop_village=new_df.groupby('village').count().query('area>=10').index
new_df[new_df.village.isin(drop_village)].groupby('village').mean().unit_price.sort_values(ascending=False).head(15).plot.barh()
new_df[~new_df.village.isin(drop_village)].groupby(['district','village']).mean().reset_index().groupby('district').apply(lambda x:x.sort_values('unit_price',ascending=False)[:1])

以上是各个城区单价最高的小区,长宁区单价最高的小区宏业花园达到20万,奉贤区单价最高的申亚花涧墅仅6.6万元,差异较大。

03各城区房源分析;

group_district=df.groupby('district')
sns.countplot(x='district',data=df)
plt.title('各城区房源数量')
district_area_rank=group_district.mean().sort_values('area',ascending=False).reset_index()
plt.bar(district_area_rank.district,district_area_rank.area)
plt.title('各城区房源平均面积')

1、青浦区平均面积远大于其他其他城区,再对比不同城区平均单价,青浦区的单价较低39898元,故分析可能原因为:青浦区位于上海的郊区,属于新开发地区,土地资源相对于市中心来讲相对宽裕一些,再加上价格便宜,所以开发商会选择修建更大面积的房子。
2、大多数城区平均面积在[80,110]之间。
new_df.groupby(['district','village']).count().reset_index().groupby('district').apply(lambda x:x.sort_values('area',ascending=False)[:3])

04房价影响因素探究

new_df.groupby('district').mean().unit_price.sort_values(ascending=False).plot.bar()
plt.title('房价与不同地理位置的关系')
fig,axes=plt.subplots(2,1,figsize=(12,8),sharex=True)
axes0,axes1=axes.flatten()
count_house_type=new_df.groupby('house_type').count().query('area>100')
count_house_type.area.plot.bar(ax=axes0)
axes0.set_title('不同户型的房源数量')
new_df[new_df.house_type.isin(count_house_type.index)].groupby('house_type').unit_price.mean().plot.bar()
axes1.set_title('不同户型的平均单价')
# 过滤楼层存在缺失值的行
group_floor=new_df[new_df.floor.isin((new_df.groupby('floor').area.count()>100).index)].groupby('floor')
fig,axes=plt.subplots(2,1,figsize=(16,8))
axes0,axes1=axes.flatten()
group_floor.unit_price.count().plot.bar(ax=axes0)
axes0.set_title('不同楼层的房源数量')
group_floor.unit_price.mean().plot.bar(ax=axes1)
axes1.set_title('不同楼层的平均单价')
new_df['toward']=new_df.toward.str.replace("\(进门\) ",'朝')
toward_list=list(['朝东','朝东北','朝东南','朝北','朝西北','朝西','朝西南','朝南'])
drop_toward=new_df[new_df.toward.isin(toward_list)]
group_toward=drop_toward.groupby('toward')
fig,axes=plt.subplots(2,1,figsize=(12,8))
axes0,axes1=axes.flatten()
group_toward.unit_price.count().plot.bar(ax=axes0)
axes0.set_title('不同朝向的房源数量')
group_toward.unit_price.mean().plot.bar(ax=axes1)
axes1.set_title('不同朝向的房子单价')
groupby_time=new_df.groupby('construction_time')
fig,axes=plt.subplots(2,1,figsize=(12,8))
axes0,axes1=axes.flatten()
groupby_time.unit_price.count().plot(ax=axes0)
axes0.set_title('不同年代的房子数量')
groupby_time.unit_price.mean().plot(ax=axes1)
axes0.set_title('不同年代的房子单价')
上一篇下一篇

猜你喜欢

热点阅读