def linear_reg(): ibm_data = data_retrieval.get_time_series( 'download_yahoo_timeseries', { 'symbol': 'IBM', 'start': datetime.datetime(2003, 11, 11), 'end': datetime.datetime(2013, 11, 11) }) spx_data = data_retrieval.get_time_series( 'download_yahoo_timeseries', { 'symbol': '^GSPC', 'start': datetime.datetime(2003, 11, 11), 'end': datetime.datetime(2013, 11, 11) }) series = zip(*timeseries.common_dates( ibm_data['IBM'][data_loader.TIMESERIES], spx_data['^GSPC'][data_loader.TIMESERIES])) ibm = [float(val) for val in series[1]] spx = [float(val) for val in series[2]] slope, intercept, r_value, _, _ = algorithms.linreg(ibm, spx) print('Beta: {0}'.format(intercept)) print('Slope: {0}'.format(slope)) print('RSq: {0}'.format(r_value**2)) series_for_charting = [('IBM', ibm), ('SPX', spx)] charts.line(series[0], series_for_charting) charts.scatter(series_for_charting)
def test_common_dates(self): ''' Test the common_dates correctly returns an ordered result on the date intersection ''' x = [ (datetime.datetime(2013, 10, 31), 4.53), (datetime.datetime(2013, 11, 4), -2.89), (datetime.datetime(2013, 11, 5), -0.18), (datetime.datetime(2013, 11, 6), 1.36), (datetime.datetime(2013, 11, 7), 6.32), (datetime.datetime(2013, 11, 12), -6.30) ] # Deliberately put dates slightly out of order y = [ (datetime.datetime(2013, 10, 31), 8.53), (datetime.datetime(2013, 11, 1), -9.87), (datetime.datetime(2013, 11, 6), 11.36), (datetime.datetime(2013, 11, 5), 1.18), (datetime.datetime(2013, 11, 7), -6.32), (datetime.datetime(2013, 11, 8), 3.51), (datetime.datetime(2013, 11, 12), -2.30), (datetime.datetime(2013, 11, 13), 3.51) ] merged = timeseries.common_dates(x, y) expected_result = [ (datetime.datetime(2013, 10, 31), 4.53, 8.53), (datetime.datetime(2013, 11, 5), -0.18, 1.18), (datetime.datetime(2013, 11, 6), 1.36, 11.36), (datetime.datetime(2013, 11, 7), 6.32, -6.32), (datetime.datetime(2013, 11, 12), -6.30, -2.30) ] self.assertEqual(merged, expected_result)