## Instructions

**Objective**

## Requirements and Specifications

**Source Code
**

import math

from os.path import exists

def calculateZscore(fin, fout):

# List to store z values

zlist = list()

# Read all lines

lines = fin.readlines()

# Close file

fin.close()

# Loop through lines

for line in lines:

# Strip

line = line.strip()

# Split

row = line.split(',')

county = row[0]

x = float(row[1])

y = float(row[2])

Oi = int(row[3])

Ei = int(row[4])

# Calculate zi

zi = (Oi-Ei)/math.sqrt(Ei)

# Append to list

zlist.append(zi)

# Write to output file

fout.write(line + "," + str(zi) + "\n")

return zlist

def globalchiSquare(zlist):

# Variable to store globalchi square

X2 = 0.0

# Loop over the z scores

for zi in zlist:

# Add the square value of this zi score

X2 += zi**2

#Get number of records

n = len(zlist)

# Return

return (X2, n)

def chiCritical(chiFile, n, siglevel):

# First, read the chiFile. Get all lines

lines = chiFile.readlines()

# Since the first line contains the header, we will ignore it

lines.pop(0)

# Now, read all values, split and store into a list of sublist

chitable = list()

for line in lines:

# Strip

line = line.strip()

# Split

row = line.split(' ')

# Convert all elements in row to float

sublist = list()

for x in row:

if len(x) > 0:

sublist.append(float(x))

chitable.append(sublist)

# Now, get degree of freedon

df = n - 1

# Search for the row where df is equal to this value

Pcritical = None

for row in chitable:

if row[0] == df:

# Get P value

if siglevel == 5.0:

Pcritical = row[1]

elif siglevel == 1.0:

Pcritical = row[2]

else:

Pcritical = row[3]

break

return Pcritical

def main():

# Ask for filename

while True:

filenamein = input("What is the name of the input file?: ")

# Check that files exist

if not exists(filenamein):

print('***Error: Input File Not Found, try Again***')

else:

break

while True:

filename_chi = input("What is the name of the chi-squared table? ")

if not exists(filename_chi):

print('***Error: Input File Not Found, try Again***')

else:

break

filenameout = input("What is the name of the output file? ")

# Ask for significance level

while True:

try:

siglevel = float(input("What is the significance level? 5, 1, or 0.1? (%) "))

if siglevel == 5.0 or siglevel == 1.0 or siglevel == 0.1:

break

else:

print("***Error: Invalid Significance Leel, Try Again***")

except:

print("***Error: Invalid Significance Leel, Try Again***")

# Open file with data

inFile = open(filenamein, 'r')

# Open output file

outFile = open(filenameout, 'w+')

# Open chitable file

chiFile = open(filename_chi, 'r')

print("Performing chi-squared test on SIDS cases in North Carolina")

zList = calculateZscore(inFile, outFile)

(X2, n) = globalchiSquare(zList)

Pcritical = chiCritical(chiFile, n, siglevel)

print(f'There are {n} Counties in the sample dataset')

print('The global chi-squared statistic is {:.2f}'.format(X2))

print('Critical value at {:.1f}% significance level: {:.2f}'.format(siglevel, Pcritical))

if X2 > Pcritical:

print('The null hypothesis of no spatial pattern *is rejected* at {:.1f}% significance level'.format(siglevel))

else:

print('The null hypothesis of no spatial pattern *cannot be rejected* at {:.1f}% significance level'.format(siglevel))

# Close

inFile.close()

outFile.close()

chiFile.close()

if __name__ == '__main__':

main()