KernSmooth for Python
=====================
Porting popular R library KernSmooth to python.

Functions for Kernel Smoothing and Density Estimation.

Transformed R and Fortran functions into Python(2,3) code.

Installation:
-------------

.. code:: shell

		pip install kern-smooth


Main function of the module:
----------------------------

.. code:: python
        
        def densCols(x, y=None, nbin=128, bandwidth=None)


Produces a vector of numbers which encode the local densities at each point in dataset.

x, y : 1D numpy array with coordinates of the points density will be estimated on

nbin : [optional] int or [int, int] - number of bins along each axis
    (in case of single value - [nbin, nbin] will be used). Default value 128.

bandwidth : [optional] numeric vector (len of 1 or 2) of smoothing bandwidth.

Returns: numpy array with numerical representation (in range [0,1]) of point densities.

Attention: For return value numpy.nan values are allowed in case of nan / infinite values in original dataset 

Source: R::grDevices::densCols


Usage
-----

Generate data for plotting

.. code:: python

    from matplotlib import pyplot as plt
    from matplotlib import cm
    import numpy as np
    np.random.seed(0)
    # create two 'bulbs' with normal distributions
    mean1 = [0, 0]
    cov1 = [[5, 0], [0, 30]]  # diagonal covariance
    x1, y1 = np.random.multivariate_normal(mean1, cov1, 50000).T
    mean2 = [5, 17]
    cov2 = [[30, 0], [0, 5]]  # diagonal covariance
    x2, y2 = np.random.multivariate_normal(mean2, cov2, 50000).T
    x = np.hstack([x1,x2])
    y = np.hstack([y1,y2])


Generate point densities:

.. code:: python

    from kern_smooth import densCols
    densities = densCols(x, y, nbin = 128)


Plot the result

.. code:: python

    sc = plt.scatter(x, y, c=densities, s=15, edgecolors='none', alpha=0.75, cmap=cm.jet)
    plt.colorbar(sc)
    plt.show()


Result
------
![Result](https://github.com/AlexanderButyaev/kern_smooth/blob/master/example_density.png) 

Author
------
Alexander Butyaev
