简单的python格网算法算数据密集度demo
# 格网算法计算数据集区域数据密集度
import time
import random
import numpy as np
import pandas as pd
# 模拟数据集
def create_data():
data_x = []
data_y = []
data = []
for i in range(300000):
x = random.randrange(0, 300000)
y = random.randrange(-1500, 1500)
data_x.append(x)
data_y.append(y)
data.append([x, y])
return data_x, data_y, data
# 计算网格数据密集度
def calculate_density(gridSize, bounds):
data_x, data_y, data = create_data()
# 计算网格边界
x = np.arange(bounds[0][0],
bounds[1][0] + gridSize,
gridSize)
y = np.arange(bounds[0][1],
bounds[1][1] + gridSize,
gridSize)
# 使用pandas构建网格
grid = pd.DataFrame(0, index=x[:-1], columns=y[:-1])
# 将数据分配到网格中
for point in data:
if point[0] < bounds[0][0] \
or point[0] > bounds[1][0] \
or point[1] < bounds[0][1] \
or point[1] > bounds[1][1]:
continue
# 计算数据在那个网格内
x_index = int((point[0] - bounds[0][0]) // gridSize)
y_index = int((point[1] - bounds[0][1]) // gridSize)
# 将网格计数 +1
grid.iloc[x_index, y_index] += 1
# 计算每个网格的密度
densities = grid.to_numpy() / (gridSize * gridSize)
# 将密度添加到数据中
for point in data:
if point[0] < bounds[0][0] \
or point[0] > bounds[1][0] \
or point[1] < bounds[0][1] \
or point[1] > bounds[1][1]:
continue
# 计算数据在那个网格内
x_index = int((point[0] - bounds[0][0]) // gridSize)
y_index = int((point[1] - bounds[0][1]) // gridSize)
point.append(densities[x_index, y_index])
return densities, data
if __name__ == "__main__":
start_time = time.time()
densities, data = calculate_density(100,
[[0, -1500], [300000, 1500]])
end_time = time.time()
print("消耗的时间:", end_time - start_time)
print(densities)
// 生成模拟数据集
function createData() {
let data = []
for (i = 0; i < 10000; i++) {
let data_y = (Math.random() - Math.random())
let data_x = i
data.push([data_x, data_y])
}
return data
}
// 计算最大值
function getMax(data){
let len = data.length
let max = -Infinity
while(len--){
max = data[len] > max ? data[len] : max
}
return max
}
// 计算最小值
function getMin(data){
let len = data.length
let min = Infinity
while(len--){
min = data[len] < min ? data[len] : min
}
return min
}
// 计算区域数据密集度
function calculateDensity(gridSize){
let data = createData()
let x = data.map(v => v[0])
let y = data.map(v => v[1])
// 计算数据极值
// min和max在数据量大时崩溃,125519
// let min_x = Math.min(...x)
// let max_x = Math.max(...x)
// let min_y = Math.min(...y)
// let max_y = Math.max(...y)
let min_x = getMin(x)
let max_x = getMax(x)
let min_y = getMin(y)
let max_y = getMax(y)
// 计算数据区域范围
let width = max_x - min_x
let height = max_y - min_y
// 计算宽高的分段数
let x_count = data.length / 100
let y_count = 100
let x_gridSize = width / (x_count - 1)
let y_gridSize = height / (y_count - 1)
// 创建嵌套数组模拟二维数组构建网格
let counts = Array.from(Array(x_count), () => Array.from(Array(y_count), () => new Array(3).fill(0)))
console.log(counts)
data.forEach((v) => {
if(v[0] < min_x || v[0] > max_x || v[1] < min_y || v[1] > max_y){
return
}
// 计算数据所在的区域坐标
let x_index = Math.floor((v[0] - min_x) / x_gridSize)
let y_index = Math.floor((v[1] - min_y) / y_gridSize)
counts[x_index][y_index][2] += 1
})
let densities = counts.map((count, x_index) => count.map((v, y_index) => {
v[2] /= gridSize
v[0] = x_index
v[1] = y_index
return v
}))
console.log(densities)
return densities
}
let start_time = Date.now()
calculateDensity(10)
let end_time = Date.now()
console.log('消耗的时间:', end_time - start_time)
简单的python格网算法算数据密集度demo的更多相关文章
- GIS可视化——热点格网图
一.简介 原理:按照格网大小将区域进行划分,由一个矩形格网替代当前范围内的数据,由格网中心数字代替格网的权重(可以为格网中数据的数量,数据某权重的平均值.最大值.最小值等), 由格网之间颜色的不同表达 ...
- 003.[python学习] 简单抓取豆瓣网电影信息程序
声明:本程序仅用于学习爬网页数据,不可用于其它用途. 本程序仍有很多不足之处,请读者不吝赐教. 依赖:本程序依赖BeautifulSoup4和lxml,如需正确运行,请先安装.下面是代码: #!/us ...
- 【转】你真的理解Python中MRO算法吗?
你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- BootStrap入门教程 (一) :手脚架Scaffolding(全局样式(Global Style),格网系统(Grid System),流式格网(Fluid grid System),自定义(Customing),布局(Layouts))
2011年,twitter的“一小撮”工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端工具集--BootStrap.Bootstrap由MARK ...
- 以图搜图(一):Python实现dHash算法(转)
近期研究了一下以图搜图这个炫酷的东西.百度和谷歌都有提供以图搜图的功能,有兴趣可以找一下.当然,不是很深入.深入的话,得运用到深度学习这货.Python深度学习当然不在话下. 这个功能最核心的东西就是 ...
- 基于gdal的格网插值
格网插值就是使用离散的数据点创建一个栅格图像的过程.通常情况下,有一系列研究区域的离散点,如果我们想将这些点转换为规则的网格数据来进行进一步的处理,或者和其他网格数据进行合并 等处理,就需要使用格网插 ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
随机推荐
- 我和Java这些年的故事(六)
从2006年开始,我就在建设自己的网站,从2008年到2011年,我托管了四年自己的服务器,那时阿里云还没有兴起,只能自己买服务器,放到托管商机房里去,他们给你一个IP.机器全部是自己运维. IBM内 ...
- SQL Server 机器学习服务-概述与实战(转)
原帖地址:https://d-bi.gitee.io/sqlserver-ml-services/ 新年第一篇,去旧迎新.本文内容,既旧也新.旧之处在于,SQL Server 机器学习服务是微软在SQ ...
- b站
题目描述 n条鱼,每条鱼的体积是ai 每一轮,每一条鱼一定会吃掉右边比自己小的第一条鱼,一条鱼只能被吃一次. 多少轮后,鱼的数量会稳定. 例子: 6 6 3 3 --> 6 6 3(第二个3)- ...
- Jmeter(三十九) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 上篇(详解教程)
------------------------------------------------------------------- 转载自:北京-宏哥 https://www.cnblogs.co ...
- lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 4 and head, line 6, column 12 报错分析与解决方案
报错分析: 我们检查代码没有任何问题,但报错显示:开始和结束标记不匹配. html:因为html是超文本标记语言,代码不规范也能解析. python:python是编程语言,代码不规范则解析不了. 解 ...
- WindowsServer2012搭建FTP服务器站点
公司需要搭建一个FTP服务器给银行推送账单,这个文章整理的比较详细,可以参考 数据来源: https://blog.csdn.net/u010483330/article/details/125931 ...
- Unity 设计模式-简单工厂模式和其他好用的通用代码块
1. 2.加法操作类 using System.Collections; using System.Collections.Generic; using UnityEngine; //加法操作类 pu ...
- WAP-2.1
WAP 是一种源代码静态分析和数据挖掘工具,用于检测和纠正用 PHP 4.0 或更高版本编写的 Web 应用程序中的输入验证漏洞,且误报率较低. WAP 检测并纠正以下漏洞: SQL Injectio ...
- Coursera Programming Languages, Part B 华盛顿大学 Week 3
ML Versus Racket 同 函数编程模式 (with constructs that encourage a functional style) 不鼓励 mutation (但提供了支持 m ...
- web自动化测试python+selenium----API
import time from selenium import webdriver # 启动谷歌浏览器,开启与浏览器之间的会话 driver = webdriver.Chrome() # 访问一个网 ...