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