#!/usr/bin/python3 import cgi, json from scipy.stats import chi2 form = cgi.FieldStorage() percentages = [float(x) for x in form['percentages'].value.split(',')] nums = [float(x) for x in form['nums'].value.split(',')] variance = 0.0 # Assumes the percentages sum to 100 degreesOfFreedom = len(nums) - 1 total = 0 for num in nums: total += num for (percentage, num) in zip(percentages, nums): expected = (percentage / 100.0) * total if expected > 0: variance += pow(num - expected, 2)/expected else: degreesOfFreedom -= 1 print("Content-type: application/json\n\n") print(json.dumps({'prob': float(chi2.sf(variance, degreesOfFreedom)), 'variance': variance, 'degreesOfFreedom': degreesOfFreedom}))