From 95f6c11a791dd9f76310821ac1354a082fcfdafe Mon Sep 17 00:00:00 2001 From: Jakub Wajs Date: Sun, 3 Jun 2018 12:40:42 +0200 Subject: [PATCH] task02 ready (without extra task 10) --- labs06/task02.py | 61 ++++++++++++++++++++++++++++++++++++++--------- labs06/test.png | Bin 0 -> 24443 bytes 2 files changed, 50 insertions(+), 11 deletions(-) mode change 100755 => 100644 labs06/task02.py create mode 100644 labs06/test.png diff --git a/labs06/task02.py b/labs06/task02.py old mode 100755 new mode 100644 index 9d96016..d513b0d --- 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 +import numpy as np + def wczytaj_dane(): - pass + return pd.read_csv('mieszkania.csv') + def most_common_room_number(dane): - pass + return dane.Rooms.value_counts().index[0] + def cheapest_flats(dane, n): - pass + return dane.sort_values(by=['Expected'], ascending=False).head(n) + def find_borough(desc): dzielnice = ['Stare Miasto', @@ -19,23 +26,44 @@ def find_borough(desc): 'Winogrady', 'Miłostowo', 'Dębiec'] - pass + + common_boroughs = list(set(desc.split()).intersection(dzielnice)) + if not common_boroughs: + return "Inne" + else: + return str(common_boroughs[0]) def add_borough(dane): - pass + dane['Borough'] = dane.Location.apply(lambda el: find_borough(str(el))) + def write_plot(dane, filename): - pass + column_names = list(dane.Borough.value_counts().index) + x_pos = np.arange(len(column_names)) + y_pos = list(dane.Borough.value_counts()) + + plt.bar(x_pos, y_pos, align='center') + plt.xticks(x_pos, column_names) + plt.xlabel('Dzielnica') + plt.ylabel('Liczba ogłoszeń') + plt.title('Liczba ogłoszeń mieszkaniowych z podziałem na dzielnice') + + img = plt.gcf() + img.savefig(filename) + def mean_price(dane, room_number): - pass + return dane.Expected[dane.Rooms == room_number].mean() + def find_13(dane): - pass + return dane.Borough[dane.Floor == 13].unique() + def find_best_flats(dane): - pass + return dane[(dane.Borough == 'Winogrady') & (dane.Rooms == 3) & (dane.Floor == 1)] + def main(): dane = wczytaj_dane() @@ -44,11 +72,22 @@ def main(): 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ładniejsza dzielnica w Poznaniu." + .format(find_borough("Grunwald i Jeżyce"))) print("Średnia cena mieszkania 3-pokojowego, to: {}" .format(mean_price(dane, 3))) + add_borough(dane) + + print("Lista dzielnic, które zawierają ofertę mieszkania na 13 piętrze: {}" + .format(', '.join(find_13(dane)))) + + write_plot(dane, "test") + + # print("Oferty mieszkań, które znajdują się na Winogradach, mają 3 pokoje i są na 1 piętrze:") + # print(find_best_flats(dane)) + + if __name__ == "__main__": main() diff --git a/labs06/test.png b/labs06/test.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc02fbad5614eed833cd7e0c01bcba41873396b GIT binary patch literal 24443 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