Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
debakarr
GitHub Repository: debakarr/machinelearning
Path: blob/master/Part 5 - Association Rule Learning/Apriori/__pycache__/apyori.cpython-36.pyc
1337 views
3

�qBZ�8�@s�dZddlZddlZddlZddlZddlZddlmZddlm	Z	ddlm
Z
dZdZdZ
Gd	d
�d
e�Zedd*�Zedejd+�Zedd,�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zed)kr�e�dS)-z9
a simple implementation of Apriori algorithm by Python.
�N)�
namedtuple)�combinations)�chainz1.1.1zYu Mochizukiz[email protected]@sTeZdZdZdd�Zdd�Zdd�Zdd	�Zed
d��Z	edd
��Z
edd��ZdS)�TransactionManagerz
    Transaction managers.
    cCs.d|_g|_i|_x|D]}|j|�qWdS)z�
        Initialize.

        Arguments:
            transactions -- A transaction iterable object
                            (eg. [['A', 'B'], ['B', 'C']]).
        rN)�$_TransactionManager__num_transaction�_TransactionManager__items�*_TransactionManager__transaction_index_map�add_transaction)�self�transactions�transaction�r
�s/home/baka/Project/Machine Learning A-Z/github/machinelearning/Part 5 - Association Rule Learning/Apriori/apyori.py�__init__s

zTransactionManager.__init__cCsTx@|D]8}||jkr,|jj|�t�|j|<|j|j|j�qW|jd7_dS)z�
        Add a transaction.

        Arguments:
            transaction -- A transaction as an iterable object (eg. ['A', 'B']).
        �N)rr�append�set�addr)r
r�itemr
r
rr	.s

z"TransactionManager.add_transactioncCsf|sdS|jsdSd}x<|D]4}|jj|�}|dkr8dS|dkrF|}q|j|�}qWtt|��|jS)z�
        Returns a support for items.

        Arguments:
            items -- Items as an iterable object (eg. ['A', 'B']).
        g�?gN)�num_transactionr�get�intersection�float�lenr)r
�itemsZsum_indexesr�indexesr
r
r�calc_support<s
zTransactionManager.calc_supportcCsdd�|jD�S)z1
        Returns the initial candidates.
        cSsg|]}t|g��qSr
)�	frozenset)�.0rr
r
r�
<listcomp>asz9TransactionManager.initial_candidates.<locals>.<listcomp>)r)r
r
r
r�initial_candidates]sz%TransactionManager.initial_candidatescCs|jS)z5
        Returns the number of transactions.
        )r)r
r
r
rrcsz"TransactionManager.num_transactioncCs
t|j�S)zM
        Returns the item list that the transaction is consisted of.
        )�sortedr)r
r
r
rrjszTransactionManager.itemscCst|t�r|St|�S)z�
        Create the TransactionManager with a transaction instance.
        If the given instance is a TransactionManager, this returns itself.
        )�
isinstancer)rr
r
r�createqs
zTransactionManager.createN)
�__name__�
__module__�__qualname__�__doc__rr	rr �propertyrr�staticmethodr#r
r
r
rrs!r�
SupportRecordr�support�RelationRecord�ordered_statistics�OrderedStatistic�
items_base�	items_add�
confidence�liftcspt�}x$�D]}x|D]}|j|�qWqWt|�}dd�t|��D�}�dkrXt|�S��fdd�|D�}|S)z�
    Returns the apriori candidates as a list.

    Arguments:
        prev_candidates -- Previous candidates as a list.
        length -- The lengths of the next candidates.
    css|]}t|�VqdS)N)r)r�xr
r
r�	<genexpr>�sz)create_next_candidates.<locals>.<genexpr>�cs0g|](}t�fdd�t|�d�D��r|�qS)c3s"|]}t|��krdndVqdS)TFN)r)rr3)�prev_candidatesr
rr4�sz4create_next_candidates.<locals>.<listcomp>.<genexpr>r)�allr)r�	candidate)�lengthr6r
rr�s
z*create_next_candidates.<locals>.<listcomp>)rrr!r�list)r6r9Zitem_setr8rrZtmp_next_candidatesZnext_candidatesr
)r9r6r�create_next_candidates�s	

r;cks�|jd�}|jdt�}|j�}d}xn|r�t�}x>|D]6}|j|�}	|	|krLq4t|�}
|j|
�t|
|	�Vq4W|d7}|r�||kr�P|||�}q$WdS)a2
    Returns a generator of support records with given transactions.

    Arguments:
        transaction_manager -- Transactions as a TransactionManager instance.
        min_support -- A minimum support (float).

    Keyword arguments:
        max_length -- The maximum length of relations (integer).
    �
max_length�_create_next_candidatesrN)rr;r rrrrr*)�transaction_manager�min_support�kwargsr<r=�
candidatesr9�	relationsZrelation_candidater+Z
candidate_setr
r
r�gen_support_records�s$



rCccsv|j}xjtt|�t|�d�D]P}t|�}t|j|��}|j|j|�}||j|�}tt|�t|�||�VqWdS)z�
    Returns a generator of ordered statistics as OrderedStatistic instances.

    Arguments:
        transaction_manager -- Transactions as a TransactionManager instance.
        record -- A support record as a SupportRecord instance.
    rN)	rrr!rr�
differencer+rr.)r>�recordrZcombination_setr/r0r1r2r
r
r�gen_ordered_statistics�srFcksH|jdd�}|jdd�}x*|D]"}|j|kr.q|j|kr:q|VqWdS)a
    Filter OrderedStatistic objects.

    Arguments:
        ordered_statistics -- A OrderedStatistic iterable object.

    Keyword arguments:
        min_confidence -- The minimum confidence of relations (float).
        min_lift -- The minimum lift of relations (float).
    �min_confidenceg�min_liftN)rr1r2)r-r@rGrHZordered_statisticr
r
r�filter_ordered_statistics�s


rIc
ks�|jdd�}|jdd�}|jdd�}|jdd�}|dkr@td	��|jd
t�}|jdt�}|jdt�}tj|�}	||	||d
�}
x<|
D]4}t|||	|�||d��}|s�q�t|j	|j
|�Vq�WdS)a�
    Executes Apriori algorithm and returns a RelationRecord generator.

    Arguments:
        transactions -- A transaction iterable object
                        (eg. [['A', 'B'], ['B', 'C']]).

    Keyword arguments:
        min_support -- The minimum support of relations (float).
        min_confidence -- The minimum confidence of relations (float).
        min_lift -- The minimum lift of relations (float).
        max_length -- The maximum length of the relation (integer).
    r?g�������?rGgrHr<Nrzminimum support must be > 0�_gen_support_records�_gen_ordered_statistics�_filter_ordered_statistics)r<)rGrH)r�
ValueErrorrCrFrIrr#r:r,rr+)
rr@r?rGrHr<rJrKrLr>Zsupport_recordsZsupport_recordr-r
r
r�apriori�s2


rNc	Cs"ttd�}d}tj�}|jddddjt�d�|jdd	d
dtjd�tj	gd
�|jddddtjd�tj
d�|jddddtdd�|jddddtdd�|jdddd td!d�|jd"d#dd$td%d�|jd&d'd(d)t
d*d�|jd+d,d(d-jd.j|j��|�t
|j�|d/�|j|�}||j|_|S)0zq
    Parse commandline arguments.

    Arguments:
        argv -- An argument list without the program name.
    )�jsonZtsvrOz-vz	--version�versionz%(prog)s {0})�actionrP�inputZinpath�*z(Input transaction file (default: stdin).�r)�metavar�nargs�help�type�defaultz-oz--outputZoutpathzOutput file (default: stdout).�w)rUrWrXrYz-lz--max-length�intz,Max length of relations (default: infinite).Nz-sz
--min-supportrz2Minimum support ratio (must be > 0, default: 0.1).g�������?z-cz--min-confidencez"Minimum confidence (default: 0.5).g�?z-tz
--min-liftzMinimum lift (default: 0.0).gz-dz--delimiter�strz3Delimiter for items of transactions (default: tab).�	z-fz--out-formatz"Output format ({0}; default: {1}).z, )rUrWrX�choicesrY)�dump_as_json�dump_as_two_item_tsv�argparse�ArgumentParser�add_argument�format�__version__�FileType�sys�stdin�stdoutr[rr\�join�keys�
parse_argsZ
out_format�output_func)�argvZoutput_funcsZdefault_output_func_key�parser�argsr
r
rrl1sV





rlcks8|jdd�}x&tj||d�D]}|r(|ndgVqWdS)z�
    Load transactions and returns a generator for transactions.

    Arguments:
        input_file -- An input file.

    Keyword arguments:
        delimiter -- The delimiter of the transaction.
    �	delimiterr])rq�N)r�csv�reader)Z
input_filer@rqrr
r
r�load_transactionsis
rucCsFdd�}|jdd�|jD�d�}tj|j�||dd�|jtj�dS)	z�
    Dump an relation record as a json value.

    Arguments:
        record -- A RelationRecord instance to dump.
        output_file -- A file to output.
    cSs&t|t�rt|�Stt|�d��dS)z4
        Default conversion for JSON value.
        z is not JSON serializableN)r"rr!�	TypeError�repr)�valuer
r
r�default_func�s
z"dump_as_json.<locals>.default_funccSsg|]}|j��qSr
)�_asdict)rr3r
r
rr�sz dump_as_json.<locals>.<listcomp>)r-F)rY�ensure_asciiN)�_replacer-rO�dumprz�write�os�linesep)rE�output_fileryZconverted_recordr
r
rr_xs
r_c	Csjxd|jD]Z}t|j�dkrqt|j�dkr,q|jdjt|j�dt|j�d|j|j|j	t
j��qWdS)z�
    Dump a relation record as TSV only for 2 item relations.

    Arguments:
        record -- A RelationRecord instance to dump.
        output_file -- A file to output.
    rz"{0}	{1}	{2:.8f}	{3:.8f}	{4:.8f}{5}rN)r-rr/r0r~rdr:r+r1r2rr�)rEr�Z
ordered_statsr
r
rr`�sr`cKs�|jdt�}|jdt�}|jdt�}|tjdd��}|t|j�|jd�}|||j	|j
|jd�}x|D]}|j||j
�qfWdS)z:
    Executes Apriori algorithm and print its result.
    �_parse_args�_load_transactions�_apriorirN)rq)r<r?rG)rrlrurNrgrnrrRrqr<r?rGrm�output)r@r�r�r�rpr�resultrEr
r
r�main�s

r��__main__)rr+)r-)r/r0r1r2)r'rgrsrarOr�collectionsr�	itertoolsrrre�
__author__Z__author_email__�objectrr*�_fieldsr,r.r;rCrFrIrNrlrur_r`r�r$r
r
r
r�<module>s<c"$78