【python】上海链家二手房交易数据分析

  • 目的:练习pandas数据处理以及数据可视化
  • 数据采集时间:2017/11/7
  • 数据获取:八爪鱼数据采集工具
  • 数据量:约3w条
  • 字段:行政区、小区名称、房型、楼层、朝向、单价、总价、建造年代等

1.数据预处理
------

# 定义一个分列数据的函数工具用于将home_info和location_info的信息拆分出来
import pandas as pd
def data_split(df_data):df_data = df_data.map(lambda x:x.replace('\n', ''))df_data = df_data.map(lambda x:x.replace(' ',''))df_data = df_data.map(lambda x:x+'|')df_data_0 = df_data.map(lambda x:x.split('|')[0])df_data_1 = df_data.map(lambda x:x.split('|')[1])df_data_2 = df_data.map(lambda x:x.split('|')[2])df_data_3 = df_data.map(lambda x:x.split('|')[3])df_data = pd.concat([df_data_0, df_data_1, df_data_2, df_data_3], axis=1)return df_data# 导入数据并预处理
import pandas as pd
import matplotlib.pylab as plt
from matplotlib.pylab import style
import datetime
starttime = datetime.datetime.now()
style.use('ggplot')     # 设置图片显示的主题样式
# 解决matplotlib显示中文问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
df_2 = pd.read_csv('.\lianjia_ershoufang_new.csv')
print('数据集基本信息:')
print(df_2.info())
print('数据集共{}行,{}列'.format(df_2.shape[0],df_2.shape[1]))
print('原始数据预览:')
print(df_2.head())df_2 = pd.concat([df_2.iloc[:,:3],data_clean(df_2['home_info']),data_clean(df_2['location_info'])], axis=1)
df_2.columns =['travel', 'total_price', 'price','room_type', 'area', 'floor', 'orientation', 'area_name', 'district', 'location', 'built_year']# 为便于数据分析,去除数值中的汉字
df_2['built_year'] = df_2['built_year'].map(lambda x:x.replace('年建',''))
# 这一步是为了后面可以顺利将built_year转成int类型
for i in range(df_2.shape[0]):if df_2.loc[i,'built_year'] == '':df_2.loc[i,'built_year'] = 0else:pass
df_2['area'] = df_2['area'].map(lambda x:x.replace('平',''))
df_2.built_year = df_2.built_year.astype('int')
df_2['area'] = df_2['area'].astype('float64')
df_2.to_csv('.\lianjia_clean.csv', sep=',', index=False)   # 数据清洗完毕写入csv保存
endtime = datetime.datetime.now()
time_used = (endtime - starttime).seconds
print('数据预处理完成,共耗时%s秒' % time_used)
print('预处理后数据预览:')
df_2.head()

2.数据可视化

**2.1 总价、单价、面积和建造年代分布直方图**
fig = plt.figure(figsize=(15.0,10.0))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)fig.suptitle('链家二手房交易数据总览')df_totalprice = df_2[df_2['total_price'] < 4000]  # 略去总价4000w以上的数据
ax1.hist(df_totalprice['total_price'], bins=100, color='blue', alpha=0.7)
ax1.set_xlabel('总价')
ax1.set_ylabel('数量')ax2.hist(df_2['price'] , bins=100, color='blue', alpha=0.7)
ax2.set_xlabel('单价')
ax2.set_ylabel('房源数量')df_area = df_2[df_2['area'] < 400]  # 略去面积400平以上的数据
ax3.hist(df_area['area'], bins=100, color='blue', alpha=0.7)
ax3.set_xlabel('面积')
ax3.set_ylabel('房源数量')df_builtyear = df_2[df_2['built_year']>0] # 没有建造年代的标记为0,此处略去没有建造年代的数据
ax4.hist(df_builtyear['built_year'], bins=22, color='blue', alpha=0.7)
ax4.set_xlabel('建造年代')
ax4.set_ylabel('房源数量')plt.savefig('.\general_discription.png',dpi=200, bbox_inches='tight')
plt.show()

2.2 各区房价箱线图

import seaborn as sns
sns.set_style("whitegrid")from matplotlib.font_manager import FontProperties
myfont=FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf',size=14)
sns.set(font=myfont.get_name()) # 解决seaborn中文显示为方框的问题plt.figure(figsize=(20.0,15.0))
ax = sns.boxplot(x="district", y="price",data=df_2[['district','price']])
ax.set_xlabel("上海各区",fontsize=20)
ax.set_ylabel("单价",fontsize=20)
plt.savefig('.\district_price.png',dpi=200, bbox_inches='tight') # 保存图片,设定图片分辨率,保证图片保存完整
plt.show()

2.3 获取各小区的经纬度,绘制房价地图

**2.3.1 获取各小区的经纬度**
import urllib
import jsonurl = 'http://api.map.baidu.com/geocoder/v2/'
ak = '&ak=C3KyxnzaNma4dXtTXZRSII10gu2Egq9W' # 调用百度地图API的密钥,个人可自由申请
city_name = '上海'
city_name = urllib.parse.quote(city_name) # 编码url链接中的中文部分
city = '&city=%s'%(city_name)
output = '&output=json&pois=0'lng = []
lat = []for i in range(0, df_2.shape[0]):area_name = df_2.loc[i,"area_name"]area_name = urllib.parse.quote(area_name)address = 'address=%s'%(area_name)url = 'http://api.map.baidu.com/geocoder/v2/'  # url初始化url = url + '?'+ address + city + output  + aktemp = urllib.request.urlopen(url)hjson = json.loads(temp.read())try:lng.append(hjson["result"]["location"]["lng"])lat.append(hjson["result"]["location"]["lat"])except:lng.append(None)lat.append(None)df_lng = pd.DataFrame(lng, columns=[['lng']])
df_lat = pd.DataFrame(lat, columns=[['lat']])df_2 = pd.concat([df_2, df_lng,df_lat], axis=1) # 将获得的经纬度信息更新到原始数据中df_loc = df_2[['area_name', 'price', 'lng', 'lat']].drop_duplicates() # 去重+去除空值
if df_loc.isnull().values.any():df_loc = df_loc.dropna()df_loc_group = df_loc.groupby(['area_name','lng', 'lat'], as_index=False)['price'].mean()
df_loc_group.to_csv('.\location.csv', index=False)**2.3.2 绘制房价地图**
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from matplotlib import cm
%matplotlib inlinemap = Basemap(projection='stere',lat_0=31,lon_0=121,\llcrnrlat=30,urcrnrlat=32,\llcrnrlon=120,urcrnrlon=122,\rsphere=6371200.,resolution='h',area_thresh=10)
map.drawmapboundary()   # 绘制边界
map.drawstates()        # 绘制州
map.drawcoastlines()    # 绘制海岸线
map.drawcountries()     # 绘制国家
map.drawcounties()      # 绘制县parallels = np.arange(30.,32.,.5)
map.drawparallels(parallels,labels=[1,0,0,0],fontsize=10) # 绘制纬线meridians = np.arange(120.,122.,.5)
map.drawmeridians(meridians,labels=[0,0,0,1],fontsize=10) # 绘制经线lat = df_loc_group["lat"]                     # 获取纬度值
lon = df_loc_group["lng"]                   # 获取经度值
price = df_loc_group["price"]             # 获取平均房价cm = plt.cm.get_cmap('Reds')
z = (price - price.min())/(price.max() - price.min())   # 绘制散点图时散点颜色深浅表示均价高低,颜色越深价格越高lon = np.array(lon)
lat = np.array(lat)
x,y = map(lon, lat)sc = map.scatter(x,y,marker=',',c=z,s=0.1,cmap=cm)
plt.colorbar(sc)                         # 绘制颜色标尺
plt.title('上海房价分布图')
plt.savefig('.\homeprice_distibution_2.png', dpi=300, bbox_inches='tight')
plt.show()


上海链家二手房交易数据分析相关推荐

  1. python分析链家二手房信息----数据分析实战(一)

    链家二手房信息 # 导入需要的库:科学计算包numpy, pandas 可视化包matplotlib, seaborn 机器学习包 sklearn import numpy as np import ...

  2. 爬取链家二手房交易数据

    请求:浏览器的地址栏的url向服务器发送请求 关注的内容:请求的url 请求的方式method get/post 请求参数 响应: 作出响应 响应状态码:200 418 404 500 浏览器的工作原 ...

  3. 3-对链家二手房数据进行预处理,以及利用CNN进行多分类操作

    使用:26-爬取链家二手房成交的房产信息[简单] (https://my.oschina.net/pansy0425/blog/3031621),对爬取到的数据进行简单的清洗,去噪,进行数据预处理,以 ...

  4. 大数据信息资料采集:房产链家二手房新房源出售买卖交易信息采集

    在这里插入图片描述 大数据信息资料采集:房产链家二手房新房源出售买卖交易信息采集 数据采集满足多种业务场景:适合产品.运营.销售.数据分析.政府机关.电商从业者.学术研究等多种身份职业. 舆情监控:全 ...

  5. 武汉链家二手房数据分析

    爬取链家二手房武汉地区的成交数据,共23292条记录,利用Excel.MySQL.Power BI等工具对影响武汉二手房交易价格的因素进行了分析 分析思路 分析目的 武汉哪个区的二手房交易最多? 哪种 ...

  6. 北京链家二手房数据分析

    首先我们需要将链家二手房的数据抓取下来,用我们上课学的内容,很容易实现(bs4,re,urllib,搞定!): import re import csv from bs4 import Beautif ...

  7. PyQt5+Python+Excel链家二手房信息爬取、可视化以及数据存取

    成果图: 第一步运行代码searsh.py,效果如下 第二步选择你所需要爬取数据的城市,如湖北-武汉 然后搜索,结果如下 如果你想爬取更多信息,只需要点击下一页即可 第三步,保存数据.可以将所显示的所 ...

  8. scrapy实现链家二手房的数据获取并进行持久化存储

    理解Scrapy框架各个组成的作用:五大组成,下载器,调度器,引擎,爬虫,管道. 引擎:它是整个Scrapy框架的核心,用来处理整个系统的数据流,触发各种事件.用于控制调度器,下载器,爬虫,管道. 爬 ...

  9. python-scrapy-MongoDB 爬取链家二手房

    python-scrapy-MongoDB 爬取链家二手房 链家二手房房源数据抓取 目标网址为http://bj.lianjia.com/ershoufang/ 分析网址 创建项目 scrapy st ...

  10. 26-爬取链家二手房成交的房产信息【简单】

    目的:爬取链家二手房成交的信息,包括:['cjxiaoqu','cjdanjia','cjhuxing','cjmianji','cjshijian','cjlouceng','cjchaoxiang ...

最新文章

  1. module._init_() takes at most 2 arguments (3 given) (scrapy tutorial w/ xpath)
  2. Parallels高危漏洞的奇葩修复指南
  3. Java配置文件的使用
  4. 搭建golang webcron 定时任务管理平台
  5. echarts 折线图 html模板,设置ECharts折线图的提示框
  6. 常用PHP数组函数总结
  7. 基于.NET的分词软件设计与实现V1.0--总体思路及算法实现
  8. Flask之Flask实例有哪些参数
  9. bootstrap 横铺 行_bootstrap的布局(container、row、col-xs-4)
  10. sudo报错案例-RHEL6
  11. 【bzoj4653】[Noi2016]区间 双指针法+线段树
  12. 基于CSS+dIV的网页层,点击后隐藏或显示
  13. 关于文件上传,我要向struts提点意见
  14. Un*、IdL分别突变情况下双闭环直流调速系统仿真
  15. 川土微电子 | 隔离电源的辐射抑制设计参考(四)
  16. python制作照片_python3一键排版证件照(一寸照、二寸照),附源代码
  17. response下载zip文件
  18. BP神经网络——激活函数
  19. scree VS tmux
  20. pika详解(四) channel 通道

热门文章

  1. QQ自动发消息源代码
  2. Windows Server 2008 R2 学习笔记——VMware Workstation中服务器(Windows Server 2008 R2)与客户机(Windows 7)的安装
  3. EVEREST工具---检测硬件
  4. 用图片来搜索 教你玩转Google按图搜索
  5. 网页服务器阿帕奇怎么启动服务,阿帕奇服务器使用教程
  6. 数值作业:改进欧拉法求常微分方程C语言代码
  7. MP3/4维修全攻略
  8. ZedBoard 最小系统构建 (一)-硬件结构搭建
  9. 基于jieba和哈工大信息检索研究中心同义词词林扩展版的同义词替换安装与测试
  10. 软件工程 -- 数据流图的画法