B
    Z6              
   @   s  d dl mZmZmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZ dd Zdd	 Zd
Zed2ddZee_G dd deZedkreeZddddddddddg
Zeejed ee  eejdd eejddddgdd eejdd ejddd gd!efd"efd#d$gd%Zejd&d'd(gd!efd"efgd%Zejd)d*d+d+gd*d,d,d,gd*d+d+d,gged%Zed)d*d,d+d-d.gd.d-d+d,d*d)gd/d/d/d/d/d/ggZG d0d1 d1eZ dS )3    )lrangelmapiterkeys	iteritemsN)stats)SimpleTable)nottestc             C   s.   yt | }W n tk
r(   tj}Y nX |S )zdwrapper for scipy.stats.kurtosis that returns nan instead of raising Error

    missing options
    )r   kurtosis
ValueErrornpnan)ares r   Alib/python3.7/site-packages/statsmodels/stats/descriptivestats.py	_kurtosis   s
    r   c             C   s.   yt | }W n tk
r(   tj}Y nX |S )z`wrapper for scipy.stats.skew that returns nan instead of raising Error

    missing options
    )r   skewr
   r   r   )r   r   r   r   r   _skew   s
    r   aB  
    Signs test.

    Parameters
    ----------
    samp : array-like
        1d array. The sample for which you want to perform the signs
        test.
    mu0 : float
        See Notes for the definition of the sign test. mu0 is 0 by
        default, but it is common to set it to the median.

    Returns
    ---------
    M, p-value

    Notes
    -----
    The signs test returns

    M = (N(+) - N(-))/2

    where N(+) is the number of values above `mu0`, N(-) is the number of
    values below.  Values equal to `mu0` are discarded.

    The p-value for M is calculated using the binomial distrubution
    and can be intrepreted the same as for a t-test. The test-statistic
    is distributed Binom(min(N(+), N(-)), n_trials, .5) where n_trials
    equals N(+) + N(-).

    See Also
    ---------
    scipy.stats.wilcoxon
    c             C   sR   t | } t | |k}t | |k }|| d }tt|||| d}||fS )Ng       @g      ?)r   asarraysumr   Z
binom_testmin)sampmu0posnegMpr   r   r   	sign_test@   s    
r   c               @   sd   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dddZ
dddZdddZee_dS )Describez
    Calculates descriptive statistics for data.

    Defaults to a basic set of statistics, "all" can be specified, or a list
    can be given.

    Parameters
    ----------
    dataset : array-like
        2D dataset for descriptive statistics.
    c             C   s   || _ ttd d gtjd d gtjd d gtjd d gtjd d gtjd d gtj	d d g| j
d d g| jd d gtjd d gtjd d gdd d d gtjd d g| jd d gd| _d | _d | _d S )Nc             S   s   t jt | d ddS )N   r   )Zaxis)r   r   r   )xr   r   r   <lambda>i   s    z#Describe.__init__.<locals>.<lambda>)obsmeanstdr   maxptpvarmode_valmode_binmedianr   ussr	   percentiles)datasetdictlenr   r#   r$   r   r%   r&   r'   	_mode_val	_mode_binr*   r   r   r	   _percentiles
univariate
_arraytype_columns_list)selfr-   r   r   r   __init__V   s$    










zDescribe.__init__c                s    fdddD }|S )Nc                s   g | ]}t  |qS r   )r   scoreatpercentile).0per)r    r   r   
<listcomp>   s    z)Describe._percentiles.<locals>.<listcomp>)	      
      2   K   Z   _   c   r   )r6   r    r   r   )r    r   r2      s    
zDescribe._percentilesc             C   s   t |d d S )Nr   )r   mode)r6   r    r   r   r   r0      s    zDescribe._mode_valc             C   s   t |d d S )Nr<   r   )r   rE   )r6   r    r   r   r   r1      s    zDescribe._mode_binc             C   s@   | j jjsd| _n*| j jjr$d| _n| jdks<| jdks<tdS )zif not a sctructured arrayZhomogsctructN)r-   dtypenamesr4   AssertionError)r6   r   r   r   _array_typer   s
    

zDescribe._array_typerc                s~    fdd} fdd}| dkr4| dkr4dS | dkrL| dkrLdS | dksz| dkszt d	tj  d
  dS )z
        Check whether self.dataset.[col][0] behaves like a string, numbern
        unknown. `numpy.lib._iotools._is_string_like`
        c            	      s4   yj   d d  W n ttfk
r.   dS X dS )Nr    FT)r-   	TypeErrorr
   r   )colr6   r   r   string_like   s
    z,Describe._is_dtype_like.<locals>.string_likec            	      s4   yj   d d  W n ttfk
r.   dS X dS )Nr   g      ?FT)r-   rL   r
   r   )rM   r6   r   r   number_like   s
    z,Describe._is_dtype_like.<locals>.number_likeTFnumberstringz            Not sure of dtyper   N)rI   strr-   )r6   rM   rN   rO   r   )rM   r6   r   _is_dtype_like   s    zDescribe._is_dtype_likebasicallautoc       	         s  j dkr  dkr dn8dkrJddddd	d
ddddddddgnxD ]}qPW ddlfdd t fdddD }dkrj| d}tt|||d < t	fddt
jD r|dkrg _j dkrjjj_ntjjd _nP|_j dkrLx<jD ]}|jjjks,tq,W njdksbtjj}xxD ]p}j| j dkrjd< fddjD d< n.d d jD d< fd!djD d< qpW j|d"S j|d"S dS )#a  
        Return a summary of descriptive statistics.

        Parameters
        -----------
        stats: list or str
            The desired statistics, Accepts 'basic' or 'all' or a list.
               'basic' = ('obs', 'mean', 'std', 'min', 'max')
               'all' = ('obs', 'mean', 'std', 'min', 'max', 'ptp', 'var',
                        'mode', 'meadian', 'skew', 'uss', 'kurtosis',
                        'percentiles')
        columns : list or str
          The columns/variables to report the statistics, default is 'all'
          If an object with named columns is given, you may specify the
          column names. For example
        NrT   )r"   r#   r$   r   r%   rU   r"   r#   r$   r   r%   r&   r'   r(   r)   r*   r+   r   r	   r,   r   c                s    fddS )Nc                s   j |  S )N)r   r8   )r    )r:   scipyr   r   r!      s    z0Describe.summary.<locals>._fun.<locals>.<lambda>r   )r:   )rW   )r:   r   _fun   s    zDescribe.summary.<locals>._func             3   s$   | ]}d |  |ddgfV  qdS )z	perc_%02dNr   )r9   r:   )rX   r   r   	<genexpr>   s   z#Describe.summary.<locals>.<genexpr>)	r<   r=   r>   r?   r@   rA   rB   rC   rD   r<   c                s    g | ]}|d   kr|d qS )r   r<   r   )r9   Zaitem)r   r   r   r;      s    z$Describe.summary.<locals>.<listcomp>rF   rP   c                s,   g | ]$} |d kr d j| qS )rP   r   )rS   r-   )r9   rM   )calcr6   r   r   r;     s    r   c             S   s   g | ]}d t | qS )zCol )rR   )r9   rM   r   r   r   r;     s    c                s&   g | ]} d  j dd|f qS )r   N)r-   )r9   rM   )rZ   r6   r   r   r;     s    )orientation)r4   rJ   Zscipy.statsr.   r3   updateindexsortedr   anyr   r5   r-   rG   rH   r   shaperI   rS   print_summary)	r6   r   columnsr[   astatZperdictidxrM   Zcolumstypesr   )rX   rZ   rW   r6   r   r   summary   sR    










zDescribe.summaryc       	         s   d}} j d d } fddtt j d d D }|dks\|dkrxt|t|k rxtd	d
 f| }|| }}tdgt|d  d}t|||||d}|S )NzSummary Statisticsr"   r<   c                s    g | ]  fd dD qS )c                s   g | ]}j | d    qS )r   )r3   )r9   rc   )rM   r6   r   r   r;     s    z5Describe.print_summary.<locals>.<listcomp>.<listcomp>r   )r9   )r6   r   )rM   r   r;     s    z*Describe.print_summary.<locals>.<listcomp>r   varcolsrV   c              W   s   t | S )N)list)rowr   r   r   r!   !  s    z(Describe.print_summary.<locals>.<lambda>z%#8.4g)Z	data_fmts)titleZtxt_fmt)r3   ranger/   r   r.   r   )	r6   r   r[   ri   headerZstubsdataZpart_fmttabler   )r6   r   r   ra     s     
zDescribe.print_summaryr   c             C   s
   t ||S )N)r   )r6   r   r   r   r   r   r   .  s    zDescribe.sign_testN)rT   rU   rV   )rV   )r   )__name__
__module____qualname____doc__r7   r2   r0   r1   rJ   rS   re   ra   r   _sign_test_docr   r   r   r   r   J   s   +
e

r   __main__r"   r#   r$   r   r%   r&   r*   r   r+   r	   rf   )r[   )r   r[   rU   )r<   r   r   Zaa)r      bZbb)r      ru   ZccalphaZbeta)Zgammaz|S1)Zdeltaz|S2)rG   )r<   r   )r   rt   )r   rv   r<   r   rv   rt   r=      	   c               @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Zdd Z
dS )TestSimpleTablec             C   s    t d tt}t |  d S )Ntest_basic_1)printr   data1re   )r6   t1r   r   r   r{   \  s    zTestSimpleTable.test_basic_1c             C   s    t d tt}t |  d S )Ntest_basic_2)r|   r   data2re   )r6   t2r   r   r   r   b  s    zTestSimpleTable.test_basic_2c             C   s    t d tt}t |  d S )Ntest_basic_3)r|   r   data3re   )r6   r~   r   r   r   r   g  s    zTestSimpleTable.test_basic_3c             C   s    t d tt}t |  d S )Ntest_basic_4)r|   r   data4re   )r6   r~   r   r   r   r   l  s    zTestSimpleTable.test_basic_4c             C   s(   t d tt}t |jddgd d S )Ntest_basic_1arT   rw   )r   rb   )r|   r   r}   re   )r6   r~   r   r   r   r   q  s    zTestSimpleTable.test_basic_1ac             C   s&   t d tt}t |jddd d S )Ntest_basic_1brT   rU   )r   rb   )r|   r   r}   re   )r6   r~   r   r   r   r   v  s    zTestSimpleTable.test_basic_1bc             C   s$   t d tt}t |jdd d S )Ntest_basic_2arU   )r   )r|   r   r   re   )r6   r   r   r   r   r   {  s    zTestSimpleTable.test_basic_2ac             C   s   t t}t|jdd d S )NrU   )r   )r   r   r|   re   )Zaselfr~   r   r   r   r     s    c             C   s   t t}t|jdd d S )NrU   )r   )r   r   r|   re   )r6   r~   r   r   r   test_basic_4a  s    zTestSimpleTable.test_basic_4aN)rn   ro   rp   r{   r   r   r   r   r   r   r   r   r   r   r   rz   Y  s   rz   )r   )!Zstatsmodels.compat.pythonr   r   r   r   Znumpyr   rW   r   Zstatsmodels.iolib.tabler   Zstatsmodels.tools.decoratorsr   r   r   rr   r   rq   objectr   rn   r   r~   Znopercr|   re   Zarrayfloatintr}   r   r   rz   r   r   r   r   <module>   sJ   , o

