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
|
2022-09-28 14:29:54 +02:00
|
|
|
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
|
2022-09-28 14:29:54 +02:00
|
|
|
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'])
|
2022-12-23 17:04:09 +01:00
|
|
|
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-09-28 14:29:54 +02:00
|
|
|
|
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-09-28 14:29:54 +02:00
|
|
|
|
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'):
|
|
|
|
df = filterData(getBooksData(), request.META.get('HTTP_YEAR'))
|
2024-01-18 16:36:14 +01:00
|
|
|
print(df)
|
2022-10-03 17:03:02 +02:00
|
|
|
df = df.dropna()
|
|
|
|
|
|
|
|
statsTotalBooks = df['name'].count()
|
|
|
|
statsTotalGenres = df['genre'].nunique()
|
|
|
|
|
2024-01-18 16:36:14 +01:00
|
|
|
return Response({
|
2022-10-03 17:03:02 +02:00
|
|
|
'totalbooks': statsTotalBooks,
|
|
|
|
'totalgenres': statsTotalGenres
|
|
|
|
})
|
|
|
|
else:
|
2023-11-21 08:24:48 +01:00
|
|
|
return Response("No year header included")
|