
#Yc           @   s   d  d l  Z  d  d l Td  d l m Z d  d l Z d d d     YZ d d d     YZ d d d	     YZ d
 d d     YZ d e f d     YZ d e f d     YZ	 d e f d     YZ
 d S(   iN(   t   *(   t   datetimet   Pointc           B   s   e  Z d d   Z RS(   c         C   s.   | |  _  | |  _ | d  k r* | |  _ n  d  S(   N(   t   xt   yt   Nonet   name(   t   selfR   R   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   __init__   s    		N(   t   __name__t
   __module__R   R   (    (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR      s   t   Tripc           B   s   e  Z d d d d d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d d d d  Z
 d d d d  Z d	   Z d
   Z RS(   c         C   sU   | |  _  | |  _ | |  _ | |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _	 d  S(   N(
   t   startt   endt
   start_timet   end_timeR   t   all_locationst	   all_timest   in_vehicle_timet	   trip_timet   waiting_time(   R   R   R   R   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR      s    								c         C   s   | |  _  | |  _ d  S(   N(   R   R   (   R   R   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   setLocation   s    	c         C   s   | |  _  | |  _ d  S(   N(   R   R   (   R   R   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   setTime   s    	c         C   s   d  S(   N(    (   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   computeTripDistance   s    c         C   s   |  j  |  j |  _ d  S(   N(   R   R   R   (   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   computeTripTime   s    c         C   s   | |  _  d  S(   N(   R   (   R   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   setInvehicleTime"   s    c         C   s   |  j  |  j |  _ d  S(   N(   R   R   R   (   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   computeWaitingTime$   s    c         C   so   d } | d  k	 r# | | d } n  | d  k	 r< | | } n  | d  k	 rk t |  t |  t d  } n  | S(   Ni    i<   (   R   t   float(   R   t   t_hourt   t_mint   t_sect	   total_min(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt	   timeToMin&   s    #c         C   sY   |  j  | | |  } |  j  |  j j |  j j |  j j  } t | |  } | |  _ | S(   N(   R    R   t   hourt   minutet   secondt   intt   timeslot(   R   R   R   R   t
   divide_mint	   start_mint   slot(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   timeSlot/   s
    '	c         C   s9   |  j  | |  _ t |  j j    t d  |  _ |  j S(   Ni<   (   R   R   R   t   total_secondst   waiting_time_to_min(   R   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   waitingTime5   s    "c         C   s   |  j  j |  j j f S(   N(   R   t
   station_idR   (   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   originDestination:   s    N(   R	   R
   R   R   R   R   R   R   R   R   R    R)   R,   R.   (    (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR      s   
								t   Transportationc           B   sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C   s   d  |  _ d  |  _ d  S(   N(   R   t   dir_patht	   file_path(   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR   ?   s    	c         C   s   | |  _  d  S(   N(   R0   (   R   R0   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   setFileDirectoryPathB   s    c         C   s   | |  _  d  S(   N(   R1   (   R   R1   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   setFilePathD   s    c         C   s   | |  _  d  S(   N(   t   trans_region_file_path(   R   R1   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   setTransRegionFilePathF   s    c         C   s   t  | d  } d  S(   Nt   wb(   t   open(   R   t   dataR1   t   file_handler(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   writeToLocalI   s    c         C   s   | | k r | S| Sd  S(   N(    (   R   t   at   b(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   minimumByKeyL   s    c         C   s[   d } | j  |  } | j   } t j | d  } t |  \ } } | d | d GHd  S(   Ns<   hdfs://namenode:9000/zf72/data/shenzhen_tran_simple_gps.jsoni    t   out_edge(   t   textFilet   collectt   jsont   loadst   buildPolygon(   R   t   sct   simple_region_file_patht   region_filet   file_contentt   polygonst   polygon_ids(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   isInTranRegionR   s    c   	      C   s   d } d } t    j d  } | j |  } x | D] } | GH| j | d | d  j   } | j t  j d    j d    j d    j d	    j d
    j d    j t	 d d   } | j
 | d | d |  q4 Wd  S(   Ns!   /zf72/human_mobility/Tranporationt   tranportationt   devt   /s   /*c         S   s   |  \ } } | | f d f S(   Ni   (    (   t   .0t   kt   v(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   <lambda>c   s    c         S   s   |  | S(   N(    (   R;   R<   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyRQ   c   s    c         S   s   |  \ \ } } } | d f S(   Ni   (    (   RN   RP   RO   t   userid(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyRQ   d   s    c         S   s   |  | S(   N(    (   R;   R<   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyRQ   d   s    c         S   s%   |  \ } } t  | j d   | f S(   Nt   ,(   t   tuplet   split(   RN   RO   RP   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyRQ   d   s    c         S   s=   |  \ } } t  | d  t | d  t | d  f | f S(   Ni    i   i   (   R$   R   (   RN   RO   RP   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyRQ   e   s    t   keyfuncc         S   s   t  |  d  S(   Ni    (   R$   (   RO   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyRQ   f   s    t   _(   t   Configt
   get_clientt   listR?   t   cachet   mapt"   extract_user_slot_location_telecomt   reduceByKeyt	   sortByKeyt   Truet   saveAsTextFile(	   R   RD   R0   t   new_namet   clientt
   file_datest	   file_datet   filest   lines(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   TimeSlotDensity[   s    !'$(
   R	   R
   R   R2   R3   R5   R:   R=   RJ   Rh   (    (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR/   >   s   								t   LocalAnalysisc           B   s   e  Z d    Z RS(   c         C   s	   d GHd  S(   Nt   test(    (   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyRj   j   s    (   R	   R
   Rj   (    (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyRi   i   s   t   Subwayc           B   s   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s:   d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  S(   N(   R   R1   R0   t   record_listt	   all_tripst   time_matrixR   (   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR   n   s    					c         C   s   t  j | d  S(   Ns   %Y-%m-%d %H:%M:%S(   R   t   strptime(   R   t   timeStr(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt	   parseTimeu   s    c         C   s   | j  d  } | d d k r( t } n | d d k rA t } n d  S|  j | d  } t d | d d | d	 | d
 | d d | d d | d d | d  } | S(   NRS   i   t   22t   21i   t   user_idi   t   timet
   in_stationR-   i   t   station_namet
   route_namei   t   train_idi   (   RU   t   FalseR`   R   Rq   t   SubwayRecord(   R   t   rowt   attrsRv   t
   recordTimet   record(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   subwayOneRoww   s    		Gc         C   sk   |  j  d  k r d GHd  St |  j   > } x4 | D], } |  j |  } | d  k	 r1 | j GHq1 q1 WWd  QXd  S(   Ns   ERROR: set file path first(   R1   R   R7   R   Rv   (   R   t   csvFilet   one_rowR   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   generateUniqueSubwayMap   s    c         C   sE   |  j  d  k r d GHd  St |  j    } x | D] } q1 WWd  QXd  S(   Ns   ERROR: set file path first(   R1   R   R7   (   R   R   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   inSubwayTime   s    c         C   s   i  |  _  |  j d  k r! d GHd  St |  j  { } xq | D]i } |  j |  } | d  k	 r: | j |  j  j   k r | g |  j  | j <q |  j  | j j |  q: q: WWd  QX|  j  S(   Ns   ERROR: set file path first(   Rl   R1   R   R7   R   Rt   t   keyst   append(   R   R   R   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   buildRecordList   s    	$c         C   s   d  S(   N(    (   R   t   start_recordt
   end_record(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   tripTime   s    c         C   s   |  j  d  k r d GHd  Sg  |  _ x |  j  j   D] } d  } d  } |  j  | } t | d d   } x | D]z } | j r | } ql | } | d  k	 rl t d | d |  } | j | _ | j | _	 | j
   |  j j |  d  } ql ql Wq1 Wd  S(   Ns4   INFO: build station list first, call buildRecordListt   keyc         S   s   |  j  S(   N(   Ru   (   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyRQ      s    R   R   (   Rl   R   Rm   R   t   sortedRv   R   Ru   R   R   R   R   (   R   t   one_userR   R   t   one_user_recordst   sorted_recordsR   t	   temp_trip(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   buildTripList   s(    			
c         C   s   |  j  d  k r d GHd  Si  |  _ xy |  j  D]n } | j j d | j j } | j d d  } | |  j j   k r | g |  j | <q+ |  j | j |  q+ Wd  S(   Ns/   INFO: build trip list first, call buildTripListRS   R   i<   (	   Rm   R   Rn   R   R-   R   R)   R   R   (   R   t   one_tript	   start_endR%   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   buildTripTimeMatrix   s    	c         C   s   |  j  d  k r d GHd  Si  |  _ x{ |  j  j   D]j } d } |  j  | } xA | D]9 } | d k ro | j } qQ | | j k rQ | j } qQ qQ W| |  j | <q1 Wd  S(   Ns7   INFO: build time matrix first, call buildTripTimeMatrixi(   Rn   R   R   R   R   (   R   t   one_keyt   min_trip_timet	   trip_listR   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   inVehicleTimeEstiamte   s    	c         C   s   d  S(   N(    (   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR,      s    c         C   s   d  S(   N(    (   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR      s    c         C   sV  |  j    |  j   |  j   |  j   i  |  _ i  |  _ x |  j j   D] } |  j | } xm | D]e } | j |  j	 |  | j
 |  j j   k r | j g |  j | j
 <qd |  j | j
 j | j  qd WqJ WxS |  j j   D]B } |  j | } t t |   t t |   |  j t |  <q Wt d d   } t j |  j |  Wd  QXd  S(   Ns!   ../data/average_waiting_time.jsont   w(   R   R   R   R   t   one_day_waiting_timet   one_day_average_waiting_timeRn   R   R,   R   R%   R+   R   R   t   sumt   lent   strR7   RA   t   dump(   R   R   R   R   t   fh(    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   waitingTimeOneDay   s$    



		"3c   	      C   s   d  } d  } | \ } } g  } x | D] } | j r= | } q% | } | d  k	 r% | d  k	 r% t d | d |  } | j | _ | j | _ | j   | j | j k r | j |  n  d  } d  } q% q% W| | f S(   NR   R   (	   R   Rv   R   Ru   R   R   R   R-   R   (	   R   t   inputR   R   RO   R   Rm   R   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   sortedRecordsToTrip   s$    		
c         C   sI   | \ } } g  } x0 | D]( } | j  | j   | j j   f  q W| S(   N(   R   R.   R   R*   (   R   t   user_trip_listRt   R   t   od_timeR   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   mapToStationTimeMapping  s
    &c         C   s@   | \ } } g  } x' | D] } | j  | j   | f  q W| S(   N(   R   R.   (   R   R   Rt   R   R   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   mapToODTrip
  s
    c         C   s>   | \ } \ } } | j  d d  | j j | j j   | f S(   NR   i<   (   R)   R   Ru   R   R*   (   R   t   user_trip_in_vehicle_timet   odR   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   mapToTripWaitingTime  s    (   R	   R
   R   Rq   R   R   R   R   R   R   R   R   R,   R   R   R   R   R   (    (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyRk   m   s"   																	t   Busc           B   s   e  Z d    Z RS(   c         C   s   d  S(   N(    (   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR     s    (   R	   R
   R   (    (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR     s   t   PrivateVehiclec           B   s   e  Z d    Z RS(   c         C   s   d  S(   N(    (   R   (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR     s    (   R	   R
   R   (    (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyR     s   (    (    (    (    (   t   csvt   RecordR   RA   R   R   R/   Ri   Rk   R   R   (    (    (    sJ   /home/zf72/Dropbox/projects/off-peak-trans/src/exploring/Transportation.pyt   <module>   s   
2+