BEE1038讲解 、辅导 Python设计程序
Assignment [100 marks, weight: 30%]
BEE1038: Introduction to Data Science in Economics
Assignment Deadline: Thursday 28th March at 15:00 (GMT)
In this assignment, you will demonstrate your understanding and mastery of programming in
Python using data science tools.
What you will have learnt by the end of Week 6/7 should cover almost everything you will need,
and what you learnt is already enough to start working on some problems. If you are stuck then
read through the notebooks again. If you are still unsure, then have a look online. Google and
Stack OverFlow are your friends!
The grade of this assignment contributes 30% towards your overall grade in the course. The
following aspects need to be shown:
● Basic Python code and functions
● Manipulation and calculations on NumPy arrays and Pandas data frame
● Preparing and preprocessing data.
● Doing a basic plot, and changing plot markers, colors, etc.
● Improving and extending analysis.
● Ability to elaborate on your approach and explain your rationale when completing the
assignment.
Your submission will be a compressed file (.zip) containing the following files:
1. A copy of your Python script named your_name_solution.ipynb (done in Jupyter
Notebook). For example, my notebook file will be named cecilia_chen_solution.ipynb.
2. Same copy printed as a PDF, your_name_solution_code.pdf. Take a look at this link for
instruction on exporting Jupyter Notebok as PDF.
3. Three .png images of your final plots: one that replicates the plot in Problem 4 (p4.png),
one that replicates the plots in Problem 5 (H) (p5h.png), and those that show any
additional analysis in Problem 6 (p6a.png, etc.).
You must explain your approach and rationale using the markdown and/or comments in code.
Any block code or results without appropriate explanation will be panelized. Your scripts must
be sufficient to reproduce your answers to all questions and plots. You are responsible for
making sure that your Jupyter Notebook file will open without errors. Submissions that do not
open may receive a zero.
Collaboration & Misconduct: You are encouraged to think about this assignment in groups or ask
each other for help. If you do, you should do the following: 1) write your own code (no code
copying from others), 2) Report the names of all people that you worked with in your submission,
3) if you received help from someone, write that explicitly, 4) plagiarism of code or writeup will
not be tolerated; do not copy blocks of code in your answers, and 5) do not post your solutions
online (even after the release of your marks). For those who want to evidence your experience
to recruiters, make sure you share a private link to your project/work (or undiscoverable link). If
we can find your answers online anytime until September this year, you will be reported for
misconduct.
The University takes poor academic practice and academic misconduct very seriously and expects
all students to behave in a manner which upholds the principles of academic honesty. Please
make sure you familiarize yourself with the general guidelines and rules from this link1 and this
link2
.
Problem 1 [15 marks]
Write a function that accepts a number n as an input, and it returns n rows that look like the
following pattern. Run your function for n = 21 (the output below is for n=12 and n = 21).
1 http://as.exeter.ac.uk/academic-policy-standards/tqa-manual/aph/managingacademicmisconduct/
2
https://vle.exeter.ac.uk/pluginfile.php/1794/course/section/27399/A%20Guide%20to%20Citing%2C%20Referencing
%20and%20Avoiding%20Plagiarism%20V.2.0%202014.pdf
Output when n = 12 output when n = 21
Problem 2 [15 marks]
Solve all the following questions.
A. Write a function that you will call min_distance() that takes as input a list of integers and
returns the minimum (absolute) difference between any two numbers in that list.
For example, min_distance([5,9,1,3]) should return 2
While, min_distance([3,4,1,1]) should return 0
B. Using the min_distance() function you have created, create another function
max_min_distance() that takes a list of lists of integers as an input, and it returns the
maximum value among all the minimum distance values calculated on the inner-lists
(output of min_distance() for each inner-list).
For example, max_min_distance([[5,9,1,3],[3,4,1,1]]) should return 2
C. Demonstrate that your max_min_distance() function works well on the following input:
[[5,2,1,6],[10,0,4],[9,18,1],[100,100,27,9,18],[28,30]]
D. Set the NumPy random seed to 99 (Use the random generator method:
numpy.random.default_rng(seed)). Generate a 1-dimensional NumPy array of size 1000
consisting of random integers between 0 and 3000 (both included). Reshape this array
into a 2-dimensional array of 50 rows (i.e., 50x20). Test your function on this input.
E. Use the %timeit function to calculate the time for your max_min_distance() algorithm to
run on the input from D.
Problem 3 [20 marks]
A. Set the NumPy random seed to 120.
B. Create a 3x20x5 array (3 depths, 20 rows, 5 columns) of random integers between
-20 and 100 (both included) and print it.
C. For this part, consider the first depth of the array (i.e., first dimension is 0). Print the
number of elements that are strictly more than 60 in each column (of the first depth).
D. For this part, consider the third depth of the array (i.e., first dimension is 2). Print the
number of rows (of the third depth) that contain any positive values.
Problem 4 [20 marks]
In this problem, you need to reproduce the plot shown below, as accurately as possible, from
scratch. First, you will need to generate your x-axis data, and calculate the two series of your yaxis data using the simple functions shown in the legend.
Problem 5 [20 marks]
In this problem, you will use a dataset called harrypotter_dataset. Please follow the instructions
below for your data analysis.
A. Load the harrypotter_dataset.csv file in your notebook, and print the dataset. Print the
number of rows.
B. Print the column headings of the data set.
C. You will notice that column headings have an unnecessary leading space (e.g., “ Book
index”. Write a code to remove the leading space from every column name in the dataset,
replace the space between the column name with _, and convert all the column headings
to lower case. Save changes to your data frame. Re-run code in B to make sure it is solved
now. For example, the original column name is “ Book index”. It should be “book_index”
at the end.
D. Create a new column: ‘runtime_in_hours’ using the column ‘Runtime (in minutes)’. The
new column should have floating numbers (e.g., 150 minutes à 2.5 hours).
E. Create a new column: ‘is_same_date_uk_us’: boolean (True : “UK Movie release date” is
the same as “US Movie release date”, False : otherwise)
F. Calculate the following:
a. Suppose you chose to read one chapter from one of the books at random. What
is the probability that this chapter belongs to Book number 7? (hint: write a code
that divides the number of chapters in Book number 7 by the total number of
chapters)
b. Suppose you chose to watch one minute of one of the movies at random. What is
the probability that it belongs to one of the following movies 1st, 3rd, 5th, or 7th ?
c. What is the percentage of the movies that were released on the same date in both
the UK and the US?
G. Create a new data frame, df_nineties, which contains data (all columns) for books
released before 2000 i.e., ‘Book release year’ is strictly smaller than 2000.
H. Reproduce the following plot: you will get marks for reproducing the plot as accurately as
possible, taking into consideration the steps undertaken to reach the final figure.
Problem 6 [10 marks]
For this problem, use the same data from Problem 5 to perform compelling extra analysis.
Perhaps make use of the other columns in the harrypotter_dataset data set. You will get marks
if you find a compelling and interesting visualisation (one plot is enough, but you may produce
as many as you want if they are all tied into one main idea). Make sure you provide textual
description and/or analysis of the plot. You can also collect additional data to compliment your
analyses. For instance, you can add new columns to the dataset such as a cast list. Please be sure
to write down the source of your additional data collected.