Closely find closest pairs of points, eg duplicates, in a dataset
Project description
Closely :triangular_ruler:
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:
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file closely-19.0.2.tar.gz
.
File metadata
- Download URL: closely-19.0.2.tar.gz
- Upload date:
- Size: 6.8 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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 848ab89b9d6958c938ca83225c26cae476fb5ebba86f054eaedb77513498dff4 |
|
MD5 | 3ce3ef61a954b1cd02ba69fa8cf04c4a |
|
BLAKE2b-256 | 8e4682d1d9d0b2a42af880c7dda3f57d1b065681d9f1b2c51c7519347cb776ae |
File details
Details for the file closely-19.0.2-py3-none-any.whl
.
File metadata
- Download URL: closely-19.0.2-py3-none-any.whl
- Upload date:
- Size: 6.1 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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 739365668d6beeed40137d28b937abeaa1ca2e6dd15d71eced9750c819b73125 |
|
MD5 | d4e32a05bfd2f5b4741bd2e2772e1ac0 |
|
BLAKE2b-256 | 39c1126873342cd0ea249321adbaf3766a771a986d1b09d935a578116e890aaa |