You are on page 1of 3

# -*- coding: utf-8 -*-

"""
Created on Mon Aug 28 14:13:07 2017

@author: Erik Bethke


"""

from sys import argv


#import csv
import pandas as pd
import numpy as np
import inflect
inf = inflect.engine()

script, in_csv, out_csv = argv

df = pd.read_csv(in_csv, header = 0)

#%% New Coordinate Fields


df['XCoord'] = df['CoordinateX']
df['YCoord'] = df['CoordinateY']

#%% X Coordinate decimal fixes, adjusts ALL values where CoordinateX > 100 or CoordinateX < 100
df['XJust'] = ''
df['XCheck'] = 'X Coordinate values are outside the Mozambique extent'
XPos = 14

while XPos > 1:


df['XJust'] = np.where(df['XCoord'] < -1*10**XPos, 'Shifted decimal ' + str(XPos - 1) + inf.plural('
place', XPos -1) + '. ', df['XJust'])
df['XJust'] = np.where(df['XCoord'] > 1*10**XPos, 'Shifted decimal ' + str(XPos - 1) + inf.plural('
place', XPos -1) + '. ', df['XJust'])
df['XCoord'] = np.where(df['XCoord'] < -1*10**XPos, df['CoordinateX']/10**(XPos - 1),
df['XCoord'])
df['XCoord'] = np.where(df['XCoord'] > 1*10**XPos, df['CoordinateX']/10**(XPos - 1),
df['XCoord'])
XPos -= 1

#%% Y Coordinate decimal fixes, adjusts ALL values where CoordinateY > 100 or CoordinateY < 100
df['YJust'] = ''
df['YCheck'] = 'Y Coordinate values are outside the Mozambique extent'
YPos =14

while YPos > 1:


df['YJust'] = np.where(df['YCoord'] < -1*10**YPos, 'Shifted decimal ' + str(YPos - 1) + inf.plural('
place', YPos -1) + '. ', df['YJust'])
df['YJust'] = np.where(df['YCoord'] > 1*10**YPos, 'Shifted decimal ' + str(YPos - 1) + inf.plural('
place', YPos -1) + '. ', df['YJust'])
df['YCoord'] = np.where(df['YCoord'] < -1*10**YPos, df['CoordinateY']/10**(YPos - 1),
df['YCoord'])
df['YCoord'] = np.where(df['YCoord'] > 1*10**YPos, df['CoordinateY']/10**(YPos - 1),
df['YCoord'])
YPos -= 1

#%% X/Y flip ONLY IF Y COORDINATE IS BETWEEN (29, 42) AND X COORDINATE IS
BETWEEN (-29, -9)
df['XCoord1'] = df['XCoord']
df['YCoord1'] = df['YCoord']
df['XJust'] = np.where(df['YCoord1'].between(29, 42) & df['XCoord1'].between(-27, -9), df['XJust'] +
'X and Y flipped.', df['XJust'])
df['YJust'] = np.where(df['YCoord1'].between(29, 42) & df['XCoord1'].between(-27, -9), df['YJust'] + '
X and Y flipped.', df['YJust'])
df['XCoord'] = np.where(df['YCoord1'].between(29, 42) & df['XCoord1'].between(-27, -9),
df['YCoord1'], df['XCoord'])
df['YCoord'] = np.where(df['YCoord1'].between(29, 42) & df['XCoord1'].between(-27, -9),
df['XCoord1'], df['YCoord'])

#%% Value Check

## X Check
df['XJust'] = np.where(df['XJust'] == '', 'No adjustments made.', df['XJust'])
df['XCheck'] = np.where(df['XCoord'].between(29, 42), 'X Coordinate appears consistent with
Mozambique extent', df['XCheck'])
df['XCheck'] = np.where(df['XCoord'] == 0, 'X Coordinate is null', df['XCheck'])
df['XCheck'] = np.where(df['XCoord'].isnull(), 'X Coordinate is null', df['XCheck'])

## Y Check
df['YJust'] = np.where(df['YJust'] == '', 'No adjustments made', df['YJust'])
df['YCheck'] = np.where(df['YCoord'].between(-27, -9), 'Y Coordinate appears consistent with
Mozambique extent', df['YCheck'])
df['YCheck'] = np.where(df['YCoord'] == 0, 'Y Coordinate is null', df['YCheck'])
df['YCheck'] = np.where(df['YCoord'].isnull(), 'Y Coordinate is null', df['YCheck'])

## Overall Check
df['XYCheck'] = 'Something else'
df['XYCheck'] = np.where(((df['XCheck'] == 'X Coordinate values are outside the Mozambique
extent') | (df['YCheck'] == 'Y Coordinate values are outside the Mozambique extent')), 'One or more
coordinates are outside the Mozambique extent', df['XYCheck'])
df['XYCheck'] = np.where(((df['XCheck'] == 'X Coordinate is null') | (df['YCheck'] == 'Y Coordinate
values is null')), 'One or more coordinates are null', df['XYCheck'])
df['XYCheck'] = np.where(((df['XCheck'] == 'X Coordinate appears consistent with Mozambique
extent') & (df['YCheck'] == 'Y Coordinate appears consistent with Mozambique extent')), 'Both
coordinates appear consistent with the Mozambique extent', df['XYCheck'])

#%% Remove (0,0) coordinate pairs


df['XCoord'] = np.where(((df['YCoord'] == 0) | (df['YCoord'].isnull())) & ((df['XCoord'] == 0) |
(df['XCoord'].isnull())), '', df['XCoord'])
df['YCoord'] = np.where(((df['YCoord'] == 0) | (df['YCoord'].isnull())) & ((df['XCoord'] == 0) |
(df['XCoord'] == '')), '', df['YCoord'])

#%% Export CSV


df = df.drop('XCoord1', 1)
df = df.drop('YCoord1', 1)
df.to_csv(out_csv, encoding = 'utf-8', index=False)

You might also like