find best statistical distribution,see:
    http://docs.scipy.org/doc/scipy-0.14.0/reference/stats.html

    currently only continuous distributions embedded

    returns scipy.stats[DIST], fitparams

def findBestDistribution(data, disttype='continuous'):
    """
    find best statistical distribution,see:
    http://docs.scipy.org/doc/scipy-0.14.0/reference/stats.html

    currently only continuous distributions embedded

    returns scipy.stats[DIST], fitparams
    """

    if disttype != 'continuous':
        raise NotImplemented()

    distributions = [st.alpha, st.anglit, st.arcsine,
                     st.beta, st.betaprime, st.bradford,
                     st.burr, st.cauchy, st.chi,
                     st.chi2, st.cosine, st.dgamma,
                     st.dweibull, st.erlang, st.expon,
                     st.exponweib, st.exponpow, st.f,
                     st.fatiguelife,
                     st.fisk, st.foldcauchy, st.foldnorm,
                     st.frechet_r, st.frechet_l, st.genlogistic, st.genpareto,
                     st.genexpon, st.genextreme, st.gausshyper,
                     st.gamma, st.gengamma, st.genhalflogistic,
                     st.gilbrat, st.gompertz, st.gumbel_r,
                     st.gumbel_l, st.halfcauchy, st.halflogistic,
                     st.halfnorm, st.hypsecant, st.invgamma,
                     st.invgauss, st.invweibull, st.johnsonsb,
                     st.johnsonsu, st.ksone, st.kstwobign,
                     st.laplace, st.logistic, st.loggamma,
                     st.loglaplace, st.lognorm, st.lomax,
                     st.maxwell, st.mielke, st.nakagami,
                     st.ncx2, st.ncf, st.nct,
                     st.norm, st.pareto, st.pearson3,
                     st.powerlaw, st.powerlognorm,
                     st.powernorm, st.rdist, st.reciprocal,
                     st.rayleigh, st.rice, st.recipinvgauss,
                     st.semicircular, st.t, st.triang,
                     st.truncexpon, st.truncnorm, st.tukeylambda,
                     st.uniform, st.vonmises, st.wald,
                     st.weibull_min, st.weibull_max, st.wrapcauchy]

    mles = []
    pars_l = []
    valid_dist = []

    with warnings.catch_warnings():
        warnings.filterwarnings('ignore')

        for distribution in distributions:
            pars = distribution.fit(data)
            # maximum-likelihood estimation:
            mle = distribution.nnlf(pars, data)
            if np.isfinite(mle):
                valid_dist.append(distribution)
                mles.append(abs(mle))
                pars_l.append(pars)

    best_fit = sorted(zip(valid_dist, mles, pars_l), key=lambda d: d[1])[0]
    print(
        'Best fit reached using {}, MLE value: {}'.format(
            best_fit[0].name,
            best_fit[1]))
    print(pars_l)
    return best_fit[0], best_fit[2]