Source code for libpysal.examples

import os

base = os.path.abspath(os.path.dirname(__file__))
__all__ = ['get_path', 'available', 'explain']
file_2_dir = {}
example_dir = base

dirs = []
for root, subdirs, files in os.walk(example_dir, topdown=False):
    for f in files:
        file_2_dir[f] = root
    head, tail = os.path.split(root)
    if tail != 'examples':
        dirs.append(tail)


[docs]def get_path(example_name, raw=False): """ Get path of example folders """ if type(example_name) != str: try: example_name = str(example_name) except: raise KeyError('Cannot coerce requested example name to string') if example_name in dirs: outpath = os.path.join(example_dir, example_name, example_name) elif example_name in file_2_dir: d = file_2_dir[example_name] outpath = os.path.join(d, example_name) elif example_name == "": outpath = os.path.join(base, 'examples', example_name) else: raise KeyError(example_name + ' not found in PySAL built-in examples.') name,ext = os.path.splitext(outpath) if (ext == '.zip') and (not raw): outpath = 'zip://'+outpath return outpath
[docs]def available(verbose=False): """ List available datasets """ examples = [os.path.join(base, d) for d in dirs] if not verbose: return [os.path.split(d)[-1] for d in examples] examples = [os.path.join(dty, 'README.md') for dty in examples] descs = [_read_example(path) for path in examples] return [{desc['name']:desc['description'] for desc in descs}]
def _read_example(pth): try: with open(pth, 'r') as io: title = io.readline().strip('\n') io.readline() # titling io.readline() # pad short = io.readline().strip('\n') io.readline() # subtitling io.readline() # pad rest = io.readlines() rest = [l.strip('\n') for l in rest if l.strip('\n') != ''] d = {'name': title, 'description': short, 'explanation': rest} except IOError: basename = os.path.split(pth)[-2] dirname = os.path.split(basename)[-1] d = {'name': dirname, 'description': None, 'explanation': None} return d
[docs]def explain(name): # would be nice to use pandas for display here """ Explain a dataset by name """ path = os.path.split(get_path(name))[0] fpath = os.path.join(path, 'README.md') return _read_example(fpath)