2017-12-15 14:24:17 +01:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
2017-12-22 22:10:17 +01:00
import pandas as pd , numpy as np
import argparse , sys , os
import matplotlib . pyplot as plt
# 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.
2017-12-15 14:24:17 +01:00
def wczytaj_dane ( ) :
2017-12-22 22:10:17 +01:00
return pd . read_csv ( ' mieszkania.csv ' , sep = ' , ' )
# 1' Wczytaj_dane z parametrem
def wczytaj_dane_2 ( file_name ) :
return pd . read_csv ( file_name , sep = ' , ' )
2017-12-15 14:24:17 +01:00
2017-12-22 22:10:17 +01:00
# 2. 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ą.
2017-12-15 14:24:17 +01:00
def most_common_room_number ( dane ) :
2017-12-22 22:10:17 +01:00
rooms = dane [ ' Rooms ' ]
return rooms . value_counts ( sort = True , ascending = False ) . index [ 0 ]
2017-12-15 14:24:17 +01:00
2017-12-22 22:10:17 +01:00
# 3. Uzupełnij kod w funkcji cheapest_flats(dane, n), która wzróci n najtańszych ofert mieszkań. Wzrócony obiekt typu DataFrame.
2017-12-15 14:24:17 +01:00
def cheapest_flats ( dane , n ) :
2017-12-22 22:10:17 +01:00
return dane [ ' Expected ' ] . sort_values ( ascending = True ) . head ( n ) . to_string ( index = False ) . split ( ' \n ' )
2017-12-15 14:24:17 +01:00
2017-12-22 22:10:17 +01:00
# 4. 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.
2017-12-15 14:24:17 +01:00
def find_borough ( desc ) :
dzielnice = [ ' Stare Miasto ' ,
' Wilda ' ,
' Jeżyce ' ,
' Rataje ' ,
' Piątkowo ' ,
' Winogrady ' ,
' Miłostowo ' ,
' Dębiec ' ]
2017-12-22 22:10:17 +01:00
for first_d in dzielnice :
if first_d in desc :
return first_d
return " Inne "
2017-12-15 14:24:17 +01:00
2017-12-22 22:10:17 +01:00
# 5. Dodaj kolumnę Borough, która będzie zawierać informacje o dzielnicach i powstanie z kolumny Localization. Wykorzystaj do tego funkcję find_borough.
2017-12-15 14:24:17 +01:00
def add_borough ( dane ) :
2017-12-22 22:10:17 +01:00
dane [ ' Borough ' ] = dane [ ' Location ' ] . map ( lambda Location : find_borough ( Location ) )
2017-12-15 14:24:17 +01:00
2017-12-22 22:10:17 +01:00
# 6. Uzupełnij funkcje write_plot, która zapisze do pliku filename wykres słupkowy przedstawiający liczbę ogłoszeń mieszkań z podziałem na dzielnice.
2017-12-15 14:24:17 +01:00
def write_plot ( dane , filename ) :
2017-12-22 22:10:17 +01:00
add_borough ( dane )
hist_data = dane [ ' Borough ' ] . value_counts ( )
h = hist_data . plot ( kind = ' bar ' , grid = True , figsize = ( 10 , 8 ) )
plt . savefig ( filename )
2017-12-15 14:24:17 +01:00
2017-12-22 22:10:17 +01:00
# 7. Napisz funkcje mean_price, która zwróci średnią cenę mieszkania room_numer-pokojowego.
2017-12-15 14:24:17 +01:00
def mean_price ( dane , room_number ) :
2017-12-22 22:10:17 +01:00
return dane . loc [ dane [ ' Rooms ' ] == room_number ] [ ' Expected ' ] . mean ( )
2017-12-15 14:24:17 +01:00
2017-12-22 22:10:17 +01:00
# 8. Uzupełnij funkcje find_13, która zwróci listę dzielnic, które zawierają ofertę mieszkanie na 13 piętrze.
2017-12-15 14:24:17 +01:00
def find_13 ( dane ) :
2017-12-22 22:10:17 +01:00
return dane . loc [ dane [ ' Floor ' ] == 13 ] [ ' Borough ' ] . to_string ( index = False ) . split ( ' \n ' )
2017-12-15 14:24:17 +01:00
2017-12-22 22:10:17 +01:00
# 9. 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.
2017-12-15 14:24:17 +01:00
def find_best_flats ( dane ) :
2017-12-22 22:10:17 +01:00
return dane . loc [ ( df [ ' Borough ' ] == ' Winogrady ' ) & ( dane [ ' Floor ' ] == 1 ) & ( dane [ ' Rooms ' ] == 3 ) ]
# 10. (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.
2017-12-15 14:24:17 +01:00
def main ( ) :
2017-12-22 22:10:17 +01:00
parser = argparse . ArgumentParser ( )
parser . add_argument ( " file_name " , help = " File mieszkania.csv will be used by default " , type = argparse . FileType ( ' rt ' ) , nargs = ' ? ' )
args = parser . parse_args ( )
if args . file_name is None :
file_csv = ' mieszkania.csv '
else :
file_csv = args . file_name . name
###dane = wczytaj_dane_2(file_csv)
2017-12-15 14:24:17 +01:00
dane = wczytaj_dane ( )
print ( dane [ : 5 ] )
print ( " Najpopularniejsza liczba pokoi w mieszkaniu to: {} "
. format ( most_common_room_number ( dane ) ) )
2017-12-22 22:10:17 +01:00
2017-12-15 14:24:17 +01:00
print ( " {} to najłądniejsza dzielnica w Poznaniu. "
2017-12-22 22:10:17 +01:00
. format ( find_borough ( " Grunwald i Jeżyce " ) ) )
2017-12-15 14:24:17 +01:00
print ( " Średnia cena mieszkania 3-pokojowego, to: {} "
. format ( mean_price ( dane , 3 ) ) )
2017-12-22 22:10:17 +01:00
### Dopisałem te wywołania ###
# ['1', ' 4000', '68000', '79000', '85000']
n = 5
print ( " Najtańsze oferty, to: {} "
. format ( cheapest_flats ( dane , n ) ) )
write_plot ( dane , file_csv + ' .hist.png ' )
print ( " Dzielnice z mieszkaniami na 13tym piętrze, to: {} "
. format ( find_13 ( dane ) ) )
#############################
2017-12-15 14:24:17 +01:00
if __name__ == " __main__ " :
main ( )