pandas杭州市出租房分析

前言:很早之前学了爬虫 , 但是一直没有对爬虫数据进行分析过,最近爬了2019年2月份的58同城杭州租房信息 , 希望分析一下杭州房租情况,租金分布是怎么样的 , 哪里的性价比最好 。
数据来源
数据是集采于58同城的租房信息(代码见)
数据如图1所示 , 包含字段:title, , area, , , , , price
图2是58租房页面信息分别对应表里的字段
由于爬数据的时候没有对数据进行过清洗和特别的处理 , 所以可以看到表里的字段里面的值里面有很多空格,另外如户型和面积的信息被提取在同一个字段里面了 。接下里需要对数据进行一下清洗 。
数据预处理
数据清洗
对title ,  ,  , 等字段进行解析 , 冗余信息处理(eg:空格 m2) , 从而得到租赁类型(eg:单间和整租) , 面积 , 商圈 , 公寓 , 经纪公司 。
#数据清洗info['type']=info['title'].str.split('|',expand=True)[0].str.replace('[\n\s+]','')info['m_area']=info['room_type'].str.replace('\s+|㎡','#').str.split('#',expand=True)[1].astype(float)info['m_room_type']=info['room_type'].str.replace('\s+','#').str.split('#',expand=True)[0]info['m_room_type']=info.m_room_type.str.replace('两','2')info['send_time']=info['send_time'].str.replace('[\n\s+]','')info['m_rent_origin']=info['rent_origin'].str.replace('[\n\s+]','')info['m_department']=info['address'].str.split(';',expand=True)[1]info['m_address']=info['address'].str.split(';',expand=True)[0]info['price_int']=info[info['price']!='面议']['price'].astype(float)info['fee_avg_square']=info.apply(lambda info: info['price_int'] / info['m_area'], axis=1)
地址解析
由于没有爬虫的数据里面没有区域信息如西湖区 , 江干区 , 区域又是重要的分析维度 , 因此调用了的接口根据公寓名获得具体的经纬度 , 再根据经纬度获取区域信息
# 地址解析 根据地址名称返回经纬度import requests def geocode(address): parameters = {'address': address, 'key': 'XXXXXXX'} ## key 高德api注册 , 申请一个应用可以获得base = 'http://restapi.amap.com/v3/geocode/geo'headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36','Cookie': 'id58=c5/njVpymhR0X0thDRuHAg==; commontopbar_new_city_info=79%7C%E6%9D%AD%E5%B7%9E%7Chz; 58tj_uuid=763a5398-da95-4db2-9a54-ba7f4171f17c; new_uv=1; wmda_uuid=80797b44db9604b45dfbf4807417e58f; wmda_new_uuid=1; wmda_visited_projects=%3B2385390625025; commontopbar_ipcity=hz%7C%E6%9D%AD%E5%B7%9E%7C0; commontopbar_myfeet_tooltip=end; als=0; xxzl_deviceid=d7wGUAUqik8MomhIMsEH98iyUnHRBDyrCJYsasv1uq9biXZ%2F%2Bxav%2BhZr%2FQQmLjYF; wmda_session_id_2385390625025=1517477544470-6db397e1-9d59-3e58'#'Host': 'cdata.58.com',#'Referer': 'http://webim.58.com/index?p=rb'}response = requests.get(base, parameters,headers=headers)answer = response.json()print(address)print(answer)return answer['geocodes'][0]['location']#print(address + "的经纬度:", answer['geocodes'][0]['location'])
info['department1']='杭州市'+info['m_department']info['lngandlat']=info[info['department1'].notnull()].department1.apply(geocode)