From 40b2bab584bb09fa40d89908df54779cbc4950b1 Mon Sep 17 00:00:00 2001 From: s441401 Date: Thu, 21 Jun 2018 00:32:47 +0200 Subject: [PATCH] modified codes for labs06 --- labs06/README.md | 28 +++++++++++++++++++--------- labs06/task02.py | 40 +++++++++++++++++++++++++--------------- labs06/tasks.py | 30 ++++++++++++++++++------------ 3 files changed, 62 insertions(+), 36 deletions(-) diff --git a/labs06/README.md b/labs06/README.md index e35b68f..de07042 100644 --- a/labs06/README.md +++ b/labs06/README.md @@ -4,15 +4,25 @@ 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. +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, 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. + 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. diff --git a/labs06/task02.py b/labs06/task02.py index 9d96016..bcc51c8 100755 --- a/labs06/task02.py +++ b/labs06/task02.py @@ -1,14 +1,21 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +import pandas as pd +import matplotlib.pyplot as plt + def wczytaj_dane(): - pass + df = pd.read_csv("./mieszkania.csv", sep=',', header=0) + return df + def most_common_room_number(dane): - pass + return dane['Rooms'].value_counts().idxmax() + def cheapest_flats(dane, n): - pass + return dane.sort_values(by='Expected').head(n) + def find_borough(desc): dzielnice = ['Stare Miasto', @@ -19,36 +26,39 @@ def find_borough(desc): 'Winogrady', 'Miłostowo', 'Dębiec'] - pass + return next((desc for i in dzielnice if desc in i), 'Inne') def add_borough(dane): - pass + dane['Borough'] = dane['Location'].apply(find_borough) + def write_plot(dane, filename): - pass + dane['Borough'].value_counts().plot(x='Borough', y='Quantity of adwerts', kind='bar') + plt.savefig('./'+filename) + def mean_price(dane, room_number): - pass + return dane[dane["Rooms"] == room_number]["Expected"].mean() + def find_13(dane): - pass + return dane[dane["Floor"] == 13]["Borough"].unique() + def find_best_flats(dane): - pass + return dane[(dane["Borough"] == "Winogrady") & (dane["Floor"] == 1) & (dane["Rooms"] == 3)] + def main(): dane = wczytaj_dane() print(dane[:5]) - print("Najpopularniejsza liczba pokoi w mieszkaniu to: {}" - .format(most_common_room_number(dane))) + print("Najpopularniejsza liczba pokoi w mieszkaniu to: {}".format(most_common_room_number(dane))) - print("{} to najłądniejsza dzielnica w Poznaniu." - .format(find_borough("Grunwald i Jeżyce")))) + print("{} to najłądniejsza dzielnica w Poznaniu.".format(find_borough("Grunwald i Jeżyce"))) - print("Średnia cena mieszkania 3-pokojowego, to: {}" - .format(mean_price(dane, 3))) + print("Średnia cena mieszkania 3-pokojowego, to: {}".format(mean_price(dane, 3))) if __name__ == "__main__": main() diff --git a/labs06/tasks.py b/labs06/tasks.py index 8b2c28e..2850f69 100755 --- a/labs06/tasks.py +++ b/labs06/tasks.py @@ -4,77 +4,83 @@ """ 1. Zaimportuj bibliotkę pandas jako pd. """ - +import pandas as pd """ 2. Wczytaj zbiór danych `311.csv` do zniennej data. """ - +data = pd.read_csv("./311.csv", sep=',', header=0, low_memory=0) """ 3. Wyświetl 5 pierwszych wierszy z data. """ - +print(data.head(5)) """ 4. Wyświetl nazwy kolumn. """ - +print(data.columns) """ 5. Wyświetl ile nasz zbiór danych ma kolumn i wierszy. """ - +print(str(data.shape[1]) +', '+ str(data.shape[0])) """ 6. Wyświetl kolumnę 'City' z powyższego zbioru danych. """ - +print(data['City']) """ 7. Wyświetl jakie wartoścu przyjmuje kolumna 'City'. """ +print(data['City'].unique()) """ 8. Wyświetl tabelę rozstawną kolumny City. """ - +print(pd.pivot_table(data,columns=['City'])) """ 9. Wyświetl tylko pierwsze 4 wiersze z wcześniejszego polecenia. """ - +print(pd.pivot_table(data,columns=['City']).head(4)) """ 10. Wyświetl, w ilu przypadkach kolumna City zawiera NaN. """ - - +print(data['City'].isnull().sum()) """ 11. Wyświetl data.info() """ +print(data.info()) """ 12. Wyświetl tylko kolumny Borough i Agency i tylko 5 ostatnich linii. """ - +print(data[['Borough','Agency']].tail(5)) """ 13. Wyświetl tylko te dane, dla których wartość z kolumny Agency jest równa NYPD. Zlicz ile jest takich przykładów. """ +print(data[data['Agency'] == 'NYPD']) +print(data['Agency'].value_counts()['NYPD']) """ 14. Wyświetl wartość minimalną i maksymalną z kolumny Longitude. """ +print(data['Longitude'].max()) +print(data['Longitude'].min()) """ 15. Dodaj kolumne diff, która powstanie przez sumowanie kolumn Longitude i Latitude. """ - +data['diff'] = data['Longitude'] + data['Latitude'] """ 16. Wyświetl tablę rozstawną dla kolumny 'Descriptor', dla której Agency jest równe NYPD. """ +print(pd.pivot_table(data[data['Agency'] == 'NYPD'],columns=['Descriptor'])) \ No newline at end of file