## 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