北京租房数据统计分析
5.1数据的爬取
代码:
# 5北京租房数据统计分析
# 5.1数据的爬取
import pandas as pd
import numpy as np
file_path=open(r"D:\python课设\数据\数据\5、北京租房数据统计分析\链家北京租房数据.csv")
file_data=pd.read_csv(file_path,encoding="utf-8")
file_data
运行结果:
首先使用pandas的read_csv()方法进行数据的读取,然后就能够看到相应的表格信息。
5.2区域的房源总量的热力图分析
5.2.1数据去重:
代码:
# 先做数据预处理
file_data.duplicated()
运行结果:
先做数据预处理,将重复的数据做去重处理,我们可以看到使用duplicated()可以返回一组布尔数组,重复的部分返回值为FALSE,不重复的为True。
代码:
filed_data=file_data.drop_duplicates()
filed_data
运行结果:
使用drop_duplicates()方法对数据做去重处理,去除重复的数据,方便后面绘图计算以及其他操作。
5.2.2去除重复值
代码:
# 删除缺失的数据
data=filed_data.dropna()
data
运行结果:
使用dropna()的方法删除空值,做数据进一步的处理,方便后面绘图计算以及其他操作。
5.2.3数据类型的转化
代码:
# 刚我搞完了AK码的申请,现在我开始进行后面的数据处理,由于我们在这里,存在着热图查看需要准确经纬度
# 位置所以需要在这里把详细的部分做数据拼接
data["位置"]="北京市"+data["区域"].values+"区"+data["小区名称"].values
data
运行结果:
在这里显示热力图需要调用百度地图的API,就需要我们申请一个AK码,方便调用,然后还需要我们提供特别需要显示的经纬度。
这个地方比较复杂,所以我将会在另一篇博客中详细的论述这个部分的内容。
5.2.4导出热力图经纬度
代码:
# _*_ coding:utf-8 _*_
import requests
import pandas as pd
import time
import json
class LngLat:
# def __init__(self):
# self.headers = {
# "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"}
# self.proxies = {
# "http": "http://61.135.217.7:80",
# "http": "http://118.190.95.43:9001",
# "http": "http://180.122.147.67:37153",
# "http": "http://118.190.95.35:9001",
# "http": "http://119.5.0.11:808",
# "http": "http://106.56.102.192:8070"
# }
# 读取数据
def read_data(self):
file_path=open(r"D:\python课设\数据\数据\5、北京租房数据统计分析\链家北京租房数据.csv")
file_data = pd.read_csv(file_path)
duplicate_removal = file_data.drop_duplicates()
house_names = duplicate_removal['位置']
house_names = house_names.tolist()
return house_names
def get_url(self):
url_temp = "http://api.map.baidu.com/geocoder/v2/?address={}&output=json&ak=NnQokv12fkyf4YoG59j9fRbGq4G8Lb4K&callback=showLocation"
# ak = 'NnQokv12fkyf4YoG59j9fRbGq4G8Lb4K'
house_names = self.read_data()
return [url_temp.format(i) for i in house_names]
# 发送请求
def parse_url(self, url):
while 1:
try:
r = requests.get(url)
except requests.exceptions.ConnectionError:
time.sleep(2)
continue
return r.content.decode('utf-8')
def run(self):
li = []
urls = self.get_url()
for url in urls:
data = self.parse_url(url)
str = data.split("{")[-1].split("}")[0]
try:
lng = float(str.split(",")[0].split(":")[1])
lat = float(str.split(",")[1].split(":")[1])
except ValueError:
continue
# 构建字典
dict_data = dict(lng=lng, lat=lat, count=1)
li.append(dict_data)
f = open(r"D:\python课设\经纬度信息.txt",'w', 'w')
f.write(json.dumps(li))
f.close()
print('写入成功')
if __name__ == '__main__':
execute = LngLat()
execute.run()
运行结果:
首先读取链家北京租房数据.csv的数据,位置信息获取,然后使用request获取相关的经纬度信息,然后将处理好的经纬度数据写入到txt文件中方便后面进行热力图的绘制。
5.2.5 热力图绘制
代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content