def doRender(self, handlerId): html='<div class="pd_save"><table width=100%><tr><th>Model</th><th>Accuracy</th><th>Precision</th><th>Recall</th></tr>' confusionHtml = '<p>Confusion Tables for each Model</p>' for modelName,model in Configuration.getModels(): label= model.__class__.__name__ labeledDataRDD, sqlTableName = Configuration.getLabeledData(self.entity) predictionAndLabels = model.predict(labeledDataRDD.map(lambda lp: lp.features)) metrics = MulticlassMetrics(\ predictionAndLabels.zip(labeledDataRDD.map(lambda lp: lp.label)).map(lambda t: (float(t[0]),float(t[1])))\ ) html+='<tr><td>{0}</td><td>{1:.2f}%</td><td>{2:.2f}%</td><td>{3:.2f}%</td></tr>'\ .format(label,metrics.weightedFMeasure(beta=1.0)*100, metrics.weightedPrecision*100,metrics.weightedRecall*100 ) displayConfusionTable = True if ( displayConfusionTable ): #get labels from RDD handler=training.getTrainingHandler() classLabels = labeledDataRDD.map(lambda t: t.label).distinct().map(lambda l: handler.getClassLabel(l)).collect() confusionMatrix = metrics.call("confusionMatrix") confusionMatrixArray = confusionMatrix.toArray() #labels = metrics.call("labels") confusionHtml += "<p>" + label + "<p>" confusionHtml += "<table>" confusionHtml+="<tr><td></td>" for classLabel in classLabels: confusionHtml+="<td>" + str(classLabel) + "</td>" confusionHtml+="</tr>" for i, row in enumerate(confusionMatrixArray): confusionHtml += "<tr>" confusionHtml += "<td>" + classLabels[i] + "</td>" for j, cell in enumerate(row): confusionHtml+="<td style='text-align:center'>" + ("<b>" if (i==j) else "") + str(cell) + ("</b>" if (i==j) else "") + "</td>" confusionHtml += "</tr>" confusionHtml += "</table>" html+='</table></div>' if ( displayConfusionTable ): html+=confusionHtml self._addHTML(html)
def runModel(flight, date, departureAirport=None): if not Configuration.isReadyForRun(): raise ValueError( "Unable to predict flight delay because no models are available. Please run configure for more details" ) if departureAirport is None: departureAirport = "LAS" response = getFlightSchedule(flight, date, departureAirport) myLogger.debug("Schedule for flight {0} at date {1} : {2}".format( flight, date, response)) if "error" in response: return { "error": "Unable to access schedule {0}".format(response["error"]) } payload = {} appendix = response['appendix'] payload["flightInfo"] = scheduledFlight = response["scheduledFlight"] def getAirportJSON(code): for airport in appendix["airports"]: if airport['fs'] == code: return airport payload["departureAirportInfo"] = departureInfo = {} departureInfo["airportInfo"] = depAirportJSON = getAirportJSON( scheduledFlight['departureAirportFsCode']) departureInfo["weatherForecast"] = depWeather = getWeather( depAirportJSON['latitude'], depAirportJSON['longitude'], scheduledFlight["departureTimeUTC"]) payload["arrivalAirportInfo"] = arrivalInfo = {} arrivalInfo["airportInfo"] = arrAirportJSON = getAirportJSON( scheduledFlight['arrivalAirportFsCode']) arrivalInfo["weatherForecast"] = arrWeather = getWeather( arrAirportJSON['latitude'], arrAirportJSON['longitude'], scheduledFlight["arrivalTimeUTC"]) payload["prediction"] = prediction = {} prediction["models"] = predictionModels = [] #create the features vector features = createFeaturesVector(depWeather, arrWeather, scheduledFlight, depAirportJSON, arrAirportJSON) #count the predicted classes to make an overall prediction predictedClasses = [] trainingHandler = getTrainingHandler() for modelVar, model in Configuration.getModels(): p = model.predict(features) predictedClasses.append(p) predictionModels.append({ "model": model.__class__.__name__, "prediction": trainingHandler.getClassLabel(p) }) classes = Counter(predictedClasses).most_common() if len(classes) > 1 and classes[0][1] == classes[1][1]: prediction["overall"] = "Undecided: {0}/{1}".format( trainingHandler.getClassLabel(classes[0][0]), trainingHandler.getClassLabel(classes[1][0])) else: prediction["overall"] = trainingHandler.getClassLabel(classes[0][0]) """ payload["prediction"]={ "overall": "Delayed between 13 and 41 minutes", "models":[ {"model":"NaiveBayesModel", "prediction":"Delayed between 13 and 41 minutes"}, {"model":"DecisionTreeModel: Delayed between 13 and 41 minutes"}, {"model":"LogisticRegressionModel: Delayed between 13 and 41 minutes"}, {"model":"RandomForestModel: Delayed between 13 and 41 minutes"} ] } """ myLogger.debug("runModel Payload {0}".format(payload)) try: saveFlightResults(payload) except: myLogger.exception("Unable to save flight results {0}".format(payload)) return json.dumps(payload) #payload format """
def runModel(flight, date, departureAirport=None): if not Configuration.isReadyForRun(): raise ValueError("Unable to predict flight delay because no models are available. Please run configure for more details") if departureAirport is None: departureAirport = "LAS" response = getFlightSchedule(flight, date, departureAirport) myLogger.debug("Schedule for flight {0} at date {1} : {2}".format(flight, date, response )) if "error" in response: return {"error": "Unable to access schedule {0}".format(response["error"])} payload={} appendix=response['appendix'] payload["flightInfo"]=scheduledFlight=response["scheduledFlight"] def getAirportJSON(code): for airport in appendix["airports"]: if airport['fs'] == code: return airport payload["departureAirportInfo"]=departureInfo={} departureInfo["airportInfo"]=depAirportJSON=getAirportJSON( scheduledFlight['departureAirportFsCode'] ) departureInfo["weatherForecast"]= depWeather = getWeather(depAirportJSON['latitude'], depAirportJSON['longitude'], scheduledFlight["departureTimeUTC"]) payload["arrivalAirportInfo"]=arrivalInfo={} arrivalInfo["airportInfo"]=arrAirportJSON=getAirportJSON( scheduledFlight['arrivalAirportFsCode'] ) arrivalInfo["weatherForecast"]= arrWeather=getWeather(arrAirportJSON['latitude'], arrAirportJSON['longitude'], scheduledFlight["arrivalTimeUTC"] ) payload["prediction"]=prediction = {} prediction["models"]=predictionModels = [] #create the features vector features = createFeaturesVector(depWeather, arrWeather, scheduledFlight, depAirportJSON, arrAirportJSON) #count the predicted classes to make an overall prediction predictedClasses = [] trainingHandler = getTrainingHandler(); for modelVar,model in Configuration.getModels(): p = model.predict(features) predictedClasses.append(p) predictionModels.append({ "model": model.__class__.__name__, "prediction": trainingHandler.getClassLabel(p) }) classes = Counter(predictedClasses).most_common() if len(classes)>1 and classes[0][1]==classes[1][1]: prediction["overall"] = "Undecided: {0}/{1}".format(trainingHandler.getClassLabel(classes[0][0]), trainingHandler.getClassLabel(classes[1][0])) else: prediction["overall"] = trainingHandler.getClassLabel(classes[0][0]) """ payload["prediction"]={ "overall": "Delayed between 13 and 41 minutes", "models":[ {"model":"NaiveBayesModel", "prediction":"Delayed between 13 and 41 minutes"}, {"model":"DecisionTreeModel: Delayed between 13 and 41 minutes"}, {"model":"LogisticRegressionModel: Delayed between 13 and 41 minutes"}, {"model":"RandomForestModel: Delayed between 13 and 41 minutes"} ] } """ myLogger.debug("runModel Payload {0}".format(payload)) try: saveFlightResults(payload) except: myLogger.exception("Unable to save flight results {0}".format(payload)) return json.dumps(payload) #payload format """