def get_fit_parms(fields=GOOD_FITS, fit_style='stretched exponential', xmin='custom', return_oil_field=True): """Return a hash with the keys being the fields (names) and value the relevant fit parameters given the fit style. """ fit_parms = {} if fit_style == 'exponential': fit = fit_exponential elif fit_style == 'stretched exponential': fit = fit_stretched_exponential elif fit_style == 'power law': fit = fit_power_law oil_fields = get_oil_fields() if xmin == 'custom': def get_xmin(field, MAXES): return MAXES[field] if field in MAXES.keys() else 'max' for field in fields: fit_parms[field] = fit(oil_fields[field], xmin=get_xmin(field, MAXES)) if return_oil_field: return (fit_parms, oil_fields) else: return fit_parms
def rate_of_discoveries(bins=[1e4, 1e6, 1e7, 1e8], fields='all'): """Plots the number of fields discovered up to time t. This informs us about the underlying discovery mechanism. This mechanism can depend on size. """ oil_fields = get_oil_fields() if fields == 'all': urrs = Series(URRS)[oil_fields.columns].dropna() * 1e6 * M3_TO_BARRELS binned_urrs = [urrs[(urrs > bins[i]) & (urrs < bins[i+1])] for i in range(len(bins)-1)] res = [] plt.ion() fig = plt.figure(figsize=(28, 10)) for i, bin in enumerate(binned_urrs): starts = [] for field in bin.index: starts.append(oil_fields[field].dropna().index[0]) starts = array(starts) dates = date_range(START, END) number_of_discoveries = [(starts <= date).sum() for date in dates] res.append((dates, number_of_discoveries)) fig.add_subplot(1, len(bins)-1, i+1) ax = plt.gca() ax.plot(dates, number_of_discoveries, 'ok', markersize=4.) plt.xlabel('Date of discovery') plt.ylabel('Number of fields discovered') plt.title('bin=%s-%s' % (log10(bins[i]), log10(bins[i+1]))) return res