Add files via upload
This commit is contained in:
parent
84da1d015e
commit
9e081a7ea2
File diff suppressed because one or more lines are too long
@ -18,7 +18,8 @@
|
|||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"from IPython.core.display import HTML\n",
|
"from IPython.core.display import HTML\n",
|
||||||
"from typing import Iterator, Tuple, List, Dict\n",
|
"from typing import Iterator, Iterable, Tuple, List, Dict\n",
|
||||||
|
"from collections import namedtuple\n",
|
||||||
"import matplotlib\n",
|
"import matplotlib\n",
|
||||||
"import matplotlib.pyplot as plt\n",
|
"import matplotlib.pyplot as plt\n",
|
||||||
"import numpy as np\n",
|
"import numpy as np\n",
|
||||||
@ -36,7 +37,7 @@
|
|||||||
"\n",
|
"\n",
|
||||||
" Mon, 10/5\t2020\tHalf way around the bay on bay trail\t6:26:35\t80.05\t541\n",
|
" Mon, 10/5\t2020\tHalf way around the bay on bay trail\t6:26:35\t80.05\t541\n",
|
||||||
" \n",
|
" \n",
|
||||||
"I parse the file into the pandas dataframe `rides`, adding derived columns for miles per hour, vertical feet climbed per hour (VAM), grade in feet per mile, grade in percent, and kilometers ridden:"
|
"I parse the file into the pandas dataframe `rides`, adding derived columns for miles per hour, vertical meters climbed per hour (VAM), grade in feet per mile, grade in percent, and kilometers ridden:"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -52,9 +53,9 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"def parse_hours(time: str) -> float: \n",
|
"def parse_hours(time: str) -> float: \n",
|
||||||
" \"\"\"Parse '4:30:00' => 4.5 hours.\"\"\"\n",
|
" \"\"\"Parse '4:30:00' => 4.5 hours.\"\"\"\n",
|
||||||
" while time.count(':') < 2: \n",
|
" hrs = sum(int(x) * 60 ** (i - 2) \n",
|
||||||
" time = '0:' + time\n",
|
" for i, x in enumerate(reversed(time.split(':'))))\n",
|
||||||
" return round(pd.Timedelta(time).seconds / 60 / 60, 4)\n",
|
" return round(hrs, 2)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"def parse_int(field: str) -> int: return int(field.replace(',', ''))\n",
|
"def parse_int(field: str) -> int: return int(field.replace(',', ''))\n",
|
||||||
"\n",
|
"\n",
|
||||||
@ -75,7 +76,10 @@
|
|||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"rides = parse_rides(open('bikerides.tsv'))"
|
"rides = parse_rides(open('bikerides.tsv'))\n",
|
||||||
|
"yearly = parse_rides(open('bikeyears.tsv')).drop(columns=['date', 'title'])\n",
|
||||||
|
"yearly['miles'] = list(map(round, yearly['miles']))\n",
|
||||||
|
"yearly.index = [''] * len(yearly)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -123,11 +127,13 @@
|
|||||||
"source": [
|
"source": [
|
||||||
"# Reading Data: `places`\n",
|
"# Reading Data: `places`\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Monthly, I will take my [summary data from wandrer.earth](https://wandrer.earth/athletes/3534/santa-clara-county-california) and enter it in the file [bikeplaces.txt](bikeplaces.txt), in a format where\n",
|
"Monthly, I will take my [summary data from wandrer.earth](https://wandrer.earth/athletes/3534/santa-clara-county-california) and enter it in the file [bikeplaceupdates.txt](bikeplaceupdates.txt), in a format where\n",
|
||||||
"\n",
|
"\n",
|
||||||
" Cupertino: 172: 22.1 23.9 26.2*3 26.3 | 26.4\n",
|
" por | 48.2 | Portola Valley | \n",
|
||||||
|
" --------------------------------------------------------------------------------\n",
|
||||||
|
" 2022-03 por 99.5 sky 99.24\n",
|
||||||
" \n",
|
" \n",
|
||||||
"means that Cupertino has 172 miles of roads, and that by the first month I started keeping track, I had ridden 22.1% of them; in the last month 26.4%; and the `26.2*3` means that for 3 months in a row I had 26.2%. The `|` indicates the end of a year. A line that starts with `#` is a comment."
|
"means that \"por\" is the abbreviation for Portola Valley, which has 48.2 miles of roads, and in March 2022, I had ridden 99.5% of the roads in Portola Valley, as well as 99.24% of the roads in Sky Londa, etc. (I wanted both the place declarations and the monthly udates to be in one file, in case I decide to global replace some abbreviation.)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -136,321 +142,29 @@
|
|||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"class Month(int):\n",
|
"Place = namedtuple('Place', 'name, miles, special, months, pcts')\n",
|
||||||
" \"\"\"An integer in the form: 12 * year + month.\"\"\"\n",
|
|
||||||
" def __str__(self): return f'{(self - 1) // 12}-{(self % 12) or 12:02d}'\n",
|
|
||||||
"\n",
|
"\n",
|
||||||
"start = Month(2020 * 12 + 7) # Starting month: July 2020\n",
|
"def parse_places(filename='bikeplaces.txt', sep='-'*80) -> Dict:\n",
|
||||||
"bonuses = (0.1, 25, 90, 99) # Percents the earn important bonuses\n",
|
" \"\"\"Parse file into a dict:\n",
|
||||||
"\n",
|
" places = {'por': Place('Portola Valley', 48.2, '', [month, ...], [pct, ...])}\"\"\"\n",
|
||||||
"Entry = Tuple[str, float, List[float]] # (Place_Name, miles_of_roads, [pct_by_month,...])\n",
|
|
||||||
"\n",
|
|
||||||
"def wandrer(category, entries, start=start):\n",
|
|
||||||
" \"\"\"Plot Wandrer.earth data.\"\"\"\n",
|
|
||||||
" fig, ax = plt.figure(), plt.subplot(111); \n",
|
|
||||||
" plt.plot()\n",
|
|
||||||
" for (place, miles, pcts), marker in zip(entries, '^v><osdhxDHPX*1234'):\n",
|
|
||||||
" N = len(pcts)\n",
|
|
||||||
" dates = [Month(start + i) for i in range(N)]\n",
|
|
||||||
" X = [dates[i] for i in range(N) if pcts[i]]\n",
|
|
||||||
" Y = [pcts[i] for i in range(N) if pcts[i]]\n",
|
|
||||||
" ax.plot(X, Y, ':', marker=marker, label=label(pcts, place, miles))\n",
|
|
||||||
" ax.legend(loc='center left', bbox_to_anchor=(1, 0.5), shadow=True,\n",
|
|
||||||
" prop=matplotlib.font_manager.FontProperties(family='monospace'))\n",
|
|
||||||
" plt.xticks(dates, [str(d) for d in dates], rotation=90)\n",
|
|
||||||
" plt.ylabel('Percent of Area Ridden')\n",
|
|
||||||
" plt.title(category); plt.tight_layout(); grid(axis='y'); plt.show()\n",
|
|
||||||
" \n",
|
|
||||||
"def label(pcts, place, miles) -> str:\n",
|
|
||||||
" pct = f'{rounded(pcts[-1]):>3}' if pcts[-1] > 1.4 else f'{pcts[-1]}'\n",
|
|
||||||
" done = miles * pcts[-1]\n",
|
|
||||||
" bonus = next((f' {rounded((p - pcts[-1]) / 100 * miles):>3} to {p}%' \n",
|
|
||||||
" for p in bonuses if p >= pcts[-1]), '')\n",
|
|
||||||
" return f'{pct}% ({rounded(done / 100):>3}/{rounded(miles):<3} mi){bonus} {place}'\n",
|
|
||||||
" \n",
|
|
||||||
"def parse_places(lines) -> Dict[str, List[Entry]]:\n",
|
|
||||||
" \"Parse bikeplaces.txt into a dict of {'Title': [entry,...]}\"\n",
|
|
||||||
" places = {}\n",
|
" places = {}\n",
|
||||||
" category = None\n",
|
" declarations, updates = open(filename).read().split(sep)\n",
|
||||||
" for line in lines:\n",
|
" for abbrev, miles, name, special in tokenize(declarations, sep='|'):\n",
|
||||||
" line = line.strip()\n",
|
" places[abbrev] = Place(name, float(miles), special, [], [])\n",
|
||||||
" if line.startswith('#') or not line: \n",
|
" for month, tokens in enumerate(tokenize(updates)):\n",
|
||||||
" pass\n",
|
" for i in range(1, len(tokens), 2): \n",
|
||||||
" elif line.startswith(':'):\n",
|
" abbrev, pct = tokens[i], float(tokens[i+1])\n",
|
||||||
" title = line.strip(':')\n",
|
" places[abbrev].months.append(month)\n",
|
||||||
" places[title] = []\n",
|
" places[abbrev].pcts.append(pct)\n",
|
||||||
" else:\n",
|
|
||||||
" places[title].append(parse_entry(line))\n",
|
|
||||||
" places[title].sort(key=lambda entry: -entry[-1][-1])\n",
|
|
||||||
" return places\n",
|
" return places\n",
|
||||||
" \n",
|
|
||||||
"def parse_entry(line: str) -> Entry:\n",
|
|
||||||
" \"\"\"Parse line => ('Place Name', miles, [percents]); '=' can be used.\"\"\"\n",
|
|
||||||
" if line.count(':') != 2:\n",
|
|
||||||
" print('bad', line)\n",
|
|
||||||
" place, miles, pcts = line.replace('|', ' ').split(':')\n",
|
|
||||||
" pcts = re.sub('( [0-9.]+)[*]([0-9]+)', lambda m: m.group(1) * int(m.group(2)),\n",
|
|
||||||
" pcts).split()\n",
|
|
||||||
" for i, p in enumerate(pcts):\n",
|
|
||||||
" pcts[i] = pcts[i - 1] if p == '=' else 100 if p == '100' else float(p)\n",
|
|
||||||
" return place, float(miles), pcts \n",
|
|
||||||
" \n",
|
|
||||||
"def rounded(x: float) -> str: return f'{round(x):,d}' if x > 10 else f'{x:.1f}'\n",
|
|
||||||
"\n",
|
"\n",
|
||||||
"def wandering(places: dict):\n",
|
"def tokenize(text, sep=None): \n",
|
||||||
" \"Plot charts of unique roads ridden in various places.\"\n",
|
" \"\"\"Split text into lines split by sep; strip each token; ignore blanks and comments.\"\"\"\n",
|
||||||
" for category in places:\n",
|
" lines = text.splitlines()\n",
|
||||||
" wandrer(category, places[category])"
|
" return [[token.strip() for token in line.split(sep)]\n",
|
||||||
]
|
" for line in lines if line.strip() and not line.startswith('#')]\n",
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 7,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"places = parse_places(open('bikeplaces.txt'))"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "markdown",
|
|
||||||
"metadata": {},
|
|
||||||
"source": [
|
|
||||||
"## Updating `bikeplaces.txt` to a new month"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 8,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"def update_places(filename='bikeplaces.txt'):\n",
|
|
||||||
" \"\"\"Print an update of the bikeplaces.txt file by adding a new month.\"\"\"\n",
|
|
||||||
" return ''.join(map(update_line, open(filename)))\n",
|
|
||||||
"\n",
|
"\n",
|
||||||
"def update_line(line):\n",
|
"places = parse_places()"
|
||||||
" \"\"\"Update a line by adding a new month with the same % as the previous.\"\"\"\n",
|
|
||||||
" words = line.split()\n",
|
|
||||||
" if not words or words[0].startswith(':'):\n",
|
|
||||||
" pass\n",
|
|
||||||
" elif '*' in words[-1]:\n",
|
|
||||||
" m, d = words[-1].split('*')\n",
|
|
||||||
" words[-1] = m + '*' + str(int(d) + 1)\n",
|
|
||||||
" else:\n",
|
|
||||||
" words[-1] += '*2'\n",
|
|
||||||
" return ' '.join(words) + '\\n'"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 9,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "stdout",
|
|
||||||
"output_type": "stream",
|
|
||||||
"text": [
|
|
||||||
":Complete!:\n",
|
|
||||||
"Atherton: 56.0: 0*4 91.2 94.0 | 95.2*2 94.2 94.9 96.2*2 98.7 99.5 99.19 99.3*2\n",
|
|
||||||
"Kensington Square: 0.6: 86.9 100*5 | 100*4 99.9*4 99.99*3\n",
|
|
||||||
"Menlo Oaks: 3.5: 0*4 98.4 99.7 | 99.7*4 100*4 99.99*3\n",
|
|
||||||
"West Menlo Park: 11.2: 0*4 97.5 98.1 | 98.1*3 99.3 99.7*2 100*2 99.99*3\n",
|
|
||||||
"North Fair Oaks: 26.7: 78.1 90.4 93.1 93.8 94.8 96.1 | 96.9*2 99.1*6 99.17*3\n",
|
|
||||||
"Sequoia Tract: 11.5: 0*4 72.8 82.3 | 92.5*4 96.4*2 97.5 98.2 99.4*3\n",
|
|
||||||
"East Palo Alto: 47.6: 74.4 91.2 91.9*2 92.2 93.3 | 93.4*2 92.4*2 92.5*4 95.0 99.2*2\n",
|
|
||||||
"\n",
|
|
||||||
":Over 90%:\n",
|
|
||||||
"Los Altos: 139.6: 40.2 43.7 72.4 77.2 84.5 90.8 | 91.0*2 91.1*2 91.2 90.4*3 90.63 90.9*2\n",
|
|
||||||
"Emerald Lake Hills: 24.6: 0.0 94.3*3 44.7 51.0 | 80.0 85.8 91.3*6 92.2*3\n",
|
|
||||||
"Menlo Park: 141.1: 67.7 76.8 87.7 90.7 91.2 90.1 | 92.5*2 91.4 91.6*3 91.8*2 93.5 94.7*2\n",
|
|
||||||
"Mountain View: 211.8: 53.0 59.9 63.0 63.6 72.9 77.1 | 91.1*4 92.3*4 91.12 93.5*2\n",
|
|
||||||
"Palo Alto: 298.8: 63.0 73.6 85.4 85.7 87.1 87.6 | 88.1*2 90.3 90.4 90.5 90.6*2 90.7 89.8 91.3*2\n",
|
|
||||||
"Loyola: 18.3: 0*4 60.8 62.1 | 62.1*4 91.5 90.6 91.3*2\n",
|
|
||||||
"Palomar Park: 4.1: 0*6 | 91.1*2 94.9*6 98.1*3\n",
|
|
||||||
"Syline Ridge OSP: 0.8: 0*6 | 0*9 91.5*2\n",
|
|
||||||
"\n",
|
|
||||||
":Between 33% and 90%:\n",
|
|
||||||
"Monte Sereno: 20.4: 20.5*6 | 20.5 39.8*3 44.1*7\n",
|
|
||||||
"Burlingame: 88.4: 9.4*6 | 9.4 31.5*3 35.5*7\n",
|
|
||||||
"Los Altos Hills: 91: 48.4*2 49.0 55.1*2 55.4 | 55.8*4 54.0*2 56.4 59.0*2 62.1*2\n",
|
|
||||||
"Portola Valley: 59: 0*4 57.3 59.8 | 59.8*2 61.0*2 66.2 66.4 67.4 70.3 72.0*2\n",
|
|
||||||
"Redwood City: 242.2: 34.0 39.1 46.0 51.6 56.9 60.8 | 62.9*2 65.1*2 66.3 66.7 67.0*2 75.0 77.9*2\n",
|
|
||||||
"San Carlos: 99: 22.2 26.0 32.9 32.9 37.2 39.0 | 40.5*2 41.4*2 41.0 41.7*6\n",
|
|
||||||
"Woodside: 75.2: 51.9*2 52.3*3 54.0 | 56.1*4 62.2 65.8 81.8 84.3 85.5*3\n",
|
|
||||||
"Ladera: 8.0: 0*4 30.5 29.8 | 29.8*2 47.6*2 44.5*2 50.6*3 82.1*2\n",
|
|
||||||
"Los Trancos Woods: 5.3: 0*4 71.4*2 | 71.4*4 74.9 75.0*6\n",
|
|
||||||
"Sky Londa: 11.8: 0*4 72.1*2 | 73.2*4 75.4 75.5*4 83.4*2\n",
|
|
||||||
"Foster City: 150: 9.1*6 | 9.1 27.4 37.2*2 38.7*5 34.3*2\n",
|
|
||||||
"Burlingame Hills: 6: 0*6 | 0.8 34.5*3 35.5*7\n",
|
|
||||||
"\n",
|
|
||||||
":Between 25% and 33%:\n",
|
|
||||||
"Newark: 147: 15*3 17*3 | 18.7 26.8 30.8*9\n",
|
|
||||||
"Millbrae: 65: 0*6 | 0 18.4 31.6*2 32.8*7\n",
|
|
||||||
"Cupertino: 172: 22.1 23.9 26.2*3 26.3 | 26.4*4 26.5*4 29.5 29.7*2\n",
|
|
||||||
"Belmont: 98.1: 15.5 17.3 18.6 18.6 20.6*2 | 27.4*2 27.5*2 27.3 27.4*4 27.5*2\n",
|
|
||||||
"Campbell: 119: 8.9 10.1 12.4*4 | 12.4 25.2 26.5*4 26.8 28.3*2\n",
|
|
||||||
"Hillsborough: 85.3: 3.3*6 | 3.6 24.5 25.3*6 25.5*3\n",
|
|
||||||
"Los Gatos: 148: 7.5 8.6 8.8*4 | 8.8 26.1*3 28.2*5 28.6*2\n",
|
|
||||||
"San Mateo: 256: 11.1*6 | 11.3 25.5 27.8*9\n",
|
|
||||||
"Saratoga: 180: 14.5 15.7 17.4*4 | 17.4 26.9*3 27.2*7\n",
|
|
||||||
"Sunnyvale: 357: 19.4 19.9 22.2*4 | 25.1*3 25.8 25.9*5 31.0*2\n",
|
|
||||||
"Union City: 208.8: 7*3 8*3 | 8.8*2 25.7*2 26.7*7\n",
|
|
||||||
"Fremont: 780.2: 9*3 10*3 | 11.7*2 27.5 28.1*8\n",
|
|
||||||
"San Mateo Highlands: 18: 0*6 | 18.0 29.2*3 28.0*7\n",
|
|
||||||
"Santa Clara: 348: 6.4*2 9.6*4 | 9.6*3 26.6*5 28.8 29.4*2\n",
|
|
||||||
"San Bruno: 114: 0*6 | 0*3 25.4*5 25.5*3\n",
|
|
||||||
"Milpitas: 224: 2.2*4 4.4*2 | 4.4*3 26.6 27.2*5 29.5*2\n",
|
|
||||||
"\n",
|
|
||||||
":A Few Places Below 25%:\n",
|
|
||||||
"Half Moon Bay: 68: 0*6 | 8.9*11\n",
|
|
||||||
"Emeryville: 28.1: 0*6 | 5.5*4 7.0*7\n",
|
|
||||||
"Hayward: 444.5: 0*6 | 4.6*4 5.1*7\n",
|
|
||||||
"Berkeley: 260.3: 5.0*3 7.0*3 | 7.0*11\n",
|
|
||||||
"Albany: 42.7: 0*6 | 0*4 6.6*7\n",
|
|
||||||
"\n",
|
|
||||||
":San Jose Neighborhoods:\n",
|
|
||||||
"San Jose: 2618.7: 1.3 1.36 5.3*4 | 5.4*3 6.7 11.9 13.1 18.2 19.8 23.1 25.6*2\n",
|
|
||||||
"Spartan Keyes: 64.3: 0*6 | 22.1*6 38.9 39.0 35.74 35.8*2\n",
|
|
||||||
"Willow Glen: 81.6: 0*6 | 13.9*6 29.67 32.6 31.95 34.9*2\n",
|
|
||||||
"Gardner: 23.4: 0*6 | 0*6 22.6 40.5 39.69 43.9*2\n",
|
|
||||||
"Seven Trees: 40.9: 0*6 | 0*6 27.96 28.0 25.9*3\n",
|
|
||||||
"Edenvale: 30: 0*6 | 0*6 47.35*2 46.81 47.0*2\n",
|
|
||||||
"Parkview: 42.5: 0*6 | 0*6 30.32*2 27.8 32.1*2\n",
|
|
||||||
"Branham: 44.0: 0*6 | 0*6 26.5 27.9 27.75 32.1*2\n",
|
|
||||||
"Willow Glen South: 63.3: 0*6 | 0*6 22.3 30.6 29.23 30.2*2\n",
|
|
||||||
"Communications Hill: 27.8: 0*6 | 0*6 34.1*2 33.96 37.2*2\n",
|
|
||||||
"\n",
|
|
||||||
":San Francisco Neighborhoods Over 25%:\n",
|
|
||||||
"Golden Gate Park: 40.8: 0*6 | 25.6*8 37.8*3\n",
|
|
||||||
"Lincoln Park: 4.5: 0*6 | 43*8 35.4*3\n",
|
|
||||||
"Presidio National Park: 43.5: 0*6 | 21.1*4 24.4*4 27.7*3\n",
|
|
||||||
"Presidio Terrace: 2.8: 0*6 | 37.0*8 43.7*3\n",
|
|
||||||
"Seacliff: 4.1: 0*6 | 23.1*8 30.7*3\n",
|
|
||||||
"South Beach: 4.8: 0*6 | 28.2*4 39.6*7\n",
|
|
||||||
"Lake Street: 3.9: 0*6 | 0*8 36.8*3\n",
|
|
||||||
"\n",
|
|
||||||
":San Francisco Neighborhoods Under 25%:\n",
|
|
||||||
"Little Hollywood: 3.7: 0*6 | 0*4 15.4*7\n",
|
|
||||||
"Mission Bay: 13.8: 0*6 | 0*4 9.3*7\n",
|
|
||||||
"Sutro Heights: 7.1: 0*6 | 0*4 14.0*7\n",
|
|
||||||
"Pacific Heights: 18: 0*6 | 10.8*11\n",
|
|
||||||
"Ashbury Heights: 3.7: 0*6 | 12.9*11\n",
|
|
||||||
"Clarendon Heights: 6: 0*6 | 14.3*11\n",
|
|
||||||
"Cow Hollow: 12: 0*6 |5*4 12.0*7\n",
|
|
||||||
"Financial District: 9.4: 0*6 |5.8*4 9.7*7\n",
|
|
||||||
"Golden Gate Heights: 17.8: 0*6 | 10.7*11\n",
|
|
||||||
"Polk Gulch: 4: 0*6 | 18.2*11\n",
|
|
||||||
"Presidio Heights: 6.5: 0*6 | 15.1*11\n",
|
|
||||||
"Aquatic Park / Fort Mason: 6.4: 0*6 | 0*4 14.9*7\n",
|
|
||||||
"Central Waterfront: 10.2: 0*6 | 0*4 6.7*7\n",
|
|
||||||
"Northern Waterfront: 5.6: 0*6 | 0*4 16.4*7\n",
|
|
||||||
"Dogpatch: 5.1: 0*6 | 0*4 12.4*7\n",
|
|
||||||
"Fisherman's Wharf: 6.2: 0*6 | 0*4 14.2*7\n",
|
|
||||||
"Balboa Terrace: 3.4: 0*6 | 18.2*11\n",
|
|
||||||
"Cole Valley: 1.7: 0*6 | 19.6*11\n",
|
|
||||||
"Forest Hill: 6.1: 0*6 | 15.7*11\n",
|
|
||||||
"\n",
|
|
||||||
":Far, Far Away:\n",
|
|
||||||
"Mokelumne Hill, Calaveras: 14.7: 28.9*6| 28.9*11\n",
|
|
||||||
"MIT, Cambridge, MA: 9.6: 37.2*6 | 37.2*11\n",
|
|
||||||
"Barangaroo, NSW: 1.7: 49.9*6 | 49.9*11\n",
|
|
||||||
"Dawes Point, NSW: 1.8: 29.2*6 | 29.2*11\n",
|
|
||||||
"Millers Point, NSW: 3.2: 38.2*6 | 38.2*11\n",
|
|
||||||
"Stinson Beach, Marin: 11.2: 9.2*6 | 9.2*11\n",
|
|
||||||
"Muir Beach, Marin: 4.6: 35.8*6 | 35.8*11\n",
|
|
||||||
"Corte Madera, Marin: 51: 0*6 | 0*4 13*7\n",
|
|
||||||
"Mill Valley, Marin: 92.2: 0*6 | 0*4 5.1*7\n",
|
|
||||||
"San Rafael, Marin: 260: 0*6 | 0*4 3.7*7\n",
|
|
||||||
"Sausalito, Marin: 32.7: 0*6 | 0*4 13.1*7\n",
|
|
||||||
"Cambridge, MA: 180.8: 6.4*6 | 6.4*11\n",
|
|
||||||
"Bodega Bay, Sonoma: 28.9: 18*6 | 18*11\n",
|
|
||||||
"Guerneville, Sonoma: 22.7: 23.4*6 | 23.4*11\n",
|
|
||||||
"Healdsburg, Sonoma: 53.7: 18.5*6 | 18.5*11\n",
|
|
||||||
"\n",
|
|
||||||
":California Bay Area Counties:\n",
|
|
||||||
"Contra Costa: 6052: 1.0*6 | 1.0*3 1.41*8\n",
|
|
||||||
"San Mateo: 3173: 20.1 21.2 22.9 23.4 24.57 25.53 | 26.43 30.0 31.27 32.24 32.54 32.98 33.48 33.56 34.51 34.7*2\n",
|
|
||||||
"Santa Clara: 7507: 12.7 13.6 15.4 15.6 16.04 16.29 | 16.78 17.73 18.15 20.0 21.1 22.53 24.45 25.05 25.96 27.76*2\n",
|
|
||||||
"Alameda: 5704: 3.3*3 3.94*3 | 4.73*2 7.06 7.14 7.34*7\n",
|
|
||||||
"Marin: 2322: 6.7*6 | 6.7*4 7.98*7\n",
|
|
||||||
"Napa: 1524: 5.1*6 | 5.1*11\n",
|
|
||||||
"Sonoma: 4556: 5.1*6 | 5.1*11\n",
|
|
||||||
"San Francisco: 1197: 4.5*6 | 4.5*4 5.47*4 6.4 6.51*2\n",
|
|
||||||
"Santa Cruz: 2767: 2.3*6 | 2.3*11\n",
|
|
||||||
"\n",
|
|
||||||
":California:\n",
|
|
||||||
"California: 371717: .712 .811 .846 .867 .8875 .8873 | .9054 .9624 1.0289 1.0758 1.1278 1.1386 1.1812 1.1939 1.2007 1.2524*2\n",
|
|
||||||
"\n",
|
|
||||||
":USA and Earth\n",
|
|
||||||
"USA: 6333164: .048 .052 .055 .05589 .0571 .05749 | .05853 .06183 .06553 .06824 0.07138 0.07200 0.07446 0.0752 0.07665 0.07904*2\n",
|
|
||||||
"Earth: 40818989: .008 .0089 .0091 .00936 .009535 .009536| .009597 .010136 .010561 .010997 .011349 0.011448 0.011839 0.011955 0.012024 0.0124113*2\n",
|
|
||||||
"\n"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"#print(update_places()) #### Do this once a month and copy/paste the output"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "markdown",
|
|
||||||
"metadata": {},
|
|
||||||
"source": [
|
|
||||||
"# Eddington Number"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 11,
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"def Ed_number(distances) -> int:\n",
|
|
||||||
" \"\"\"Eddington number: The maximum integer e such that you have bicycled \n",
|
|
||||||
" a distance of at least e on at least e days.\"\"\"\n",
|
|
||||||
" distances = sorted(distances, reverse=True)\n",
|
|
||||||
" return max(e for e, d in enumerate(distances, 1) if d >= e)\n",
|
|
||||||
"\n",
|
|
||||||
"def Ed_gap(distances, target) -> int:\n",
|
|
||||||
" \"\"\"The number of rides needed to reach an Eddington number target.\"\"\"\n",
|
|
||||||
" return target - sum(distances > target)\n",
|
|
||||||
"\n",
|
|
||||||
"def Ed_gaps(rides, N=10) -> dict:\n",
|
|
||||||
" \"\"\"A table of gaps to Eddington numbers by year, and a plot.\"\"\"\n",
|
|
||||||
" E_km, E_mi = Ed_number(rides.kms), Ed_number(rides.miles)\n",
|
|
||||||
" data = [(E_km + d, Ed_gap(rides.kms, E_km + d), E_mi + d, Ed_gap(rides.miles, E_mi + d))\n",
|
|
||||||
" for d in range(N)]\n",
|
|
||||||
" frame = pd.DataFrame(data, columns=['kms', 'Ed gap (kms)', 'miles', 'Ed gap (miles)'])\n",
|
|
||||||
" figure, (ax1, ax2) = plt.subplots(1, 2)\n",
|
|
||||||
" frame.plot(ax=ax1, kind='line', x='kms', y='Ed gap (kms)', style='o:', grid=1,\n",
|
|
||||||
" title='Metric Eddington Gaps')\n",
|
|
||||||
" frame.plot(ax=ax2, kind='line', x='miles', y='Ed gap (miles)', style='o:', grid=1,\n",
|
|
||||||
" title='Eddington Gaps')\n",
|
|
||||||
" return frame\n",
|
|
||||||
"\n",
|
|
||||||
"def Ed_gaps(rides, N=10) -> dict:\n",
|
|
||||||
" \"\"\"A table of gaps to Eddington numbers by year, and a plot..\"\"\"\n",
|
|
||||||
" E_km, E_mi = Ed_number(rides.kms), Ed_number(rides.miles)\n",
|
|
||||||
" data = [(E_km + d, Ed_gap(rides.kms, E_km + d), E_mi + d, Ed_gap(rides.miles, E_mi + d))\n",
|
|
||||||
" for d in range(N)]\n",
|
|
||||||
" frame = pd.DataFrame(data, columns=['kms', 'Ed gap (kms)', 'miles', 'Ed gap (miles)'])\n",
|
|
||||||
" figure, (ax1, ax2) = plt.subplots(1, 2)\n",
|
|
||||||
" frame.plot(ax=ax1, kind='line', x='kms', y='Ed gap (kms)', style='o:', grid=1,\n",
|
|
||||||
" title='Metric Eddington Gaps')\n",
|
|
||||||
" frame.plot(ax=ax2, kind='line', x='miles', y='Ed gap (miles)', style='o:', grid=1,\n",
|
|
||||||
" title='Eddington Gaps')\n",
|
|
||||||
" return frame\n",
|
|
||||||
"\n",
|
|
||||||
"def Ed_progress(years=reversed(range(2013, 2022)), rides=rides) -> pd.DataFrame:\n",
|
|
||||||
" \"\"\"A table of Eddington numbers by year, and a plot.\"\"\"\n",
|
|
||||||
" def Ed(year, d): return Ed_number(rides[rides['year'] <= year][d])\n",
|
|
||||||
" data = [(y, Ed(y, 'kms'), Ed(y, 'miles')) for y in years]\n",
|
|
||||||
" frame = pd.DataFrame(data, columns=['year', 'Ed_km', 'Ed_mi'])\n",
|
|
||||||
" frame.plot('year', ['Ed_km', 'Ed_mi'], style='o:',\n",
|
|
||||||
" title=f'My Eddington Numbers: {Ed_number(rides.kms)} in kms, {Ed_number(rides.miles)} in miles')\n",
|
|
||||||
" grid(axis='y')\n",
|
|
||||||
" return frame"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -462,7 +176,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 12,
|
"execution_count": 7,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@ -499,52 +213,185 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "markdown",
|
||||||
"execution_count": 14,
|
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"data": {
|
|
||||||
"text/plain": [
|
|
||||||
"{6, 10}"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"execution_count": 14,
|
|
||||||
"metadata": {},
|
|
||||||
"output_type": "execute_result"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
"source": [
|
||||||
"class Acker:\n",
|
"# Plotting Wandrer Places"
|
||||||
" def __init__(self, n=0):\n",
|
|
||||||
" self.HWM = n\n",
|
|
||||||
" self._set = {n}\n",
|
|
||||||
" \n",
|
|
||||||
" def ack(self, n):\n",
|
|
||||||
" if n <= self.HWM:\n",
|
|
||||||
" warn(f'duplicate ack of {n}')\n",
|
|
||||||
" else:\n",
|
|
||||||
" self._set.add(n)\n",
|
|
||||||
" while self.HWM + 1 in self._set:\n",
|
|
||||||
" self._set.remove(self.HWM)\n",
|
|
||||||
" self.HWM += 1\n",
|
|
||||||
"\n",
|
|
||||||
"A = Acker(3)\n",
|
|
||||||
"A.ack(5)\n",
|
|
||||||
"A.ack(6)\n",
|
|
||||||
"A.ack(10)\n",
|
|
||||||
"assert A.HWM == 3\n",
|
|
||||||
"A.ack(4)\n",
|
|
||||||
"assert A.HWM == 6\n",
|
|
||||||
"A._set\n"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": 8,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": []
|
"source": [
|
||||||
|
"special_groups = dict(sf='San Francisco Neighborhoods', sj='San Jose Neighborhoods', \n",
|
||||||
|
" far='Far Away Places', county='Bay Area Counties', big='California, USA and Earth')\n",
|
||||||
|
"\n",
|
||||||
|
"def wandering(places, pcts=(100, 99, 90, 50, 33.3, 25, 0), specials=special_groups):\n",
|
||||||
|
" \"Plot charts within the various percent ranges, and special groups.\"\n",
|
||||||
|
" for i in range(len(pcts) - 1):\n",
|
||||||
|
" hi, lo = pcts[i], pcts[i + 1]\n",
|
||||||
|
" abbrevs = [a for a in places \n",
|
||||||
|
" if not places[a].special \n",
|
||||||
|
" and lo <= max_pct(a) < hi]\n",
|
||||||
|
" wandrer_plot(f'Places with {lo}% to {hi}% roads traveled', places, abbrevs)\n",
|
||||||
|
" for s in specials:\n",
|
||||||
|
" abbrevs = [a for a in places if places[a].special == s]\n",
|
||||||
|
" wandrer_plot(specials[s], places, abbrevs)\n",
|
||||||
|
" \n",
|
||||||
|
"def max_pct(abbrev) -> float: \n",
|
||||||
|
" \"\"\"The maximum percent of roads achieved for this place abbreviation.\"\"\"\n",
|
||||||
|
" if not places[abbrev].pcts: print('Warning: No pcts for', abbrev)\n",
|
||||||
|
" return max(places[abbrev].pcts, default=0)\n",
|
||||||
|
" \n",
|
||||||
|
"def wandrer_plot(title, places, abbrevs):\n",
|
||||||
|
" \"\"\"Plot Wandrer.earth data for the places with given abbrevs.\"\"\"\n",
|
||||||
|
" if not abbrevs:\n",
|
||||||
|
" return # Don't make an empty plot\n",
|
||||||
|
" abbrevs = sorted(abbrevs, key=max_pct, reverse=True)\n",
|
||||||
|
" fig, ax = plt.figure(), plt.subplot(111); \n",
|
||||||
|
" plt.plot()\n",
|
||||||
|
" for abbrev, marker in zip(abbrevs, markers):\n",
|
||||||
|
" name, miles, special, months, pcts = places[abbrev]\n",
|
||||||
|
" dates = [month_name(i) for i in range(max(months))]\n",
|
||||||
|
" name, miles, *_ = places[abbrev]\n",
|
||||||
|
" ax.plot(months, pcts, ':', marker=marker, label=label(pcts, name, miles))\n",
|
||||||
|
" ax.legend(loc='center left', bbox_to_anchor=(1, 0.5), shadow=True,\n",
|
||||||
|
" prop=matplotlib.font_manager.FontProperties(family='monospace'))\n",
|
||||||
|
" months = places['usa'].months\n",
|
||||||
|
" plt.xticks(months, labels=[month_name(i) for i in months], rotation=90)\n",
|
||||||
|
" plt.ylabel('Percent of Roads Ridden')\n",
|
||||||
|
" plt.title(title); plt.tight_layout(); grid(axis='y'); plt.show()\n",
|
||||||
|
" \n",
|
||||||
|
"markers = '^v><osdhxDHPX*' * 3 # Matplotlib markers\n",
|
||||||
|
"bonuses = (0.02, 0.1, 2, 25, 50, 90, 99) # Percents that earn important bonuses\n",
|
||||||
|
"\n",
|
||||||
|
"def label(pcts, name, miles) -> str:\n",
|
||||||
|
" \"\"\"Make a label for the legend.\"\"\"\n",
|
||||||
|
" pct = f'{rounded(pcts[-1]):>3}' if pcts[-1] > 1.4 else f'{pcts[-1]}'\n",
|
||||||
|
" done = miles * pcts[-1]\n",
|
||||||
|
" bonus = next((f' {rounded((p - pcts[-1]) / 100 * miles):>3} to {p}%' \n",
|
||||||
|
" for p in bonuses if p >= pcts[-1]), '')\n",
|
||||||
|
" return f'{pct}% ({rounded(done / 100):>3}/{rounded(miles):<3} mi){bonus} {name}'\n",
|
||||||
|
"\n",
|
||||||
|
"def month_name(i, start=2020 * 12 + 6) -> str:\n",
|
||||||
|
" \"\"\"Maps 0 -> '2020-7' and 13 to '2021-8', etc.\"\"\"\n",
|
||||||
|
" year = (start + i) // 12\n",
|
||||||
|
" month = (start + i) % 12 + 1\n",
|
||||||
|
" return f'{year}-{month:02}'\n",
|
||||||
|
"\n",
|
||||||
|
"def rounded(x: float) -> str: \n",
|
||||||
|
" \"\"\"Round x to 3 spaces wide (if possible).\"\"\"\n",
|
||||||
|
" return f'{round(x):,d}' if x > 10 else f'{x:.1f}'"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"# Pareto Front Across Two Counties"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 9,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"def make_leaders(data):\n",
|
||||||
|
" \"\"\"Make a dataframe of leaders in two counties.\"\"\"\n",
|
||||||
|
" leaders = pd.DataFrame(data, columns=['Name', 'SMC %', 'SCC %', 'Front?'])\n",
|
||||||
|
" leaders['SMC miles'] = [round(29.51 * d[1]) for d in data]\n",
|
||||||
|
" leaders['SCC miles'] = [round(75.64 * d[2]) for d in data]\n",
|
||||||
|
" leaders['Total miles'] = leaders['SMC miles'] + leaders['SCC miles']\n",
|
||||||
|
" return leaders\n",
|
||||||
|
"\n",
|
||||||
|
"leaders = make_leaders([\n",
|
||||||
|
" ('Barry Mann', 73.37, 29.35, 1), ('Jason Molenda', 7.13, 54.65, 1), \n",
|
||||||
|
" ('Peter Norvig', 50.06, 30.31, 1), ('Brian Feinberg', 29.72, 35.59, 1),\n",
|
||||||
|
" ('Jim Brooks', 4.23, 43.39, 0), ('Megan Gardner', 89.43, 8.69, 1),\n",
|
||||||
|
" ('Matthew Ring', 72.67, 1.48, 0), ('Elliot Huff', 50.43, 8.14, 0)])\n",
|
||||||
|
" \n",
|
||||||
|
"def pareto_front(leaders):\n",
|
||||||
|
" ax = leaders.plot('SMC %', 'SCC %', grid=True, kind='scatter')\n",
|
||||||
|
" front = sorted((x, y) for i, (_, x, y, f, *_) in leaders.iterrows() if f)\n",
|
||||||
|
" ax.plot(*zip(*front), ':'); ax.axis('square'); grid()\n",
|
||||||
|
" for i, (name, x, y, *_) in leaders.iterrows():\n",
|
||||||
|
" initials = ''.join(w[0] for w in name.split())\n",
|
||||||
|
" ax.text(x - 2, y + 2, initials)\n",
|
||||||
|
" return leaders.drop(columns=['Front?'])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"# Eddington Number"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 10,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"def Ed_number(rides, units) -> int:\n",
|
||||||
|
" \"\"\"Eddington number: The maximum integer e such that you have bicycled \n",
|
||||||
|
" a distance of at least e on at least e days.\"\"\"\n",
|
||||||
|
" distances = sorted(rides[units], reverse=True)\n",
|
||||||
|
" return max(e for e, d in enumerate(distances, 1) if d >= e)\n",
|
||||||
|
"\n",
|
||||||
|
"def Ed_gap(distances, target) -> int:\n",
|
||||||
|
" \"\"\"The number of rides needed to reach an Eddington number target.\"\"\"\n",
|
||||||
|
" return target - sum(distances >= target)\n",
|
||||||
|
"\n",
|
||||||
|
"def Ed_gaps(rides, N=10) -> dict:\n",
|
||||||
|
" \"\"\"A table of gaps to Eddington numbers by year, and a plot..\"\"\"\n",
|
||||||
|
" E_km = Ed_number(rides, 'kms')\n",
|
||||||
|
" E_mi = Ed_number(rides, 'miles')\n",
|
||||||
|
" data = [(E_km + d, Ed_gap(rides.kms, E_km + d), \n",
|
||||||
|
" E_mi + d, Ed_gap(rides.miles, E_mi + d))\n",
|
||||||
|
" for d in range(N)]\n",
|
||||||
|
" df = pd.DataFrame(data, columns=['kms', 'kms gap', 'miles', 'miles gap'])\n",
|
||||||
|
" return df\n",
|
||||||
|
"\n",
|
||||||
|
"def Ed_progress(rides, years=reversed(range(2013, 2022 + 1))) -> pd.DataFrame:\n",
|
||||||
|
" \"\"\"A table of Eddington numbers by year, and a plot.\"\"\"\n",
|
||||||
|
" def Ed(year, unit): return Ed_number(rides[rides['year'] <= year], unit)\n",
|
||||||
|
" data = [(y, Ed(y, 'kms'), Ed(y, 'miles')) for y in years]\n",
|
||||||
|
" df = pd.DataFrame(data, columns=['year', 'Ed_km', 'Ed_mi'])\n",
|
||||||
|
" return df"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"# Climbing to Space"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 11,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"per_month_climbing = [35.491, 31.765, 39.186, 33.641, 32.782, 14.809, 46.731]\n",
|
||||||
|
"\n",
|
||||||
|
"space = {'100 kms': 328.204, '10 Everests': 290.320, '50 miles': 50 * 5.280}\n",
|
||||||
|
"\n",
|
||||||
|
"def climbing(per_month=per_month_climbing, space=space):\n",
|
||||||
|
" \"\"\"Plot progress in climbing\"\"\"\n",
|
||||||
|
" total = np.cumsum(per_month_climbing)#[sum(per_month[:i+1]) for i in range(len(per_month))]\n",
|
||||||
|
" for label in space:\n",
|
||||||
|
" plt.plot(range(12), [space[label]] * 12, ':', label=label)\n",
|
||||||
|
" plt.plot(range(len(total)), total, 'o-', label='my total')\n",
|
||||||
|
" plt.plot(range(len(total)), per_month, 's-.', label='per month')\n",
|
||||||
|
" plt.legend(loc=(1.04, .64), fontsize='large'); grid()\n",
|
||||||
|
" plt.xlabel('Month of 2022'); plt.ylabel('Total climbing (Kft)')\n",
|
||||||
|
" plt.xticks(range(13), 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split())"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
|
|||||||
@ -1,135 +1,177 @@
|
|||||||
:Complete!:
|
# San Mateo County
|
||||||
Atherton: 56.0: 0*4 91.2 94.0 | 95.2*2 94.2 94.9 96.2*2 98.7 99.5 99.19 99.3*2
|
ath | 56.3 | Atherton |
|
||||||
Kensington Square: 0.6: 86.9 100*5 | 100*4 99.9*4 99.99*3
|
bel | 98.1 | Belmont |
|
||||||
Menlo Oaks: 3.5: 0*4 98.4 99.7 | 99.7*4 100*4 99.99*3
|
bri | 40.9 | Brisbane |
|
||||||
West Menlo Park: 11.2: 0*4 97.5 98.1 | 98.1*3 99.3 99.7*2 100*2 99.99*3
|
brm | 8.8 | Broadmoor |
|
||||||
North Fair Oaks: 26.7: 78.1 90.4 93.1 93.8 94.8 96.1 | 96.9*2 99.1*6 99.17*3
|
buh | 6.0 | Burlingame Hills |
|
||||||
Sequoia Tract: 11.5: 0*4 72.8 82.3 | 92.5*4 96.4*2 97.5 98.2 99.4*3
|
bur | 88.4 | Burlingame |
|
||||||
East Palo Alto: 47.6: 74.4 91.2 91.9*2 92.2 93.3 | 93.4*2 92.4*2 92.5*4 95.0 99.2*2
|
ccp | 3.9 | Coal Creek Preserve |
|
||||||
|
clm | 13.7 | Colma |
|
||||||
|
dal | 148.1 | Daly City |
|
||||||
|
epa | 48.3 | East Palo Alto |
|
||||||
|
elg | 49.2 | El Granada |
|
||||||
|
elh | 24.6 | Emerald Lake Hills |
|
||||||
|
foc | 150.0 | Foster City |
|
||||||
|
hmb | 68.0 | Half Moon Bay |
|
||||||
|
hsb | 4.4 | Half Moon Bay State Beach |
|
||||||
|
hil | 85.3 | Hillsborough |
|
||||||
|
ken | 0.6 | Kensington Square |
|
||||||
|
lad | 8.1 | Ladera |
|
||||||
|
ltw | 5.3 | Los Trancos Woods |
|
||||||
|
mno | 3.5 | Menlo Oaks |
|
||||||
|
mpk | 139.5 | Menlo Park |
|
||||||
|
mlb | 65.0 | Millbrae |
|
||||||
|
mtr | 27.8 | Montara |
|
||||||
|
mbe | 19.7 | Moss Beach |
|
||||||
|
nfo | 26.7 | North Fair Oaks |
|
||||||
|
pac | 150.9 | Pacifica |
|
||||||
|
plp | 4.0 | Palomar Park |
|
||||||
|
por | 48.2 | Portola Valley |
|
||||||
|
prc | 16.5 | Purisima Creek Preserve |
|
||||||
|
rwc | 240.5 | Redwood City |
|
||||||
|
rrp | 12.2 | Russian Ridge Preserve |
|
||||||
|
sbr | 114.0 | San Bruno |
|
||||||
|
sca | 99.0 | San Carlos |
|
||||||
|
sma | 256.0 | San Mateo |
|
||||||
|
smh | 18.0 | San Mateo Highlands |
|
||||||
|
seq | 11.5 | Sequoia Tract |
|
||||||
|
sky | 11.8 | Sky Londa |
|
||||||
|
sro | 0.8 | Skyline Ridge OSP |
|
||||||
|
ssf | 185.3 | South San Francisco |
|
||||||
|
wme | 11.2 | West Menlo Park |
|
||||||
|
whp | 4.1 | Windy Hill Preserve |
|
||||||
|
woo | 75.2 | Woodside |
|
||||||
|
|
||||||
:Over 90%:
|
# Santa Clara County
|
||||||
Los Altos: 139.6: 40.2 43.7 72.4 77.2 84.5 90.8 | 91.0*2 91.1*2 91.2 90.4*3 90.63 90.9*2
|
bra | 44.0 | Branham |
|
||||||
Emerald Lake Hills: 24.6: 0.0 94.3*3 44.7 51.0 | 80.0 85.8 91.3*6 92.2*3
|
cmb | 119.0 | Campbell |
|
||||||
Menlo Park: 141.1: 67.7 76.8 87.7 90.7 91.2 90.1 | 92.5*2 91.4 91.6*3 91.8*2 93.5 94.7*2
|
cmh | 27.8 | Communications Hill |
|
||||||
Mountain View: 211.8: 53.0 59.9 63.0 63.6 72.9 77.1 | 91.1*4 92.3*4 91.12 93.5*2
|
cup | 172.0 | Cupertino |
|
||||||
Palo Alto: 298.8: 63.0 73.6 85.4 85.7 87.1 87.6 | 88.1*2 90.3 90.4 90.5 90.6*2 90.7 89.8 91.3 91.5
|
ede | 30.0 | Edenvale |
|
||||||
Loyola: 18.3: 0*4 60.8 62.1 | 62.1*4 91.5 90.6 91.3*2
|
foo | 1.1 | Foothills Preserve |
|
||||||
Palomar Park: 4.1: 0*6 | 91.1*2 94.9*6 98.1*3
|
gar | 23.4 | Gardner |
|
||||||
Syline Ridge OSP: 0.8: 0*6 | 0*9 91.5*2
|
gil | 188.9 | Gilroy |
|
||||||
Ladera: 8.0: 0*4 30.5 29.8 | 29.8*2 47.6*2 44.5*2 50.6*3 82.1 92.0
|
hcp | 265.9 | Henry Coe State Park | HIDDEN
|
||||||
|
lal | 138.2 | Los Altos |
|
||||||
|
lah | 91.3 | Los Altos Hills |
|
||||||
|
lga | 148.0 | Los Gatos |
|
||||||
|
loy | 18.3 | Loyola |
|
||||||
|
mlp | 224.0 | Milpitas |
|
||||||
|
mos | 20.4 | Monte Sereno |
|
||||||
|
mtv | 208.1 | Mountain View |
|
||||||
|
pal | 297.2 | Palo Alto |
|
||||||
|
par | 42.5 | Parkview |
|
||||||
|
sjo |2618.7 | San Jose |
|
||||||
|
scl | 348.0 | Santa Clara |
|
||||||
|
smr | 35.3 | San Martin |
|
||||||
|
sar | 180.0 | Saratoga |
|
||||||
|
svt | 40.9 | Seven Trees |
|
||||||
|
spk | 64.3 | Spartan Keyes |
|
||||||
|
sun | 357.0 | Sunnyvale |
|
||||||
|
wlg | 81.6 | Willow Glen |
|
||||||
|
wgs | 63.3 | Willow Glen South |
|
||||||
|
|
||||||
:Between 33% and 90%:
|
# Alameda County
|
||||||
Monte Sereno: 20.4: 20.5*6 | 20.5 39.8*3 44.1*7
|
che | 20.9 | Cherryland |
|
||||||
Burlingame: 88.4: 9.4*6 | 9.4 31.5*3 35.5*7
|
fre | 780.2 | Fremont |
|
||||||
Los Altos Hills: 91: 48.4*2 49.0 55.1*2 55.4 | 55.8*4 54.0*2 56.4 59.0*2 62.1 62.5
|
hay | 444.5 | Hayward |
|
||||||
Portola Valley: 59: 0*4 57.3 59.8 | 59.8*2 61.0*2 66.2 66.4 67.4 70.3 72.0*2
|
new | 147.0 | Newark |
|
||||||
Redwood City: 242.2: 34.0 39.1 46.0 51.6 56.9 60.8 | 62.9*2 65.1*2 66.3 66.7 67.0*2 75.0 77.9*2
|
sle | 230.6 | San Leandro |
|
||||||
San Carlos: 99: 22.2 26.0 32.9 32.9 37.2 39.0 | 40.5*2 41.4*2 41.0 41.7*6
|
slo | 55.5 | San Lorenzo |
|
||||||
Woodside: 75.2: 51.9*2 52.3*3 54.0 | 56.1*4 62.2 65.8 81.8 84.3 85.5*3
|
unc | 208.8 | Union City |
|
||||||
Los Trancos Woods: 5.3: 0*4 71.4*2 | 71.4*4 74.9 75.0*6
|
|
||||||
Sky Londa: 11.8: 0*4 72.1*2 | 73.2*4 75.4 75.5*4 83.4*2
|
|
||||||
Foster City: 150: 9.1*6 | 9.1 27.4 37.2*2 38.7*5 34.3*2
|
|
||||||
Burlingame Hills: 6: 0*6 | 0.8 34.5*3 35.5*7
|
|
||||||
San Lorenzo: 55.5: 0*6 | 0*10 34.56
|
|
||||||
Newark: 147: 15*3 17*3 | 18.7 26.8 30.8*8 42.5
|
|
||||||
Millbrae: 65: 0*6 | 0 18.4 31.6*2 32.8*7
|
|
||||||
|
|
||||||
:Between 25% and 33%:
|
# SF
|
||||||
Cherryland: 20.9: 0*6 | 0*10 26.8
|
prt | 2.8 | Presidio Terrace | sf
|
||||||
Cupertino: 172: 22.1 23.9 26.2*3 26.3 | 26.4*4 26.5*4 29.5 29.7*2
|
sob | 4.8 | South Beach | sf
|
||||||
Belmont: 98.1: 15.5 17.3 18.6 18.6 20.6*2 | 27.4*2 27.5*2 27.3 27.4*4 27.5*2
|
ggp | 40.8 | Golden Gate Park | sf
|
||||||
Campbell: 119: 8.9 10.1 12.4*4 | 12.4 25.2 26.5*4 26.8 28.3*2
|
lks | 3.9 | Lake Street | sf
|
||||||
Hillsborough: 85.3: 3.3*6 | 3.6 24.5 25.3*6 25.5*3
|
lin | 4.5 | Lincoln Park | sf
|
||||||
Los Gatos: 148: 7.5 8.6 8.8*4 | 8.8 26.1*3 28.2*5 28.6*2
|
sec | 4.1 | Seacliff | sf
|
||||||
San Mateo: 256: 11.1*6 | 11.3 25.5 27.8*9
|
pnp | 43.5 | Presidio National Park | sf
|
||||||
Saratoga: 180: 14.5 15.7 17.4*4 | 17.4 26.9*3 27.2*7
|
col | 1.7 | Cole Valley | sf
|
||||||
Sunnyvale: 357: 19.4 19.9 22.2*4 | 25.1*3 25.8 25.9*5 31.0*2
|
pol | 4.0 | Polk Gulch | sf
|
||||||
Union City: 208.8: 7*3 8*3 | 8.8*2 25.7*2 26.7*7
|
bal | 3.4 | Balboa Terrace | sf
|
||||||
Fremont: 780.2: 9*3 10*3 | 11.7*2 27.5 28.1*7 28.8
|
nwa | 5.6 | Northern Waterfront | sf
|
||||||
San Mateo Highlands: 18: 0*6 | 18.0 29.2*3 28.0*7
|
foh | 6.1 | Forest Hill | sf
|
||||||
Santa Clara: 348: 6.4*2 9.6*4 | 9.6*3 26.6*5 28.8 29.4*2
|
lho | 3.7 | Little Hollywood | sf
|
||||||
San Bruno: 114: 0*6 | 0*3 25.4*5 25.5*3
|
prh | 6.5 | Presidio Heights | sf
|
||||||
Milpitas: 224: 2.2*4 4.4*2 | 4.4*3 26.6 27.2*5 29.5*2
|
aqp | 6.4 | Aquatic Park Fort Mason | sf
|
||||||
Hayward: 444.5: 0*6 | 4.6*4 5.1*6 26.3
|
clh | 6.0 | Clarendon Heights | sf
|
||||||
Rosie the Riveter Park: 5.5: 0*6 | 0*4 29.3*7
|
fis | 6.2 | Fisherman's Wharf | sf
|
||||||
|
sut | 7.1 | Sutro Heights | sf
|
||||||
|
ash | 3.7 | Ashbury Heights | sf
|
||||||
|
dog | 5.1 | Dogpatch | sf
|
||||||
|
cow | 12.0 | Cow Hollow | sf
|
||||||
|
pch | 18.0 | Pacific Heights | sf
|
||||||
|
ggh | 17.8 | Golden Gate Heights | sf
|
||||||
|
fin | 9.4 | Financial District | sf
|
||||||
|
msb | 13.8 | Mission Bay | sf
|
||||||
|
cwa | 10.2 | Central Waterfront | sf
|
||||||
|
|
||||||
:San Jose Neighborhoods:
|
|
||||||
San Jose: 2618.7: 1.3 1.36 5.3*4 | 5.4*3 6.7 11.9 13.1 18.2 19.8 23.1 25.6*2
|
|
||||||
Spartan Keyes: 64.3: 0*6 | 22.1*6 38.9 39.0 35.74 35.8*2
|
|
||||||
Willow Glen: 81.6: 0*6 | 13.9*6 29.67 32.6 31.95 34.9*2
|
|
||||||
Gardner: 23.4: 0*6 | 0*6 22.6 40.5 39.69 43.9*2
|
|
||||||
Seven Trees: 40.9: 0*6 | 0*6 27.96 28.0 25.9*3
|
|
||||||
Edenvale: 30: 0*6 | 0*6 47.35*2 46.81 47.0*2
|
|
||||||
Parkview: 42.5: 0*6 | 0*6 30.32*2 27.8 32.1*2
|
|
||||||
Branham: 44.0: 0*6 | 0*6 26.5 27.9 27.75 32.1*2
|
|
||||||
Willow Glen South: 63.3: 0*6 | 0*6 22.3 30.6 29.23 30.2*2
|
|
||||||
Communications Hill: 27.8: 0*6 | 0*6 34.1*2 33.96 37.2*2
|
|
||||||
|
|
||||||
:San Francisco Neighborhoods Over 25%:
|
# Far Away
|
||||||
Golden Gate Park: 40.8: 0*6 | 25.6*8 37.8*3
|
bar | 1.7 | Barangaroo, NSW | far
|
||||||
Lincoln Park: 4.5: 0*6 | 43*8 35.4*3
|
mpt | 3.2 | Millers Point, NSW | far
|
||||||
Presidio National Park: 43.5: 0*6 | 21.1*4 24.4*4 27.7*3
|
cam | 180.8 | Cambridge, MA | far
|
||||||
Presidio Terrace: 2.8: 0*6 | 37.0*8 43.7*3
|
mit | 9.6 | MIT, MA | far
|
||||||
Seacliff: 4.1: 0*6 | 23.1*8 30.7*3
|
mui | 4.6 | Muir Beach, Marin | far
|
||||||
South Beach: 4.8: 0*6 | 28.2*4 39.6*7
|
mhl | 65.7 | Marin Headlands GGNRA | far
|
||||||
Lake Street: 3.9: 0*6 | 0*8 36.8*3
|
mtt | 31.7 | Mt Tamalpais State Park | far
|
||||||
|
daw | 1.8 | Dawes Point, NSW | far
|
||||||
|
mok | 14.7 | Mokelumne Hill, Calaveras | far
|
||||||
|
gue | 22.7 | Guerneville, Sonoma | far
|
||||||
|
hld | 53.7 | Healdsburg, Sonoma | far
|
||||||
|
bod | 28.9 | Bodega Bay, Sonoma | far
|
||||||
|
sau | 32.7 | Sausalito, Marin | far
|
||||||
|
cmd | 51.0 | Corte Madera, Marin | far
|
||||||
|
sti | 11.2 | Stinson Beach, Marin | far
|
||||||
|
mlv | 92.2 | Mill Valley, Marin | far
|
||||||
|
srf | 260.0 | San Rafael, Marin | far
|
||||||
|
eme | 28.1 | Emeryville | far
|
||||||
|
ber | 260.3 | Berkeley | far
|
||||||
|
alb | 42.7 | Albany | far
|
||||||
|
ros | 5.5 | Rosie Riveter Park |
|
||||||
|
|
||||||
:San Francisco Neighborhoods Under 25%:
|
# Counties
|
||||||
Little Hollywood: 3.7: 0*6 | 0*4 15.4*7
|
smC |2951.0 | San Mateo | county
|
||||||
Mission Bay: 13.8: 0*6 | 0*4 9.3*7
|
scC |7564.0 | Santa Clara | county
|
||||||
Sutro Heights: 7.1: 0*6 | 0*4 14.0*7
|
alC |5704.0 | Alameda | county
|
||||||
Pacific Heights: 18: 0*6 | 10.8*11
|
maC |2322.0 | Marin | county
|
||||||
Ashbury Heights: 3.7: 0*6 | 12.9*11
|
sfC |1197.0 | San Francisco | county
|
||||||
Clarendon Heights: 6: 0*6 | 14.3*11
|
npC |1524.0 | Napa | county
|
||||||
Cow Hollow: 12: 0*6 |5*4 12.0*7
|
soC |4556.0 | Sonoma | county
|
||||||
Financial District: 9.4: 0*6 |5.8*4 9.7*7
|
szC |2767.0 | Santa Cruz | county
|
||||||
Golden Gate Heights: 17.8: 0*6 | 10.7*11
|
ccC |6034.0 | Contra Costa | county
|
||||||
Polk Gulch: 4: 0*6 | 18.2*11
|
|
||||||
Presidio Heights: 6.5: 0*6 | 15.1*11
|
|
||||||
Aquatic Park / Fort Mason: 6.4: 0*6 | 0*4 14.9*7
|
|
||||||
Central Waterfront: 10.2: 0*6 | 0*4 6.7*7
|
|
||||||
Northern Waterfront: 5.6: 0*6 | 0*4 16.4*7
|
|
||||||
Dogpatch: 5.1: 0*6 | 0*4 12.4*7
|
|
||||||
Fisherman's Wharf: 6.2: 0*6 | 0*4 14.2*7
|
|
||||||
Balboa Terrace: 3.4: 0*6 | 18.2*11
|
|
||||||
Cole Valley: 1.7: 0*6 | 19.6*11
|
|
||||||
Forest Hill: 6.1: 0*6 | 15.7*11
|
|
||||||
|
|
||||||
:Farther Away:
|
# Big Places
|
||||||
Mokelumne Hill, Calaveras: 14.7: 28.9*6| 28.9*11
|
cal | 375216.0 | California | big
|
||||||
MIT, Cambridge, MA: 9.6: 37.2*6 | 37.2*11
|
usa | 6406754.0 | USA | big
|
||||||
Barangaroo, NSW: 1.7: 49.9*6 | 49.9*11
|
ear |40818989.0 | Earth | big
|
||||||
Dawes Point, NSW: 1.8: 29.2*6 | 29.2*11
|
|
||||||
Millers Point, NSW: 3.2: 38.2*6 | 38.2*11
|
|
||||||
Stinson Beach, Marin: 11.2: 9.2*6 | 9.2*11
|
|
||||||
Muir Beach, Marin: 4.6: 35.8*6 | 35.8*11
|
|
||||||
Corte Madera, Marin: 51: 0*6 | 0*4 13*7
|
|
||||||
Mill Valley, Marin: 92.2: 0*6 | 0*4 5.1*7
|
|
||||||
San Rafael, Marin: 260: 0*6 | 0*4 3.7*7
|
|
||||||
Sausalito, Marin: 32.7: 0*6 | 0*4 13.1*7
|
|
||||||
Cambridge, MA: 180.8: 6.4*6 | 6.4*11
|
|
||||||
Bodega Bay, Sonoma: 28.9: 18*6 | 18*11
|
|
||||||
Guerneville, Sonoma: 22.7: 23.4*6 | 23.4*11
|
|
||||||
Healdsburg, Sonoma: 53.7: 18.5*6 | 18.5*11
|
|
||||||
Half Moon Bay: 68: 0*6 | 8.9*11
|
|
||||||
Emeryville: 28.1: 0*6 | 5.5*4 7.0*7
|
|
||||||
Berkeley: 260.3: 5.0*3 7.0*3 | 7.0*11
|
|
||||||
Albany: 42.7: 0*6 | 0*4 6.6*7
|
|
||||||
|
|
||||||
:California Bay Area Counties:
|
|
||||||
Contra Costa: 6052: 1.0*6 | 1.0*3 1.41*8
|
|
||||||
San Mateo: 3171: 20.1 21.2 22.9 23.4 24.57 25.53 | 26.43 30.0 31.27 32.24 32.54 32.98 33.48 33.56 34.51 34.7 35.05
|
|
||||||
Santa Clara: 7445: 12.7 13.6 15.4 15.6 16.04 16.29 | 16.78 17.73 18.15 20.0 21.1 22.53 24.45 25.05 25.96 27.76 28.03
|
|
||||||
Alameda: 5704: 3.3*3 3.94*3 | 4.73*2 7.06 7.14 7.34*6 9.86
|
|
||||||
Marin: 2322: 6.7*6 | 6.7*4 7.98*7
|
|
||||||
Napa: 1524: 5.1*6 | 5.1*11
|
|
||||||
Sonoma: 4556: 5.1*6 | 5.1*11
|
|
||||||
San Francisco: 1197: 4.5*6 | 4.5*4 5.47*4 6.4 6.51*2
|
|
||||||
Santa Cruz: 2767: 2.3*6 | 2.3*11
|
|
||||||
|
|
||||||
:California:
|
--------------------------------------------------------------------------------
|
||||||
California: 372710: .712 .811 .846 .867 .8875 .8873 | .9054 .9624 1.0289 1.0758 1.1278 1.1386 1.1812 1.1939 1.2007 1.2524 1.2987
|
2020-07 ken 86.9 epa 74.4 nfo 78.1 woo 51.9 mpk 67.7 mtv 53.0 pal 63.0 lal 40.2 lah 48.4 rwc 34.0 mos 20.5 new 15.0 sca 22.2 bur 9.4 foc 9.1 sun 19.4 cup 22.1 mlp 2.2 scl 6.4 lga 7.5 fre 9.0 cmb 8.9 sma 11.1 bel 15.5 sar 14.5 unc 7.0 hil 3.3 sjo 1.3 gil 7.9 bar 49.9 smr 15.7 mpt 38.2 mit 37.2 mui 35.8 daw 29.2 mok 28.9 gue 23.4 hld 18.5 bod 18.0 sti 9.2 ber 5.0 cam 6.4 smC 20.1 scC 12.7 alC 3.3 maC 6.7 sfC 4.5 npC 5.1 soC 5.1 szC 2.3 ccC 1.0 cal 0.712 usa 0.048 ear 0.008
|
||||||
|
2020-08 ken 100 epa 91.2 nfo 90.4 elh 94.3 mpk 76.8 mtv 59.9 pal 73.6 lal 43.7 rwc 39.1 sca 26.0 sun 19.9 cup 23.9 lga 8.6 cmb 10.1 bel 17.3 sar 15.7 sjo 1.36 smC 21.2 scC 13.6 cal 0.811 usa 0.052 ear 0.0089
|
||||||
:USA and Earth
|
2020-09 epa 91.9 nfo 93.1 woo 52.3 mpk 87.7 mtv 63.0 pal 85.4 lal 72.4 lah 49.0 rwc 46.0 sca 32.9 sun 22.2 cup 26.2 scl 9.6 lga 8.8 cmb 12.4 bel 18.6 sar 17.4 sjo 5.3 smC 22.9 scC 15.4 cal 0.846 usa 0.055 ear 0.0091
|
||||||
USA: 6400536: .048 .052 .055 .05589 .0571 .05749 | .05853 .06183 .06553 .06824 0.07138 0.07200 0.07446 0.0752 0.07665 0.07904 0.08173
|
2020-10 nfo 93.8 mpk 90.7 mtv 63.6 pal 85.7 lal 77.2 lah 55.1 rwc 51.6 new 17.0 fre 10.0 unc 8.0 ber 7.0 smC 23.4 scC 15.6 alC 3.94 cal 0.867 usa 0.05589 ear 0.00936
|
||||||
Earth: 40818989: .008 .0089 .0091 .00936 .009535 .009536| .009597 .010136 .010561 .010997 .011349 0.011448 0.011839 0.011955 0.012024 0.0124113 0.012835
|
2020-11 mno 98.4 wme 97.5 epa 92.2 lad 30.5 ath 91.2 por 57.3 seq 72.8 sky 72.1 nfo 94.8 ltw 71.4 mpk 91.2 mtv 72.9 pal 87.1 loy 60.8 lal 84.5 rwc 56.9 sca 37.2 mlp 4.4 bel 20.6 smC 24.57 scC 16.04 cal 0.8875 usa 0.0571 ear 0.009535
|
||||||
|
2020-12 mno 99.7 wme 98.1 epa 93.3 ath 94.0 por 59.8 seq 82.3 nfo 96.1 woo 54.0 elh 51.0 mtv 77.1 pal 87.6 loy 62.1 lal 90.8 lah 55.4 rwc 60.8 sca 39.0 cup 26.3 smC 25.53 scC 16.29 usa 0.05749 ear 0.009536
|
||||||
|
2021-01 plp 91.1 epa 93.4 ath 95.2 seq 92.5 sky 73.2 nfo 96.9 woo 56.1 elh 80.0 mpk 92.5 mtv 91.1 pal 88.1 lal 91.0 lah 55.8 rwc 62.9 new 18.7 sca 40.5 buh 0.8 sun 25.1 cup 26.4 fre 11.7 smh 18.0 sma 11.3 bel 27.4 unc 8.8 hay 4.6 hil 3.6 spk 22.1 wlg 13.9 sjo 5.4 prt 37.0 sob 28.2 ggp 25.6 lin 43.0 sec 23.1 pnp 21.1 col 19.6 pol 18.2 bal 18.2 foh 15.7 prh 15.1 clh 14.3 ash 12.9 cow 5.0 pch 10.8 ggh 10.7 fin 5.8 hmb 8.9 eme 5.5 smC 26.43 scC 16.78 alC 4.73 cal 0.9054 usa 0.05853 ear 0.009597
|
||||||
|
2021-02 elh 85.8 mos 39.8 new 26.8 buh 34.5 bur 31.5 foc 27.4 mlb 18.4 lga 26.1 cmb 25.2 smh 29.2 sma 25.5 sar 26.9 hil 24.5 smC 30.0 scC 17.73 cal 0.9624 usa 0.06183 ear 0.010136
|
||||||
|
2021-03 plp 94.9 lad 47.6 por 61.0 nfo 99.1 elh 91.3 pal 90.3 lal 91.1 rwc 65.1 new 30.8 sca 41.4 foc 37.2 mlb 31.6 fre 27.5 cmb 26.5 sma 27.8 bel 27.5 unc 25.7 hil 25.3 smC 31.27 scC 18.15 alC 7.06 cal 1.0289 usa 0.06553 ear 0.010561
|
||||||
|
2021-04 wme 99.3 ath 94.9 mpk 91.6 pal 90.4 sun 25.8 mlp 26.6 scl 26.6 fre 28.1 sbr 25.4 sjo 6.7 smC 32.24 scC 20.0 alC 7.14 ccC 1.41 cal 1.0758 usa 0.06824 ear 0.010997
|
||||||
|
2021-05 mno 100 wme 99.7 epa 92.5 ath 96.2 por 66.2 seq 96.4 sky 75.4 woo 62.2 ltw 74.9 mtv 92.3 pal 90.5 loy 91.5 lal 91.2 rwc 66.3 mos 44.1 buh 35.5 bur 35.5 foc 38.7 mlb 32.8 sun 25.9 cup 26.5 mlp 27.2 ros 29.3 lga 28.2 sar 27.2 unc 26.7 hay 5.1 sjo 11.9 sob 39.6 pnp 24.4 nwa 16.4 lho 15.4 aqp 14.9 fis 14.2 sut 14.0 dog 12.4 cow 12.0 fin 9.7 msb 9.3 cwa 6.7 sau 13.1 cmd 13.0 eme 7.0 alb 6.6 mlv 5.1 srf 3.7 smC 32.54 scC 21.1 alC 7.34 maC 7.98 sfC 5.47 cal 1.1278 usa 0.07138 ear 0.011349
|
||||||
|
2021-06 por 66.4 sky 75.5 woo 65.8 ltw 75.0 pal 90.6 rwc 66.7 sca 41.7 bel 27.4 sjo 13.1 smC 32.98 scC 22.53 cal 1.1386 usa 0.072 ear 0.011448
|
||||||
|
2021-07 wme 100 lad 50.6 ath 98.7 por 67.4 seq 97.5 woo 81.8 mpk 91.8 loy 91.3 lah 56.4 rwc 67.0 cmb 26.8 ede 47.35 gar 22.6 cmh 34.1 spk 38.9 wlg 29.67 par 30.32 bra 26.5 wgs 22.3 svt 27.96 sjo 18.2 smC 33.48 scC 24.45 cal 1.1812 usa 0.07446 ear 0.011839
|
||||||
|
2021-08 ath 99.5 por 70.3 seq 98.2 woo 84.3 pal 90.7 lah 59.0 cmb 28.3 gar 40.5 spk 39.0 wlg 32.6 bra 27.9 wgs 30.6 svt 28.0 sjo 19.8 smC 33.56 scC 25.05 cal 1.1939 usa 0.0752 ear 0.011955
|
||||||
|
2021-09 plp 98.1 ken 99.99 epa 95.0 por 72.0 seq 99.4 nfo 99.17 woo 85.5 elh 92.2 mpk 93.5 lal 90.63 rwc 75.0 cup 29.5 scl 28.8 sbr 25.5 hil 25.5 sjo 23.1 prt 43.7 ggp 37.8 lks 36.8 sec 30.7 pnp 27.7 smC 34.51 scC 25.96 sfC 6.4 cal 1.2007 usa 0.07665 ear 0.012024
|
||||||
|
2021-10 epa 99.2 lad 82.1 ath 99.3 sky 83.4 mpk 94.7 sro 91.5 mtv 93.5 pal 91.3 lal 90.9 lah 62.1 rwc 77.9 sun 31.0 cup 29.7 mlp 29.5 scl 29.4 lga 28.6 bel 27.5 ede 47.0 gar 43.9 cmh 37.2 spk 35.8 wlg 34.9 par 32.1 bra 32.1 wgs 30.2 sjo 25.6 smC 34.7 scC 27.76 sfC 6.51 cal 1.2524 usa 0.07904 ear 0.0124113
|
||||||
|
2021-11 lad 92.0 pal 91.5 lah 62.5 new 42.5 slo 34.56 fre 28.8 che 26.8 hay 26.3 smC 35.05 scC 28.03 alC 9.86 cal 1.2987 usa 0.08173 ear 0.012835
|
||||||
|
2021-12 smC 36.08 scC 28.24 alC 9.87 ccC 1.42 usa 0.08199 ear 0.012886
|
||||||
|
2022-01 plp 100 epa 99.7 lad 99.7 ath 99.6 por 90.7 sky 87.0 woo 91.1 elh 93.4 ltw 95.8 mpk 94.8 mtv 93.7 pal 93.0 lal 91.3 lah 65.9 rwc 83.1 sun 31.3 smC 36.41 scC 28.39 cal 1.3048 usa 0.08252 ear 0.013799
|
||||||
|
2022-02 por 94.0 elh 96.1 lal 91.4 lah 71.0 smC 37.3 scC 28.5 cal 1.3106 usa 0.083 ear 0.013855
|
||||||
|
2022-03 por 99.5 sky 99.2 woo 94.1 mpk 95.7 sro 93.5 lal 91.5 lah 76.3 rwc 90.2 smC 38.06 scC 28.56 cal 1.3136 usa 0.08314 ear 0.013895
|
||||||
|
2022-04 woo 96.6 loy 92.1 lah 91.0 bri 45.3 slo 34.7 lga 29.1 bel 27.6 sbr 27.1 ssf 26.1 sle 25.9 smC 40.33 scC 29.04 alC 10.96 cal 1.3565 usa 0.08565 ear 0.01429
|
||||||
|
2022-05 loy 98.7 mtv 92.9 pal 92.8 sjo 26.9 rrp 21.8 whp 99.1 mui 37.2 sti 37.4 mhl 30.8 mtt 40.3 usa 0.087
|
||||||
|
2022-06 scl 33.9 elh 98.1 foc 51.8 ltw 99.9 mpk 95.1 mlb 31.9 rwc 90.3 sma 46.5 smh 76.7 hcp 0.2 foo 80.7 ccp 36.7 ssf 26.4 usa 0.089
|
||||||
|
2022-07 sun 46.6 bel 37.1 brm 38.2 dal 12.3 hmb 30.5 hsb 50.7 mtr 26.8 mbe 38.5 pac 27.5 prc 35.7 sca 59.5 clm 24.8 elg 35.2 smC 50.06 scC 30.31 cal 1.4656 usa 0.09215 ear 0.014891
|
||||||
|
|||||||
@ -1,5 +1,14 @@
|
|||||||
date year title hours miles feet
|
date year title hours miles feet
|
||||||
##### 2019-2021: Mostly Eddington rides; most recent first
|
##### 2019-2022: Mostly Eddington rides; most recent first
|
||||||
|
Thu, 7/14 2022 Bike Hut Classic 6:36:30 74.16 6,070
|
||||||
|
Sat, 7/9 2022 Purisima Creek Trail 7:20:20 62.93 7,139
|
||||||
|
Sat, 7/2 2022 Bear Gulch, West Side 6:29:10 77.73 6,991
|
||||||
|
Sat, 6/25 2022 Chabot: Redwood / Skyline / Goldenrod / Cull Canyon 5:02:33 65.15 5,361
|
||||||
|
Sat, 5/7 2022 Wine Country Century 6:39:02 100.26 5,253
|
||||||
|
Sat, 4/23 2022 Tierra Bella 100K with Anne and David 5:38:12 68.38 4,892
|
||||||
|
Sat, 4/9 2022 Kings / Skyline / 92 6:07:05 69.29 5,029
|
||||||
|
Sat, 1/29 2022 Woodside plus Montebello 6:49:14 67.73 5,553
|
||||||
|
Sat, 1/15 2022 Crestview 5:43:00 64.49 4,446
|
||||||
Sun, 11/14 2021 Hayward 5:08:23 72.23 1,132
|
Sun, 11/14 2021 Hayward 5:08:23 72.23 1,132
|
||||||
Sat, 10/16 2021 San Jose 5:47:00 70.18 2,562
|
Sat, 10/16 2021 San Jose 5:47:00 70.18 2,562
|
||||||
Sat, 9/2 2021 San Jose 4:38:20 60.54 1,079
|
Sat, 9/2 2021 San Jose 4:38:20 60.54 1,079
|
||||||
@ -59,9 +68,7 @@ Fri, 7/5 2019 Crystal Springs 4:30:55 64.05 1,965
|
|||||||
Sat, 6/15 2019 Morning Ride 2:29:38 29.98 1,785
|
Sat, 6/15 2019 Morning Ride 2:29:38 29.98 1,785
|
||||||
Sat, 6/8 2019 Morning Ride 2:53:08 34.42 1,824
|
Sat, 6/8 2019 Morning Ride 2:53:08 34.42 1,824
|
||||||
Sun, 6/2 2019 The Sequoia 6:40:43 77.51 6,467
|
Sun, 6/2 2019 The Sequoia 6:40:43 77.51 6,467
|
||||||
##### 2012 to 2018: rides over 25 miles, longest first
|
##### 2013 to 2018: rides over 25 miles, longest first
|
||||||
Fri, 1/9 2012 Otago Rail Trail 8:00:00 101.00 2,200
|
|
||||||
Thu, 6/14 2012 Coyote Creek Century with Juliet 8:08:15 100.07 1,513
|
|
||||||
Sat, 5/13 2017 Morgan Hill iCare Classic 7:27:21 100.05 4,596
|
Sat, 5/13 2017 Morgan Hill iCare Classic 7:27:21 100.05 4,596
|
||||||
Sat, 5/12 2018 ICare Classic, Morgan Hill 6:47:46 91.29 4,160
|
Sat, 5/12 2018 ICare Classic, Morgan Hill 6:47:46 91.29 4,160
|
||||||
Sat, 5/6 2017 Wine Country Century 7:15:22 89.49 5,246
|
Sat, 5/6 2017 Wine Country Century 7:15:22 89.49 5,246
|
||||||
@ -499,4 +506,11 @@ Sun, 6/23 2013 Climb 2:16:29 24.30 2,001
|
|||||||
Sat, 7/13 2013 Doug's Event 1:51:55 21.35 1,677
|
Sat, 7/13 2013 Doug's Event 1:51:55 21.35 1,677
|
||||||
Sun, 8/4 2013 Kris's first trike ride 1:51:21 20.96 988
|
Sun, 8/4 2013 Kris's first trike ride 1:51:21 20.96 988
|
||||||
Sun, 11/24 2013 Alpine Rd 1:42:36 21.02 1,289
|
Sun, 11/24 2013 Alpine Rd 1:42:36 21.02 1,289
|
||||||
Fri, 11/29 2013 Woodside Loop 1:33:36 22.75 1,011
|
Fri, 11/29 2013 Woodside Loop 1:33:36 22.75 1,011
|
||||||
|
#### 2012 Rides
|
||||||
|
Thu, 1/5 2012 Tekapo Lake to Omarama New Zealand 5:27:34 79.42 2,145
|
||||||
|
Fri, 1/6 2012 Omarama to Wanaka New Zealand 4:28:51 70.35 3,262
|
||||||
|
Sat, 1/7 2012 Wanaka to Queenstown New Zealand 3:23:12 45.18 3,488
|
||||||
|
Sun, 1/8 2012 Queenstown to Clyde New Zealand 3:59:59 60.02 3,522
|
||||||
|
Fri, 1/9 2012 Otago Rail Trail Century 7:52:17 102.41 2,286
|
||||||
|
Thu, 6/14 2012 Coyote Creek Century with Juliet 8:08:15 100.07 1,513
|
||||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
@ -7,24 +7,36 @@ Arastradero, 1.19, 193, 6:41, 7:49, 7:55
|
|||||||
Arastradero last two bumps, 0.32, 95, 3:10
|
Arastradero last two bumps, 0.32, 95, 3:10
|
||||||
Atherton Ave Stinger, 0.23, 88, 2:24
|
Atherton Ave Stinger, 0.23, 88, 2:24
|
||||||
Cabrillo Hmy S, 0.46, 153, 4:31
|
Cabrillo Hmy S, 0.46, 153, 4:31
|
||||||
|
Camaritas climb, 0.10, 48, 0:51
|
||||||
Canada to College, 1.37, 119, 5:55, 6:23, 6:35
|
Canada to College, 1.37, 119, 5:55, 6:23, 6:35
|
||||||
Canon, 0.90, 295, 11:04, 11:55
|
Canon, 0.90, 295, 11:04, 11:55
|
||||||
Canon to No Cycling, 0.75, 198, 5:14, 5:41
|
Canon to No Cycling, 0.75, 198, 5:14, 5:41
|
||||||
|
Cemetery Sprint, 0.08, 33, 0:33
|
||||||
|
Chalk Hill SB sprint, 0.17, 21, 2:11
|
||||||
|
Coe Second Switchback to flat, 1.00, 483, 13:27
|
||||||
Communications Hill Climb, 0.20, 103, 2:32
|
Communications Hill Climb, 0.20, 103, 2:32
|
||||||
Davenport Kicker, 0.24, 74, 1:17
|
Davenport Kicker, 0.24, 74, 1:17
|
||||||
|
DNA hill, 0.28, 83, 2:08
|
||||||
|
Dunne Steeps, 0.42, 204, 5:11
|
||||||
Entrance Way Hill Repeats, 0.10, 76, 1:25
|
Entrance Way Hill Repeats, 0.10, 76, 1:25
|
||||||
|
Faught Turn, 0.22, 60, 1:16
|
||||||
Foothill Homestead, 1.22, 126, 5:31, 6:36, 6:53
|
Foothill Homestead, 1.22, 126, 5:31, 6:36, 6:53
|
||||||
|
Green Valley Roller of Death, 0.17, 84, 2:08
|
||||||
|
green valley kicker, 0.29, 178, 4:33
|
||||||
Haskins, 1.51, 566, 17:47, 18:43, 18:47
|
Haskins, 1.51, 566, 17:47, 18:43, 18:47
|
||||||
Highway 1 Cascanoa to Cascade, 1.61, 89, 5:20
|
Highway 1 Cascanoa to Cascade, 1.61, 89, 5:20
|
||||||
Highway 9, 0.56, 260, 8:33
|
Highway 9, 0.56, 260, 8:33
|
||||||
Highway 9 Mantalvo, 0.45, 35, 1:36, 1:48, 1:53
|
Highway 9 Mantalvo, 0.45, 35, 1:36, 1:48, 1:53
|
||||||
Huddart, 0.92, 385, 10:15, 11:18, 12:55
|
Huddart, 0.92, 385, 10:15, 11:18, 12:55
|
||||||
Joaquin, 0.33, 254, 6:19, 7:27
|
Invernes to Firecrest Climb, 0.28, 143, 2:35
|
||||||
|
Joaquin, 0.33, 254, 5:22, 6:00, 7:27
|
||||||
Kaboom Portola Rd, 0.67, 102, 3:14, 3:26, 3:33
|
Kaboom Portola Rd, 0.67, 102, 3:14, 3:26, 3:33
|
||||||
Kings half way, 2.89, 820, 27:26, 29:45, 32:43
|
Kings half way, 2.89, 820, 27:26, 29:45, 32:43
|
||||||
Kings to Skeggs, 1.10, 273, 9:07, 10:39, 10:53
|
Kings to Skeggs, 1.10, 273, 9:07, 10:39, 10:53
|
||||||
Kings Greer to Skyline, 3.92, 1536, 46:53, 48:36, 54:25
|
Kings Greer to Skyline, 3.92, 1536, 46:53, 48:36, 54:25
|
||||||
Kings Mountain Rd Climb, 0.56, 296, 8:23
|
Kings Mountain Rd Climb, 0.56, 296, 8:23
|
||||||
|
Kings Mountain final sprint, 0.31, 135, 2:26
|
||||||
|
Klamath Dr., 0.12, 77, 0:55
|
||||||
Laning Bump, 0.24, 94, 2:00
|
Laning Bump, 0.24, 94, 2:00
|
||||||
Limantour Spit, 0.47, 303, 5:19
|
Limantour Spit, 0.47, 303, 5:19
|
||||||
Limantour steepest, 0.20, 159, 5:41
|
Limantour steepest, 0.20, 159, 5:41
|
||||||
@ -33,6 +45,7 @@ Lower Redwood Gulch, 1.03, 474, 13:00
|
|||||||
Mapache, 0.24, 111, 2:52, 2:55
|
Mapache, 0.24, 111, 2:52, 2:55
|
||||||
Mt Eden climb, 1.02, 272, 8:32, 9:43, 11:59
|
Mt Eden climb, 1.02, 272, 8:32, 9:43, 11:59
|
||||||
Mt Eden to Archery, 0.54, 180, 5:19, 5:39, 6:12
|
Mt Eden to Archery, 0.54, 180, 5:19, 5:39, 6:12
|
||||||
|
Official Bike Hut Classic 8.33, 1908, 1:08:50
|
||||||
Old La Honda (Bridge to Stop), 3.33, 1255, 28:42, 30:32, 36:04
|
Old La Honda (Bridge to Stop), 3.33, 1255, 28:42, 30:32, 36:04
|
||||||
Old La Honda Mile 1, 0.99, 370, 8:02, 9:36, 9:51
|
Old La Honda Mile 1, 0.99, 370, 8:02, 9:36, 9:51
|
||||||
Paloma Climb, 0.14, 82, 1:26
|
Paloma Climb, 0.14, 82, 1:26
|
||||||
@ -48,6 +61,8 @@ Redwood Gulch wall, 0.43, 258, 6:39
|
|||||||
Sand Gill Sharon-top, 0.85, 136, 4:03, 4:16, 4:24
|
Sand Gill Sharon-top, 0.85, 136, 4:03, 4:16, 4:24
|
||||||
Sand Hill 280 to horse, 0.49, 95, 2:34, 2:44, 2:51
|
Sand Hill 280 to horse, 0.49, 95, 2:34, 2:44, 2:51
|
||||||
Sand Hill Alpine to 280, 1.67, 180, 7:02, 7:39, 8:02
|
Sand Hill Alpine to 280, 1.67, 180, 7:02, 7:39, 8:02
|
||||||
|
Sharon Park steep part, 0.21, 86, 1:57
|
||||||
|
Skyline Bump at OLH, 0.21, 63, 1:16, 1:40, 1:49
|
||||||
Stair Step, 0.32, 175, 5:25
|
Stair Step, 0.32, 175, 5:25
|
||||||
Stage Rd, 1.01, 373, 11:36, 11:51, 12:28
|
Stage Rd, 1.01, 373, 11:36, 11:51, 12:28
|
||||||
Stanford Ave, 0.63, 85, 3:14, 3:32, 3:49
|
Stanford Ave, 0.63, 85, 3:14, 3:32, 3:49
|
||||||
@ -57,17 +72,21 @@ Stirrup to Moon, 0.36, 159, 3:41, 6:07
|
|||||||
Summit Rd Climb, 0.60, 275, 8:00
|
Summit Rd Climb, 0.60, 275, 8:00
|
||||||
Tepa, 0.58, 248, 6:34, 7:14, 8:21
|
Tepa, 0.58, 248, 6:34, 7:14, 8:21
|
||||||
The Boneyard, 1.48, 135, 6:05, 6:36, 7:00
|
The Boneyard, 1.48, 135, 6:05, 6:36, 7:00
|
||||||
|
Top of Groton Rd heading west, 0.92, 291, 7:59
|
||||||
Try not to fall back, 0.71, 410, 12:45
|
Try not to fall back, 0.71, 410, 12:45
|
||||||
Tunitas Knoll to Star, 1.55, 339, 12:28, 12:56, 13:51
|
Tunitas Knoll to Star, 1.55, 339, 12:28, 12:56, 13:51
|
||||||
Tunitas flattens, 0.42, 166, 3:16, 3:25, 3:51
|
Tunitas flattens, 0.42, 166, 3:15, 3:16, 3:25
|
||||||
Tunitas lower climb, 1.30, 421, 13:34, 16:00, 17:33
|
Tunitas lower climb, 1.30, 421, 12:58, 13:34, 16:00
|
||||||
Tunitas steep, 1.20, 599, 16:15, 17:47, 20:44
|
Tunitas steep, 1.20, 599, 15:17, 16:15, 17:47
|
||||||
|
Valparaiso steep, 0.18, 145, 2:26, 2:56, 3:18
|
||||||
Vickrey Fruitvale, 0.99, 68, 3:41, 3:58, 4:26
|
Vickrey Fruitvale, 0.99, 68, 3:41, 3:58, 4:26
|
||||||
|
Watts (Sonoma), 1.20, 313, 8:37
|
||||||
West Alpine switchback, 0.78, 322, 8:56, 10:52, 11:55
|
West Alpine switchback, 0.78, 322, 8:56, 10:52, 11:55
|
||||||
West Alpine full, 7.38, 1887, 1:23:26
|
West Alpine full, 7.38, 1887, 1:23:26
|
||||||
Westridge, 0.68, 385, 8:28, 9:52, 10:18
|
Westridge, 0.68, 385, 8:28, 9:52, 10:18
|
||||||
Westridge 3min, 0.37, 240, 4:41, 5:35, 6:31
|
Westridge 3min, 0.37, 240, 4:41, 5:35, 6:31
|
||||||
Westridge Hill 1, 0.51, 104, 3:19, 3:58
|
Westridge Hill 1, 0.51, 104, 3:19, 3:58
|
||||||
Westridge Hill 2, 0.51, 166, 4:42, 5:10, 5:20
|
Westridge Hill 2, 0.51, 166, 4:42, 5:10, 5:20
|
||||||
|
Woghler Slap, 0.20, 47, 1:24
|
||||||
Woodland Way, 0.13, 63, 1:36
|
Woodland Way, 0.13, 63, 1:36
|
||||||
Woodside Climb, 1.71, 295, 8:05, 9:00, 9:35
|
Woodside Climb, 1.71, 295, 8:05, 9:00, 9:35
|
||||||
|
9
ipynb/bikeyears.tsv
Normal file
9
ipynb/bikeyears.tsv
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
date year title hours miles feet
|
||||||
|
all 2021 Yearly 490:32:00 6064.5 196634
|
||||||
|
all 2020 Yearly 438:53:00 5341.9 94777
|
||||||
|
all 2019 Yearly 476:19:00 6016.1 149797
|
||||||
|
all 2018 Yearly 475:56:00 6101.0 158642
|
||||||
|
all 2017 Yearly 567:20:00 7356.4 202096
|
||||||
|
all 2016 Yearly 486:23:00 6339.2 201453
|
||||||
|
all 2015 Yearly 419:57:00 5452.6 209859
|
||||||
|
all 2014 Yearly 191:02:00 2469.1 118481
|
||||||
|
Loading…
x
Reference in New Issue
Block a user