У нас есть REST-контроллер на python.Контроллер возвращает POST-запрос в def foo () и возвращает ответ, перешел в def ml (df) и получил от него ответ.Мы хотим получить ответ как правильный JSON.
import json
from flask import Flask, abort, request, jsonify
app = Flask(__name__)
import pickle
import numpy as np
import pandas as pd
import ast
@app.route('/test', methods=['GET'])
def ml(df):
if len(df) == 0:
abort(404)
df = pd.DataFrame([df])
profs = ["Умение расставлять приоритеты", "Умение работать в команде", "Организационная осведомленность",
"Эффективное решение проблем", "Самосознание", "Проактивность", "Способность оказывать влияние",
"Эффективное принятие решений", "Способность к обучению", "Техническая смекалка",
"опыт заключения торговых сделок",
"навыки делового общения, ведения переговоров", "опыт работы на выставках, презентация продукции",
"ведение и расширение клиентской базы", "составление и заключение договоров"]
gends = ['FEMALE', 'MALE']
educations = ['HIGH', 'SECONDARY', 'VOCATIONAL']
for prof in profs:
df[prof] = df['skills'].map(lambda s: prof in s)
oldprofs = ['ИСПЫТАТЕЛЬ', 'НОТАРИУС', 'АНАЛИТИК', 'ЭКСКУРСОВОД', 'ТУРАГЕНТ', 'ПЕРЕВОДЧИК', 'СМЕТЧИК', 'ШТУРМАН',
'ЮРИСКОНСУЛЬТ', 'ЛЕКТОР', 'ЖУРНАЛИСТ', 'СТАТИСТИК', 'БУХГАЛТЕР', 'ДИАГНОСТ', 'КОРРЕКТОР', 'КОПИРАЙТЕР']
for oldprof in oldprofs:
df[oldprof] = df['fromProfession'].map(lambda s: oldprof in s)
for gend in gends:
df[gend] = df['gender'].map(lambda s: gend in s)
for educat in educations:
df[educat] = df['education'].map(lambda s: educat in s)
df = df.drop(['fromProfession'], axis=1)
df = df.drop(['education'], axis=1)
df = df.drop(['gender'], axis=1)
X = df.drop('skills', axis=1).values
with open('model.pkl', 'rb') as f:
model1 = pickle.load(f)
model1.predict(X[0:1])
pred_prob = model1.predict_proba(X[0:1])
pred_prob=pred_prob*100
profs1 = np.array(profs)
pred_prob1 = pd.DataFrame(pred_prob, columns=model1.classes_)
pred_prob2 = pred_prob1.T.to_dict()
print (json.dumps(pred_prob2, ensure_ascii=False))
js=json.dumps(pred_prob2, ensure_ascii=False)
return jsonify(js)
@app.route('/foo', methods=['POST'])
def foo():
if not request.json:
abort(400)
index = ml(request.json)
return json.dumps(index, ensure_ascii=False)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
Входящий JSON:
{"age":52,"gender":"FEMALE","skills":["Техническая смекалка","контроль отгрузки и доставки товара","Способность к обучению","уверенное владение ПК, знание 1С, Word, Excel","Опыт работы с фреймворками для программистов (CMF)"],"education":"SECONDARY","fromProfession":"ЮРИСКОНСУЛЬТ"}
Исходящий:
{"0": {"FRONTEND DEVELOPER": 3.4395349083386844, "IT-ИНЖЕНЕР": 45.03697024406095, "JAVA DEVELOPER": 7.413367703303954,
"PYTHON РАЗРАБОТЧИК": 4.490726584879357, "QA-ИНЖЕНЕР": 12.002460181144048, "БИЗНЕС-АНАЛИТИК": 16.914337023526357,
"ИНЖЕНЕР-ТЕСТИРОВЩИК": 4.699860305283799, "НАГРУЗОЧНЫЙ ТЕСТИРОВЩИК": 1.8262132725488815, "СИСТЕМНЫЙ АНАЛИТИК":
4.176529815675104}}
Пожалуйста, помогите нам заставить этот пример работать.