#! /usr/bin/env python

"""Statewide Crime Data"""

__docformat__ = 'restructuredtext'

COPYRIGHT   = """Public domain."""
TITLE       = """Statewide Crime Data 2009"""
SOURCE      = """
All data is for 2009 and was obtained from the American Statistical Abstracts except as indicated below.
"""

DESCRSHORT  = """State crime data 2009"""

DESCRLONG   = DESCRSHORT

#suggested notes
NOTE        = """
Number of observations: 51
Number of variables: 8
Variable name definitions:

state
    All 50 states plus DC.
violent
    Rate of violent crimes / 100,000 population. Includes murder, forcible
    rape, robbery, and aggravated assault. Numbers for Illinois and Minnesota
    do not include forcible rapes. Footnote included with the American
    Statistical Abstract table reads:
    "The data collection methodology for the offense of forcible
    rape used by the Illinois and the Minnesota state Uniform Crime Reporting
    (UCR) Programs (with the exception of Rockford, Illinois, and Minneapolis
    and St. Paul, Minnesota) does not comply with national UCR guidelines.
    Consequently, their state figures for forcible rape and violent crime (of
    which forcible rape is a part) are not published in this table."
murder
    Rate of murders / 100,000 population.
hs_grad
    Precent of population having graduated from high school or higher.
poverty
    % of individuals below the poverty line
white
    Percent of population that is one race - white only. From 2009 American
    Community Survey
single
    Calculated from 2009 1-year American Community Survey obtained obtained
    from Census. Variable is Male householder, no wife present, family
    household combined with Female household, no husband prsent, family
    household, divided by the total number of Family households.
urban
    % of population in Urbanized Areas as of 2010 Census. Urbanized Areas are
    area of 50,000 or more people."""

import numpy as np
from statsmodels.datasets import utils as du
from os.path import dirname, abspath

def load():
    """
    Load the statecrime data and return a Dataset class instance.

    Returns
    -------
    Dataset instance:
        See DATASET_PROPOSAL.txt for more information.
    """
    data = _get_data()
    ##### SET THE INDICES #####
    #NOTE: None for exog_idx is the complement of endog_idx
    return du.process_recarray(data, endog_idx=2, exog_idx=[7, 4, 3, 5],
                               dtype=float)

def load_pandas():
    data = _get_data()
    ##### SET THE INDICES #####
    #NOTE: None for exog_idx is the complement of endog_idx
    return du.process_recarray_pandas(data, endog_idx=2, exog_idx=[7,4,3,5],
                                      dtype=float, index_idx=0)

def _get_data():
    filepath = dirname(abspath(__file__))
    ##### EDIT THE FOLLOWING TO POINT TO DatasetName.csv #####
    data = np.recfromtxt(open(filepath + '/statecrime.csv', 'rb'),
            delimiter=",", names=True, dtype=None)
    return data
