forked from tdwojak/Python2019
Add lab 03
This commit is contained in:
parent
c8a65f2b90
commit
b51244f24e
99
labs03/dane.txt
Normal file
99
labs03/dane.txt
Normal file
@ -0,0 +1,99 @@
|
||||
95
|
||||
46
|
||||
1
|
||||
35
|
||||
44
|
||||
50
|
||||
84
|
||||
30
|
||||
28
|
||||
48
|
||||
95
|
||||
45
|
||||
86
|
||||
90
|
||||
48
|
||||
6
|
||||
68
|
||||
46
|
||||
36
|
||||
19
|
||||
3
|
||||
37
|
||||
25
|
||||
74
|
||||
8
|
||||
23
|
||||
71
|
||||
91
|
||||
79
|
||||
74
|
||||
84
|
||||
71
|
||||
93
|
||||
85
|
||||
3
|
||||
89
|
||||
65
|
||||
64
|
||||
15
|
||||
18
|
||||
33
|
||||
39
|
||||
16
|
||||
88
|
||||
11
|
||||
72
|
||||
54
|
||||
88
|
||||
86
|
||||
72
|
||||
22
|
||||
63
|
||||
43
|
||||
63
|
||||
6
|
||||
75
|
||||
90
|
||||
92
|
||||
46
|
||||
48
|
||||
24
|
||||
99
|
||||
50
|
||||
9
|
||||
10
|
||||
48
|
||||
47
|
||||
22
|
||||
25
|
||||
99
|
||||
72
|
||||
41
|
||||
70
|
||||
74
|
||||
90
|
||||
92
|
||||
15
|
||||
28
|
||||
34
|
||||
12
|
||||
48
|
||||
8
|
||||
93
|
||||
21
|
||||
97
|
||||
3
|
||||
15
|
||||
77
|
||||
65
|
||||
30
|
||||
3
|
||||
44
|
||||
70
|
||||
71
|
||||
25
|
||||
87
|
||||
5
|
||||
63
|
||||
24
|
80
labs03/parse_results.py
Executable file
80
labs03/parse_results.py
Executable file
@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Parse MTurk output file.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import collections
|
||||
import csv
|
||||
import glob
|
||||
|
||||
import numpy as np
|
||||
|
||||
|
||||
def map_formality(text: str):
|
||||
values = {"Very Formal": 3,
|
||||
"Formal": 2,
|
||||
"Somewhat Formal": 1,
|
||||
"Neutral": 0,
|
||||
"Somewhat Informal": -1,
|
||||
"Informal": -2,
|
||||
"Very Informal": -3}
|
||||
if text in values:
|
||||
return values[text]
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def mapping(text: str):
|
||||
if text == 'Perfect':
|
||||
return 5
|
||||
elif text == 'Comprehensible':
|
||||
return 4
|
||||
elif text == 'Somewhat Comprehensible':
|
||||
return 3
|
||||
elif text == 'Incomprehensible':
|
||||
return 2
|
||||
elif text == 'Other':
|
||||
return 1
|
||||
|
||||
|
||||
def encode_quatation_marks(text):
|
||||
return text.replace('\'', ''').replace('"', '"')
|
||||
|
||||
|
||||
def read_files_from_dir(dir_name):
|
||||
data = collections.defaultdict(list)
|
||||
|
||||
for fname in glob.glob(f"./{dir_name}/formality.test.*"):
|
||||
with open(fname) as ff:
|
||||
for line in ff:
|
||||
line = line.strip()
|
||||
data[fname].append(encode_quatation_marks(line))
|
||||
return data
|
||||
|
||||
|
||||
def main():
|
||||
""" main """
|
||||
result_file = sys.argv[1]
|
||||
dir_name = sys.argv[2]
|
||||
|
||||
sent_scores = collections.defaultdict(list)
|
||||
with open(result_file) as results:
|
||||
mturk_data = csv.DictReader(results)
|
||||
for row in mturk_data:
|
||||
for i in range(1, 6):
|
||||
# sent_scores[row[f'Input.sentence_{i}']].append(mapping(row[f'Answer.Q{i}Answer']))
|
||||
sent_scores[row[f'Input.sentence_{i}']].append(map_formality(row[f'Answer.sentence_{i}_choice']))
|
||||
for sent in sent_scores:
|
||||
sent_scores[sent] = np.mean([i for i in sent_scores[sent] if i])
|
||||
|
||||
for filename, sents in read_files_from_dir(dir_name).items():
|
||||
# print([sent_scores[sent] for sent in sents])
|
||||
# print([sent_scores[sent] for sent in sents])
|
||||
print(filename, np.nanmean([sent_scores[sent] for sent in sents]))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
33
labs03/tmp.py
Normal file
33
labs03/tmp.py
Normal file
@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import numpy as np
|
||||
|
||||
with open("./dane.txt") as ff:
|
||||
x = [int(line.strip()) for line in ff]
|
||||
|
||||
print(np.mean(x))
|
||||
print(np.var(x))
|
||||
|
||||
print(min(x))
|
||||
print(max(x))
|
||||
|
||||
x_scaled = [(i - min(x)) / (max(x) - min(x)) for i in x]
|
||||
print(min(x_scaled), max(x_scaled))
|
||||
|
||||
def normalize(data):
|
||||
return [(i - np.mean(x)) / np.sqrt(np.var(x)) for i in data]
|
||||
|
||||
normalized = normalize(x)
|
||||
|
||||
print(np.mean(normalized), np.var(normalized))
|
||||
|
||||
x_binned = [i // 10 for i in x]
|
||||
|
||||
|
||||
for begin in range(0, 1 + max(x_binned)):
|
||||
if begin == 0:
|
||||
print("[ ", 10 * begin, ", ", 10 * begin + 9, "]", "+" * x_binned.count(begin))
|
||||
else:
|
||||
print("[", 10 * begin, ",", 10 * begin + 9, "]", "+" * x_binned.count(begin))
|
||||
|
26
labs03/zadania_05.md
Normal file
26
labs03/zadania_05.md
Normal file
@ -0,0 +1,26 @@
|
||||
*zad.1 *
|
||||
- Stwórz nowy skrypt Pythona i nazwij go "histogram.py"
|
||||
- Wczytaj plik "dane.txt", który jest plikiem tekstowym, w którym każdy wiersz zawiera jedną liczbę. Wynik zapisz do listy.
|
||||
- Sprawdź czy masz zainstalowaną bibliotekę `numpy`. Jeżeli nie, to zainstaluj ją.
|
||||
- Korzystając z funkcji numpy.mean i numpy.var, wyświetl na ekran średnią i wariancję z danych.
|
||||
- Python posiada wbudowane funckje `min` i `max`, które zwracają najmniejszą i największą wartość.
|
||||
- Przeskaluj dane do przedziału [0, 1] korzystając ze wzoru: x_scaled[i] = (x[i] - min(x)) / (max(x) - min(x))
|
||||
- Napisz funckję, która znormalizuje dane do rozkładu N(0,1) korzystając ze wzoru: x_normed[i] = (x[i] - mean(x)) / sqrt(var(x))
|
||||
- Upewnij się, że znormalizowane dane mają średnią równą 0, a wariancja jest równa 1.
|
||||
- Zlicz ile jest elementów z każdym, z przedziałów: [0, 9], [10, 19], [20, 29],...
|
||||
- Narysuj histogram ASCII, który dla każdego przedziału wyświetli liczbę elementów w następujący sposób:
|
||||
|
||||
```
|
||||
[ 0 , 9 ] +++++++++++
|
||||
[ 10 , 19 ] +++++++++
|
||||
[ 20 , 29 ] +++++++++++
|
||||
[ 30 , 39 ] ++++++++
|
||||
[ 40 , 49 ] ++++++++++++++
|
||||
[ 50 , 59 ] +++
|
||||
[ 60 , 69 ] +++++++
|
||||
[ 70 , 79 ] ++++++++++++++
|
||||
[ 80 , 89 ] +++++++++
|
||||
[ 90 , 99 ] +++++++++++++
|
||||
```
|
||||
|
||||
|
56
labs03/zadania_06.py
Normal file
56
labs03/zadania_06.py
Normal file
@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
"""
|
||||
zad.1
|
||||
Przepisz poniższy kod tak, aby korzystał z list składanych.
|
||||
"""
|
||||
|
||||
|
||||
elems = list(range(1024))
|
||||
fives = []
|
||||
for elem in elems:
|
||||
if elem % 5 == 0:
|
||||
fives.append(elem)
|
||||
|
||||
"""
|
||||
zad. 2 - klasy
|
||||
|
||||
- Stwórz klasę Point2D, która będzie reprezentować punkt na płaszczyźnie.
|
||||
- Napisz inicjalizator, który będzie przyjmować 2 parametry: x i y, a następnie
|
||||
przypisze te wartości do pól: self.x i self.y
|
||||
- Stwórz obiekt typu Point2D, przekazując dowolne wartości.
|
||||
- Napisz metodę `dist(self, point)`, gdzie point to będzie obiekt tupy Point2D,
|
||||
która obliczy odległość pomiędzy tymi punktami.
|
||||
- Zaimplementuj metodę `__len__(self)`, która zwróci liczbę 2.
|
||||
- Zaimplementuj metodę `__str__(self)`, który pozwoli na wyświetlenie w
|
||||
czytelny sposób obiektu.
|
||||
- Zaimplementuj metodę `__add__(self, point)`, gdzie point jest typu Point2D,
|
||||
a która zwróci nowy punkt, powstanie z dodania współrzednych obu punktów.
|
||||
- stwórz listę 4 punktów o współrzędnych: (0,0), (0, 5), (5,5), (5, 0)
|
||||
- Oblicz sumę wszystkich odległości pomiędzy tymi punktami. Spróbuj wykorzystać
|
||||
funkcje `sum` i `map`
|
||||
"""
|
||||
|
||||
"""
|
||||
zad. 3 Klasa wielokąt
|
||||
- Zaimplementuj klasę wielokąt, która będzie reprezentować zbiór punktów na
|
||||
płaszczyźnie.
|
||||
- Napisz inicjalizator `__init__(self, points)`, który będzie przyjmować jako
|
||||
argument listę punktów typy Point2D.
|
||||
- napisz metodę, która zwróci punkt środkowy figury, tj. punkt o współrzednych
|
||||
równych średnią z punktów wielokąta.
|
||||
- Stwórz przykładowy wielokąt z punktów (0,0), (0, 5), (5,5), (5, 0) i
|
||||
oblicz jego punkt środkowy.
|
||||
- Korzystając funkcji min, napisz metodę która zwróci punkt najbardziej
|
||||
wysunięty na lewo.
|
||||
- Napisz metodę, która zwróci obwód figury: spróbuj wykorzystać funkcję sum.
|
||||
"""
|
||||
|
||||
"""
|
||||
zad. 4
|
||||
- rozdziel kod w tym pliku, aby każda klasa znalazła się w osobnym pliku.
|
||||
- Zaimportuj moduły z klasami tak, aby ten plik uruchamiał się normalnie.
|
||||
- Przerób ten plik, aby wykorzystywał dyrektywe : if __name__ == '__main__'
|
||||
"""
|
Loading…
Reference in New Issue
Block a user