Compare commits

...

15 Commits

Author SHA1 Message Date
s45156
8f147230c8 Poprawa task03 z labs04 2018-01-24 12:36:03 +01:00
s45156
2d6ac6ef66 Poprawa task02 z labs04 2018-01-24 12:06:54 +01:00
Kamil
e1c6d662fd labs 06 2018-01-13 19:06:04 +01:00
s45156
7fa12549e1 labs 05 & 06 2017-12-16 13:01:49 +01:00
s45156
6368f1bf8b Merge branch 'master' of https://git.wmi.amu.edu.pl/tdwojak/Python2017 2017-12-16 09:02:40 +01:00
s45156
b4dd74a5ca praca domowa - labs03 & labs04 2017-12-13 10:31:24 +01:00
s45156
940596a57f changed file task 03 2017-12-03 15:36:37 +01:00
s45156
8331a76115 changed file task 03 2017-12-03 15:09:31 +01:00
s45156
e01ee1e58c Merge branch 'master' of https://git.wmi.amu.edu.pl/tdwojak/Python2017 2017-12-03 13:30:55 +01:00
s45156
20d7685a3a changed file task 03 2017-12-02 15:34:20 +01:00
s45156
105364bf8f Merge branch 'master' of https://git.wmi.amu.edu.pl/tdwojak/Python2017 2017-12-02 15:09:05 +01:00
s45156
587c6d52a6 changed file task 09 2017-11-23 18:55:40 +01:00
Kamil
121db08b43 Updated task files 2017-11-23 17:47:55 +01:00
s45156
7ddeb4d38c changed files 2017-11-19 15:44:59 +01:00
s45156
9de284e666 changed files 2017-11-19 14:58:36 +01:00
27 changed files with 453 additions and 60 deletions

12
.gitignore vendored
View File

@ -1,12 +0,0 @@
# wiki files
Python2017.wiki/*
# Jupyter Files
*/.ipynb_checkpoints/*
# Rope files
.ropeproject
*/.ropeproject
# Labs temp files
labs03/haslo2.txt

View File

@ -7,7 +7,7 @@ która zawiera tylko elementy z list o parzystych indeksach.
"""
def even_elements(lista):
pass
return lista[::2]
def tests(f):

View File

@ -5,8 +5,11 @@
Napisz funkcję days_in_year zwracającą liczbę dni w roku (365 albo 366).
"""
def days_in_year(days):
pass
def days_in_year(year):
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
return 366
else:
return 365
def tests(f):
inputs = [[2015], [2012], [1900], [2400], [1977]]

View File

@ -13,7 +13,14 @@ jak 'set', która przechowuje elementy bez powtórzeń.)
def oov(text, vocab):
pass
list_of_words = []
text_splitted = text.split()
# print(text_splitted)
for word in text_splitted:
if word.lower() not in vocab:
list_of_words.append(word)
return list_of_words

View File

@ -7,7 +7,18 @@ Jeśli podany argument jest mniejszy od 1 powinna być zwracana wartość 0.
"""
def sum_from_one_to_n(n):
pass
# if n < 1:
# return 0
# else:
# return sum(range(n + 1))
ranges = range(n + 1)
if n < 1:
return 0
else:
return sum(ranges)
def tests(f):

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import math
"""
Napisz funkcję euclidean_distance obliczającą odległość między
dwoma punktami przestrzeni trójwymiarowej. Punkty dane jako
@ -10,7 +10,10 @@ np. odległość pomiędzy punktami (0, 0, 0) i (3, 4, 0) jest równa 5.
"""
def euclidean_distance(x, y):
pass
dist = [(a - b) ** 2 for a, b in zip(x, y)]
dist = math.sqrt(sum(dist))
return dist
def tests(f):
inputs = [[(2.3, 4.3, -7.5), (2.3, 8.5, -7.5)]]

View File

@ -10,7 +10,11 @@ ma być zwracany napis "It's not a Big 'No!'".
"""
def big_no(n):
pass
if n < 5:
return "It's not a Big 'No!'"
else:
o_creater = 'O'*n
return 'N'+o_creater+'!'
def tests(f):
inputs = [[5], [6], [2]]

View File

@ -6,7 +6,11 @@ Napisz funkcję char_sum, która dla zadanego łańcucha zwraca
sumę kodów ASCII znaków.
"""
def char_sum(text):
pass
suma = 0
for n in text:
asco = ord(n)
suma += asco
return suma
def tests(f):
inputs = [["this is a string"], ["this is another string"]]

View File

@ -7,7 +7,15 @@ przez 3 lub 5 mniejszych niż n.
"""
def sum_div35(n):
pass
new_range = range(n)
new_list = []
suma = 0
for n in new_range:
if n % 3 == 0 or n % 5 == 0:
new_list.append(n)
for x in new_list:
suma += x
return suma
def tests(f):
inputs = [[10], [100], [3845]]

View File

@ -9,7 +9,16 @@ Np. leet('leet') powinno zwrócić '1337'.
def leet_speak(text):
pass
let_dict = {'e': '3', 'l': '1', 'o': '0', 't': '7'}
new_word = []
for n in text:
if n in let_dict:
x = let_dict[n]
new_word.append(x)
else:
new_word.append(n)
new_word_joined = ''.join(new_word)
return new_word_joined
def tests(f):

View File

@ -9,7 +9,16 @@ na wielką. Np. pokemon_speak('pokemon') powinno zwrócić 'PoKeMoN'.
def pokemon_speak(text):
pass
text_list = []
i = 0
while i != len(text):
text_list.append(text[i].upper())
i += 1
if i != len(text):
text_list.append(text[i])
i += 1
text_list_joined = ''.join(text_list)
return text_list_joined
def tests(f):

View File

@ -9,7 +9,10 @@ Oba napisy będą składać się wyłacznie z małych liter.
"""
def common_chars(string1, string2):
pass
string1_list = set([n for n in string1 if n != ' '])
string2_list = set([n for n in string2 if n != ' '])
common_letter_list = sorted([n for n in string1_list if n in string2_list and n != ' '])
return common_letter_list
def tests(f):

11
labs03/task01.py Normal file
View File

@ -0,0 +1,11 @@
a = [1, 2, 3]
b = 123
c = 'ala ma kota'
d = 123.13113
d = 'kfidf'
print(id(a))
print(id(b))
print(id(c))
print(id(d))

13
labs03/task02.py Normal file
View File

@ -0,0 +1,13 @@
def fibonacci(n):
"""Fibonacci numbers generator, first n"""
a, b, counter = 0, 1, 0
while True:
if (counter > n): return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(5)
for x in f:
print (x)

15
labs03/task03.py Normal file
View File

@ -0,0 +1,15 @@
# **ćwiczenie 3**
# Strona ``https://api.fixer.io/latest`` udostępnia kursy różnych walut w stosunku do euro. Napisz skrypt, który:
# * pobierze zawartość JSONa. Wykorzystaj bibliotekę ``requests`` (http://docs.python-requests.org/en/master/).
# * korzystając z biblioteki ``json`` przekształć go do obiketu typu JSON.
# * Wyświetl wartość kursu EUR do PLN.
import requests
import json
response = requests.get('https://api.fixer.io/latest')
content = response.content
json_object = json.loads(content)
currencies_vs_euro_dict = json_object.get("rates")
pln = currencies_vs_euro_dict.get("PLN")
print(pln)

31
labs03/task04.py Normal file
View File

@ -0,0 +1,31 @@
from weather import Weather
import datetime
def fahrenheit_to_celsius(temperature_in_fahrenheit):
temperature_in_celsius = (float(temperature_in_fahrenheit - 32) / (9/5))
return round(temperature_in_celsius, 2)
weather = Weather()
city = 'Poznan'
weather_by_location = weather.lookup_by_location(city)
condition = weather_by_location.condition()
forecasts = weather_by_location.forecast()
new_dict = {}
polish_days = ['Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota', 'Niedziela']
for forecast in forecasts:
data = forecast.date()
lowest = forecast.low()
new_dict.update({data: lowest})
min_temp_day = min(new_dict, key=new_dict.get)
new_date = datetime.datetime.strptime(min_temp_day, "%d %b %Y")
day_of_week = new_date.weekday()
min_temp = new_dict[min_temp_day]
min_temp_in_celsius = fahrenheit_to_celsius(float(min_temp))
print('Current temperature in {0}: {1} Fahrenheit. It is {2}.'.format(city, condition.temp(), condition.text().lower()))
print('Najzimniejszy dzień: {0}. Temperatura w tym dniu to {1} Celsjusza'.format(polish_days[day_of_week], min_temp_in_celsius))

30
labs03/task05.py Normal file
View File

@ -0,0 +1,30 @@
import glob
import pathlib as p
# set the path to directory
my_path = 'C:/Users/**/*.bleu'
new_dict = {}
# match files in given directory
for name in glob.glob(my_path, recursive=True):
# for each file in directory set it's path and open the file
path_to_file = p.Path(name)
with path_to_file.open() as f:
# read 1st line in each file
line = f.readline()
# split this line using ',' as separator
line_splitted = line.split(',')
# in this case BLUE = YY.YY is the first element of the list,
# now we have to split it by ' ' and add it to dictionary
# which key will be the file name and value will be that value
for i, j in enumerate(line_splitted):
if i == 0:
blue_splitted = j.split(' ')
second_element = float(blue_splitted[2])
# in that case searched value is on 3rd position (2nd list element)
new_dict.update({path_to_file: second_element})
print(new_dict)
# find max key (path) searching by values
maximum = max(new_dict, key=new_dict.get)
print(maximum)

View File

@ -177,8 +177,7 @@
" super().__init__(vertexes)\n",
" \n",
" def czy_jestem_kwadratem(self):\n",
" pass\n",
" "
" pass"
]
},
{
@ -309,13 +308,13 @@
{
"ename": "AttributeError",
"evalue": "'Parser' object has no attribute '__parse'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-6-80ee186598d3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mParser\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__parse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m: 'Parser' object has no attribute '__parse'"
]
],
"output_type": "error"
}
],
"source": [
@ -465,13 +464,13 @@
{
"ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: 'nieistniejący_plik.txt'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-20-41928d542bef>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"nieistniejący_plik.txt\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplik\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mplik\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'nieistniejący_plik.txt'"
]
],
"output_type": "error"
}
],
"source": [
@ -614,13 +613,13 @@
{
"ename": "MyError",
"evalue": "Coś poszło nie tak!",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mMyError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-36-4fb306b42ebc>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mMyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Coś poszło nie tak!\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mMyError\u001b[0m: Coś poszło nie tak!"
]
],
"output_type": "error"
}
],
"source": [
@ -634,7 +633,9 @@
"collapsed": true
},
"outputs": [],
"source": []
"source": [
""
]
}
],
"metadata": {
@ -647,7 +648,7 @@
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
"version": 3.0
},
"file_extension": ".py",
"mimetype": "text/x-python",
@ -658,5 +659,5 @@
}
},
"nbformat": 4,
"nbformat_minor": 2
}
"nbformat_minor": 0
}

View File

@ -13,6 +13,4 @@ Stwórz klasę ``Point``, która będzie reprezentować punkt w przestrzeni wiel
* Napisz metodę add, która dida dwa punkty po współrzędnych i zwróci obiekt typu ``Punkt``. Zaimplementuj własny wyjątek ``DimensionError``, który zostaje wyrzucony, jeżeli dodawany punkt ma inny wymiar.
* Napisz metodę ``to\_string``, która zwróci łancuch znakowy, który w czytelny sposób przedstawi punkt.
* Napisz metodę __len__, która zwróci liczbę współrzędnych punktu. Zobacz, czy możesz teraz wywołać funkcję len na obiekcie typy punkt.
* Napisz metodę __str__, która bedzie działać dokładnie tak samo jak metoda ``to_string``. Wyświetl obiekt typy Point korzystając z funkcji print.
* Napisz metodę __str__, która bedzie działać dokładnie tak samo jak metoda ``to_string``. Wyświetl obiekt typy Point korzystając z funkcji print.

View File

@ -1,3 +1,31 @@
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# **ćwiczenie 1**
# Napisz funckję ``is_numeric``, która sprawdzi, czy każdy element z przekazanej listy jest typu int lub float. Wykorzystaj funcję ``isinstance()`` (https://docs.python.org/2/library/functions.html#isinstance).
def is_numeric(another_list):
"""
Check whether each element of the list is an instance of int or float
:param another_list:
:return: True or False
"""
for i in another_list:
if isinstance(i, bool):
return False
elif isinstance(i, (int, float)):
i += 1
else:
return False
return True
# 2nd option
# if type(i) in (float, int):
# i += 1
# else:
# return False
# return True
# print(is_numeric([2, 1.8797, 43654354354354354354354354354354354325879]))

View File

@ -1,3 +1,40 @@
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# **ćwiczenie 2**
# Napisz prostą hierarchię klas:
# * Klasa bazowa ``Employee``, która będzie zawierać informacje o imieniu i nazwisku pracownika. Ponadto każdy pracownik otrzyma numer ``id``, który będzie unikatowy. Wykorzystaj do tego atrybut statyczny. Napisz metodę ``get_id``, która zwraca identyfikator pracownika.
# * Klasy pochodna: ``Recruiter``, która ma dodatkową mtodę ``recruit``, która jako parament przyjmuje obiekt ``Employee`` i zapisuje jego ``id`` w liście ``self.recruited``.
# * Klasa pochodna ``Programmer``. Klasa ``Programmer`` ma przyjąć w konstruktorze podstawowe informacje (imię i nazwisko) oraz obiekt rekturera. Ponadto stwórz atrybut ``recruiter``, który będzie przechowywać ``id``
class Employee:
id = 0
def __init__(self, name, surname):
Employee.id += 1
self.id = Employee.id
self.name = name
self.surname = surname
def get_id(self):
return self.id
class Recruiter(Employee):
def __init__(self, name, surname):
super().__init__(name, surname)
self.recruited = []
def recruit(self, Employee_obj):
self.recruited.append(Employee_obj.id)
class Programmer(Employee):
def __init__(self, name, surname, Recruiter_obj):
super().__init__(name, surname)
self.recruiter = Recruiter_obj.id

View File

@ -1,3 +1,58 @@
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# **ćwiczenie 3 (zadanie domowe) **
# Stwórz klasę ``Point``, która będzie reprezentować punkt w przestrzeni wielowymiarowej:
# * Konstruktor ma przyjąc tylko 1 parametr: listę współrzednych. Wykorzystaj funkcję z pierwszego zadania, żeby sprawdzić, czy lista zawiera wyłącznie liczby.
# * Napisz metodę add, która dida dwa punkty po współrzędnych i zwróci obiekt typu ``Punkt``. Zaimplementuj własny wyjątek ``DimensionError``, który zostaje wyrzucony, jeżeli dodawany punkt ma inny wymiar.
# * Napisz metodę ``to\_string``, która zwróci łancuch znakowy, który w czytelny sposób przedstawi punkt.
# * Napisz metodę __len__, która zwróci liczbę współrzędnych punktu. Zobacz, czy możesz teraz wywołać funkcję len na obiekcie typy punkt.
# * Napisz metodę __str__, która bedzie działać dokładnie tak samo jak metoda ``to_string``. Wyświetl obiekt typy Point korzystając z funkcji print.
from labs04.task01 import is_numeric
class Point:
coordinates = []
def __init__(self, coordinates):
if is_numeric(coordinates):
self.coordinates = coordinates
else:
raise DimensionError("Coordinates are not numeric")
def to_string(self):
return str(self.coordinates)
def __len__(self):
return len(self.coordinates)
def __str__(self):
return self.to_string()
class DimensionError(Exception):
def __init__(self, text):
self.text = text
def __str__(self):
return self.text
def add(point_1, point_2):
if len(point_1.coordinates) != len(point_2.coordinates):
raise DimensionError("Coordinates have different dimensions")
else:
new_coordinates = [x + y for x, y in zip(point_1.coordinates, point_2.coordinates)]
return Point(new_coordinates)
if __name__ == "__main__":
new_point = Point([5, 10, 12, 6])
new_point.to_string()
new_point.__len__()
new_point_2 = Point([12, 23, 21, 16])
print(new_point_2.__str__())
new_point_3 = add(new_point, new_point_2)
print('1st point =', new_point)
print('2nd point =', new_point_2)
print('1st point + 2nd point = ', new_point_3)

View File

@ -16,5 +16,4 @@ Plik ``task04.py`` zawiera kod prorgamu, który działa jak popularne narzędzie
* Jeżeli został podany przełącznik `-l`, to to ma zostać zwrócona tylko liczba linii.
* Jeżeli został podany przełącznik `-w`, to to ma zostać zwrócona tylko liczba słów.
* Jeżeli został podany przełącznik `-c`, to to ma zostać zwrócona tylko liczba znaków.
* Jeżeli został podany inny argument, to należy założyć że jest to nazwa pliku i potraktować ten plik jako wejście do programu.
* Jeżeli został podany inny argument, to należy założyć że jest to nazwa pliku i potraktować ten plik jako wejście do programu.

View File

@ -2,10 +2,13 @@
# -*- coding: utf-8 -*-
def suma(liczby):
pass
sm = 0
for i in liczby:
sm += i
return sm
def main():
print(summa([1, 2, 3, 4]))
print(suma([1, 2, 3, 4]))
if __name__ == "__main__":
main()

View File

@ -0,0 +1,10 @@
import task00
import sys
def main():
x = sys.argv
if __name__ == "__main__":
main()

View File

@ -846,7 +846,9 @@
"collapsed": true
},
"outputs": [],
"source": []
"source": [
""
]
}
],
"metadata": {
@ -859,7 +861,7 @@
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
"version": 2.0
},
"file_extension": ".py",
"mimetype": "text/x-python",
@ -870,5 +872,5 @@
}
},
"nbformat": 4,
"nbformat_minor": 2
}
"nbformat_minor": 0
}

View File

@ -1,14 +1,50 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
## Zadania
# ** zad. 0 **
# Sprawdź, czy masz zainstalowany pakiet ``pandas``. Jeżeli nie, zainstaluj go.
#
# ** zad. 2 (domowe) **
# Jest to zadanie złożone, składające się z kilku części. Całość będzie opierać się o dane zawarte w pliku *mieszkania.csv* i dotyczą cen mieszkań w Poznaniu kilka lat temu.
# 1, Otwórz plik ``task02.py``, który zawiera szkielet kodu, który będziemy rozwijać w tym zadaniu.
# 1. Napisz funkcje, która wczyta zestaw danych z pliku *mieszkania.csv* i zwróci obiekt typu *DataFrame*. Jeżeli wszystko zostało zrobione poprawnie, powinno się wyśtwietlić 5 pierwszych wierszy.
# 1. Uzupełnij funkcję ``most_common_room_number``, która zwróci jaka jest najpopularniejsza liczba pokoi w ogłoszeniach. Funkcji powinna zwrócić liczbę całkowitą.
# 1. Uzupełnij kod w funkcji ``cheapest_flats(dane, n)``, która wzróci *n* najtańszych ofert mieszkań. Wzrócony obiekt typu ``DataFrame``.
# 1. Napisz funkcje ``find_borough(desc)``, która przyjmuje 1 argument typu *string* i zwróci jedną z dzielnic zdefiniowaną w liście ``dzielnice``. Funkcja ma zwrócić pierwszą (wzgledem kolejności) nazwę dzielnicy, która jest zawarta w ``desc``. Jeżeli żadna nazwa nie została odnaleziona, zwróć *Inne*.
# 1. Dodaj kolumnę ``Borough``, która będzie zawierać informacje o dzielnicach i powstanie z kolumny ``Localization``. Wykorzystaj do tego funkcję ``find_borough``.
# 1. Uzupełnił funkcje ``write_plot``, która zapisze do pliku ``filename`` wykres słupkowy przedstawiający liczbę ogłoszeń mieszkań z podziałem na dzielnice.
# 1. Napisz funkcje ``mean_price``, która zwróci średnią cenę mieszkania ``room_numer``-pokojowego.
# 1. Uzupełnij funkcje ``find_13``, która zwróci listę dzielnic, które zawierają ofertę mieszkanie na 13 piętrze.
# 1. Napisz funkcje ``find_best_flats``, która zwróci wszystkie ogłoszenia mieszkań, które znajdują się na Winogradach, mają 3 pokoje i są położone na 1 piętrze.
# 1. *(dodatkowe)*: Korzystając z pakietu *sklearn* zbuduj model regresji liniowej, która będzie wyznaczać cenę mieszkania na podstawie wielkości mieszkania i liczby pokoi.
import pandas as pd
import re
from sklearn import *
import numpy as np
def wczytaj_dane():
pass
flats_data = pd.read_csv('mieszkania.csv', encoding='utf-8', sep=',', index_col='Id')
flats_as_frame = pd.DataFrame(flats_data)
return flats_as_frame
def most_common_room_number(dane):
pass
rooms = dane['Rooms']
rooms_counter = rooms.value_counts()
rooms_counter_dict = rooms_counter.to_dict()
max_room = max(rooms_counter_dict, key=rooms_counter_dict.get)
return max_room
def cheapest_flats(dane, n):
pass
sorted_flats_data = dane.sort_values(by=['Expected'])
first_n_cheapest_flats = sorted_flats_data[:n]
return first_n_cheapest_flats
def find_borough(desc):
dzielnice = ['Stare Miasto',
@ -19,23 +55,95 @@ def find_borough(desc):
'Winogrady',
'Miłostowo',
'Dębiec']
pass
# using regular expression to get rid of all special characters with the exception of accents
final_desc_wo_spaces = re.sub(u'[^a-zA-Z0-9áąéęćíóúÁÉÍÓÚâêîôÂÊÎÔńãõÃÕçÇżź:]', ' ', desc)
final_desc_wo_spaces = final_desc_wo_spaces.split()
for n in final_desc_wo_spaces:
if n in dzielnice:
return n
# horrible hack to match 'Stare' with 'Miasto'
elif n == 'Stare':
return 'Stare Miasto'
return "Inne"
def add_borough(dane):
pass
dane['Borough'] = dane['Location'].apply(find_borough)
return dane
def write_plot(dane, filename):
pass
bar_plot_data = dane['Borough']
counter = bar_plot_data.value_counts()
my_plot = counter.plot(kind='bar', title='Liczba mieszkań w Poznaniu według dzielnicy', figsize=(12, 12))
my_plot.set_xlabel('Dzielnica')
my_plot.set_ylabel('Liczebność')
fig = my_plot.get_figure()
fig.savefig(filename + '.png')
def mean_price(dane, room_number):
pass
filtered_data_mean = dane[dane['Rooms'] == room_number]['Expected'].mean()
return filtered_data_mean
def find_13(dane):
pass
filtered_data_floor_13 = dane[dane['Floor'] == 13]['Borough'].values
return filtered_data_floor_13
def find_best_flats(dane):
pass
filtered_data = dane.loc[(dane['Borough'] == 'Winogrady') & dane['Rooms'].isin([3]) & dane['Floor'].isin([1])]
return filtered_data['Description']
def percentile_based_outlier(dane, confidence=95):
"""
Filters data set by given confidence criterion
:param dane:
:param confidence:
:return:
"""
diff = (100 - confidence) / 2.0
minval, maxval = np.percentile(dane['Expected'], [diff, 100 - diff])
return dane[(dane['Expected'] > minval) & (dane['Expected'] < maxval)]
def linear_regression(dane, powierzchnia, liczba_pokoi):
# remove outliers and define the data/predictors as the pre-set feature name
dane_filtered = percentile_based_outlier(dane)
features = dane_filtered[['SqrMeters', 'Rooms']]
target = dane_filtered['Expected']
# print(min(target), max(target))
x = features
y = target
lm = linear_model.LinearRegression()
lm.fit(x, y)
model_score = lm.score(x, y)
# calculate mean squared error
mse = np.mean((dane_filtered['Expected'] - lm.predict(x)) ** 2)
price = lm.intercept_ + powierzchnia * lm.coef_[0] + liczba_pokoi * lm.coef_[1]
co = list(zip(x.columns, lm.coef_))
coef = pd.DataFrame(co, columns=['feature', 'coefficient'])
print('Features and coefficients \n {}'.
format(coef))
print('Estimated intercept coefficient: {}'.
format(lm.intercept_))
print('Number of coefficients {}'.
format(lm.coef_)) # list of coefficients
print('R^2 of the prediction: {}'.
format(model_score))
print('Mean squared error {}'.
format(mse))
print('{} squared meter flat, which has {} rooms with should cost {} PLN'.
format(powierzchnia, liczba_pokoi, round(price, 4)))
def main():
dane = wczytaj_dane()
@ -45,10 +153,13 @@ def main():
.format(most_common_room_number(dane)))
print("{} to najłądniejsza dzielnica w Poznaniu."
.format(find_borough("Grunwald i Jeżyce"))))
.format(find_borough("Grunwald i Jeżyce")))
print("Średnia cena mieszkania 3-pokojowego, to: {}"
.format(mean_price(dane, 3)))
linear_regression(dane, 100, 4)
if __name__ == "__main__":
main()