Instructions
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()