I210: Information Infrastructure IMastery Project 2Always backup your work to a system that you don’t control, such as OneDriveor Google Drive, in case something goes wrong with Canvas. These put atimestamp on your work that can be used to prove when it was done. Wecannot accept timestamps from your local machine.You are responsible for making sure your work is submitted by the due date onCanvas, so it is strongly advised that you verify the submission once you’veturned it in. We accept Mastery Projects up to 24 hours late, for a 20% penalty.As a reminder, while working on this project, you may use anything on the Canvassection for I210, as well as Zybooks. You may use any notes (physical or online)taken for I210.Using code you found online from outside of this class or code that you did notwrite that is not Zybooks code or from our Canvas section is likely to constituteacademic misconduct. If you are unsure, ask first.If you have questions about what we want you to do in this Mastery Project, askin Piazza. If you get stuck writing your code and need help, come to an Office Hour.Start early so that there’s as much time as possible to get help!Mastery Project 2 requires you to use pieces from Lesson 10 – Lesson 19, soyou won’t be able to complete all elements until you’ve done this material.Keep an eye out for pieces that you’ll need!This project is inspired by real world data. Thedataset you will be using is a report of all carcrashes in Monroe County in 2019. Make sureyou open the data in a spreadsheetprogram and/or in your code editor so youcan see what you’re working with beforemanipulating the data with code.There are 4 parts to Mastery Project 2:1. Read in and clean up the data from Monroe_crash_data_2019.csvRead the CSV data into Python, and use a list comprehension to filterout any rows with incomplete data. Here is an example of what that kind ofrow looks like in a CSV: 15-24Years,Monroe,Bloomington,TUESDAY,APR,2019,10:20,AM,Daylight,Clear,Pedestrian,,,,The “,,,” means there are no values for those columns. Open in a spreadsheetprogram to see more places where no values were entered.When the data is loaded, let the user know the action is complete with amessage. It’s a good idea when working with files to also include how largethe dataset is we are working with, in this case, how many rows.2. Identify a focus to refine the dataWe want to ask four specific questions of this data.A. The user should be able to specify at least four columns they want toanalyze as well as how many of the top results they would like ineach column. To help you test, here are some examples of things theuser might want:What make of cars were involved in the most crashes?(e.g. VW, Toyota, BMW, etc.. )Top 10 resultsHow many crashes were on each day of the week? Top 7 resultsHow many crashes were there each month? Top 12 resultsWhich Monroe County city had the most crashes? Top 3 resultsWhich age group had the most crashes? Top 5 resultsWhich speed limit areas had the most crashes? Top 5 resultsB. Using the dataset, the item we are investigating (e.g. make of the car),and how many results we would like to get back, tally up how manycrashes are associated with each item.3. Sort and display the refined dataA. Using insertion sort or selection sort, make sure the results are sortedby the number of crashes, from the most crashes to the least.B. And then display the results as a table. The table should include aheader row with the item we are investigating and the number ofcrashes related to that item. Only the number of items requestedshould be displayed (e.g. top 10 makes of cars involved in car crashes).HINT: If you are using table_print to do this, make sure it doesn’t un-doyour earlier sorting!4. BONUS: Save the results to a filePrint the results of the four questions to a file. Format the data so it ishuman readable within the file. The data should be in plain text and notformatted as CSV, however, we do expect labels and some amount offormatting -- someone reading the file should be able to understand whateach set of results is showing. Your choice if you want to continue to print tothe console and the file, or just the file.In each section, functionality will account for about 70% of the grade.10% of the points will be awarded for proper use of functions. Please do notwrite the entire project in main! Any discrete piece of the problem should be in afunction.10% of the points will be for observation of programming conventions,good naming, commenting, not duplicating code, etc. We expect you toproduce well-written, well-organized code, not just code that works.The last 10% is for completing the turn-in sheet on the next page, whichyou should submit along with your Python program.