Skip to main content

Closely find closest pairs of points, eg duplicates, in a dataset

Project description

Closely :triangular_ruler:

PyPI version Build Status

Find the closest pairs in an array.

Closely uses principal component analysis (PCA) to reduce the dimensions to 2 and a divide and conquer algorithm to find the closest pair of points.

Getting Started

pip install closely

or install from source:

git clone https://github.com/justinshenk/closely
cd closely
pip install .

How to use

import closely

# X is an n x m numpy array
pairs, distances = closely.solve(X, n=1)

You can specify how many pairs you want to identify with n.

Example

import closely
import numpy as np
import matplotlib.pyplot as plt

# Create dataset
X = np.random.random((100,2))
pairs, distance = closely.solve(X, n=1)

# Plot points
z, y = np.split(X, 2, axis=1)
fig, ax = plt.subplots()
ax.scatter(z, y) 

for i, txt in enumerate(X): 
    if i in pairs: 
        ax.annotate(i, (z[i], y[i]), color='red') 
    else: 
        ax.annotate(i, (z[i], y[i]))

plt.show() 

Check pairs:

In [10]: pairs                                                                                                                                
Out[10]: 
array([[ 7, 16],
       [96, 50]])

Output: example_plot

Caveats

If your data has more than 3 features, closely will reduce the dimensionality by projecting it onto two directions that explain most of the variance. This speeds up processing, but is not 100% precise. In other words, if your data has four columns (eg, x, y, z, a), it will apply divide-and-conquer on the new projection bases P1 and P2.

It also removes the first point in a pair if n>1. In rare cases this leads to false negatives if the data is highly overlapping.

Credit and Explanation

Python code modified from Andriy Lazorenko, packaged and made useful for >2 features by Justin Shenk.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

closely-19.0.0.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

closely-19.0.0-py3-none-any.whl (4.7 kB view details)

Uploaded Python 3

File details

Details for the file closely-19.0.0.tar.gz.

File metadata

  • Download URL: closely-19.0.0.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for closely-19.0.0.tar.gz
Algorithm Hash digest
SHA256 3ad32f8889f027c2ff85e5c6f3f61910cdcf8346c09e33e1302957e4739652b3
MD5 92f8de726ceee785b4580bc79a3516ee
BLAKE2b-256 6d2ad48e7db014fac9c747640fb8eb80446c25da52b4a85c214e4229479d4766

See more details on using hashes here.

File details

Details for the file closely-19.0.0-py3-none-any.whl.

File metadata

  • Download URL: closely-19.0.0-py3-none-any.whl
  • Upload date:
  • Size: 4.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2

File hashes

Hashes for closely-19.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 07aabc5b91aad528eca03d0c0316b0cc499c9b2371163bb09a90cd256df387fe
MD5 2011ffc951e0755996499d7820286e0a
BLAKE2b-256 0e3e273801e68e036b828dcbddc7ef4fb22bc09a1832c487731b660f99e4debd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page