Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: daixieit

Project 1: Combining Data from Multiple Sources

Introduction

Finance research often requires assembling a data set from different sources. In many cases, the source data is not formatted such that it can be imported easily into Python for analysis.  This assessment helps you develop the foundational skills of data acquisition, cleaning, and merging.  You will combine stock price information distributed across many les and produce the output as a CSV le. We ask you to write general code, such that it can adapt easily to different le formats.

Writing general code can be a daunting exercise at rst.  However, it is in your best interest to practice writing functions that can adapt to different configurations. Doing so makes your code more robust, easier to maintain, and upgradeable.

To help you, we have provided a Python scaold. This le, called zid_project1 .py contains all the functions needed for this project. Each function has a detailed docstring describing what the function does, the input parameters, and the object it returns.

The remainder of this document provide information on:

  The data les you will receive.

  Instructions to set up your development environment in PyCharm.

●  Detailed step-by-step instructions required to complete the assessment. Please follow these instructions closely. Our ability to evaluate your work requires that you do so.

You should develop your code within PyCharm.  Submission, however, will be through Ed.  You will only

need to copy your zid_project1 .py le into Ed. Unlike the code challenges you have done so far, Ed will not provide you any feedback on your code. You can still submit multiple times before the deadline  Only your nal submission on Ed will be marked.

The Source Files

All required les are included in a zip archive with the following structure:

project1/

project_desc .pdf

README .txt

TICKERS .txt

zid_project1.py

|___data/

|       |      <tic>_prc .dat              <--  several  files  of  this  type

●  zid_project1 .py contains the functions you will use in this assessment.  Some of the functions are already written, while others you will need to write.   Please see the instructions below for more information.

● README .txt contains information about how the stock data is stored in the  .dat les.  Please use the information contained the README .txt le you received (there are different versions for different students).

 TICKERS .txt contains a list of tickers, one per line. These tickers may be in upper or lower case.

 project_desc .pdf is a PDF version of this document.

●  data is a sub-folder containing all the data you will need to complete this assessment. Inside this folder you will nd many les. Each <tic>_prc .dat contains stock price data for the ticker <tic> . Every ticker in TICKERS .txt will have a corresponding “.dat” file. However, you may have more “.dat” files than tickers in the TICKERS .txt le. In other words, you may have more “.dat” files than you will need (but not fewer).

Instructions

To set up your PyCharm for this assessment, please follow the following steps:

1.  Decompress the contents of the zip le onto your computer.

2.  Copy/move the entire project1 folder into your PyCharm toolkit project folder. Afterwards, your toolkit folder will look like:

toolkit/

|

|

|___project1/

|

|

|

|

|

|___data/

. . .

<--  Project  folder

<--  Already  created

<--  Contents  of  the  zipped  folder

3.  Complete the user-written functions in zid_project1 .py. See the step-by-step instructions in Com- pleting the Code Scaold below.

4.  After you have completed the zid_project1 .py module in PyCharm, copy and paste the entire contents of this module to ED. This is the only le you will need to submit to complete this assessment.

5.  Press Submitto submit your project. Your project will not be submitted until you do so.

Completing the Code Scaold

After setting up your PyCharm development environment with the project les (see instructions above), modify the zid_project1 .py module by taking the the steps described below, in sequence. The completed code will produce a CSV containing the combined contents of several les. You do not need to submit this

CSV le.

Step 1:  Set the location of les and folders

Open the zid_project1 .py module in PyCharm.

Set the correct expressions for the constants ROOTDIR, DATDIR, and TICPATH as described below. Importantly, you should not include forward slashes or backslashes when defining these variables (so no C:\User. . . ”, etc. . . ). Instead, you should use the appropriate methods from the os module.

●  The ROOTDIR variable combines the base location of the toolkit project folder  (which is already specified in your toolkit_config .py module) and the project1 package.

●  The DATDIR variable combines the location in ROOTDIR above and the data sub-folder. Note that this is a different variable than the DATADIR included in your toolkit_config .py module. The name of the DATDIR variable is a combination of DAT” and DIR” (not DATA” + “DIR”), and it points to a different location in your computer.

●  The TICPATH variable combines the location in ROOTDIR and the name of the le with the tickers (“TICKERS.txt”).

Again, all these paths should be created using the appropriate methods from the os module. If you include any forward or backward slashes in the definition of these variables your code will only run in your computer. A big part of this assessment is to make sure your code is portable.

The diagram below presents the relation between these variables and their locations. Again, do not use full paths (like C:\Users. . . ”) to create these variables.

toolkit/

|     toolkit_config .py                 <--  You  already  created  this module

|      . . .

|___project1/                                 <--  ~ROOTDIR~  variable  points  to  this  folder |      |      . . .

<--  ~TICPATH~  variable points to this  file  <--  ~DATDIR~  variable points to this  folder

Note: All you have to do for this part is to replace the strings '<COMPLETE THIS PART> ' with the appropriate expressions.

Step 2:  Set the variables describing the format of the source data

This part of the project is very important! Make sure you follow these instructions closely.

Before  we  start,   open  one  of  the  “.dat”  files  in  PyCharm.     To  do  that,  just  navigate  to  the toolkit/project1/data/  folder  (inside  PyCharm)  and  double  click  on  one  of  the  les.    You  will notice the following:

1.  There are no column headers. Every line in this le (including the rst one) contains data.

2.  There is no separator” between columns (e.g., columns are not separated by comma, tabs, etc. . . ). Instead, columns have a xed width For example, the rst 10 characters belong to column 1, the next

8 to column 2, etc. . .

This means we have to create a function to split the lines into columns, so that each value” is assigned to its correct data eld”. The first step is to set the correct expressions for the variables COLUMNS and COLWIDTHS.

●  The COLUMNS variable must be a list, where each element represents a source column name in the README .txt file.  The order of the elements in this list must match the order of the columns in the README .txt file. For instance, suppose you have the following information in the README .txt file:

#  ----------------------------------------------------------------------------

#  

Close:

column position:  1

width:  14

Date:

column position:  2

width:  11

In this case, you must set COLUMNS  =  [ 'Close ' ,  'Date'].

●  The COLWIDTHS variable must be a dictionary. Each key is a column name in COLUMNS. Each value is the width of this column in the README .txt le. In the example above, you would set COLSWIDTH  = { 'Close ' :  14,  'Date ' :  11}.

Step 3:  Complete the edt  tgas function

Complete the indicated part of the function get_tics . This function reads a le with tickers and returns a list with formatted tickers. Make sure the function works with the given pth variable and not the constant TICPATH (i.e., there should be no reference to the TICPATH constant inside this function). We will test your code using different les. Using TICPATH instead of pth inside get_tics means that your function always returns the same tickers instead of adapting to different possible ticker lists.

Your function must be consistent with the docstring provided. In particular, please make sure the body of the function is consistent with the Parameters” and Returns” sections of the docstring. The only exception is the optional suggestions provided in the Hints” section, which you do not need to follow.

Your module also includes a test function called _test_get_tics. After you nish creating the get_tics function, it is a good idea to run the _test_get_tics function and look at the output. That should give you a good indication if your function is performing as expected. You can uncomment the relevant part of the if __name__  . . . code block to run this test function. Like all other test functions provided, you can modify or delete these functions they will not be marked.

Step 4:  Complete the rd-c  c-t function

Complete the indicated part of the function read_dat .  This functions reads a stock price data le for a given ticker and returns its contents as a list of lines. Please make sure the body of the function is consistent

with the Parameters” and Returns” sections of the docstring. You may choose to follow the proposed steps in the Hints” section but that is optional.

Remember not to use literals with full paths like C:\Users. . . ” inside the body of the function (or anywhere in the module). You can use the constants you created in step 1 above (e.g., DATDIR) and methods from the os module to create paths.

You can use the corresponding testfunction _test_read_dat to test this function once its completed.

Step 5:  Complete the lgnd  to  cgat function

Complete the function  line_to_dict function.   The same instructions provided for the get_tics and read_dat functions above apply to this function as well.

Step 6:  Run the m-gn function

The main function is already written for you. Uncomment the relevant part of the is  __name__  . . . code block to run this function. You will need to define the variable csvloc rst.

The purpose of this part is to ensure that all the functions above work as expected. Open the CSV le you

just created in Excel and look at the data. You do not have to submit this le as part of your assessment.

Submit your module

Copy and paste the entire content of your zid_project1 .py to ED and press Submit”. ED will not mark your project automatically or give you any feedback. After you submit, we will be able to mark your project.

Administrative Guidelines, Additional Hints, Marking Administrative Guidelines

We will enforce the following:

1.  This assessment must be completed individually. Failure to complete the assignment on your own may result in a full loss of marks.

2.  Late submissions are allowed, but will be penalised according to the rules described in the course outline.

Hints

Your code should be portable, working in a variety of settings. It should be sufficient to copy your code from PyCharm to Ed for submission. However, as part of this assessment, you need to make sure that your code works on our computer as well as on yours.

The following hints should help you correct any portability mistakes:

1.  The contents of your zid_project1 .py module must not contain any direct reference to folders in your computer. Variables that define paths should not contain any forward or backslashes. Of course, the variables you defined in your toolkit_config .py module (which you do not have to submit) do contain forward or backslashes (depending on your operating system). This is one of the reasons why we created this le to begin with.

2.  Similarly, you should not include strings with specific tickers in zid_project1 .py module (e.g., “TSLA”, “AAPL”). For instance, you should not create a variable called tickers and then copy the specific tickers you received in your TICKERS .txt le.  Instead, your code should read the TICKERS .txt le, produce a list of tickers, and store that in a variable.

3. When writing functions in the le zid_project1 .py:

  Do not modify the function names or the parameters.

  Only modify the parts indicated by the  "<COMPLETE  THIS  PART>" tag.

●  You do not need to import any other module.  Please do not modify the import statements.

●  You should not create any additional constants.  The constants that exist in the le (ROOTDIR, DATDIR, TICPATH, COLUMNS, and COLWIDTHS) should be edited as instructed.

●  The test” functions are included to help you test the code as you work through the project. These functions will not be marked, and you may change them as necessary to suit your needs.  Test functions are clearly identified in the le with names starting with _test.

4.  Use all the parameters in a function declaration. For example, the function get_tics(pth) has the single parameter pth. Make sure that your function uses this parameter and not a global variable.

5.  Only submit the zid_project1 .py module. Make sure your code works with this module only. No other modules can be submitted.

How we will mark your assessment

The following parts of this assessment will be marked:

  1: Location of les and folders

  2:  Set the variables describing the format of the source data

  3:  Complete the get_tics function

  4:  Complete the read_dat function

●  5: Complete the line_to_dict function

Each part is worth 20% of the total marks for this assessment. To receive full credit for parts 1 and 2, your variables must:

1.  Have the correct type (e.g., COLWIDTHS must be a dictionary)

2.  Include the correct values (e.g., the order of the columns in COLUMNS must match the one specied in your README.TXT le,

3.  Follow all the instructions in this le (e.g., no forward or backslashes in TICPATH).

To receive full credit in parts 3, 4, and 5, your functions must:

1.  Return the correct object type (described in the docstring)

2.  Return the correct information from the TICKERS .txt, README .txt, and “.dat” files you received.

3.  Not violate any of the rules we specied in this document or in the docstring

4.  If your function opens a le, you must use a context manager.