forked from tdwojak/Python2017
labs 06
This commit is contained in:
parent
7fa12549e1
commit
e1c6d662fd
12
.gitignore
vendored
12
.gitignore
vendored
@ -1,12 +0,0 @@
|
||||
# wiki files
|
||||
Python2017.wiki/*
|
||||
|
||||
# Jupyter Files
|
||||
*/.ipynb_checkpoints/*
|
||||
|
||||
# Rope files
|
||||
.ropeproject
|
||||
*/.ropeproject
|
||||
|
||||
# Labs temp files
|
||||
labs03/haslo2.txt
|
@ -1,12 +1,13 @@
|
||||
def Fibo(n):
|
||||
if n == 0:
|
||||
yield 0
|
||||
if n == 1:
|
||||
yield 0
|
||||
else:
|
||||
yield (Fibo - 1) + (Fibo - 2)
|
||||
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
|
||||
|
||||
|
||||
|
||||
for i in Fibo(10):
|
||||
print (i)
|
||||
f = fibonacci(5)
|
||||
for x in f:
|
||||
print (x)
|
@ -177,8 +177,7 @@
|
||||
" super().__init__(vertexes)\n",
|
||||
" \n",
|
||||
" def czy_jestem_kwadratem(self):\n",
|
||||
" pass\n",
|
||||
" "
|
||||
" pass"
|
||||
]
|
||||
},
|
||||
{
|
||||
@ -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
|
||||
}
|
@ -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.
|
@ -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
|
||||
}
|
135
labs06/task02.py
135
labs06/task02.py
@ -1,30 +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():
|
||||
flats_data = pd.read_csv('mieszkania.csv',
|
||||
sep=',', # separator
|
||||
index_col='Id') # ustawienie indeksu na kolumnę 'Id'
|
||||
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):
|
||||
rooms = dane['Rooms']
|
||||
counter = rooms.value_counts()
|
||||
# new_dict = {}
|
||||
# for i in counter:
|
||||
# new_dict.update([i])
|
||||
# print (new_dict)
|
||||
print (max(counter))
|
||||
|
||||
|
||||
|
||||
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',
|
||||
@ -35,27 +55,99 @@ 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()
|
||||
# print(dane[:5])
|
||||
print(dane[:5])
|
||||
|
||||
print("Najpopularniejsza liczba pokoi w mieszkaniu to: {}"
|
||||
.format(most_common_room_number(dane)))
|
||||
@ -66,5 +158,8 @@ def main():
|
||||
print("Średnia cena mieszkania 3-pokojowego, to: {}"
|
||||
.format(mean_price(dane, 3)))
|
||||
|
||||
linear_regression(dane, 100, 4)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
Loading…
Reference in New Issue
Block a user