Sugude võrdlus¶

Autor: Nora Anete Müller¶

Eeltöötlus¶

In [1]:
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = 'serif'
plt.rcParams['font.size'] = 12
import locale
import numpy as np
import scipy
from scipy import stats
import seaborn as sns
In [2]:
# Logide fail
logs = pd.read_csv('logs.csv')
logs_copy = logs.copy()
In [3]:
# Eemaldatakse nende kasutajate logid, keda ei uurita
logs.drop(logs.index[logs['Kasutaja täisnimi'] == 'Nora Anete Müller'], inplace=True)
logs.drop(logs.index[logs['Kasutaja täisnimi'] == 'Tauno Palts'], inplace=True)
logs.drop(logs.index[logs['Kasutaja täisnimi'] == 'Moodle admin'], inplace=True)
logs.drop(logs.index[logs['Kasutaja täisnimi'] == '-'], inplace=True)
logs.drop(logs.index[logs['Kasutaja täisnimi'] == 'xxx xxx'], inplace=True)
logs.drop(logs.index[logs['Kasutaja täisnimi'] == 'xx xxxx'], inplace=True)
logs.drop(logs.index[logs['Kasutaja täisnimi'] == 'xxx xx'], inplace=True)
In [4]:
# hinne_vs_logid.csv on autori koostatud fail
hin_log = pd.read_csv("Hinded_logid.csv")
In [5]:
# Nimede asendamine logide failis -> nimetäht + m/f
asendamine = {}
for i in logs['Kasutaja täisnimi'].unique():
    nimi = i.split()
    eesnimi = nimi[0]
    perenimi = nimi[1]
    for index, row in hin_log.iterrows():
        if (eesnimi == row['Eesnimi'] and perenimi == row['Perenimi']):
            if (row['Sugu'] == 'f'):
                uusNimi = eesnimi[0] + 'f'
                k = 1
                while uusNimi in asendamine.values() and k < len(eesnimi):
                    uusNimi = eesnimi[k] + 'f'
                    k += 1
                if uusNimi not in asendamine.values():
                    asendamine[i] = uusNimi
                else:
                    k = 1
                    uusNimi = perenimi[0] + 'f'
                    while uusNimi in asendamine.values() and k < len(perenimi):
                        uusNimi = perenimi[k] + 'f'
                        k += 1
                    asendamine[i] = uusNimi
            elif (row['Sugu'] == 'm'):
                uusNimi = eesnimi[0] + 'm'
                k = 1
                while uusNimi in asendamine.values() and k < len(eesnimi):
                    uusNimi = eesnimi[k] + 'm'
                    k += 1
                if uusNimi not in asendamine.values():
                    asendamine[i] = uusNimi
                else:
                    k = 1
                    uusNimi = perenimi[0] + 'm'
                    while uusNimi in asendamine.values() and k < len(perenimi):
                        uusNimi = perenimi[k] + 'm'
                        k += 1
                    asendamine[i] = uusNimi
                    
logs['Kasutaja täisnimi'].replace(asendamine, inplace=True)
In [6]:
# Nimede asendamine failis 'hinned_vs_logid.csv'
hin_log.insert(0, 'Nimi', '')
nimed = []
for index, row in hin_log.iterrows():
    nimi = row['Eesnimi'] + ' ' + row['Perenimi']
    # Kui osaleja on teinud 0 logi
    if nimi not in asendamine:
        kood = '-'
    else:
        kood = asendamine[nimi]
    nimed.append(kood)

hin_log['Nimi'] = nimed
hin_log.drop('Eesnimi', axis=1, inplace=True)
hin_log.drop('Perenimi', axis=1, inplace=True)

Naiste ja meeste osakaal kursusel¶

In [7]:
osalejad = len(hin_log)
naised = len(hin_log.loc[hin_log['Sugu'] == 'f'])
mehed = len(hin_log.loc[hin_log['Sugu'] == 'm'])

naisteOsakaal = (naised / osalejad) * 100
meesteOsakaal = (mehed / osalejad) * 100

print('Osalejaid oli kokku', osalejad,'\n')
print('Naisi oli kokku', naised,'\n Naiste osakaal oli', naisteOsakaal,'%','\n')
print('Mehi oli kokku', mehed,'\n Meeste osakaal oli', meesteOsakaal,'%')
Osalejaid oli kokku 48 

Naisi oli kokku 31 
 Naiste osakaal oli 64.58333333333334 % 

Mehi oli kokku 17 
 Meeste osakaal oli 35.41666666666667 %
In [8]:
x = [naised, mehed]
colors = ('orange', 'skyblue')
labels = ['Naised', 'Mehed']
fig = plt.figure()
ax = fig.add_subplot()
_,_,autotexts = ax.pie(x, colors=colors, labels = labels, radius=2, 
       wedgeprops={"linewidth":1, "edgecolor":"white"}, autopct='%.1f%%')
for autotext in autotexts:
    autotext.set_text(autotext.get_text().replace('.', ','))
fig.savefig('Diagrammid/naised_mehed_kursusel.png', format='png', dpi=100, bbox_inches='tight')

Naiste ja meeste logide arv¶

In [9]:
print('Logide arv kokku: \n')
print(hin_log.groupby('Sugu')['Logide arv'].sum())
Logide arv kokku: 

Sugu
f    9962
m    4629
Name: Logide arv, dtype: int64
In [10]:
print('Keskmine logide arv: \n')
print(hin_log.groupby('Sugu')['Logide arv'].mean())
Keskmine logide arv: 

Sugu
f    321.354839
m    272.294118
Name: Logide arv, dtype: float64

Naiste ja meeste keskmine logide arv¶

In [11]:
x = [
   round(hin_log.groupby('Sugu')['Logide arv'].mean()[0]),
    round(hin_log.groupby('Sugu')['Logide arv'].mean()[1])
]
labels = ['Naised', 'Mehed']
fig, ax = plt.subplots()
ax.bar(labels, x, color=['orange', 'skyblue'])
ax.bar_label(ax.containers[0])
ax.set_ylim([0, 350])
plt.ylabel("Logide arv")
plt.show()
fig.savefig('Diagrammid/naised_mehed_keskmineLogid.png', format='png', dpi=100)

T-test¶

In [12]:
male = hin_log.query('Sugu == "m"')['Logide arv']
female = hin_log.query('Sugu == "f"')['Logide arv']
hin_log.groupby('Sugu').describe()
Out[12]:
Hinne (Punktid) Logide arv
count mean std min 25% 50% 75% max count mean std min 25% 50% 75% max
Sugu
f 31.0 30.725806 14.549822 0.0 30.0 39.0 40.0 40.0 31.0 321.354839 192.887454 0.0 258.5 313.0 434.0 803.0
m 17.0 32.235294 12.295982 0.0 30.0 39.0 40.0 40.0 17.0 272.294118 126.008812 26.0 217.0 262.0 377.0 473.0
In [13]:
# Normality of Data
print(stats.shapiro(male))
print(stats.shapiro(female))
ShapiroResult(statistic=0.9658343195915222, pvalue=0.7422088980674744)
ShapiroResult(statistic=0.943137526512146, pvalue=0.10079184919595718)
In [14]:
# Homogeneity of Variances Assumption
# Kas k valimi dispersioonid on võrdsed -> dispersiooni homogeensus
stats.levene(male, female)
Out[14]:
LeveneResult(statistic=1.600929335033337, pvalue=0.21214345971382076)
In [15]:
stats.ttest_ind(male, female)
Out[15]:
Ttest_indResult(statistic=-0.9418952315382957, pvalue=0.35116680088708296)

p-väärtus > 0.05 => ei ole statistiliselt oluline erinevus¶

Naiste ja meeste lõpphinded¶

In [16]:
print('Kursuse lõpphinne: \n')
hin_log['Kursuse lõpphinne'].value_counts()
Kursuse lõpphinne: 

Out[16]:
arvestatud         30
mittearvestatud    18
Name: Kursuse lõpphinne, dtype: int64

Kursuse lõpphinded¶

In [17]:
x = [
    hin_log['Kursuse lõpphinne'].value_counts()[0],
    hin_log['Kursuse lõpphinne'].value_counts()[1]
]
colors = ('lightgreen', 'tomato')
labels = ['Arvestatud', 'Mittearvestatud']
fig, ax = plt.subplots()
_,_,autotexts = ax.pie(x, colors=colors, labels = labels, radius=2, 
       wedgeprops={"linewidth":1, "edgecolor":"white"}, autopct='%.1f%%')
for autotext in autotexts:
    autotext.set_text(autotext.get_text().replace('.', ','))
plt.show()
fig.savefig('Diagrammid/lõpphinne_kursusel.png', format='png', dpi=100, bbox_inches='tight')
In [18]:
hin_log.groupby(['Kursuse lõpphinne', 'Sugu']).size()
Out[18]:
Kursuse lõpphinne  Sugu
arvestatud         f       20
                   m       10
mittearvestatud    f       11
                   m        7
dtype: int64

Arvestatud lõpphinded kursusel¶

In [19]:
x = [
    hin_log.groupby(['Kursuse lõpphinne', 'Sugu']).size()[0],
    hin_log.groupby(['Kursuse lõpphinne', 'Sugu']).size()[1]
]
colors = ('orange', 'skyblue')
labels = ['Naised', 'Mehed']
fig, ax = plt.subplots()
_,_,autotexts = ax.pie(x, colors=colors, labels = labels, radius=2, 
       wedgeprops={"linewidth":1, "edgecolor":"white"}, autopct='%.1f%%')
for autotext in autotexts:
    autotext.set_text(autotext.get_text().replace('.', ','))
plt.show()

Mittearvestatud lõpphinded kursusel¶

In [20]:
x = [
    hin_log.groupby(['Kursuse lõpphinne', 'Sugu']).size()[2],
    hin_log.groupby(['Kursuse lõpphinne', 'Sugu']).size()[3]
]
colors = ('orange', 'skyblue')
labels = ['Naised', 'Mehed']
fig, ax = plt.subplots()
_,_,autotexts = ax.pie(x, colors=colors, labels = labels, radius=2, 
       wedgeprops={"linewidth":1, "edgecolor":"white"}, autopct='%.1f%%')
for autotext in autotexts:
    autotext.set_text(autotext.get_text().replace('.', ','))
plt.show()
In [21]:
arvestatudN = 20
mitteN = 11
arvestatudM = 10
mitteM = 7

Naiste lõpphinded¶

In [22]:
x = [arvestatudN, mitteN]
colors = ('lightgreen', 'tomato')
labels = ['Arvestatud', 'Mittearvestatud']
fig, ax = plt.subplots()
_,_,autotexts = ax.pie(x, colors=colors, labels = labels, radius=2, 
       wedgeprops={"linewidth":1, "edgecolor":"white"}, autopct='%.1f%%')
for autotext in autotexts:
    autotext.set_text(autotext.get_text().replace('.', ','))
plt.show()

Meeste lõpphinded¶

In [23]:
x = [arvestatudM, mitteM]
colors = ('lightgreen', 'tomato')
labels = ['Arvestatud', 'Mittearvestatud']
fig, ax = plt.subplots()
_,_,autotexts = ax.pie(x, colors=colors, labels = labels, radius=2, 
       wedgeprops={"linewidth":1, "edgecolor":"white"}, autopct='%.1f%%', textprops={'fontsize':12})
for autotext in autotexts:
    autotext.set_text(autotext.get_text().replace('.', ','))
plt.show()
In [24]:
arvestatudN = 20
mitteN = 11
arvestatudM = 10
mitteM = 7

m = 17
mehed = [10, 7]
n = 31
naised = [20, 11]

men = [(i/m)*100 for i in mehed]
women = [(i/n)*100 for i in naised]
In [25]:
import locale
locale.setlocale(locale.LC_ALL, 'de_DE')

labels = ['arvestatud', 'mittearvestatud']

x = np.arange(len(labels))
width= 0.35

fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, men, width, label='Mehed')
rects2 = ax.bar(x + width/2, women, width, label='Naised')

ax.set_xticks(x, labels)
ax.legend()

for r in rects1:
    h = r.get_height()
    ax.annotate("{:#.3n}%".format(h),(r.get_x() + r.get_width()/2, h+.05),ha="center",va="bottom")
    
for r in rects2:
    h = r.get_height()
    ax.annotate("{:#.3n}%".format(h),(r.get_x() + r.get_width()/2, h+.05),ha="center",va="bottom")

ax.set_ylim([0, 100])
ax.set_yticklabels(['{:,.0f}'.format(x) + '%' for x in ax.get_yticks()])
fig.tight_layout()
fig.savefig('Diagrammid/naised_mehed_lõpphinded.png', format='png', dpi=100)
plt.show()
C:\Users\Nora\AppData\Local\Temp\ipykernel_15512\925079919.py:25: UserWarning: FixedFormatter should only be used together with FixedLocator
  ax.set_yticklabels(['{:,.0f}'.format(x) + '%' for x in ax.get_yticks()])

T-test¶

In [26]:
stats.ttest_ind(mehed, naised)
Out[26]:
Ttest_indResult(statistic=-1.4757295747452437, pvalue=0.2780051276188445)

p-väärtus > 0.05 => ei ole statistiliselt oluline erinevus¶

In [27]:
# Arvestatud osalejad
hin_log_arvestatud = hin_log.loc[hin_log['Kursuse lõpphinne'] == 'arvestatud']
print(hin_log_arvestatud.sort_values(['Logide arv']))
print()
print('Keskmine arv logisid',hin_log_arvestatud['Logide arv'].mean())
   Nimi  Hinne (Punktid) Kursuse lõpphinne  Logide arv Sugu
2    Dm             39.0        arvestatud         243    m
36   Af             40.0        arvestatud         253    f
20   Mm             40.0        arvestatud         257    m
15   Tm             40.0        arvestatud         262    m
47   Jm             39.0        arvestatud         270    m
22   Hf             39.0        arvestatud         278    f
10   rf             40.0        arvestatud         294    f
43   nf             38.0        arvestatud         295    f
44   Im             40.0        arvestatud         308    m
12   tf             40.0        arvestatud         309    f
31   Pf             39.0        arvestatud         309    f
32   sf             40.0        arvestatud         313    f
0    Üf             39.0        arvestatud         327    f
17   of             39.0        arvestatud         356    f
33   ef             38.0        arvestatud         357    f
46   Em             40.0        arvestatud         377    m
5    Rm             39.0        arvestatud         378    m
16   Mf             40.0        arvestatud         392    f
14   Kf             39.0        arvestatud         423    f
42   af             40.0        arvestatud         431    f
29   if             40.0        arvestatud         437    f
21   Am             40.0        arvestatud         439    m
34   Df             39.0        arvestatud         443    f
1    lf             40.0        arvestatud         457    f
35   Ef             39.0        arvestatud         457    f
23   im             40.0        arvestatud         468    m
30   Vm             39.0        arvestatud         473    m
40   jf             39.0        arvestatud         481    f
3    Nf             39.0        arvestatud         608    f
37   Cf             40.0        arvestatud         803    f

Keskmine arv logisid 383.26666666666665

Hinne arvestatud:¶

  • Väikseim arv logisid: 243
  • Suurim arv logisid: 803
  • Keskmine arv logisid: 383
In [28]:
# Mittearvestatud osalejad
hin_log_mittearvestatud = hin_log.loc[hin_log['Kursuse lõpphinne'] == 'mittearvestatud']
print(hin_log_mittearvestatud.sort_values(['Logide arv']))
print()
print('Keskmine logide arv',hin_log_mittearvestatud['Logide arv'].mean())
   Nimi  Hinne (Punktid) Kursuse lõpphinne  Logide arv Sugu
19    -              0.0   mittearvestatud           0    f
9     -              0.0   mittearvestatud           0    f
8     -              0.0   mittearvestatud           0    f
45    -              0.0   mittearvestatud           0    f
4    rm              0.0   mittearvestatud          26    m
24   gf              9.0   mittearvestatud          38    f
13   Km             10.0   mittearvestatud         108    m
7    Om             20.0   mittearvestatud         127    m
38   Sf             30.0   mittearvestatud         159    f
41   õm             20.0   mittearvestatud         179    m
26   df             30.0   mittearvestatud         200    f
6    am             30.0   mittearvestatud         217    m
27   em             34.0   mittearvestatud         222    m
25   Lf             20.0   mittearvestatud         264    f
18   Of              9.5   mittearvestatud         270    f
39   nm             38.0   mittearvestatud         275    m
28   tf             30.0   mittearvestatud         322    f
11   Tf             37.0   mittearvestatud         686    f

Keskmine logide arv 171.83333333333334

Hinne mittearvestatud:¶

  • Väikseim arv logisid: 0
  • Suurim arv logisid: 686
  • Keskmine arv logisid: 172