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
# Logide fail
logs = pd.read_csv('logs.csv')
logs_copy = logs.copy()
# 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)
# hinne_vs_logid.csv on autori koostatud fail
hin_log = pd.read_csv("Hinded_logid.csv")
# 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)
# 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)
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 %
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')
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
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
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)
male = hin_log.query('Sugu == "m"')['Logide arv']
female = hin_log.query('Sugu == "f"')['Logide arv']
hin_log.groupby('Sugu').describe()
| 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 |
# 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)
# Homogeneity of Variances Assumption
# Kas k valimi dispersioonid on võrdsed -> dispersiooni homogeensus
stats.levene(male, female)
LeveneResult(statistic=1.600929335033337, pvalue=0.21214345971382076)
stats.ttest_ind(male, female)
Ttest_indResult(statistic=-0.9418952315382957, pvalue=0.35116680088708296)
print('Kursuse lõpphinne: \n')
hin_log['Kursuse lõpphinne'].value_counts()
Kursuse lõpphinne:
arvestatud 30 mittearvestatud 18 Name: Kursuse lõpphinne, dtype: int64
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')
hin_log.groupby(['Kursuse lõpphinne', 'Sugu']).size()
Kursuse lõpphinne Sugu
arvestatud f 20
m 10
mittearvestatud f 11
m 7
dtype: int64
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()
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()
arvestatudN = 20
mitteN = 11
arvestatudM = 10
mitteM = 7
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()
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()
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]
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()])
stats.ttest_ind(mehed, naised)
Ttest_indResult(statistic=-1.4757295747452437, pvalue=0.2780051276188445)
# 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
# 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