test model
continuous-integration/drone/push Build is passing Details

master
Enzo 1 year ago
parent 120fc5704d
commit df1b7ae011

@ -1,18 +1,28 @@
from sklearn.linear_model import LinearRegression from sklearn.linear_model import LinearRegression
import pandas as pd import pandas as pd
import numpy as np import numpy as np
import json
from datetime import datetime
import requests
def generateModele(dataJson:dict[str,str]): def generateModele(dataJson):
# -- Préparation des données # -- Préparation des données
arrayBpm = [] arrayBpm = []
arrayStartTime = [] arrayStartTime = []
arrayTimeOfActivity = [] arrayTimeOfActivity = []
for data in dataJson["Data"]: for data in dataJson:
arrayBpm.append(data["BpmAvg"])
arrayTimeOfActivity.append(data["TimeOfActivity"])
arrayStartTime.append(data["StartTime"]) info = json.loads(data["json"])
arrayBpm.append(int(info["bpmAvg"]))
arrayTimeOfActivity.append(float(info["timeOfActivity"]))
# Convertir la chaîne en objet datetime
dt_object = datetime.strptime(info["startTime"], "%Y-%m-%dT%H:%M:%S.%f")
# Convertir l'objet datetime en millisecondes depuis l'époque
milliseconds_since_epoch = int(dt_object.timestamp() * 1000)
arrayStartTime.append(milliseconds_since_epoch)
# -- DataFrame # -- DataFrame
data = pd.DataFrame({ data = pd.DataFrame({
"Bpm": arrayBpm, "Bpm": arrayBpm,
@ -22,3 +32,30 @@ def generateModele(dataJson:dict[str,str]):
model = LinearRegression() model = LinearRegression()
model.fit(np.array(arrayStartTime).reshape(-1,1),data) model.fit(np.array(arrayStartTime).reshape(-1,1),data)
return model return model
def generateJsonModel(model:LinearRegression):
listCoef = []
listIntercept = []
for i in range(0,len(model.coef_)):
listCoef.append(model.coef_[i][0])
listIntercept.append(model.intercept_[i])
json = {"coef":listCoef,"intercept":listIntercept}
return json
def getUserWithData(url:str):
response = requests.get(url)
if ( response.status_code != 200):
print('problème lors de l extraction des données avec l api !! -> "getUserWithData" (status_code != 200)')
exit()
return response.json()
def sendJsonToApi(url,json):
header = {"Content-type": "application/json"}
response = requests.post(url,json,headers=header)
if ( response.status_code != 200):
print('Problème lors de l envoi des données avec l api !! -> "sendJsonToApi" (status_code != 200)')
exit()
return

@ -3,68 +3,13 @@
from sklearn.linear_model import LinearRegression from sklearn.linear_model import LinearRegression
import pandas as pd import pandas as pd
import numpy as np import numpy as np
import requests
import logging import logging
import json import json
from datetime import datetime from datetime import datetime
from fonction import getUserWithData,generateJsonModel,generateModele,sendJsonToApi
# --------------- Fonction ----------------- #
def generateJsonModel(model:LinearRegression):
listCoef = []
listIntercept = []
for i in range(0,len(model.coef_)):
listCoef.append(model.coef_[i][0])
listIntercept.append(model.intercept_[i])
json = {"coef":listCoef,"intercept":listIntercept}
return json
def generateModele(dataJson):
# -- Préparation des données
arrayBpm = []
arrayStartTime = []
arrayTimeOfActivity = []
for data in dataJson:
info = json.loads(data["json"])
arrayBpm.append(int(info["bpmAvg"]))
arrayTimeOfActivity.append(float(info["timeOfActivity"]))
# Convertir la chaîne en objet datetime
dt_object = datetime.strptime(info["startTime"], "%Y-%m-%dT%H:%M:%S.%f")
# Convertir l'objet datetime en millisecondes depuis l'époque
milliseconds_since_epoch = int(dt_object.timestamp() * 1000)
arrayStartTime.append(milliseconds_since_epoch)
# -- DataFrame
data = pd.DataFrame({
"Bpm": arrayBpm,
"TimeOfActivity": arrayTimeOfActivity
})
# -- Régression linéaire
model = LinearRegression()
model.fit(np.array(arrayStartTime).reshape(-1,1),data)
return model
def getUserWithData(url:str):
response = requests.get(urlGetAllData)
if ( response.status_code != 200):
print('problème lors de l extraction des données avec l api !! -> "getUserWithData" (status_code != 200)')
exit()
return response.json()
def sendJsonToApi(url,json):
header = {"Content-type": "application/json"}
response = requests.post(url,json,headers=header)
if ( response.status_code != 200):
print('Problème lors de l envoi des données avec l api !! -> "sendJsonToApi" (status_code != 200)')
exit()
return
# ---------------- Main ------------------- # # ---------------- Main ------------------- #
logging.error("RUNNNNNNNN !")
urlGetAllData = "https://codefirst.iut.uca.fr/containers/SmartFit-smartfit_api/ai/data" urlGetAllData = "https://codefirst.iut.uca.fr/containers/SmartFit-smartfit_api/ai/data"
# --- Call Api # --- Call Api
@ -96,14 +41,13 @@ dataUser = [{
logging.error("Nombre de User : "+str(len(dataUser))) logging.error("Nombre de User : "+str(len(dataUser)))
i = 0 i = 0
for user in dataUser: for user in dataUser:
userUUID = user["uuid"] userUUID = user["uuid"]
for category in user["categories"]: for category in user["categories"]:
jsonTmp = {} jsonTmp = {}
#Mettre la condition longueur ici
model = generateModele(category["infos"]) model = generateModele(category["infos"])
jsonTmp["uuid"] = userUUID jsonTmp["uuid"] = userUUID

@ -1,9 +1,16 @@
import unittest import unittest
from fonction import generateModele from fonction import generateModele,generateJsonModel
class Testing(unittest.TestCase): class Testing(unittest.TestCase):
def test_model(self): def test_model(self):
self.assertEqual(generateModele(),1) data = [{'json': '{"bpmAvg":114,"bpmMax":145,"bpmMin":79,"denivelePositif":449.00000000000114,"deniveleNegatif":70.00000000000114,"altitudeMax":402.4,"altitudeMin":369.20000000000005,"altitudeAvg":382.2932358318101,"temperatureMax":22,"temperatureMin":18,"temperatureAvg":20,"vitesseMax":4.62,"vitesseMin":0.0,"vitesseAvg":1.3393414634146392,"startTime":"2023-12-10T03:12:54.000","timeOfActivity":2061.82,"distance":2131.0,"calories":215,"steps":1168}'}, {'json': '{"bpmAvg":118,"bpmMax":146,"bpmMin":102,"denivelePositif":448.80000000000007,"deniveleNegatif":55.80000000000007,"altitudeMax":406.6,"altitudeMin":375.4,"altitudeAvg":386.7921763869132,"temperatureMax":24,"temperatureMin":21,"temperatureAvg":22,"vitesseMax":2.3,"vitesseMin":0.0,"vitesseAvg":1.7642135231316907,"startTime":"2023-12-12T17:17:43.000","timeOfActivity":1445.47,"distance":2449.0,"calories":170,"steps":1368}'}, {'json': '{"bpmAvg":111,"bpmMax":122,"bpmMin":103,"denivelePositif":395.19999999999993,"deniveleNegatif":23.799999999999955,"altitudeMax":375.20000000000005,"altitudeMin":369.79999999999995,"altitudeAvg":372.7532258064513,"temperatureMax":30,"temperatureMin":23,"temperatureAvg":25,"vitesseMax":2.56,"vitesseMin":0.0,"vitesseAvg":1.7127125506072893,"startTime":"2023-12-09T19:16:43.000","timeOfActivity":255.62,"distance":466.0,"calories":30,"steps":255}'}]
model = generateJsonModel(generateModele(data))
self.assertEqual(model["coef"][0],2.4008223334695094e-08)
self.assertEqual(model["coef"][1],1.8702979299828552e-06)
self.assertEqual(model["intercept"][0],-40753.409070545466)
self.assertEqual(model["intercept"][1],-3182440.4230727013)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
#python -m unittest testUnitaire.py
Loading…
Cancel
Save