65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
from rest_framework.decorators import api_view
|
|
from rest_framework.response import Response
|
|
from .models import Books
|
|
import pandas as pd
|
|
|
|
from .serializers import BooksSerializer
|
|
from django.db.models import Q
|
|
from django.templatetags.static import static
|
|
import json
|
|
|
|
@api_view(['GET'])
|
|
def books_per_genre_per_month(request):
|
|
|
|
datayear = request.META.get('HTTP_YEAR')
|
|
|
|
if datayear:
|
|
|
|
data = []
|
|
|
|
# Get CSV file with book data
|
|
df = pd.read_csv("api/static/books2.csv", encoding = "utf-8", header = 0, sep=';')
|
|
|
|
# Filter data on year
|
|
df = df.where(df['readed'].str.contains(datayear))
|
|
|
|
# Filter array on genre and date
|
|
booksPerMonth = df.groupby(['genre','readed'])['genre'].count().reset_index(name="count")
|
|
booksPerMonth = booksPerMonth.sort_values(by='readed')
|
|
|
|
for index, row in booksPerMonth.iterrows():
|
|
data.append({
|
|
"genre": row['genre'],
|
|
"readed": row['readed'],
|
|
"count": row['count']
|
|
})
|
|
|
|
return Response(data)
|
|
else:
|
|
return Response("No year header included")
|
|
|
|
@api_view(['GET'])
|
|
def avg_ratings_per_month(request):
|
|
datayear = request.META.get('HTTP_YEAR')
|
|
|
|
if datayear:
|
|
data = []
|
|
|
|
# Get CSV file with book data
|
|
df = pd.read_csv("api/static/books2.csv", encoding = "utf-8", header = 0, sep=';')
|
|
|
|
# Filter data on year
|
|
df = df.where(df['readed'].str.contains(datayear))
|
|
|
|
avgratingspermonth = df.groupby('readed')['rating'].mean().reset_index(name="rating")
|
|
|
|
for index, row in avgratingspermonth.iterrows():
|
|
|
|
data.append({
|
|
"date": row['readed'],
|
|
"rating": int(row['rating'])
|
|
})
|
|
|
|
return Response(data)
|
|
else:
|
|
return Response("No year header included") |