1
1
Fork 0
novelmetrix-python/ras/api/views.py

83 lines
2.5 KiB
Python
Raw Normal View History

2022-09-30 16:30:18 +02:00
from sqlite3 import connect
2022-09-05 15:53:48 +02:00
from rest_framework.decorators import api_view
from rest_framework.response import Response
import pandas as pd
2022-09-30 16:30:18 +02:00
import ras.settings
2023-02-15 16:00:58 +01:00
import math
2023-07-28 17:23:14 +02:00
from pymongo import MongoClient
2023-02-15 16:00:58 +01:00
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
2022-09-05 15:53:48 +02:00
2022-09-30 16:30:18 +02:00
from sqlalchemy import create_engine
2022-09-05 15:53:48 +02:00
from django.db.models import Q
from django.templatetags.static import static
import json
2022-09-05 15:53:48 +02:00
2023-07-28 17:23:14 +02:00
2022-09-30 16:30:18 +02:00
def getBooksData():
engine = create_engine('mysql+mysqldb://' + ras.settings.DATABASES['default']['USER'] + ':' + ras.settings.DATABASES['default']['PASSWORD'] + '@' + ras.settings.DATABASES['default']['HOST'] + ':3306/' + ras.settings.DATABASES['default']['NAME'])
df = pd.read_sql('SELECT * FROM api_books ORDER BY readed', engine, parse_dates={'readed': {'format': '%m-%Y'}})
2022-09-30 16:30:18 +02:00
return df
2022-10-27 11:17:03 +02:00
def getBookChallenge(year = None):
engine = create_engine('mysql+mysqldb://' + ras.settings.DATABASES['default']['USER'] + ':' + ras.settings.DATABASES['default']['PASSWORD'] + '@' + ras.settings.DATABASES['default']['HOST'] + ':3306/' + ras.settings.DATABASES['default']['NAME'])
if(year):
df = pd.read_sql('SELECT * FROM book_challenge where year = ' + year, engine)
else:
df = pd.read_sql('SELECT * FROM book_challenge', engine)
return df
2022-10-03 17:03:02 +02:00
def filterData(df, datayear = None):
df['readed'] = pd.to_datetime(df['readed'], format='%Y-%m-%d')
df['readed'] = df['readed'].dt.strftime('%m-%Y')
2022-10-03 17:03:02 +02:00
# Filter data on year
if datayear and datayear is not None:
df = df.where(df['readed'].str.contains(datayear))
2022-10-03 17:03:02 +02:00
return df
2022-09-30 16:30:18 +02:00
2022-10-03 17:03:02 +02:00
@api_view(['GET'])
def getStats(request):
if request.META.get('HTTP_YEAR'):
data = []
df = filterData(getBooksData(), request.META.get('HTTP_YEAR'))
df = df.dropna()
statsTotalBooks = df['name'].count()
statsTotalGenres = df['genre'].nunique()
data.append({
'totalbooks': statsTotalBooks,
'totalgenres': statsTotalGenres
})
return Response(data[0])
else:
return Response("No year header included")
2023-02-15 16:00:58 +01:00
@api_view(['GET'])
def predictAmountBooks(request):
books_data = pd.read_csv("api/static/books_data.csv")
books_data = books_data.dropna()
model = LinearRegression()
X = books_data[['year']]
Y = books_data['books_read']
model.fit(X.values, Y.values)
current_year = 2023
predict_books = model.predict([[current_year]])
return Response({
"year": current_year,
"amount": math.floor(predict_books[0])
2023-11-10 11:57:38 +01:00
})