
    _ag                     j    d dl Z d dlmZ d dlmZmZ d dlZd dlmZ d dlmZmZ d dlZ G d de      Zy)    N)BaseTransformer)LabelEncoderMinMaxScalerc                   6    e Zd ZdZd Zd	dZd Zd Zd Zd Z	y)
UpworkProfileTransformerzO
    Transformer for encoding and normalizing the 'Upwork Profile' column.
    c                 N    t               | _        t               | _        d| _        y )NF)r   profile_encoderr   scaler	is_fitted)selfs    @/var/www/html/bid-api/transformers/upwork_profile_transformer.py__init__z!UpworkProfileTransformer.__init__   s    +~"n    Nc                 d   t        d       d|j                  vrt        d      | j                  j	                  |d          |d   j                         }|d   j                  |      j                  d      |d<   d|j                  v rbt        j                  j                  j                  |d         r6|j                  d      d   j                  d      j                  d      |d<   nt        d	       d|d<   |ddg   }| j                  j	                  |       d
| _        t        d       | S )zV
        Fit the transformer by encoding the profiles and fitting the scaler.
        z/[UpworkProfileTransformer] Starting fit method.Upwork ProfilezI[UpworkProfileTransformer] 'Upwork Profile' column is missing during fit.r   Profile Bid CountIs ConvertedmeanProfile Success Ratezv[UpworkProfileTransformer] Warning: 'Is Converted' column missing or invalid during fit. Defaulting success rate to 0.Tz0[UpworkProfileTransformer] Fit method completed.)printcolumns
ValueErrorr	   fitvalue_countsmapfillnapdapitypesis_numeric_dtypegroupby	transformr
   r   )r   Xy
bid_countsprofile_featuress        r   r   zUpworkProfileTransformer.fit   s*    	?@ 199,hii  #3!45 '(557
!"#3!4!8!8!D!K!KA!N
QYY&266<<+H+H>IZ+[		*+N;6" $%   K  L()A$% 13IJK()@Ar   c                 ,    t        d       |j                         } j                  rt         j                  d      s8t        d       d|d<   d|d<   d|d<   d|d	<   d|d
<   |j                  dgd      S |d   j                   fd      |d<   |d   j                         }|d   j                  |      j                  d      |d<   d|j                  v rbt        j                  j                  j                  |d         r6|j                  d      d   j!                  d      j                  d      |d<   nt        d       d|d<    j"                  j!                  |ddg         }|dddf   |dddf   c|d	<   |d
<   |j                  dg      S )zS
        Transform the data by encoding profiles and normalizing features.
        z5[UpworkProfileTransformer] Starting transform method.classes_zT[UpworkProfileTransformer] Warning: Transformer not fitted. Applying default values.zUpwork Profile Encodedr   r   r   zNormalized Profile Bid CountzNormalized Profile Success Rater   ignore)r   errorsc                 &    j                  |       S N)_encode_profile)profiler   s    r   <lambda>z4UpworkProfileTransformer.transform.<locals>.<lambda>I   s    D009r   r   r   z|[UpworkProfileTransformer] Warning: 'Is Converted' column missing or invalid during transform. Setting default success rate.N   )r   )r   copyr   hasattrr	   dropapplyr   r   r   r   r   r   r   r    r!   r"   r
   )r   r#   r%   r&   s   `   r   r"   z"UpworkProfileTransformer.transform5   s    	EFFFH ~~WT-A-A:%Nhi*,A&'%&A!"()A$%01A,-34A/066#3"4X6FF '((8&9&?&?9'

"#
 '(557
!"#3!4!8!8!D!K!KA!N
 QYY&266<<+H+H>IZ+[		*+N;6" $%   Q  R()A$%  ;;004GI_3`1abRbcdfgcgRhjz{|~{  kAO
()1-N+O vv/0v11r   c                 r    || j                   j                  v r| j                   j                  |g      d   S y)zL
        Safely encode a profile, returning -1 for unseen profiles.
        r   r)   )r	   r(   r"   )r   r/   s     r   r.   z(UpworkProfileTransformer._encode_profileb   s9     d**333''117)<Q??r   c                     t        d|        | j                  j                  | j                  j                  | j                  j
                  | j                  d}t        j                  ||       t        d       y)z7
        Save the transformer state to a file.
        z7[UpworkProfileTransformer] Saving transformer state to )profile_encoder_classes
scaler_minscaler_scaler   z:[UpworkProfileTransformer] Transformer saved successfully.N)	r   r	   r(   r
   min_scale_r   r   	to_pickler   pathstates      r   savezUpworkProfileTransformer.savek   sd     	GvNO'+';';'D'D++** KK..	
 	UD!JKr   c                     t        d|        t        j                  |      }|d   | j                  _        |d   | j
                  _        |d   | j
                  _        |d   | _        t        d       y)z9
        Load the transformer state from a file.
        z:[UpworkProfileTransformer] Loading transformer state from r8   r9   r:   r   z;[UpworkProfileTransformer] Transformer loaded successfully.N)	r   r   read_pickler	   r(   r
   r;   r<   r   r>   s      r   loadzUpworkProfileTransformer.loady   sm     	J4&QRt$(-.G(H% .">2{+KLr   r-   )
__name__
__module____qualname____doc__r   r   r"   r.   rA   rD    r   r   r   r      s)    
B+2ZL
Mr   r   )	joblibtransformers.base_transformerr   sklearn.preprocessingr   r   pandasr   r   rI   r   r   <module>rN      s*     9 <  9 < xM xMr   