1. I want to make sure my Plate ID is a string. Can't lose the leading zeroes!

2. I don't think anyone's car was built in 0AD. Discard the '0's as NaN.

3. I want the dates to be dates! Read the read_csv documentation to find out how to make pandas automatically parse dates.


In [1]:
import pandas as pd
#import pandas as pd

In [2]:
import datetime
import datetime as dt
# import datetime
# import datetime as dt

In [3]:
dt.datetime.strptime('08/04/2013', '%m/%d/%Y')
datetime.datetime(2013, 8, 4, 0, 0)

parser = lambda date: pd.datetime.strptime(date, '%m/%d/%Y')

In [4]:
!head -n 10000 violations.csv > small-violations.csv

In [5]:
df = pd.read_csv("small-violations.csv", na_values= {'Vehicle Year': ['0']}, parse_dates=[4], date_parser=parser, dtype=str)

In [6]:
df.tail(20)


Out[6]:
Summons Number Plate ID Registration State Plate Type Issue Date Violation Code Vehicle Body Type Vehicle Make Issuing Agency Street Code1 ... Vehicle Color Unregistered Vehicle? Vehicle Year Meter Number Feet From Curb Violation Post Code Violation Description No Standing or Stopping Violation Hydrant Violation Double Parking Violation
9979 1349994406 GEF7027 NY PAS 2013-07-15 52 SDN NISSA X 0 ... GRY 0 2003 - 0 NaN NaN NaN NaN NaN
9980 1349994571 EUX4225 NY PAS 2013-07-21 40 SDN NISSA P 0 ... BLUE 0 2003 - 0 NaN NaN NaN NaN NaN
9981 1349994716 GHF9746 NY PAS 2013-08-10 40 SDN HONDA P 0 ... BLACK 0 2013 - 2 NaN NaN NaN NaN NaN
9982 1349994741 HX55885 NY PAS 2013-08-09 70 SDN VOLKS P 21290 ... GOLD 0 1974 - 0 NaN NaN NaN NaN NaN
9983 1349994753 HX55885 NY PAS 2013-08-09 71 SDN VOLKS P 21290 ... GOLD 0 1974 - 0 NaN NaN NaN NaN NaN
9984 1349994807 TME33R NJ PAS 2013-08-09 78 TRLR NaN P 0 ... WHITE 0 NaN - 0 NaN NaN NaN NaN NaN
9985 1349994819 98166JT 99 COM 2013-08-09 78 VAN FORD P 0 ... WHITE 0 2008 - 0 NaN NaN NaN NaN NaN
9986 1349995514 EUE8098 99 PAS 2013-07-23 27 SUBN MERCU P 0 ... GRN 0 1999 - 0 NaN NaN NaN NaN NaN
9987 1349995526 54726MC NY COM 2013-07-23 78 VAN CHEVR P 0 ... WH 0 2008 - 0 NaN NaN NaN NaN NaN
9988 1349995538 7AB6161 MD PAS 2013-07-23 78 SUBN GMC P 0 ... GRY 0 NaN - 0 NaN NaN NaN NaN NaN
9989 1349995551 66247MC NY COM 2013-07-25 78 DUMP MACK P 44690 ... RD 0 2001 - 0 NaN NaN NaN NaN NaN
9990 1349995654 GBZ2160 NY PAS 2013-08-14 71 SDN NISSA P 24490 ... BLACK 0 1999 - 0 NaN NaN NaN NaN NaN
9991 1349995666 HST2419 PA PAS 2013-08-14 40 SDN BMW P 24490 ... BLK 0 NaN - 10 NaN NaN NaN NaN NaN
9992 1349995678 GHL3189 NY PAS 2013-08-04 71 SUBN CHRYS P 23090 ... BLUE 0 2009 - 0 NaN NaN NaN NaN NaN
9993 1349995691 GAX3159 NY PAS 2013-08-04 71 SDN NISSA P 23090 ... GY 0 2006 - 0 NaN NaN NaN NaN NaN
9994 1349995721 GBJ4159 NY PAS 2013-07-27 71 SDN TOYOT P 25935 ... BLUE 0 2004 - 0 NaN NaN NaN NaN NaN
9995 1349995733 JDD3205 PA PAS 2013-07-13 40 SDN NISSA P 24740 ... GY 0 NaN - 1 NaN NaN NaN NaN NaN
9996 1349995745 GFD4344 NY PAS 2013-07-13 40 SDN CHRYS P 29090 ... GY 0 2013 - 5 NaN NaN NaN NaN NaN
9997 1349995836 GCG2966 NY PAS 2013-08-07 74 SDN NISSA P 24090 ... BLACK 0 2005 - 0 NaN NaN NaN NaN NaN
9998 1349995850 GGH5393 NY PAS 2013-08-04 74 SDN HYUND P 0 ... RED 0 1998 - 0 NaN NaN NaN NaN NaN

20 rows × 43 columns

4. "Date first observed" is a pretty weird column, but it seems like it has a date hiding inside. Using a function with .apply, transform the string (e.g. "20140324") into a Python date. Make the 0's show up as NaN.


In [7]:
df['Date First Observed'].value_counts()


Out[7]:
0           9573
20130722      24
20130731      23
20130802      21
20130730      19
20130812      18
20130809      16
20130724      14
20130720      13
20130718      13
20130805      12
20130813      12
20130814      11
20130811      11
20130801      11
20130810      11
20130807      10
20130725      10
20130803      10
20130726      10
20130729       9
20130806       9
20130723       9
20130717       9
20130719       9
20130721       8
20130712       8
20130804       8
20130727       7
20130808       6
            ... 
20130820       4
20130822       2
20130709       2
20130825       2
20130816       2
20130715       2
20130624       1
20130708       1
20130629       1
20130713       1
20130824       1
20140512       1
20130610       1
20130609       1
20130622       1
20130628       1
20150711       1
20310801       1
20130819       1
20130714       1
20130818       1
20140812       1
20130604       1
20130823       1
20130701       1
20130630       1
20270727       1
20310803       1
20130703       1
20130826       1
Name: Date First Observed, dtype: int64

In [8]:
import dateutil.parser

In [9]:
def first_observed_function(x):
    try:
        x= str(x)
        print("NaN")
        if x == '0':
            return np.nan
        else:
            print("transforming...")
            date_clean = dateutil.parser.parse(x)
            return date_clean.strftime("%Y-%d-%m")
    except:
        return None

In [10]:
first_observed_function('20130731')


NaN
transforming...
Out[10]:
'2013-31-07'

In [11]:
df['Clean Date First Observed']= df['Date First Observed'].apply(first_observed_function)


NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
transforming...
NaN
transforming...
NaN
NaN
NaN
transforming...
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
transforming...
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN

In [12]:
df['Clean Date First Observed'].value_counts()


Out[12]:
2013-22-07    24
2013-31-07    23
2013-02-08    21
2013-30-07    19
2013-12-08    18
2013-09-08    16
2013-24-07    14
2013-18-07    13
2013-20-07    13
2013-05-08    12
2013-13-08    12
2013-01-08    11
2013-10-08    11
2013-14-08    11
2013-11-08    11
2013-26-07    10
2013-07-08    10
2013-03-08    10
2013-25-07    10
2013-06-08     9
2013-23-07     9
2013-17-07     9
2013-29-07     9
2013-19-07     9
2013-21-07     8
2013-04-08     8
2013-12-07     8
2013-27-07     7
2013-11-07     6
2013-28-07     6
              ..
2013-10-07     4
2013-22-08     2
2013-15-07     2
2013-09-07     2
2013-25-08     2
2013-16-08     2
2013-29-06     1
2013-18-08     1
2013-01-07     1
2013-24-06     1
2031-03-08     1
2013-23-08     1
2015-11-07     1
2013-14-07     1
2013-26-08     1
2013-09-06     1
2013-13-07     1
2014-12-08     1
2014-12-05     1
2013-24-08     1
2013-08-07     1
2013-22-06     1
2013-03-07     1
2013-19-08     1
2013-10-06     1
2013-28-06     1
2013-04-06     1
2027-27-07     1
2031-01-08     1
2013-30-06     1
Name: Clean Date First Observed, dtype: int64

5. Violation time" is... not a time. Make it a time


In [13]:
df['Violation Time']


Out[13]:
0       0752A
1       1240P
2       1243P
3       0232P
4       1239P
5       0617P
6       0741P
7       0425A
8       0437A
9       0839A
10      0845A
11      0907A
12      0514P
13      0656P
14      1145P
15      0546P
16      1142A
17      0724A
18      0758A
19      0736A
20      0847A
21      1120A
22      1020A
23      0324P
24      1018A
25      0743A
26      0850A
27      0915A
28      1023A
29      1120A
        ...  
9969    1251P
9970    0645P
9971    0230A
9972    0315A
9973    0230A
9974    1213P
9975    0830A
9976    0305A
9977    0855A
9978    1021A
9979    0330A
9980    0524P
9981    0505P
9982    1018P
9983    1018P
9984    0215A
9985    0130A
9986    1020P
9987    1000P
9988    1000P
9989    1030P
9990    1115A
9991    0842A
9992    1150A
9993    1141A
9994    1140A
9995    0315P
9996    0310P
9997    1026A
9998    0148P
Name: Violation Time, dtype: object

In [14]:
def violation_time_transformed(x):
    try:
        hour = x[0:2]
        minutes = x[2:4]
        pam= x[4]
        time= hour + ":" + minutes + " " + pam + 'm'
        changed_time = dateutil.parser.parse(time)
        return changed_time.strftime("%H:%M%p")
    except:
        return None

In [15]:
df['New Violation Time']= df['Violation Time'].apply(violation_time_transformed)

In [16]:
df['New Violation Time'].head(20)


Out[16]:
0     07:52AM
1     12:40PM
2     12:43PM
3     14:32PM
4     12:39PM
5     18:17PM
6     19:41PM
7     04:25AM
8     04:37AM
9     08:39AM
10    08:45AM
11    09:07AM
12    17:14PM
13    18:56PM
14    23:45PM
15    17:46PM
16    11:42AM
17    07:24AM
18    07:58AM
19    07:36AM
Name: New Violation Time, dtype: object

6. There sure are a lot of colors of cars, too bad so many of them are the same. Make "BLK" and "BLACK", "WT" and "WHITE", and any other combinations that you notice.


In [17]:
df['Vehicle Color'].value_counts()


Out[17]:
WHITE    1753
BLACK     896
GY        637
BLUE      607
GRAY      553
RED       525
WH        513
BLK       487
BK        450
SILVE     392
GREY      363
BROWN     305
WHT       299
GREEN     268
BL        192
TAN       173
GRY       167
GOLD      116
BR        116
YELLO     114
RD        104
SILVR      83
WT         62
GR         57
GRN        51
TN         45
ORANG      41
BRN        34
SILV       34
SIL        29
         ... 
Y           1
SLIVE       1
TEAL        1
BIRG        1
NAVY/       1
VAN         1
BWN         1
IL          1
CHAMP       1
RUST        1
MAR         1
BT          1
YW/BL       1
OTHER       1
D.BLU       1
BG          1
METBL       1
WWHIT       1
BLE         1
MARON       1
WOOD        1
WYH         1
BLACL       1
PINK        1
VLACK       1
BLCK        1
PEARL       1
GR/YE       1
BKE         1
BUR         1
Name: Vehicle Color, dtype: int64

In [18]:
def color(color):
    if (color == "BK") or (color == "BL"):
            return 'BLACK'
    if (color == "WHT") or (color == "WT") or (color == 'WH'):
            return 'WHITE'
    else:
            return color

#example        
color('BK'), color('WHT'), color('BL'), color('WT'), color('WH')


Out[18]:
('BLACK', 'WHITE', 'BLACK', 'WHITE', 'WHITE')

In [19]:
df['B&W Clean Vehicle Color'] = df['Vehicle Color'].apply(color)

In [20]:
df['B&W Clean Vehicle Color'].value_counts()


Out[20]:
WHITE    2627
BLACK    1538
GY        637
BLUE      607
GRAY      553
RED       525
BLK       487
SILVE     392
GREY      363
BROWN     305
GREEN     268
TAN       173
GRY       167
BR        116
GOLD      116
YELLO     114
RD        104
SILVR      83
GR         57
GRN        51
TN         45
ORANG      41
BRN        34
SILV       34
SIL        29
BLU        25
GN         23
MAROO      20
SL         18
PURPL      15
         ... 
PEARL       1
SLIVE       1
SW          1
B           1
BEGE        1
YLW         1
LIGHT       1
B;L         1
BU          1
SROWN       1
NLACK       1
D.BLU       1
YW/BL       1
MAR         1
RUST        1
BLE         1
WWHIT       1
METBL       1
BG          1
OTHER       1
BT          1
CHAMP       1
IL          1
BWN         1
VAN         1
BIRG        1
BKE         1
PUR         1
TEAL        1
BUR         1
Name: B&W Clean Vehicle Color, dtype: int64

7. Join the data with the Parking Violations Code dataset from the NYC Open Data site


In [21]:
!head -n 10000 DOF_Parking_Violation_Codes.csv > small_DOF_Parking_Violation_Codes.csv

In [22]:
violations_data = pd.read_csv("small_DOF_Parking_Violation_Codes.csv")

In [23]:
violations_data.head(2)


Out[23]:
CODE DEFINITION Manhattan  96th St. & below All Other Areas
0 10 Stopping, standing or parking where a sign, st... $115 $115
1 11 Hotel Loading/Unloading: Standing or parking w... $115 $115

In [24]:
type(violations_data['CODE'])


Out[24]:
pandas.core.series.Series

In [25]:
violations_data['CODE'].value_counts()


Out[25]:
63       1
39       1
11       1
05       1
83       1
37-38    1
67       1
10       1
48       1
25       1
50       1
32       1
19       1
47       1
65       1
42       1
07       1
99       1
20       1
85       1
12       1
82       1
94       1
06       1
89       1
18       1
61       1
66       1
96       1
04       1
        ..
78       1
26       1
84       1
64       1
57       1
55       1
16       1
77       1
23       1
58       1
34       1
08       1
79       1
98       1
24       1
52       1
35       1
13       1
40       1
53       1
86       1
73       1
27       1
62       1
69       1
33       1
43       1
59       1
97       1
56       1
Name: CODE, dtype: int64

In [26]:
def transform_code(x):
    try:
        new_code = x[0:2]
        return new_code
    except:
        return None

In [27]:
single_code = violations_data['CODE'].apply(transform_code)

In [28]:
violations_data['int CODE'] = single_code.astype(int)

In [29]:
violations_data['int CODE'].dtype #now is an integer


Out[29]:
dtype('int64')

In [146]:
violations_data.head(129)


Out[146]:
CODE DEFINITION Manhattan  96th St. & below All Other Areas int CODE
0 10 Stopping, standing or parking where a sign, st... $115 $115 10
1 11 Hotel Loading/Unloading: Standing or parking w... $115 $115 11
2 12 Snow Emergency: Standing or parking where stan... $95 $95 12
3 13 Taxi Stand: Standing or parking where standing... $115 $115 13
4 14 General No Standing: Standing or parking where... $115 $115 14
5 16 Truck Loading/Unloading: Standing or parking w... $95 $95 16
6 17 Authorized Vehicles Only: Standing or parking ... $95 $95 17
7 18 Bus Lane: Standing or parking where standing i... $115 $115 18
8 19 Bus Stop: Standing or parking where standing i... $115 $115 19
9 20 General No Parking: No parking where parking i... $65 $60 20
10 21 Street Cleaning: No parking where parking is n... $65 $45 21
11 22 Hotel Loading/Unloading: No parking where park... $60 $60 22
12 23 Taxi Stand: No parking where parking is not al... $65 $60 23
13 24 Authorized Vehicles Only: No parking where par... $65 $60 24
14 25 Standing at a commuter van stop, other than te... $115 $115 25
15 26 Standing at a for-hire vehicle stop, other tha... $115 $115 26
16 27 No parking in a handicapped zone (off-street o... $180 $180 27
17 28 Overtime standing (diplomat) $95 $95 28
18 31 Standing of a non-commercial vehicle in a comm... $115 $115 31
19 32 Parking at a broken or missing meter for longe... $65 $35 32
20 33 "Feeding Meter" -- parking in a metered space ... $65 $35 33
21 34 Expired Meter -- parking in a metered space wh... $65 $35 34
22 35 Parking in a meter space for the purpose of di... $65 $35 35
23 37-38 Muni Meter --\n(37) Parking in excess of the a... $65 $35 37
24 39 Parking for longer than the maximum time permi... $65 $60 39
25 69 Failing to show a muni-meter receipt, commerci... $65 $65 69
26 40 Stopping, standing or parking closer than 15 f... $115 $115 40
27 42 Parking in a Muni Metered space in a commercia... $65 $35 42
28 43 Parking in a commercial metered zone in which ... $65 $35 43
29 44 Parking in a commercial metered zone for longe... $65 $35 44
... ... ... ... ... ...
54 71 Standing or parking a vehicle without showing ... $65 $65 71
55 72 Standing or parking a vehicle with NY Plates a... $65 $65 72
56 73 Standing or parking a vehicle showing an expir... $65 $65 73
57 74 Standing or parking a vehicle without properly... $65 $65 74
58 75 Standing or parking a vehicle in which the Lic... $65 $65 75
59 77 Parking a bus, unless allowed by signs. A char... $65 $45 77
60 78 Parking a Commercial Vehicle on a residential ... $65 $65 78
61 79 For a bus without passengers, waiting at a cur... $115 $115 79
62 80 Standing or parking a vehicle without head lam... $60 $45 80
63 81 No standing except diplomat $95 $95 81
64 82 Standing or parking a Commercial Vehicle unles... $115 $115 82
65 83 Standing or parking a vehicle which is not pro... $65 $65 83
66 84 Parking a Commercial Vehicle on any city stree... $65 $45 84
67 85 Parking a Commercial Vehicle more than 3 hours... $65 $65 85
68 86 Standing or parking a vehicle to make pickups,... $115 $115 86
69 89 Standing or parking a vehicle in the Garment D... $115 $115 89
70 91 Parking in order to sell a vehicle by a person... $65 $45 91
71 92 Parking in order to wash, grease, or repair a ... $65 $45 92
72 93 Stopping, standing or parking on paved roadway... $65 $65 93
73 94 Vehicle Release Agreement code associated with... 100\n(Regular Tow, plus violation fine) $200 (Heavy Tow, plus violation fine) 94
74 96 Standing or parking within 50 feet of the near... $95 $95 96
75 97 Parking in a vacant lot. A vehicle may be park... $65 $45 97
76 98 Standing or parking in front of a public or pr... $95 $95 98
77 99 All other parking, standing or stopping violat... vary vary 99
78 04 Vehicles parked illegally south of Houston Str... $115 NaN 4
79 05 Failure to make a right turn from a bus lane. $115 $115 5
80 06 Parking a tractor-trailer on a residential str... 1st Offense - $265\n2nd Offense - $515 2nd Offense - $265\n2nd Offense - $515 6
81 07 Vehicles photographed going through a red ligh... $50 $50 7
82 08 Vehicle idling in a restricted area. $115 $115 8
83 09 Blocking an Intersection: Obstructing traffic ... $115 $115 9

84 rows × 5 columns


In [39]:
#I need to do this same process to the df['Violation Code'] because to transform it to a INT
old_df = df["Violation Code"].apply(transform_code)

In [151]:
df.head(10)


Out[151]:
0    46
1    46
2    46
3    46
4    41
5    14
6    14
7    24
8    24
9    24
Name: Violation Code, dtype: object

In [152]:
df['Violation Code 2'] = old_df.astype(int)

In [155]:
#Merging the two data sets
new_df= df.merge(violations_data, left_on="Violation Code 2", right_on="int CODE")

In [200]:
new_df.head(40)


Out[200]:
Summons Number Plate ID Registration State Plate Type Issue Date Violation Code Vehicle Body Type Vehicle Make Issuing Agency Street Code1 ... New Violation Time B&W Clean Vehicle Color Violation Code 2 CODE DEFINITION Manhattan  96th St. & below All Other Areas int CODE All Other Areas 2 Manhattan  96th St. & below 2
0 1283294138 GBB9093 NY PAS 2013-08-04 46 SUBN AUDI P 37250 ... 07:52AM GY 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
1 1283294151 62416MB NY COM 2013-08-04 46 VAN FORD P 37290 ... 12:40PM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
2 1283294163 78755JZ NY COM 2013-08-05 46 P-U CHEVR P 37030 ... 12:43PM NaN 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
3 1283294175 63009MA NY COM 2013-08-05 46 VAN FORD P 37270 ... 14:32PM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
4 1290834349 429J6JM NY COM 2013-07-23 46 DELV INTER P 0 ... 10:37AM BR 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
5 1290834374 42587JW NY COM 2013-07-30 46 DELV FORD P 65590 ... 11:19AM YELL 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
6 1291521665 YANKYJAM NY PAS 2013-07-02 46 SDN BMW F 5430 ... 19:42PM BLK 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
7 1293030739 GHG2484 NY PAS 2013-08-11 46 NaN FORD P 26440 ... 01:30AM BLACK 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
8 1293100924 64195MC NY COM 2013-06-20 46 VAN WHITE F 81330 ... 15:44PM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
9 1293101151 54100JA NY COM 2013-07-05 46 P-U FORD F 21140 ... 13:15PM NaN 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
10 1293525625 GGP1847 NY PAS 2013-07-29 46 SUBN HONDA P 0 ... 21:45PM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
11 1294202492 XD377T NJ PAS 2013-07-25 46 TRLR MITSU X 0 ... 09:53AM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
12 1302446484 452WW4 MA PAS 2013-06-24 46 SDN CHEVR C 75530 ... 10:25AM YELLO 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
13 1302446538 4274WY CT PAS 2013-07-10 46 SDN NISSA C 75530 ... 10:15AM GOLD 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
14 1306112679 97732JZ NY COM 2013-08-15 46 REFG HINO X 36490 ... 23:50PM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
15 1306114172 91628MC NY COM 2013-08-02 46 REFG HINO P 36490 ... 04:48AM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
16 1306114184 84614JR NY COM 2013-08-23 46 REFE ISUZU P 36490 ... 04:42AM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
17 1306114196 62092JL NY COM 2013-08-23 46 REFG ISUZU P 0 ... 02:46AM OR 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
18 1306116235 GGU4798 NY PAS 2013-07-27 46 NaN VOLKS P 18240 ... 16:52PM BLACK 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
19 1306206844 55197JJ NY COM 2013-08-06 46 DELV NaN P 13110 ... 16:10PM W 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
20 1307452577 55003JG NY COM 2013-08-12 46 DELV WORKV P 10010 ... 09:40AM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
21 1307452590 40470JU 99 COM 2013-08-12 46 DELV MERCU P 10110 ... 09:20AM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
22 1321774722 61944JY NY COM 2013-07-17 46 P-U CHEVR P 19430 ... 10:05AM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
23 1321774771 35210MB NY COM 2013-07-17 46 DELV FORD P 19270 ... 12:14PM BRW 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
24 1321965783 GBN4223 NY PAS 2013-08-05 46 SDN ME/BE S 69630 ... 07:47AM GREY 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
25 1325733878 T635444C NY SRF 2013-08-13 46 SUBN TOYOT P 0 ... 19:37PM BLACK 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
26 1325972393 GBX9511 NY PAS 2013-07-14 46 SDN BMW P 0 ... 02:38AM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
27 1326475710 WZF5882 NY 999 2013-08-11 46 SUBN CHEVR P 0 ... 19:25PM BLACK 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
28 1295546516 GCY5976 NY PAS 2013-07-25 46 SUBN FORD P 51090 ... 15:13PM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
29 1295547089 62516JM NY COM 2013-07-19 46 DELV INTR P 24440 ... 14:30PM BROWN 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
30 1295548562 87832KA NY COM 2013-07-29 46 DELV INTER P 51090 ... 11:37AM GREEN 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
31 1295548574 55518JZ NY COM 2013-07-29 46 VAN FORD P 0 ... 10:14AM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
32 1295549232 GEB1073 NY PAS 2013-08-06 46 SDN NISSA P 55590 ... 17:45PM GREY 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
33 1295550374 966J4MA NY COM 2013-07-22 46 VAN CHEVR P 24290 ... 18:26PM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
34 1295551019 41873JM NY 999 2013-07-29 46 DELV NaN P 0 ... 10:15AM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
35 1295551020 75656MB NY COM 2013-07-29 46 DELV NaN P 24240 ... 10:45AM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
36 1295551032 YZR9642 PA PAS 2013-07-29 46 DELV FREIT P 28265 ... 11:50AM WHITE 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
37 1295551070 GCU8414 NY PAS 2013-08-05 46 SDN HONDA P 0 ... 17:30PM RED 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
38 1295571900 42909JM NY COM 2013-08-01 46 DELV INTER P 58590 ... 13:53PM BROWN 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0
39 1295572102 SHAZUBD NY PAS 2013-08-11 46 SUBN NISSA P 49690 ... 15:06PM BLACK 46 46 Standing or parking on the roadway side of a v... $115 $115 46 115.0 115.0

40 rows × 54 columns

8. How much money did NYC make off of parking violations?


In [157]:
new_df['All Other Areas'].value_counts()


Out[157]:
$115                                      4015
$45                                       2414
$65                                       1333
$60                                       1078
$95                                        650
$165                                       138
$180                                        82
vary                                        74
$35                                         50
$200 (Heavy Tow, plus violation fine)        6
2nd Offense - $265\n2nd Offense - $515       5
Name: All Other Areas, dtype: int64

In [158]:
new_df[ 'Manhattan\xa0 96th St. & below'].value_counts()


Out[158]:
$65                                        4746
$115                                       4015
$95                                         650
$165                                        138
$60                                         129
$180                                         82
vary                                         74
100\n(Regular Tow, plus violation fine)       6
1st Offense - $265\n2nd Offense - $515        5
$115                                          1
Name: Manhattan  96th St. & below, dtype: int64

In [159]:
#First, I will transfrom all values into integers
def money_transformer(money_string):
    if money_string == '200 (Heavy Tow plus violation fine)':
        string_only = money_string[:3]
        return int(string_only)
    if money_string == '100\n(Regular Tow, plus violation fine)':
        string_only = money_string[:3]
        return int(string_only)
    try:
        return int(money_string.replace("$","").replace(",",""))
    except:
        return None

In [188]:
new_df['All Other Areas 2'] = new_df['All Other Areas'].apply(money_transformer)

In [161]:
new_df['Manhattan\xa0 96th St. & below 2'] = new_df['Manhattan\xa0 96th St. & below'].apply(money_transformer)

In [189]:
outcome1 = new_df['All Other Areas 2'].sum()
outcome2 = new_df['Manhattan\xa0 96th St. & below 2'].sum()

In [190]:
print("NYC makes between","$", outcome1, "US dollars and","$", outcome2, "US dollars of parking violations")
#PS. Data set has been cut to 10000 rows for memory saving reasons. Output would be considerably higher with the complete DF.


NYC makes between $ 822710.0 US dollars and $ 877950.0 US dollars of parking violations

9. What's the most lucrative kind of parking violation? The most frequent?


In [169]:
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')

In [218]:
new_df['Violation Code 2'].value_counts().head(10).plot.bar()
print("The most frequent is the infraction 21, followed by infraction 46 and 14")


The most frequent is the infraction 21, followed by infraction 46 and 14

In [219]:
print("this is how the top 3 are defined:")
new_df.groupby('CODE')['DEFINITION'].value_counts().sort_values(ascending=False).head(3)


this is how the top 3 are defined
Out[219]:
CODE  DEFINITION                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
21    Street Cleaning: No parking where parking is not allowed by sign, street marking or traffic control device.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           1894
46    Standing or parking on the roadway side of a vehicle stopped, standing or parked at the curb; in other words also known as "double parking". However, a person may stand a Commercial Vehicle alongside a vehicle parked at the curb at such locations and during such hours that stopping, standing and parking is allowed when quickly making pickups, deliveries or service calls. This is allowed if there is no parking space or marked loading zone on either side of the street within 100 feet. "Double parking" any type of vehicle is not allowed in Midtown Manhattan (the area from 14th Street to 60th Street, between First Avenue and Eighth Avenue inclusive). Midtown double parking is not allowed between 7:00am  – 7:00pm daily except Sundays. (See Code 47.)    1366
14    General No Standing: Standing or parking where standing is not allowed by sign, street marking or; traffic control device.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             987
Name: DEFINITION, dtype: int64

In [221]:
#Looking for the most lucrative
violations_data.sort_values(by='CODE').head(46)


Out[221]:
CODE DEFINITION Manhattan  96th St. & below All Other Areas int CODE
78 04 Vehicles parked illegally south of Houston Str... $115 NaN 4
79 05 Failure to make a right turn from a bus lane. $115 $115 5
80 06 Parking a tractor-trailer on a residential str... 1st Offense - $265\n2nd Offense - $515 2nd Offense - $265\n2nd Offense - $515 6
81 07 Vehicles photographed going through a red ligh... $50 $50 7
82 08 Vehicle idling in a restricted area. $115 $115 8
83 09 Blocking an Intersection: Obstructing traffic ... $115 $115 9
0 10 Stopping, standing or parking where a sign, st... $115 $115 10
1 11 Hotel Loading/Unloading: Standing or parking w... $115 $115 11
2 12 Snow Emergency: Standing or parking where stan... $95 $95 12
3 13 Taxi Stand: Standing or parking where standing... $115 $115 13
4 14 General No Standing: Standing or parking where... $115 $115 14
5 16 Truck Loading/Unloading: Standing or parking w... $95 $95 16
6 17 Authorized Vehicles Only: Standing or parking ... $95 $95 17
7 18 Bus Lane: Standing or parking where standing i... $115 $115 18
8 19 Bus Stop: Standing or parking where standing i... $115 $115 19
9 20 General No Parking: No parking where parking i... $65 $60 20
10 21 Street Cleaning: No parking where parking is n... $65 $45 21
11 22 Hotel Loading/Unloading: No parking where park... $60 $60 22
12 23 Taxi Stand: No parking where parking is not al... $65 $60 23
13 24 Authorized Vehicles Only: No parking where par... $65 $60 24
14 25 Standing at a commuter van stop, other than te... $115 $115 25
15 26 Standing at a for-hire vehicle stop, other tha... $115 $115 26
16 27 No parking in a handicapped zone (off-street o... $180 $180 27
17 28 Overtime standing (diplomat) $95 $95 28
18 31 Standing of a non-commercial vehicle in a comm... $115 $115 31
19 32 Parking at a broken or missing meter for longe... $65 $35 32
20 33 "Feeding Meter" -- parking in a metered space ... $65 $35 33
21 34 Expired Meter -- parking in a metered space wh... $65 $35 34
22 35 Parking in a meter space for the purpose of di... $65 $35 35
23 37-38 Muni Meter --\n(37) Parking in excess of the a... $65 $35 37
24 39 Parking for longer than the maximum time permi... $65 $60 39
26 40 Stopping, standing or parking closer than 15 f... $115 $115 40
27 42 Parking in a Muni Metered space in a commercia... $65 $35 42
28 43 Parking in a commercial metered zone in which ... $65 $35 43
29 44 Parking in a commercial metered zone for longe... $65 $35 44
30 45 Stopping, standing or parking in a traffic lan... $115 $115 45
31 46 Standing or parking on the roadway side of a v... $115 $115 46
32 47 Stopping, standing or parking a vehicle in Mid... $115 $115 47
33 48 Stopping, standing or parking within a marked ... $115 $115 48
34 49 Stopping, standing or parking alongside or opp... $95 $95 49
35 50 Stopping, standing or parking in a crosswalk. ... $115 $115 50
36 51 Stopping, standing or parking on a sidewalk. $115 $115 51
37 52 Stopping, standing or parking within an inters... $115 $115 52
38 53 Standing or parking in a safety zone, between ... $115 $115 53
39 55 Stopping, standing or parking within a highway... $115 $115 55
40 56 Stopping, standing or parking alongside a barr... $115 $115 56

In [238]:
new_df['Violation Code 2'].value_counts().head(3)


Out[238]:
21    1894
46    1366
14     987
Name: Violation Code 2, dtype: int64

In [243]:
#21 cost $65, 46 cost $115, 14 cost $115
def money_new(money_str):
    if money_str == 1894:
        return money_str * 65
    if money_str == 1366:
        return money_str * 115
    if money_str == 987:
        return money_str * 115

In [242]:
print("For al the 21 infractions the city has made", money_new(1894))
print("For al the 46 infractions the city has made", money_new(1366))
print("For al the 14 infractions the city has made", money_new(987))

print("Seems that infraction 46 is the most lucrative")


For al the 21 infractions the city has made 123110
For al the 46 infractions the city has made 157090
For al the 14 infractions the city has made 113505
Seems that infraction 46 is the most lucrative

10. New Jersey has bad drivers, but does it have bad parkers, too? How much money does NYC make off of all non-New York vehicles?


In [277]:
new_df.groupby('Registration State')['All Other Areas 2'].sum().sort_values(ascending=False).head(10)


Out[277]:
Registration State
NY    547900.0
NJ     76780.0
PA     47880.0
99     19850.0
CT     15870.0
VA     14955.0
FL     14315.0
MA      9705.0
IL      9405.0
TN      7380.0
Name: All Other Areas 2, dtype: float64

In [285]:
print('The city has made $274810 of the non newyorkers')
NY_fines= new_df.groupby('Registration State')['All Other Areas 2'].sum().sort_values(ascending=False).head(1)
outcome1 - NY_fines


The city has made $274810 of the non newyorkers
Out[285]:
Registration State
NY    274810.0
Name: All Other Areas 2, dtype: float64

11. Make a chart of the top few


In [289]:
new_df['Registration State'].value_counts().sort_values().tail(10).plot.barh(color= 'Blue')


Out[289]:
<matplotlib.axes._subplots.AxesSubplot at 0x165e004e0>

12. What time of day do people usually get their tickets? You can break the day up into several blocks - for example 12am-6am, 6am-12pm, 12pm-6pm,6pm-12am.


In [292]:
new_df['New Violation Time'].head(10)


Out[292]:
0    07:52AM
1    12:40PM
2    12:43PM
3    14:32PM
4    10:37AM
5    11:19AM
6    19:42PM
7    01:30AM
8    15:44PM
9    13:15PM
Name: New Violation Time, dtype: object

In [304]:
def hour_transformer(x):
    try:
        time = int(x[:2])
        if time  <= 6:
            return '12am-6am'
        elif time <= 12:
            return '6am-12pm'
        elif time <= 18:
            return '12pm-6pm'
        elif time <= 24:
            return '6pm-12am'
        else:
            pass
    except:
        pass

In [305]:
day_time = new_df['New Violation Time'].apply(hour_transformer)

In [310]:
day_time.value_counts().plot.pie(title='Ticket time!')


Out[310]:
<matplotlib.axes._subplots.AxesSubplot at 0x15a1ee630>

13. What's the average ticket cost in NYC?


In [314]:
new_df['All Other Areas 2'].mean()


Out[314]:
84.294057377049185

14. Make a graph of the number of tickets per day.


In [319]:
new_df['Issue Date'].describe()


Out[319]:
count                    9846
unique                    141
top       2013-07-30 00:00:00
freq                      433
first     2000-03-14 00:00:00
last      2053-08-02 00:00:00
Name: Issue Date, dtype: object

In [394]:
new_df.groupby('Issue Date')['Issue Date'].value_counts(sort=False).plot.bar(figsize=(15, 6))
plt.ylabel('Number of tickets')
plt.xlabel('Days')
#it seems like all the data is concentrated 
#only in a few years


Out[394]:
<matplotlib.text.Text at 0x1813b58d0>

In [395]:
new_df.groupby('Issue Date')['All Other Areas 2'].sum().plot(kind="bar", figsize=(15, 6))
plt.ylabel('Amount in $')
plt.xlabel('Days')


Out[395]:
<matplotlib.text.Text at 0x1814edeb8>

16. Manually construct a dataframe out of https://dmv.ny.gov/statistic/2015licinforce-web.pdf (only NYC boroughts - bronx, queens, manhattan, staten island, brooklyn), having columns for borough name, abbreviation, and number of licensed drivers.


In [396]:
#Still havent figure out how :(

In [ ]: