diff --git a/__pycache__/fonction.cpython-312.pyc b/__pycache__/fonction.cpython-312.pyc new file mode 100644 index 0000000..d2f50f8 Binary files /dev/null and b/__pycache__/fonction.cpython-312.pyc differ diff --git a/__pycache__/testUnitaire.cpython-312.pyc b/__pycache__/testUnitaire.cpython-312.pyc new file mode 100644 index 0000000..f70a250 Binary files /dev/null and b/__pycache__/testUnitaire.cpython-312.pyc differ diff --git a/fonction.py b/fonction.py index 3d6870f..996dbed 100644 --- a/fonction.py +++ b/fonction.py @@ -1,18 +1,28 @@ from sklearn.linear_model import LinearRegression import pandas as pd 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 arrayBpm = [] arrayStartTime = [] arrayTimeOfActivity = [] - for data in dataJson["Data"]: - arrayBpm.append(data["BpmAvg"]) - arrayTimeOfActivity.append(data["TimeOfActivity"]) + for data in dataJson: + + info = json.loads(data["json"]) - arrayStartTime.append(data["StartTime"]) + 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, @@ -21,4 +31,31 @@ def generateModele(dataJson:dict[str,str]): # -- Régression linéaire model = LinearRegression() model.fit(np.array(arrayStartTime).reshape(-1,1),data) - return model \ No newline at end of file + 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 \ No newline at end of file diff --git a/testFinal.py b/testFinal.py index 00881d3..d8b5658 100755 --- a/testFinal.py +++ b/testFinal.py @@ -3,68 +3,13 @@ from sklearn.linear_model import LinearRegression import pandas as pd import numpy as np -import requests import logging import json 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 ------------------- # -logging.error("RUNNNNNNNN !") - urlGetAllData = "https://codefirst.iut.uca.fr/containers/SmartFit-smartfit_api/ai/data" # --- Call Api @@ -96,14 +41,13 @@ dataUser = [{ logging.error("Nombre de User : "+str(len(dataUser))) i = 0 + for user in dataUser: userUUID = user["uuid"] for category in user["categories"]: jsonTmp = {} - #Mettre la condition longueur ici - model = generateModele(category["infos"]) jsonTmp["uuid"] = userUUID diff --git a/testUnitaire.py b/testUnitaire.py index c1679a6..bfc5718 100644 --- a/testUnitaire.py +++ b/testUnitaire.py @@ -1,9 +1,16 @@ import unittest -from fonction import generateModele +from fonction import generateModele,generateJsonModel class Testing(unittest.TestCase): 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__': - unittest.main() \ No newline at end of file + unittest.main() + +#python -m unittest testUnitaire.py \ No newline at end of file