Python first of the series

I need support with this Python question so I can learn better.

Objective

Demonstrate an understanding of:

  • enumerate
  • a = b if c else d assignment pattern

Specification

There are a lot of details to deal with here. Take each bit one at a time, and ask lots of questions. Start with your code from Assignment Eight. I will give this once the tutor is chosen!

DataSet Class

_table_statistics(self, row_category: Categories, label: str)

Given a category from the Categories Enum, and a string matching one of the items in that category, calculate the minimum, maximum and average rent for the properties in that category, but those values should be filtered.

How do we filter the values? Let’s demonstrate by example.

Suppose _active_labels[Categories.PROPERTY_TYPE] = {“Private Room”}. In other words, “Entire home / apt” has been filtered out.

If we call _table_statistics(Categories.LOCATION, “Manhattan”), we are asking for the min, avg and max rent for Manhattan. But only for properties that match “Private Room”. There are only two matching properties in our default data. We should get back a tuple (99, 112, 125).

It might be a good idea to test using this example.

Because this method is intended private, you do not need to provide any protection from bad arguments.

display_field_table(self, rows: Categories)

Raise EmptyDatasetError if no data is loaded.

Notice that one of the two categories was passed. Display a table of the minimum, maximum and average rent for each item in that category. The data presented should be filtered. Print out the labels that are currently active, and use _table_statistics() to gather the data.

get_labels(self, category: Categories)

Returns a list of the items in _labels[category].

get_active_labels(self, category: Categories)

Returns a list of the items in _active_labels[category].

toggle_active_label(self, category: Categories, descriptor: str)

This public method will add or remove labels from _active_labels, allowing the user to filter out certain property types or locations.

If the passed descriptor is not a label in _labels[category], raise KeyError. Otherwise:

  • add descriptor to _active_labels[category] if descriptor is not in the set or…
  • remove descriptor from _active_labels[category] if descriptor is in the set.

Module Level Functions

manage_filters(dataset: Dataset, category: Dataset.Categories)

Using the Dataset methods get_labels(), get_active_labels(), and toggle_active_label():

  • Print a menu-like list of all the labels for the given category
  • Indicate which ones are currently active (i.e. the string exists in dataset._active_labels[category]
  • Allow the user to change a label from active to inactive or from inactive to active
  • Loop until the user has finished making their choices

See the sample run for an idea of how to present this.

Note the following requirements:

  • You must use enumerate to generate the menu items, and start with item 1
  • You must use the public getter and setter methods for Dataset. Do not access the data directly.

Modifications to Existing Code

menu() function

We have now implemented items 4 through 7 from our menu. Adjust the menu() function to call manage_filters() or display_field_table() with the appropriate arguments. Catch any EmptyDatasetError that is raised and provide an appropriate message to the user.

Sample Run

Your sample run should show that menu items 4 through 7 function correctly with and without a dataset loaded, and using various filters.

Your output can be different as long as it meets the criteria above. Be sure to check that your numerical values match those below. I have included a large sample run here. I recommend that you go through each of the same steps and make sure your code provides the same options and information.

 _x000D_
Please enter your name: Eric_x000D_
Hi Eric, welcome to Foothill's database project._x000D_
What is your home currency?EUR_x000D_
Enter a header for the menu: _x000D_
AIRbnb Dataset_x000D_
Options for converting from USD:_x000D_
USD       EUR       CAD       GBP       CHF       NZD       AUD       JPY       _x000D_
11.11     10.00     15.56     8.89      10.56     18.44     18.00     1199.11   _x000D_
22.22     20.00     31.11     17.78     21.11     36.89     36.00     2398.22   _x000D_
33.33     30.00     46.67     26.67     31.67     55.33     54.00     3597.33   _x000D_
44.44     40.00     62.22     35.56     42.22     73.78     72.00     4796.44   _x000D_
55.56     50.00     77.78     44.44     52.78     92.22     90.00     5995.56   _x000D_
66.67     60.00     93.33     53.33     63.33     110.67    108.00    7194.67   _x000D_
77.78     70.00     108.89    62.22     73.89     129.11    126.00    8393.78   _x000D_
88.89     80.00     124.44    71.11     84.44     147.56    144.00    9592.89   _x000D_
100.00    90.00     140.00    80.00     95.00     166.00    162.00    10792.00  _x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 4_x000D_
Please Load a Dataset First_x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 5_x000D_
Please Load a Dataset First_x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 6_x000D_
Please Load a Dataset First_x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 7_x000D_
Please Load a Dataset First_x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 8_x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 4_x000D_
The following data are from properties matching these criteria:_x000D_
- Private room_x000D_
- Entire home / apt_x000D_
                    Minimum             Average             Maximum _x000D_
Bronx               $ 40.00             $ 40.00             $ 40.00             _x000D_
Manhattan           $ 99.00             $ 143.57            $ 196.00            _x000D_
Queens              $ 350.00            $ 350.00            $ 350.00            _x000D_
Staten Island       $ 70.00             $ 70.00             $ 70.00             _x000D_
Brooklyn            $ 50.00             $ 118.00            $ 200.00            _x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 7_x000D_
The following labels are in the dataset:_x000D_
1: Private room         ACTIVE _x000D_
2: Entire home / apt    ACTIVE _x000D_
Please select an item to toggle or enter a blank line when you are finished.1_x000D_
The following labels are in the dataset:_x000D_
1: Private room         INACTIVE _x000D_
2: Entire home / apt    ACTIVE _x000D_
Please select an item to toggle or enter a blank line when you are finished._x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 4_x000D_
The following data are from properties matching these criteria:_x000D_
- Entire home / apt_x000D_
                    Minimum             Average             Maximum _x000D_
Bronx               N/A                 N/A                 N/A                 _x000D_
Manhattan           $ 100.00            $ 156.20            $ 196.00            _x000D_
Queens              $ 350.00            $ 350.00            $ 350.00            _x000D_
Staten Island       N/A                 N/A                 N/A                 _x000D_
Brooklyn            $ 150.00            $ 166.67            $ 200.00            _x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 7_x000D_
The following labels are in the dataset:_x000D_
1: Private room         INACTIVE _x000D_
2: Entire home / apt    ACTIVE _x000D_
Please select an item to toggle or enter a blank line when you are finished.2_x000D_
The following labels are in the dataset:_x000D_
1: Private room         INACTIVE _x000D_
2: Entire home / apt    INACTIVE _x000D_
Please select an item to toggle or enter a blank line when you are finished._x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 4_x000D_
The following data are from properties matching these criteria:_x000D_
                    Minimum             Average             Maximum _x000D_
Bronx               N/A                 N/A                 N/A                 _x000D_
Manhattan           N/A                 N/A                 N/A                 _x000D_
Queens              N/A                 N/A                 N/A                 _x000D_
Staten Island       N/A                 N/A                 N/A                 _x000D_
Brooklyn            N/A                 N/A                 N/A                 _x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 5_x000D_
The following data are from properties matching these criteria:_x000D_
- Manhattan_x000D_
- Queens_x000D_
- Staten Island_x000D_
- Brooklyn_x000D_
- Bronx_x000D_
                    Minimum             Average             Maximum _x000D_
Private room        $ 40.00             $ 86.44             $ 125.00            _x000D_
Entire home / apt   $ 100.00            $ 181.22            $ 350.00            _x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 6_x000D_
The following labels are in the dataset:_x000D_
1: Bronx                ACTIVE _x000D_
2: Manhattan            ACTIVE _x000D_
3: Queens               ACTIVE _x000D_
4: Staten Island        ACTIVE _x000D_
5: Brooklyn             ACTIVE _x000D_
Please select an item to toggle or enter a blank line when you are finished.1_x000D_
The following labels are in the dataset:_x000D_
1: Bronx                INACTIVE _x000D_
2: Manhattan            ACTIVE _x000D_
3: Queens               ACTIVE _x000D_
4: Staten Island        ACTIVE _x000D_
5: Brooklyn             ACTIVE _x000D_
Please select an item to toggle or enter a blank line when you are finished._x000D_
_x000D_
AIRbnb Dataset_x000D_
Main Menu_x000D_
1 - Print Average Rent by Location and Property Type_x000D_
2 - Print Minimum Rent by Location and Property Type_x000D_
3 - Print Maximum Rent by Location and Property Type_x000D_
4 - Print Min/Avg/Max by Location_x000D_
5 - Print Min/Avg/Max by Property Type_x000D_
6 - Adjust Location Filters_x000D_
7 - Adjust Property Type Filters_x000D_
8 - Load Data_x000D_
9 - Quit_x000D_
What is your choice? 9_x000D_
Goodbye!  Thank you for using the database_x000D_
_x000D_
Process finished with exit code 0

 

  1. Start by sharing the instructions of your paper with us  
  2. And then follow the progressive flow.
  3. Have an issue, chat with us now

Regards,

Cathy, CS.