Skip to content

Commit

Permalink
new statistics with Django queries
Browse files Browse the repository at this point in the history
  • Loading branch information
DasUnicorn committed Aug 31, 2023
1 parent da0d8c9 commit 9bfb4ea
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 7 deletions.
11 changes: 8 additions & 3 deletions templates/data.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,14 @@ <h2>Daten-Einblick</h2>

<div>
<h2>Infos zu den Sprechenden</h2>
<p>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.</p>
<p>Den Größten Redeanteil hat {{longest_speaker_name}} mit {{longest_speaker_time}}.</p>
<p>{{shortest_speaker_name}} kommt mit {{shortest_speaker_time}} am wenigsten zu Wort.</p>
<p>Von den insgesamt {{speaker_number}} Sprechenden sind {{female_speaker}} weiblich und {{male_speaker}} männlich. Zusammen sprechen Sie eine Gesamtzeit von {{spoken_time}}.<br>{{spoken_time_male}} wird dabei von männlichen Personen und {{spoken_time_female}} von weiblichen Personen gesprochen.</p>
<p>Den Größten Redeanteil hat {{max_speaker_name}} mit {{max_speaker_time}}.</p>
<p>{{min_speaker_name}} kommt mit {{min_speaker_time}} Redezeit am wenigsten zu Wort.</p>
</div>

<div>
<h2>Infos zu den Episoden</h2>
<p>Ingesamt gibt es {{episode_number}} Episoden mit {{total_time}} Laufzeit.<br>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.</p>
</div>

<div class="">
Expand Down
59 changes: 55 additions & 4 deletions wordsearch/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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')

Expand All @@ -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,
Expand All @@ -54,4 +93,16 @@ def data(request):
"word_list": word_list,
"word_count": word_count,
"female_speaker": female_speaker,
"male_speaker": male_speaker})
"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 })

0 comments on commit 9bfb4ea

Please sign in to comment.