在已爬取的上海二手房数据基础上,调用高德接口,获取房屋经纬度及人民广场经纬度。在原有数据上添加一列“房子到人民广场的距离”,然后利用k-means进行聚类分析。本文只记录数据预处理部分。

REF:

Python:爬了下链家的小区数据,为数据分析弄素材~_Cyber的博客-CSDN博客_小区数据前言:最近在学数据分析,包括主成分分析、因子分析、聚类。。。等等,没有数据可不行啊,所以就把链家的小区数据给爬了一下,为后续的分析实战弄素材~一、数据爬取准备链家的网站还是很好爬的,地址很有标准,可以看到下图中有5391个小区,但是很多都是无效小区,而且单页只有30个小区且最多30页,所以我们需要从源码上了解具体结构。从第二页起,链接就变成pg2之类的,依次类推,就可以爬取30页以后的数...https://blog.csdn.net/weixin_42029733/article/details/93064205?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-1.queryctr&spm=1001.2101.3001.4242.2&utm_relevant_index=4

1.1 数据导入

import pickle
import pandas as pd
import re
import numpy as np
import requests
import json
import math
from tqdm import tqdm, trange# 读取
shanghai_ershou = pickle.load(open( './shanghai_ershou_v2.pkl', 'rb'))
# hangzhou_new = pickle.load(open( './hangzhou_new.pkl', 'rb'))l = []
for key in shanghai_ershou.keys():l.append(len(shanghai_ershou[key].keys()))print('爬取房屋的总数:',sum(l))# 转化为dataframe
shanghai_ershou_df = pd.DataFrame(columns = pd.DataFrame(shanghai_ershou['locationbeicaipg1']).index)
for i in shanghai_ershou.keys():temp = pd.DataFrame(shanghai_ershou[i]).Tshanghai_ershou_df = pd.concat([shanghai_ershou_df, temp], ignore_index = True)

1.2 已有数据进行数据预处理

# 发现dataframe中每个元素都是一个列表(有可能为空)
def extract_0(x):"""提取列表中第一个元素,若列表为空,则返回none"""try:return x[0]except:return None   df_shanghai = shanghai_ershou_df.copy()
# dataframe中每一列数据都从列表中提取出来
for col in df_shanghai.columns:df_shanghai[col] = df_shanghai[col].apply(extract_0)# 对总价进行处理
df_shanghai.total_price = df_shanghai.total_price.astype('float')# 对单价进行处理
df_shanghai.unit_price = df_shanghai.unit_price.str.extract(r'([\d,]+)').replace(',','', regex = True).astype('float')[0]# 对面积进行处理
df_shanghai['area'] = df_shanghai.loc[:,'info'].str.extract('([\d.]+)平米')

1.3 批量调用接口并解析出经纬度

res_dict = {}
for i in trange(df_shanghai.shape[0]):
# for i in tqdm(range(5)):url = 'https://restapi.amap.com/v3/geocode/geo?key=c00a9fc63a97c64fe63bf1ff051a285e&address=上海市{}&city=上海市'location = df_shanghai.iloc[i, 5]+df_shanghai.iloc[i,0]try:res = requests.get(url.format(location.rstrip())).textexcept:res = Nonefinally:res_dict[i] = resdf_shanghai['api'] = pd.Series(res_dict)def parse_location(res):if res != None:geocodes = json.loads(res).get('geocodes')[0]location = geocodes.get('location')return locationelse:return None# 经纬度
df_shanghai['location'] = df_shanghai.api.map(parse_location)# 经度,纬度
df_shanghai['longitude'] = df_shanghai.location.str.extract('([\d.]+),')
df_shanghai['latitude'] = df_shanghai.location.str.extract(',([\d.]+)')df_shanghai['longitude'] = df_shanghai['longitude'].astype('float')
df_shanghai['latitude'] = df_shanghai['latitude'].astype('float')

1.4 计算距离

# 获取人民广场的经纬度
url = 'https://restapi.amap.com/v3/geocode/geo?key=c00a9fc63a97c64fe63bf1ff051a285e&address=上海市{}&city=上海市'
location = '人民广场'
res = requests.get(url.format(location.rstrip())).text
rg_location = json.loads(res).get('geocodes')[0].get('location')matchObj = re.search('([\d.]+),', rg_location)
rg_longitude = float(matchObj.group(1)) # 经度
matchObj = re.search(',([\d.]+)', rg_location)
rg_latitude = float(matchObj.group(1)) # 纬度
# 定义用于计算距离的函数def angle2radian(x):"角度转换为弧度"return x*math.pi/180def rec2sphere(lng1, lat1):"球坐标系->直角坐标系"R = 6371x1 = R*math.cos(lng1)*math.cos(lat1)y1 = R*math.cos(lng1)*math.sin(lat1)z1 = R*math.sin(lat1)return x1, y1, z1def get_chord_length(x1, y1, z1, x2, y2, z2):"获取直角坐标系中的直线距离"dx = x1 - x2dy = y1 - y2dz = z1 - z2lenth = np.sqrt(dx**2+dy**2+dz**2)return lenthdef get_distance(lng1, lat1, lng2 , lat2):"输入经纬度,得到两地距离(km)"R = 6371# 角度转化为弧度lng1 = angle2radian(lng1)lat1 = angle2radian(lat1)lng2 = angle2radian(lng2)lat2 = angle2radian(lat2)# 球坐标->直角坐标x1, y1, z1 = rec2sphere(lng1, lat1)x2, y2, z2 = rec2sphere(lng2, lat2)# 三维空间中的距离(大圆中的弦长)lenth = get_chord_length(x1, y1, z1, x2, y2, z2)# 大圆中的弧长alpha = math.asin(lenth/2/R)*2r = alpha*Rreturn r
# dataframe的每一行计算距离
distance_dict = {}
for i in trange(df_shanghai.shape[0]):lng1 = df_shanghai.iloc[i].longitudelat1 = df_shanghai.iloc[i].latitudedistance = get_distance(lng1, lat1, rg_longitude, rg_latitude)distance_dict[i] = distancedf_shanghai['distance_rg'] = pd.Series(distance_dict)

1.4 数据存储

df_shanghai.drop(columns = ['api', 'location'], inplace=True)
df_shanghai.to_csv('sh_ershou_clean_v2.csv')

step2:

聚类尝试-kmeans-step2聚类模型训练及结果可视化_nikita_zj的博客-CSDN博客聚类尝试-kmeans-step2聚类模型训练及结果可视化https://blog.csdn.net/nikita_zj/article/details/122343615

聚类尝试-kmeans-step1数据预处理相关推荐

  1. 机器学习-Sklearn-07(无监督学习聚类算法KMeans)

    机器学习-Sklearn-07(无监督学习聚类算法KMeans) 学习07 1 概述 1.1 无监督学习与聚类算法 聚类算法又叫做"无监督分类",其目的是将数据划分成有意义或有用的 ...

  2. Lecture6:激活函数、权值初始化、数据预处理、批量归一化、超参数选择

    目录 1.最小梯度下降(Mini-batch SGD) 2.激活函数 2.1 sigmoid 2.2 tanh 2.3 ReLU 2.4 Leaky ReLU 2.5 ELU 2.6 最大输出神经元 ...

  3. 使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战

    使用聚类算法(Kmeans)进行数据降维并作为分类算法逻辑回归(logistic Regression)的数据预处理步骤实战 目录

  4. Python商品数据预处理与K-Means聚类可视化分析

    数据提取 在我之前的文章Scrapy自动爬取商品数据爬虫里实现了爬虫爬取商品网站搜索关键词为python的书籍商品,爬取到了60多页网页的1260本python书籍商品的书名,价格,评论数和商品链接, ...

  5. ML之kmeans:通过数据预处理(分布图箱线图热图/文本转数字/构造特征/编码/PCA)利用kmeans实现汽车产品聚类分析(SSE-平均轮廓系数图/聚类三维图/雷达图/饼图柱形图)/竞品分析之详细

    ML之kmeans:通过数据预处理(分布图箱线图热图/文本转数字/构造特征/编码/PCA)利用kmeans实现汽车产品聚类分析(SSE-平均轮廓系数图/聚类三维图/雷达图/饼图柱形图)/竞品分析之详细 ...

  6. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  7. [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. Kmeans实现数据聚类

    基于数据源,建立Kmeans模型,实现数据聚类. 流程: 1.数据加载及展示: 2.数据预处理: 3.模型建立与训练: 4.模型预测: 5.结果展示及表现评估. 任务 1.k=2时,实现数据聚类,可视 ...

  9. 【机器学习】使用scikitLearn对数据进行聚类:Kmeans聚类算法的应用及密度聚类DBSCAN

    无监督学习: [机器学习]使用scikitLearn对数据进行聚类:Kmeans聚类算法及聚类效果评估 [机器学习]使用scikitLearn对数据进行聚类:高斯聚类GaussianMixture [ ...

  10. 随机森林图像分类实战:随机森林分类聚类(Kmeans)降维后的数据、随机森林分类聚类(Kmeans)降维后的合成(append)数据

    随机森林图像分类实战:随机森林分类聚类(Kmeans)降维后的数据.随机森林分类聚类(Kmeans)降维后的合成(append)数据 目录

最新文章

  1. HTML样式以及使用
  2. Oracle Varchar2 字段转成Clob字段
  3. Visual Studio 11 Beta 带来新的Metro 应用开发体验
  4. Nagios监控lvs服务
  5. linux c 禁止对外通信,Linux C套接字:在recv调用时被阻止
  6. java sipush_003-整型入栈指令(iconst、bipush、sipush、ldc)
  7. 苹果Mac应用音频捕获录制工具:​​​​​​​​TunesKit Audio Capture
  8. http://blog.csdn.net/evankaka/article/details/45155047
  9. 如何写好一篇博客(文章)
  10. Excel VBA小游戏,上班摸鱼必备
  11. 苹果手机怎么将PDF转换成JPG图片
  12. MacBook Pro 屏幕黑线、条纹、线条、舞台灯、残影、横线这样的排线门问题你遇到了吗?很有可能源于官方的设计缺陷,你该何去何从?
  13. 隔离模块介绍-隔离电源模块
  14. Java-基础篇-03-【选择语句-循环语句-随机数】
  15. 通过Excel对各个商品的销售分析
  16. 陈省身文集40——21世纪的数学
  17. java日期的计算(当月剩余天数、获取日期当月的天数)
  18. 〖Python 数据库开发实战 - MySQL篇⑯〗- SQL 语句的条件查询
  19. 27计算机表演赛命题,(历史2)27届计算机表演赛命题搜索赛答案
  20. python01串_python初学者日记01(字符串操作方法)

热门文章

  1. 下载编译chromium
  2. 开会总结【1】ADL129
  3. 阿里巴巴产品实习生23天
  4. linux上传文件到百度云盘(使用shell脚本,不依赖python库)
  5. win8服务器备份在哪个文件夹,iPhone备份文件在哪里?Win8系统路径介绍
  6. hdu5773The All-purpose Zero,1257最少拦截次数
  7. 千兆网线与千兆水晶头接法
  8. 连接方法:网线水晶头接法
  9. english need study and insist 1
  10. 电脑重装系统详细教程(以安装win10为例)