diff --git a/templates/data.html b/templates/data.html
index e1c93a1..fa5f78c 100644
--- a/templates/data.html
+++ b/templates/data.html
@@ -16,9 +16,14 @@
Daten-Einblick
Infos zu den Sprechenden
-
Von den insgesamt {{speaker_number}} Sprechenden sind {{female_speaker}} weiblich und {{male_speaker}} männlich. Zusammen sprechen Sie eine Gesamtzeit von {{spoken_time}}. {{spoken_time_male}} wird dabei von männlichen Personen und {{spken_time_female}} von weiblichen Personen gesprochen.
-
Den Größten Redeanteil hat {{longest_speaker_name}} mit {{longest_speaker_time}}.
-
{{shortest_speaker_name}} kommt mit {{shortest_speaker_time}} am wenigsten zu Wort.
+
Von den insgesamt {{speaker_number}} Sprechenden sind {{female_speaker}} weiblich und {{male_speaker}} männlich. Zusammen sprechen Sie eine Gesamtzeit von {{spoken_time}}.
{{spoken_time_male}} wird dabei von männlichen Personen und {{spoken_time_female}} von weiblichen Personen gesprochen.
+
Den Größten Redeanteil hat {{max_speaker_name}} mit {{max_speaker_time}}.
+
{{min_speaker_name}} kommt mit {{min_speaker_time}} Redezeit am wenigsten zu Wort.
+
+
+
+
Infos zu den Episoden
+
Ingesamt gibt es {{episode_number}} Episoden mit {{total_time}} Laufzeit.
In ihnen wird {{spoken_time}} lang gesprochen. Am meisten Redezeit findet sich in Episode {{max_spoken_time_eps}} mit einer Redezeit von {{max_spoken_time_eps_time}}. Am wenigsten gesprochen wird in Episode {{min_spoken_time_eps}} mit einer Redezeit von {{min_spoken_time_eps_time}}. Im Schnitt wird pro Episode {{spoken_time_eps_avg}} lang gesprochen.
diff --git a/wordsearch/views.py b/wordsearch/views.py
index de86f67..aac4468 100644
--- a/wordsearch/views.py
+++ b/wordsearch/views.py
@@ -2,6 +2,8 @@
from django.shortcuts import render
from django.utils import timezone
from django.db.models import F, DurationField, Sum, ExpressionWrapper
+from django.db.models import Avg, Max, Min
+from django.db.models import Q
from datetime import datetime, time, timedelta
from .models import Line, Speaker, Episode
@@ -21,7 +23,6 @@ def data(request):
episode_number = Episode.objects.count()
# Getting total time
- duration_list = Episode.objects.all()
sum_time = Episode.objects.aggregate(total_time=Sum('duration'))
total_time = sum_time.get('total_time')
@@ -44,8 +45,46 @@ def data(request):
word_count = int(len(word_list)/2)
# Getting Speaker by gender
- female_speaker = len(Speaker.objects.filter(gender="female"))
- male_speaker = len(Speaker.objects.filter(gender="male"))
+ female_speaker = Speaker.objects.filter(gender="female").count()
+ male_speaker = Speaker.objects.filter(gender="male").count()
+
+ # Getting the spoken time in total
+ duration_per_line = Line.objects.annotate(time=(F("end_time") - F("start_time")))
+ spoken_time_total = duration_per_line.aggregate(time_total=Sum('time'))
+ spoken_time = spoken_time_total.get('time_total')
+
+ # Spoken time per episode
+ spoken_time_per_eps = duration_per_line.values('episode').annotate(time=Sum('time')).order_by()
+
+ #Avg Spoken time per episode
+ spoken_time_avg = spoken_time_per_eps.aggregate(Avg('time'))
+ spoken_time_eps_avg = spoken_time_avg.get('time__avg')
+ #Max and min spoken time per episode, including episode
+ spoken_time_max = spoken_time_per_eps.order_by('-time')[0]
+ spoken_time_min = spoken_time_per_eps.order_by('time')[0]
+ max_time_esp_name = spoken_time_max.get('episode')
+ max_time_esp = spoken_time_max.get('time')
+ min_time_esp_name = spoken_time_min.get('episode')
+ min_time_esp = spoken_time_min.get('time')
+
+
+ #Spoken time by gender
+ spoken_time_female = duration_per_line.filter(speaker__gender="female").aggregate(Sum('time'))
+ spoken_time_male = duration_per_line.filter(speaker__gender="male").aggregate(Sum('time'))
+ spoken_time_m = spoken_time_male.get('time__sum')
+ spoken_time_f = spoken_time_female.get('time__sum')
+
+ #Spoken Time by speaker
+ spoken_time_per_spk = duration_per_line.values('speaker__name').annotate(time=Sum('time')).order_by()
+ max_speaker = spoken_time_per_spk.order_by('-time')[0]
+ min_speaker = spoken_time_per_spk.order_by('time')[0]
+ max_speaker_name = max_speaker.get('speaker__name')
+ max_speaker_time = max_speaker.get('time')
+ min_speaker_name = min_speaker.get('speaker__name')
+ min_speaker_time = min_speaker.get('time')
+
+
+
return render(request, 'data.html', {
"speaker_number": speaker_number,
@@ -54,4 +93,16 @@ def data(request):
"word_list": word_list,
"word_count": word_count,
"female_speaker": female_speaker,
- "male_speaker": male_speaker})
\ No newline at end of file
+ "male_speaker": male_speaker,
+ "spoken_time": spoken_time,
+ "spoken_time_female": spoken_time_f,
+ "spoken_time_male": spoken_time_m,
+ "max_speaker_name": max_speaker_name,
+ "max_speaker_time": max_speaker_time,
+ "min_speaker_name": min_speaker_name,
+ "min_speaker_time": min_speaker_time,
+ "max_spoken_time_eps": max_time_esp_name,
+ "max_spoken_time_eps_time": max_time_esp,
+ "min_spoken_time_eps": min_time_esp_name,
+ "min_spoken_time_eps_time": min_time_esp,
+ "spoken_time_eps_avg": spoken_time_eps_avg })
\ No newline at end of file