Skip to content

Instantly share code, notes, and snippets.

@eddieberklee
Created May 7, 2013 22:15
Show Gist options
  • Select an option

  • Save eddieberklee/5536598 to your computer and use it in GitHub Desktop.

Select an option

Save eddieberklee/5536598 to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "info-stocks"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Info Stocks"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Description:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Our project seeks to measure the effectivness of a product release by looking at slope changes in the company's stock prices with respect to product release dates."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Code"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Import necessary libraries"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import urllib\n",
"import re"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Date Class"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"splits a date string into useful parts\n",
"\n",
"Contains method dateRange that returns a tuple of a start date and an end date within a time span that we're interested in."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"class Date:\n",
" def __init__(self, date):\n",
" splitDate = date.split('-')\n",
"\n",
" self.date = date\n",
" self.m = int(splitDate[0])\n",
" self.d = int(splitDate[1])\n",
" self.y = int(splitDate[2])\n",
"\n",
" # returns (start date, end date)\n",
" def dateRange(self, range): # range is in days\n",
" import datetime\n",
" date = datetime.date(int(self.y), int(self.m), int(self.d))\n",
" \n",
" difference = datetime.timedelta(days=range)\n",
" beginInterval = date - difference\n",
" endInterval = date + difference\n",
"\n",
" beginInterval = str(beginInterval.month) + '-' + str(beginInterval.day) + '-' + str(beginInterval.year)\n",
" endInterval = str(endInterval.month) + '-' + str(endInterval.day) + '-' + str(endInterval.year)\n",
"\n",
" return (Date(beginInterval), Date(endInterval))"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Company class"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Processes the company name into appropriate symbol using Yahoo! Finance\n",
"\n",
"As of 4/18/2013, release_dates is *not* an automated process and has been manually inputted."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"class Company:\n",
" def __init__(self, name):\n",
" self.name = name\n",
" self.companyToSymbol() # sets self.symbol\n",
" self.releaseDates() # sets self.releaseDates\n",
" def __str__(self):\n",
" return str(self.__dict__.keys())\n",
" def companyToSymbol(self):\n",
" url = \"http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=%s&callback=YAHOO.Finance.SymbolSuggest.ssCallback\" \\\n",
" % self.name\n",
" u = urllib.urlopen(url)\n",
" data = u.read()\n",
" m = re.search('symbol\\\":\\\"[a-zA-Z]*\\\"', data)\n",
" symbol = m.group(0)\n",
" symbol = symbol.split(':')[1][1:-1]\n",
" self.symbol = symbol\n",
" return symbol\n",
" def releaseDates(self):\n",
" self.release_dates = {\n",
" 'iBooks Author' : '1-19-2012',\n",
" 'iPad (3rd gen)' : '3-16-2012',\n",
" 'Apple TV (3rd gen)' : '3-16-2012',\n",
" 'Mac Pro (Mid 2012)' : '6-11-2012',\n",
" 'Macbook Air (Mid 2012)' : '6-11-2012',\n",
" }\n",
" def getData(self):\n",
" productDate = Date(self.release_dates['Apple TV (3rd gen)'])\n",
" dateRange = productDate.dateRange(7)\n",
" startDate = dateRange[0]\n",
" endDate = dateRange[1]\n",
" interval = 'd'\n",
" url = \"http://ichart.yahoo.com/table.csv?s=%s&a=%i&b=%i&c=%i&d=%i&e=%i&f=%i&g=%s&ignore=.csv\" \\\n",
" % ( self.symbol, startDate.m-1, startDate.d, startDate.y, endDate.m-1, endDate.d, endDate.y, interval)\n",
" u = urllib.urlopen(url)\n",
" ulines = u.read().split(\"\\n\")\n",
" start = ulines[1]\n",
" end = ulines[-2]\n",
" print 'Legend: ' + ulines[0]\n",
" print 'Starting Date Data: ' + start\n",
" print 'Ending Date Data: ' + end\n",
" difference = parse_yahoo_stock(start)['Close'] - parse_yahoo_stock(end)['Close']\n",
" if difference > 0:\n",
" sign = '+'\n",
" else:\n",
" sign = '-'\n",
" print sign + ' ' + str(difference)\n",
" # for perDay in u.readlines():\n",
" # print perDay.strip()"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def parse_yahoo_stock(line):\n",
" parts = line.split(',')\n",
" parts_dict = {}\n",
" # for product releases there may be a difference between diff('high', 'close')\n",
" # as opposed to more steady differences for a 'normal' non-release day\n",
" legends = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']\n",
" floats = [0, 1, 1, 1, 1, 0, 1]\n",
" for i in range(len(parts)):\n",
" if i == 5:\n",
" parts_dict[legends[i]] = int(parts[i])\n",
" if floats[i]:\n",
" parts_dict[legends[i]] = float(parts[i])\n",
" else:\n",
" parts_dict[legends[i]] = parts[i]\n",
" return parts_dict"
],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment