HSG-MCS-HS21_Julia/Problemsets/PS10_DataFrames.ipynb

211 lines
7.4 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Load Packages"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"printyellow (generic function with 1 method)"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using Printf, Dates, Statistics, CSV, DataFrames\n",
"include(\"jlFiles/printmat.jl\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Loading Some Data with CSV.jl"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The first 4 lines of Data/Options_prices_US_Canada.csv:\n",
"\n",
"symbol,exchange,date,adjusted close,option symbol,expiration,strike,call/put,style,ask,bid,volume,open interest,unadjusted\n",
"SPX,CBOE,03/30/17,2368.06,SPXW 170331C00300000,03/31/17,300,C,E,2073.9,2062.9,0,0,2368.927\n",
"SPX,CBOE,03/30/17,2368.06,SPXW 170331P00300000,03/31/17,300,P,E,0.1,0,0,0,2368.927\n",
"SPX,CBOE,03/30/17,2368.06,SPXW 170331C00400000,03/31/17,400,C,E,1974.1,1962.7,0,0,2368.927\n",
"\n"
]
}
],
"source": [
"DataFile = \"Data/Options_prices_US_Canada.csv\"\n",
"\n",
"println(\"The first 4 lines of $(DataFile):\\n\")\n",
"txt = readlines(DataFile)\n",
"printmat(txt[1:4])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Use `normalizenames` to get names that can be used in Julia as variables names and specify the `dateformat` used in the csv file (to convert to proper Julia dates). The dates in the file are given as `03/30/17` which CSV/DataFrames interpret as 30 March year 17 (AD). We add `Dates.Year(2000)` to get year 2017."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[1m13952×10 DataFrame\u001b[0m\n",
"\u001b[1m Row \u001b[0m│\u001b[1m symbol \u001b[0m\u001b[1m date \u001b[0m\u001b[1m close \u001b[0m\u001b[1m expiration \u001b[0m\u001b[1m strike \u001b[0m\u001b[1m call_put \u001b[0m\u001b[1m ask \u001b[0m\u001b[1m\u001b[0m ⋯\n",
"\u001b[1m \u001b[0m│\u001b[90m String3 \u001b[0m\u001b[90m Date \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Date \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m String1 \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m\u001b[0m ⋯\n",
"───────┼────────────────────────────────────────────────────────────────────────\n",
" 1 │ SPX 2017-03-30 2368.06 2017-03-31 300.0 C 2073.9 ⋯\n",
" 2 │ SPX 2017-03-30 2368.06 2017-03-31 300.0 P 0.1\n",
" 3 │ SPX 2017-03-30 2368.06 2017-03-31 400.0 C 1974.1\n",
" 4 │ SPX 2017-03-30 2368.06 2017-03-31 400.0 P 0.05\n",
" 5 │ SPX 2017-03-30 2368.06 2017-03-31 500.0 C 1874.1 ⋯\n",
" 6 │ SPX 2017-03-30 2368.06 2017-03-31 500.0 P 0.05\n",
" 7 │ SPX 2017-03-30 2368.06 2017-03-31 600.0 C 1774.1\n",
" 8 │ SPX 2017-03-30 2368.06 2017-03-31 600.0 P 0.05\n",
" 9 │ SPX 2017-03-30 2368.06 2017-03-31 700.0 C 1673.9 ⋯\n",
" 10 │ SPX 2017-03-30 2368.06 2017-03-31 700.0 P 0.05\n",
" 11 │ SPX 2017-03-30 2368.06 2017-03-31 750.0 C 1624.1\n",
" ⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋱\n",
" 13943 │ XIU 2017-03-30 23.06 2019-03-15 21.0 C 3.21\n",
" 13944 │ XIU 2017-03-30 23.06 2019-03-15 21.0 P 1.71 ⋯\n",
" 13945 │ XIU 2017-03-30 23.06 2019-03-15 22.0 C 2.53\n",
" 13946 │ XIU 2017-03-30 23.06 2019-03-15 22.0 P 2.03\n",
" 13947 │ XIU 2017-03-30 23.06 2019-03-15 23.0 C 1.97\n",
" 13948 │ XIU 2017-03-30 23.06 2019-03-15 23.0 P 2.51 ⋯\n",
" 13949 │ XIU 2017-03-30 23.06 2019-03-15 24.0 C 1.5\n",
" 13950 │ XIU 2017-03-30 23.06 2019-03-15 24.0 P 3.12\n",
" 13951 │ XIU 2017-03-30 23.06 2019-03-15 25.0 C 1.13\n",
" 13952 │ XIU 2017-03-30 23.06 2019-03-15 25.0 P 3.64 ⋯\n",
"\u001b[36m 3 columns and 13931 rows omitted\u001b[0m"
]
}
],
"source": [
"df1 = CSV.read(DataFile,DataFrame,normalizenames=true,dateformat=\"mm/dd/yy\")\n",
"\n",
"df1.date .+= Dates.Year(2000) #03/30/17 to 03/30/2017\n",
"df1.expiration .+= Dates.Year(2000)\n",
"\n",
"select!(df1,Not([:exchange,:option_symbol,:style,:unadjusted])) #deleting some columns\n",
"rename!(df1,:adjusted_close => :close) #renaming a column\n",
"\n",
"show(df1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Task 1\n",
"\n",
"Create a new DataFrame that contains only the data for SPX and those option contracts that were traded (volume > 0). Hint: `df1[vv, :]` picks out the rows of the data frame for which `vv` is `true`. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Task 2\n",
"\n",
"Create a *group* for each expiration date. These groups can be referred to as `dataG2[key]`.\n",
"\n",
"Hints: `groupby()`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Task 3\n",
"\n",
"Print the number of contracts (`nrow`) and the sum of the open interest `:open_interest=>sum` for each of the expiration dates.\n",
"\n",
"Hint: `combine()`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Task 4 \n",
"Creating two new DataFrames: for expiration date 2017-04-21 and another for 2017-06-16.\n",
"\n",
"Hint: `dataG2[(expiration = Date(\"2017-04-21\"),)]`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Task 5\n",
"\n",
"For the expiration date 2017-04-21, calculate the mid price as the average of the `.ask` and `.bid`. \n",
"\n",
"Plot the mid price as a function of the strike price `.strike` for put options. Add a curve another curve for the call options."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"@webio": {
"lastCommId": null,
"lastKernelId": null
},
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Julia 1.7.0",
"language": "julia",
"name": "julia-1.7"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.7.0"
},
"nteract": {
"version": "0.23.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}