{"action":"created","comment":{"url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments/199491087","pull_request_review_id":133618805,"id":199491087,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5OTQ5MTA4Nw==","diff_hunk":"@@ -0,0 +1,799 @@\n+:author: Sergio Rey\n+:email: sergio.rey@ucr.edu\n+:institution: Center for Geospatial Sciences, University of California, Riverside \n+:corresponding:\n+\n+:author: Elijah Knaap\n+:email: \n+:institution: Center for Geospatial Sciences, University of California, Riverside \n+\n+:author: Su Han\n+:email: \n+:institution: Center for Geospatial Sciences, University of California, Riverside \n+\n+:author: Levi Wolf\n+:email: levi.john.wolf@bristol.ac.uk \n+:institution: School of Geographical Sciences, University of Bristol\n+\n+:author: Wei Kang \n+:email: \n+:institution: Center for Geospatial Sciences, University of California, Riverside \n+\n+:bibliography: reference\n+\n+\n+\n+-------------------------------------------------------\n+Spatio-temporal analysis of socioeconomic neighborhoods\n+-------------------------------------------------------\n+\n+.. class:: abstract\n+\n+The neighborhood effects literature represents a wide span of the social\n+sciences broadly concerned with the influence of spatial context on social\n+processes. From the study of segregation dynamics, the relationships between the\n+built environment and health outcomes, to the impact of concentrated poverty on\n+social efficacy, neighborhoods are a central construct in empirical work. From a\n+dynamic lens, neighborhoods experience changes not only in their socioeconomic\n+composition, but also in spatial extent; however, the literature has ignored the\n+latter source of change. In this paper, we discuss the development of novel,\n+spatially explicit approaches to the study of longitudinal neighborhood dynamics\n+using the scientific Python ecosystem.\n+\n+.. class:: keywords\n+\n+   neighborhoods, GIS, clustering, dynamics\n+\n+  \n+Introduction \n+------------\n+\n+For social scientists in a wide variety of disciplines, neighborhoods are\n+central thematic topics, focal units of analysis, and first-class objects of\n+inquiry. Despite their centrality in public health, sociology, geography, political\n+science, economics, psychology, and urban planning, however, neighborhoods\n+remain understudied because researchers lack appropriate analytical tools for\n+understanding their evolution through time and space. Towards this goal we are\n+developing the *open source longitudinal neighborhood analysis program*\n+``(OSLNAP)``. We envisage OSLNAP as a toolkit for better, more open and\n+reproducible science focused on neighborhoods and their sociospatial ecology. In\n+this paper we first provide an overview of the main components of OSLNAP. Next,\n+we present an illustration of selected OSLNAP functionality. We conclude the\n+paper with a road map for future developments.\n+\n+OSLNAP\n+------\n+\n+Neighborhood analysis involves a multitude of analytic tasks, and different\n+types of inquiry lead to different analytical pipelines in which distinct tasks\n+are combined in sequence. OSLNAP is designed in a modular fashion to facilitate\n+the composition of different pipelines for neighborhood analysis. Its\n+functionality is available through several interfaces that include a web-based\n+front end as well as a library for scripting in Jupyter notebooks or at the\n+shell. As such, OSLNAP is intended to support different types of researchers and\n+questions. For example, a sociologist interested in comparative segregation\n+dynamics can use OSLNAP to derive time-consistent boundaries for a collection of\n+US metropolitan areas from 1980-2010. Alternatively, public health\n+epidemiologists can use the same boundaries to study the impact of neighborhood\n+context on childhood obesity trends. Both of these types of studies might be\n+characterized as \"neighborhood effects\" studies as neighborhood units serve as\n+containers to study different socioeconomic processes.\n+\n+An alternative group of studies falls under the \"neighborhood dynamics\" label.\n+Here the interest is in the neighborhood units themselves and how their\n+boundaries *and* internal socioeconomic composition evolve over time. Processes\n+such as gentrification and the so called great inversion :cite:`Ehrenhalt_2012`\n+where wealthy, higher educated, white populations are relocating into the center\n+cities while growing numbers of minorities move to the suburbs both\n+fundamentally restructure urban and suburban neighborhoods. OSLNAP is designed\n+to support both neighborhood effects and neighborhood dynamics modes of inquiry.\n+\n+Here we provide an overview of each of the main analytical components of OSLNAP\n+before moving on to an illustration of how selections of the analytical\n+functionality can be combined for particular use cases. OSLNAP's analytical\n+components are organized into three core modules: [a] data layer; [b]\n+neighborhood definition layer; [c] longitudinal analysis layer.\n+\n+Data Layer\n+==========\n+\n+Like many quantitative analyses, one of the most important and\n+challenging aspects of longitudinal neighborhood analysis is the\n+development of a tidy and accurate dataset. When studying the\n+socioeconomic makeup of neighborhoods over time, this challenge is\n+compounded by the fact that the spatial units whose composition is under\n+study often change size, shape, and configuration over time. The\n+``harmonize`` module provides social scientists with a set of simple and\n+consistent tools for building transparent and reproducible\n+spatiotemporal datasets. Further, the tools in ``harmonize`` allow\n+researchers to investigate the implications of alternative decisions in\n+the data processing pipeline and how those decisions affect the results\n+of their research.\n+\n+Neighborhood demographic and socioeconomic data relevant to social scientists\n+are typically collected via a household census or survey and aggregated to a\n+geographic reporting unit such as a state, county or zip code which may be\n+relatively stable. The boundaries of smaller geographies like census tracts,\n+however, often are designed to encapsulate roughly the same number of people for\n+the sake of comparability, which means that they are necessarily redrawn with\n+each data release as population grows and fluctuates. Figure :ref:`f:harm`\n+illustrates the issues involved. Here two census tracts from 2000 have been\n+merged to form a new tract in 2010. However, while one of the original tracts is\n+completely contained in the new tracts, the second original tract is only\n+partially contained in the new tract. In other words, since same physical\n+location may fall within the boundary of different reporting units at different\n+points in time, it is impossible to compare directly a single neighborhood with\n+itself over time.\n+\n+.. figure:: tractchange.png\n+\n+   Enumeration Unit Changes :cite:`Census_2010`. :label:`f:harm`\n+\n+\n+To facilitate temporal comparisons, research to date has proceeded by\n+designating a “target” geographic unit or zone that is held constant\n+over time, and allocating data from other zones using areal\n+interpolation and other estimation techniques. This process is sometimes\n+known as “boundary harmonization” :cite:`logan_2016`. While “harmonized” data\n+is used widely in neighborhood research, the harmonization process also\n+has known shortcomings, since the areal interpolation of aggregate data\n+is subject to the ecological fallacy–the geographic manifestation of\n+which is known as the “Modifiable Areal Unit Problem” (MAUP)\n+:cite:`Openshaw1984`. Simply put, MAUP holds that areal interpolation\n+introduces bias since the spatial distribution of variables in each of\n+the overlapping zones is unknown. A number of alternative approaches\n+have been suggested to reduce the amount of error by incorporating\n+auxiliary data such as road networks, which help to uncover the “true”\n+spatial distribution of underlying variables, but this remains an active\n+area of research :cite:`schroeder_2017,Sridharan2013,Tapp2010,Xie1995`.\n+\n+In practice, these challenges mean that exceedingly few neighborhood\n+researchers undertake harmonization routines in their own research, and\n+those performing temporal analyses typically use exogenous,\n+pre-harmonized boundaries from a commercial source such as the\n+Neighborhood Change Database (NCDB) :cite:`tatian`, or the freely available\n+Longitudinal Tract Database (LTDB) :cite:`logan_2014`. The developers of\n+these products have published studies verifying the accuracy\n+of their respective data, but those claims have gone untested because\n+external researchers are unable to fully replicate the underlying methodology.\n+\n+To overcome the issues outlined above, ``OSLNAP`` provides a suite of\n+methods for conducting areal interpolation and boundary\n+harmonization in the ``harmonize`` module. It leverages ``geopandas``\n+and ``PySAL`` for managing data and performing geospatial operations,\n+and the pydata stack for attribute calculations :cite:`rey2009`. The\n+``harmonize`` module allows a researcher to specify a set of input data\n+(drawn from the space-time database described in the prior section), a\n+set of target geographic units to remain constant over time, and an\n+interpolation function that may be applied to each variable in the\n+dataset independently. For instance, a researcher may decide to use\n+different interpolation methods for housing prices than for the share of\n+unemployed residents, than for total population; not only because the\n+researcher may wish to treat rates and counts separately, but also\n+because different auxiliary information might be applicable for\n+different types of variables.\n+\n+In a prototypical workflow, ``harmonize`` permits the end-user to:\n+\n+-  compile and query a spatiotemporal database using either local data or\n+   connections to  pubilic data services\n+\n+   -  queries may have spatial, temporal, and attribute filters\n+\n+-  define the relevant variables to be harmonized and optionally apply a\n+   different (spatial and/or temporal) interpolation function to each;\n+-  harmonize temporal data to consistent spatial units by either:\n+\n+   -  selecting an existing native unit (e.g. zip codes in 2016)\n+   -  inputting a user-defined unit (e.g. a theoretical or newly\n+      proposed boundary)\n+   -  developing new primitive units (e.g. the intersection of all\n+      polygons)\n+\n+\n+Neighborhood Identification\n+===========================\n+\n+\n+Neighborhoods are complex social and spatial environments with multiple\n+interacting individuals, markets, and processes. Despite decades of\n+research it remains difficult to quantify neighborhood context, and\n+certainly no single variable is capable of capturing the entirety of a\n+neighborhood’s essential essence. For this reason, several traditions of\n+urban research focus on the application of multivariate clustering\n+algorithms to develop neighborhood typologies. Such typologies are\n+sometimes viewed as more holistic descriptions of neighborhoods because\n+they account for multiple characteristics simultaneously\n+:cite:`galster2001`.\n+\n+One notable tradition from this perspective called “geodemographics”, is\n+used to derive prototypical neighborhoods whose residents are similar\n+along a variety of socioeconomic and demographic attributes\n+:cite:`flowerdew1989,singleton2014`. Geodemographics have been applied\n+widely in marketing :cite:`farr2005`, education :cite:`singleton2009a`, and health\n+research :cite:`petersen2011` among a wide variety of additional fields. The\n+geodemographic approach has also been criticized, however, for failing to\n+model geographic space formally. In other words, the geodemographic\n+approach ignores spatial autocorrelation, or the “first law of\n+geography”–that the attributes of neighboring zones are likely to be\n+similar.\n+\n+Another tradition in urban research, known as “regionalization”\n+has thus been focused on the development of multivariate clustering\n+algorithms that account for spatial dependence explicitly. To date,\n+however, these traditions have rarely crossed in the literature,\n+limiting the utility each approach might have toward applications in new\n+fields. In the ``cluster`` module, we implement both clustering\n+approaches to (a) foster greater collaboration among weakly connected\n+components in the field of geographic information science, and (b) to\n+allow neighborhood researchers to investigate the performance of\n+multiple different clustering solutions in their work and evaluate the\n+implications of including space as a formal component in their\n+clustering models.\n+\n+In OSLNAP, the ``cluster`` module leverages the scientific python ecosystem,\n+building from scikit-learn :cite:`scikit-learn`, geopandas :cite:`geopandas`,\n+and PySAL :cite:`Rey14`. Using input from the Data Layer, the ``cluster`` module\n+allows researchers to develop neighborhood typologies based on either attribute\n+similarity (the geodemographic approach) or attribute similarity with\n+incorporated spatial dependence (the regionalization approach). Given a\n+space-time data set, the ``cluster`` module allows users to cluster (a) a single\n+time period, (b) a set of time periods cross-sectionally, or (c) a set of\n+periods pooled as a time series. In (b), neighborhood clusters are independent\n+from one time period to the next. This can be a useful approach if researchers\n+are interested in the durability and permanence of certain kinds of\n+neighborhoods. If similar types reappear in multiple cross sections (e.g. if the\n+k-means algorithm places the k-centers in approximately similar locations each\n+time period), then it may be inferred that the metropolitan dynamics are\n+somewhat stable, at least at the macro level, since new kinds of neighborhoods\n+do not appear to be evolving and old, established neighborhood types remain\n+prominent. The drawback of this approach is the type of a single neighborhood\n+cannot be compared between two different time periods because the types are\n+independent in each period.\n+\n+In the third approach (c), clusters are defined from all observations in all\n+time periods. The universe of potential neighborhood types is held\n+constant over time, the neighborhood types are consistent across time periods,\n+and researchers can examine how particular neighborhoods get classified into\n+different neighborhood types as their composition transitions through different\n+time periods. While comparatively rare in the research, this latter approach\n+allows a richer examination of socio-spatial dynamics. By providing tools to\n+drastically simplify the data manipulation and analysis pipeline, we aim to\n+facilitate greater exploration of urban dynamics that will help catalyze more of\n+this research.\n+\n+To facilitate this work, the ``cluster`` module provides wrappers for\n+several common clustering algorithms from ``scikit-learn`` that can be\n+applied . Beyond these, however, it also provides wrappers for several\n+*spatial* clustering algorithms from ``PySAL``, in addition to a number\n+of state-of-the art algorithms that have recently been developed\n+:cite:`wolf2018`.\n+\n+In a prototypical workflow, ``cluster`` permits the end-user to:\n+\n+-  query the (tidy) space-time dataset created via the ``harmonize``\n+   module\n+\n+   -  queries may have spatial, temporal, and attribute filters\n+\n+-  define the neighborhood attributes and time periods and on which to\n+   develop a typology\n+-  run one or more clustring algorithms on the space-time dataset to\n+   derive neighborhood cluster membership\n+\n+   -  clustering may be applied cross-sectionally or on the pooled\n+      time-series\n+   -  clustering may incorporate spatial dependence, in which case\n+      ``cluster`` provides options for users to parameterize a spatial\n+      contiguity matrix\n+\n+-  clustering results may be reviewed quickly via the builtin ``plot()``\n+   method, or interactively by leveraging the planned ``geovisualization``\n+   module.\n+\n+Longitudinal Analysis\n+=====================\n+\n+Having identified the neighborhood types for all units of analysis over the\n+whole time span, researchers might be interested in how they evolve over time.\n+The third core module of ``OSLNAP``'s analytical components, ``change``,\n+provides a suite of functionality towards this end. Traditional longitudinal\n+analysis in neighborhood contexts focuses solely on changes in residential\n+socioeconomic composition, while we and others have argued that changes in\n+geographic footprints are also substantively interesting :cite:`rey2011`.\n+Therefore, this component draws upon recent methodological developments from\n+spatial inequality dynamics and implements two broad sets of spatially explicit\n+analytics to provide deeper insights into the evolution of socioeconomic\n+processes and the interaction between these processes and geographic structure.\n+\n+Both sets of analytics operate on time series of neighborhood types; they each take\n+as input a set of spatial units of analysis (e.g. census tracts) that have\n+been assigned a categorical variable for each point in time (e.g.the output of\n+the ``cluster`` module). They differ, however, in how the time series\n+are modeled and analyzed. The first set centers on *transition analysis*, which\n+treats each time series as stochastically generated from time point to time\n+point. It is in the same spirit of the first-order Markov Chain analysis where a\n+:math:`(k,k)` transition matrix is formed by counting transitions across all the\n+:math:`k` neighborhood types between any two consecutive time points for all\n+spatial units. One drawback of this approach is that it treats all the time\n+series as being independent of one another and following an identical transition\n+mechanism. The spatial Markov approach was proposed by :cite:`Rey01` to\n+interrogate potential spatial interactions by conditioning transition matrices\n+on neighboring context while the spatial regime Markov approach allows several\n+transition matrices to be formed for different spatial regimes which are\n+constituted by contiguous spatial units. Both approaches together with\n+inferences have been implemented in Python Spatial Analysis Library (PySAL) \n+:cite:`Rey14` and Geospatial Distribution Dynamics (giddy) package :cite:`giddy`. The\n+``change`` module considers these packages as dependencies and wraps relevant\n+classes and functions to make them consistent and efficient for longitudinal\n+neighborhood analysis.\n+\n+The other set of spatially explicit approach to neighborhood dynamics is\n+concerned with *sequence analysis* which treats each time series of\n+neighborhood types as a whole, in contrast to *transition analysis*.\n+The core of *sequence analysis* is the similarity measure between a pair\n+of sequences. Various aspects of a neighborhood sequence such as the order\n+in which successive neighborhood types appears, the year(s) in which a\n+specific neighborhood type appears, and the duration of a neighborhood type\n+could be the focus of the similarity measure. Choosing which aspect or\n+aspects to focus on should be driven by the research question at hand\n+and the interpretation should proceed with caution :cite:`Studer:2016`.\n+A major approach of *sequence analysis*, the\n+optimal matching (OM) algorithm, which was originally used for matching\n+protein and DNA sequences :cite:`ABBOTT:2000`, has been adopted\n+to measure the similarity between neighborhood sequences in\n+metropolitan areas such as Los Angeles and Chicago\n+:cite:`delmelle2016,delmelle2017`.\n+It generally works by finding the minimum cost for transforming\n+one sequence to another using a combination of operations including\n+substitution, insertion, deletion and transposition.\n+The similarity matrix is then used as the input for another round of clustering\n+to derive a typology of neighborhood trajectory to produce several sequences\n+of neighborhood types typically\n+happening in a particular order :cite:`delmelle2016`.\n+It should be noted here that the operation costs are not necessarily\n+identical. Rather, they can be manipulated so that the resulted similarity\n+measure reflects the exact characteristics of the neighborhood sequence we are\n+interested in. For example, the cost of substution may capture units' socioeconomic\n+dissimilarity in contemporary experience :cite:`li2018` while operations\n+including insertion, deletion and\n+transposition can be assigned such an expensive cost that it is highly unlikely\n+they will be allowed in the OM process .\n+We allows for various cost functions and further extend the definition\n+of operation costs to incorporate potential spatial\n+dependence and spatial heterogeneity.\n+\n+In a prototypical workflow, the ``change`` module permits the end user to explore\n+the nature of neighborhood change:\n+\n+.. raw:: latex\n+\n+   \\begin{itemize}\n+        \\item from a dynamic perspective (\\textit{transition analysis})\n+             \\begin{itemize}\n+             \\item by applying a first-order Markov chain model to look at probabilities of\n+   transitioning between neighborhood types over time.\n+             \\item by applying a spatial Markov chains model to interrogate the role of\n+   spatial interactions in shaping neighborhood dynamics.\n+             \\item by applying a spatial regime Markov chains model to explore spatially\n+   heterogeneous neighborhood dynamics.\n+             \\end{itemize}\n+        \\item from a holistic perspective (\\textit{sequence analysis})\n+             \\begin{itemize}\n+             \\item by applying the OM algorithm with chosen cost functions for\n+   substitution, insertion, deletion and transposition.\n+             \\item by applying the spatially explicit OM algorithm which takes\n+   account of potential spatial dependence and spatial heterogeneity in the operation\n+   costs.\n+             \\end{itemize}\n+        \\item from a combined holistic \\& dynamic perspective\n+             \\begin{itemize}\n+             \\item by incorporating the similarity matrix produced by the\n+   \\textit{sequence analysis} in the \\textit{transition analysis} to explore\n+   potential interactions and heterogeneity in the underlying dynamics of\n+   neighborhood change.\n+             \\item by incorporating the transition matrix or matrices (from\n+   spatial extensions to a Markov chain model) produced by the\n+   \\textit{transition analysis} in the \\textit{sequence analysis} to better\n+   cost functions of operations.\n+             \\end{itemize}\n+   \\end{itemize}\n+\n+\n+\n+Empirical Illustration\n+----------------------\n+\n+In the following sections we demonstrate the utility of ``OSLNAP`` by\n+presenting the results of several initial analyses conducted with the\n+package. We begin with a series of cluster analyses, which are then used to\n+analyze neighborhood dynamics. Typically, workflows of this variety would\n+require extensive data collection, munging and recombination; with ``OSLNAP``,\n+however, we accomplish the same in just a few lines of code. Using the Los\n+Angeles metropolitan area as our example, we present three neighborhood\n+typologies, each of which leverages the same set of demographic and\n+socioeconomic variables, albeit with different clustering algorithms. The\n+results show similarities across the three methods but also several marked\n+differences. This diversity of results can be viewed as either nuisance or\n+flexibility, depending on the research question at hand, and highlights the need\n+for research tools that facilitate rapid creation and exploration of different\n+neighborhood clustering solutions. For each example, we prepare a cluster\n+analysis for the Los Angeles metropolitan region using data at the census tract\n+level. We visualize each clustering solution on a map, describe the resulting\n+neighborhood types, and examine the changing spatial structure over time. For\n+each of the examples, we cluster on the following variables: race categories\n+(percent white, percent black, percent Asian, percent Hispanic), educational\n+attainment (share of residents with a college degree or greater) and\n+socioeconomic status (median income, median home value, percent of residents in\n+poverty).\n+\n+Agglomerative Ward\n+==================\n+\n+We begin with a simple example identifying six clusters via the\n+agglomerative Ward method. Following the geodemographic approach, we aim\n+to find groups of neighborhoods that are similar in terms of their\n+residential composition, regardless of whether those neighborhoods are\n+physically proximate. Initialized with the demographic and socioeconomic\n+variables listed earlier, the Ward method identifies three clusters that\n+are predominantly white on average but which differ with respect to\n+socioeconomic status. The other three clusters, meanwhile, tend to be\n+predominantly minority neighborhoods but are differentiated mainly by\n+the dominant racial group (black versus Hispanic/Latino) rather than by class.\n+The results, while unsurprising to most urban scholars, highlight the continued\n+segregation by race and class that characterize American cities. For purposes of\n+illustration, we give each neighborhood type a stylized moniker that attempts to\n+summarize succinctly its composition (again, a common practice in the\n+geodemographic literature). To be clear, these labels are oversimplifications of\n+the socioeconomic context within each type, but they help facilitate rapid\n+consumption of the information nonetheless. The resulting clusters are presented\n+in Figure :ref:`f:ward`.\n+\n+.. figure:: la_ward_all.png\n+\n+   Neighborhood Types in LA using Ward Clustering. :label:`f:ward`\n+\n+\n+-  Type 0. racially concentrated (black and Hispanic) poverty\n+-  Type 1. minority working class\n+-  Type 2. integrated middle class\n+-  Type 3. white upper class\n+-  Type 4. racially concentrated (Hispanic) poverty\n+-  Type 5. white working class\n+\n+When the neighborhood types are mapped, geographic patterns are\n+immediately apparent, despite the fact that space is not considered\n+formally during the clustering process. These visualizations reveal what\n+is known as “the first law of geography”–that near things tend to be\n+more similar than distant things (stated otherwise, that geographic data\n+tend to be spatially autocorrelated) :cite:`Tobler_1970`. Even though we do\n+not include the spatial configuration as part of the modeling process,\n+the results show obvious patterns, where neighborhood types tend to\n+cluster together in euclidian space. The clusters for neighborhoods type\n+zero and four are particularly compact and persistent over time (both\n+types characterized by racially concentrated poverty), helping to shed\n+light on the persistence of racial and spatial inequality. With these\n+types of visualizations in hand, researchers are equipped not only with\n+analytical tools to understand how neighborhood composition can affect\n+the lives of its residents (a research tradition known as neighborhood\n+effects), but also how neighborhood identities can transform (or remain\n+stagnant) over time and space. Beyond the simple diagnostics plots\n+presented above, ``OSLNAP`` also includes an interactive visualization\n+interface that allows users to interrogate the results of their analyses\n+in a dynamic web-based environment where interactive charts and maps\n+automatically readjust according to user selections.\n+\n+\n+Affinity Propagation\n+====================\n+\n+Affinity propagation is a newer clustering algorithm with\n+implementations in scikit-learn that is capable of\n+determining the number of clusters endogenously (subject to a few tuning\n+parameters). Initialized with the default settings, ``OSLNAP`` discovers\n+14 neighborhood types in the Los Angeles region; in a way, this\n+increases the resolution of the analysis beyond the Ward example, since\n+increasing the number of clusters means neighborhoods are more tightly\n+defined with lower variance in their constituent variables. On the other\n+hand, increasing the number of neighborhood types also increase the\n+difficulty of interpretation since the each type will be, by definition,\n+less differentiable from the others. In the proceeding section, we\n+discuss how researchers can exploit this variability in neighborhood\n+identification to yield different types of dynamic analyses. Again, we\n+find it useful to present stylized labels to describe each neighborhood\n+type:\n+\n+.. figure:: la_ap_all.png\n+\n+   Neighborhood Types in LA using Affinity Propagation. :label:`f:ap`\n+\n+\n+-  Type 0. white working class\n+-  Type 1. white extreme wealth\n+-  Type 2. black working class\n+-  Type 3. Hispanic poverty\n+-  Type 4. integrated poverty\n+-  Type 5. Asian middle class\n+-  Type 6. white upper-middle class\n+-  Type 7. integrated Hispanic middle class\n+-  Type 8. extreme racially concentrated poverty\n+-  Type 9. integrated extreme poverty\n+-  Type 10. Asian upper middle class\n+-  Type 11. integrated white middle class\n+-  Type 12. white elite\n+-  Type 13. Hispanic middle class\n+\n+Despite having more than double the number of neighborhood types in the\n+Ward example, many of the spatial patterns remain when using affinity\n+propagation clustering, including concentrated racial poverty in South\n+Central LA, concentrated affluence along much of the coastline, black\n+and Hispanic enclaves in the core of the city, and white working class\n+strongholds in more rural areas to the north of the region. Comparing\n+these two examples makes clear that some of the sociodemographic\n+patterns in the LA region are quite stable, and are somewhat robust to\n+the clustering method or number of clusters. Conversely, by increasing\n+the number of clusters in the model, researchers can explore a much\n+richer mosaic of social patterns and their evolution over time, such as\n+the continued diversification of the I-5 corridor along the southern\n+portion of the region.\n+\n+SKATER\n+======\n+\n+Breaking from the geodemographic approach, the third example leverages\n+SKATER, a spatially-constrained clustering algorithm that finds groups\n+of neighborhoods that are similar in composition, but groups them\n+together if and only if they also satisfy the criteria for a particular\n+geographic relationship :cite:`wolf2018`. As such, the family of clustering\n+algorithms that incorporate spatial constraints (from the tradition\n+known as “regionalization”) must be applied cross-sectionally, and yield\n+an independent set of clusters for each time period. The clusters, thus,\n+depend not only on the composition of the census units, but also their\n+spatial configuration and connectivity structure at any given time.\n+\n+\n+.. figure:: la_skater_all.png\n+   :align: center\n+   :figclass: w\n+\n+   Neighborhood Types in LA using SKATER. :label:`f:skater`\n+\n+Despite the fact that clusters are independent from one year to the next\n+(and thus, we lack appropriate space in this text for describing the\n+SKATER results for each year) comparing the results over time\n+nonetheless yield some interesting insights. Regardless of the changing\n+spatial and demographic structure of the Los Angeles region, some of the\n+of the neighborhood boundaries identified are remarkably stable, such as\n+the area of concentrated affluence in Beverly Hills and its nearby\n+communities that jut out to the region’s West. Conversely, there is\n+considerable change among the predominantly minority communities in the\n+center of the region, whose boundaries appear to be evolving\n+considerably over time. In these places, a researcher might use the\n+output from SKATER to conduct an analysis to determine the ways in which\n+the empirical neighborhood boundaries derived from SKATER conform to\n+residents’ perceptions of such boundaries, their evolution over time,\n+and their social re-definition as developed by different residential\n+groups :cite:`wolf2018`. Irrespective of its particular use, the\n+regionalization approach presents neighborhood researchers with another\n+critical tool for understanding the bi-directional relationship between\n+people and places.\n+\n+In each of the sample analyses presented above, we use ``OSLNAP`` to\n+derive a set of neighborhood clusters or types that can be used to\n+analyze the demographic makeup of places over time. In some cases, these\n+maps can serve as foundations for descriptive analyses or analyzed as\n+research projects in their own right. In other cases, in which social\n+processes rather than the demographic makeup of communities are the focus\n+of study, the neighborhood types derived here can be used as input to\n+dynamic analyses of neighborhood change and evolution, particularly as\n+they relate to phenomena such as gentrification and displacement. In the\n+following sections, we demonstrate how the neighborhood typologies\n+generated by ``OSLNAP``\\ ’s ``cluster`` module can be used as input to the\n+``change`` module to explore the neighborhood evolution.\n+\n+Transition Analysis to Neighborhood Change\n+==========================================\n+\n+The ``change``\n+module can provide insights into the nature of neighborhood change in\n+the Los Angeles metropolitan area. We utilize the neighborhood types\n+for all census tracts of the Los Angeles metropolitan area across four\n+census years identified by selected clustering algorithms in\n+the former section as the input for the ``change`` module. Among the\n+three clustering algorithms, SKATER was applied to each cross\n+section of census tracts independently yielding clusters which are not\n+directly comparable over time. Thus, we focuses only on the\n+six neighborhood types identified by the agglomerative Ward method\n+(Fig. :ref:`f:ward`) and the fourteen neighborhood types identified by\n+the affinity propagation method (Fig. :ref:`f:ap`).\n+\n+We start with the aspatial transition analysis which pools all the time\n+series of neighborhood types and counts how many transitions between\n+any pair of neighborhood types across immediate consecutive census years :math:`(t,t+10)`\n+(or :math:`(t,t+5)` for 2010-2015)\n+which are further organized into a :math:`(k,k)` transition count matrix\n+:math:`\\pmb{N}`. Adopting\n+the maximum likelihood estimator for the first-order Markov transition\n+probability as shown in Equation (:ref:`mle`), a :math:`(k,k)` transition\n+probability matrix can thus be constructed providing the insights in the\n+underlying dynamics of neighborhood change. The :math:`(6,6)` and the\n+:math:`(14,14)` transition probability matrices for ward and affinity\n+propagation clusters are estimated and visualized in Fig. :ref:`f:wardapm` where\n+the color in grid :math:`(i,j)` represents the probability of transitioning from\n+neighborhood type :math:`i` to :math:`j` in the next census year. It is obvious\n+that both transition probability matrices are characterized by large diagonal\n+entries, indicating a certain level of neighborhood stability for the focal four\n+census years. This is especially true for the ward neighborhood type 4 which is\n+characterized by racially concentrated (Hispanic) poverty. The probability of\n+staying at this type is 0.876 meaning that there is only 12.4% chance of\n+changing to other neighborhood types once the census tract enters into type 4.\n+\n+\n+.. math::\n+   :label: mle\n+\n+   \\hat{p}_{ij} = \\frac{n_{ij}}{\\sum_{q=1}^k n_{iq}}, \\quad \\text{where} \\quad i,j \\in \\mathbb{S} = \\{1,2,\\cdots,k \\}\n+\n+\n+\n+.. figure:: ward_ap_m.png\n+\n+   Markov transition probability matrix for Ward and Affinity Propagation\n+   clusters. :label:`f:wardapm`\n+\n+\n+Moving from the aspatial transition analysis, we interrogate potential spatial\n+interactions among neighborhood dynamics using the spatial Markov chain approach.\n+More specifically, we hypothesize that the transition probability for any focal\n+census tract is not constant, but rather dependent on the spatial context,\n+that is, the most common neighborhood type of contiguous tracts, the so-called\n+spatial lag. Therefore,\n+:math:`k` exhaustive and mutually exclusive subsamples are constructed based\n+on the spatial lag at :math:`t`, from which :math:`k` :math:`(k,k)` transition probability\n+matrices are estimated based on Equation (:ref:`mle`). Fig. :ref:`f:smward`\n+displays the spatial Markov transition probability matrices for Ward neighborhood types.\n+It should be noted that the interpretation with these conditional transition probabilities\n+should proceed with caution as the increased number of parameters to be estimated\n+here could lead to large standard errors for some estimates. For example, the\n+:math:`(0,0)` entry in the subplot of Spatial Lag 3 is :math:`1`. The tendency\n+of interpreting the 100 percent to be tracts \"perfectly stuck at\" ward neighborhood type 0 if the spatial lag\n+is type 3 should be compromised by the fact that there is only :math:`1`\n+observation transitioning from type 0 which has the spatial lag\n+of type 3 at :math:`t` and this very observation happens to stay at type 0.\n+Since we are short of information, we could not conclude with the \"perfectly stuck\" theory.\n+The spatial Markov tests (available upon request)\n+including the  likelihood ratio test and the :math:`\\chi^2` test\n+:cite:`Bickenbach:2003wg, Rey20161` are both rejected indicating that neighboring\n+context plays an important role in shaping the neighborhood dynamics.\n+\n+\n+\n+.. figure:: ward_sm_6.png\n+\n+   Spatial Markov transition probability matrices for Ward clusters. :label:`f:smward`\n+\n+\n+\n+Sequence Analysis to Neighborhood Change\n+========================================\n+\n+We now turn to a clustering of the sequences of neighborhood transitions. \n+The departure point is the trajectories of neighborhoods as shown in Figure\n+:ref:`f:ward`. Given how the neighborhood characteristics can change over\n+time, a neighborhood's socioeconomic classification can change over time. \n+Identifying areas where these shifts happen in the same way in the same point\n+in time, a neighborhood experiencing gentrification may move from minority\n+working class to integrated middle class, terminating in white upper class\n+as the process of demographic and economic shift matures. Identifying areas\n+that experience the same trajectories since 1980 allows us to examine spaces \n+with similar aligned histories, rather than areas that may have experienced\n+similar transitions at some point in their history. \n+\n+.. figure:: hamming_and_weighted.png\n+   :align: center\n+   :figclass: w\n+\n+   Neighborhoods with similar spatial-social histories since 1980 :label:`f:trajclust`\n+\n+Armed with the sequences of sociodemographic classifications for every harmonized \n+tract in LA, the distance between these sequences can be computed. Since these \n+sequences are intrinsically aligned in time, the Hamming distance between classifications\n+yields an effective metric for how different places' demographic changes\n+have been. The pairwise Hamming distance matrix for demographic transitions in LA\n+is sufficient to recover a set of boundaries. However, alone, this metric only considers\n+that two areas are in different sociodemographic classifications at a specific point in time.\n+It does not consider the difference in the attribute's strength of assignment in these\n+classifications, nor does it consider how well an area fits into its demographic classification.\n+\n+Conceptually, this is important; even though the gist of the demographic\n+classifications stay consistent over time, the members of these classes may\n+shift around significantly over time. As a tract drifts from one classification\n+to another classification over time, it may move within the class before it hops classifications\n+if the movement is slow. This means that, at each point in time, tracts are \n+more or less representative of their clusters; a transition of one area from \n+\"white working class\" to \"white upper class\" may not necessarily reflect the same amount\n+of social/spatial volatility as a move from \"minority working class\" to \"white upper class,\"\n+as might happen during rapid gentrification.\n+\n+As such, we can also weight the edit distance based on how \"expensive\" the edit\n+is in terms of the clustering distance. Using this weighting method, not all\n+transitions from white working class to white upper class will be treated the\n+same: observations that are \"almost\" white upper class but not quite will be\n+considered more similar to white upper class tracts. But, since a reassignment\n+is still involved, there will still be a cost associated with that edit.\n+Clusterings for both the raw hamming edit distance and the weighted hamming edit\n+distances over sociodemographic sequences are shown in Figure :ref:`f:trajclust`\n+using :cite:`wolf2018`. Broadly speaking, the assignments between the two\n+clustering methods are strongly related (with an adjusted Rand index of .68),\n+but macro-level distinctions between assignment structures are visible,\n+particularly in in the areas of central northern LA near the Hollywood Hills, as","path":"papers/serge_rey/serge_rey.rst","position":null,"original_position":729,"commit_id":"94375186982df97f4d2f42c9c9db1aa27d4fa389","original_commit_id":"8747d27e6575bdb240a5dfdde69af243d5353f2c","user":{"login":"sjsrey","id":118042,"node_id":"MDQ6VXNlcjExODA0Mg==","avatar_url":"https://avatars1.githubusercontent.com/u/118042?v=4","gravatar_id":"","url":"https://api.github.com/users/sjsrey","html_url":"https://github.com/sjsrey","followers_url":"https://api.github.com/users/sjsrey/followers","following_url":"https://api.github.com/users/sjsrey/following{/other_user}","gists_url":"https://api.github.com/users/sjsrey/gists{/gist_id}","starred_url":"https://api.github.com/users/sjsrey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjsrey/subscriptions","organizations_url":"https://api.github.com/users/sjsrey/orgs","repos_url":"https://api.github.com/users/sjsrey/repos","events_url":"https://api.github.com/users/sjsrey/events{/privacy}","received_events_url":"https://api.github.com/users/sjsrey/received_events","type":"User","site_admin":false},"body":"Fixed","created_at":"2018-07-02T13:11:00Z","updated_at":"2018-07-02T13:11:00Z","html_url":"https://github.com/scipy-conference/scipy_proceedings/pull/405#discussion_r199491087","pull_request_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/405","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments/199491087"},"html":{"href":"https://github.com/scipy-conference/scipy_proceedings/pull/405#discussion_r199491087"},"pull_request":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/405"}},"in_reply_to_id":196647717},"pull_request":{"url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/405","id":190036676,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkwMDM2Njc2","html_url":"https://github.com/scipy-conference/scipy_proceedings/pull/405","diff_url":"https://github.com/scipy-conference/scipy_proceedings/pull/405.diff","patch_url":"https://github.com/scipy-conference/scipy_proceedings/pull/405.patch","issue_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/405","number":405,"state":"open","locked":false,"title":"Paper: Spatio-temporal analysis of socioeconomic neighborhoods","user":{"login":"sjsrey","id":118042,"node_id":"MDQ6VXNlcjExODA0Mg==","avatar_url":"https://avatars1.githubusercontent.com/u/118042?v=4","gravatar_id":"","url":"https://api.github.com/users/sjsrey","html_url":"https://github.com/sjsrey","followers_url":"https://api.github.com/users/sjsrey/followers","following_url":"https://api.github.com/users/sjsrey/following{/other_user}","gists_url":"https://api.github.com/users/sjsrey/gists{/gist_id}","starred_url":"https://api.github.com/users/sjsrey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjsrey/subscriptions","organizations_url":"https://api.github.com/users/sjsrey/orgs","repos_url":"https://api.github.com/users/sjsrey/repos","events_url":"https://api.github.com/users/sjsrey/events{/privacy}","received_events_url":"https://api.github.com/users/sjsrey/received_events","type":"User","site_admin":false},"body":"If you are creating this PR in order to submit a draft of your paper,\r\nsee http://procbuild.scipy.org/ for logs generated by the build\r\nprocess.\r\n\r\nSee the [project readme](https://github.com/scipy-conference/scipy_proceedings#build-your-paper)\r\nfor more information.\r\n","created_at":"2018-05-23T16:34:22Z","updated_at":"2018-07-02T13:11:00Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ff713d102329eb3b8b6afa24bec9232700d56518","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":902774949,"node_id":"MDU6TGFiZWw5MDI3NzQ5NDk=","url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/labels/paper","name":"paper","color":"78dfe2","default":false},{"id":229680784,"node_id":"MDU6TGFiZWwyMjk2ODA3ODQ=","url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/labels/pending-comment","name":"pending-comment","color":"bfe5bf","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/405/commits","review_comments_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/405/comments","review_comment_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/405/comments","statuses_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/statuses/94375186982df97f4d2f42c9c9db1aa27d4fa389","head":{"label":"sjsrey:2018","ref":"2018","sha":"94375186982df97f4d2f42c9c9db1aa27d4fa389","user":{"login":"sjsrey","id":118042,"node_id":"MDQ6VXNlcjExODA0Mg==","avatar_url":"https://avatars1.githubusercontent.com/u/118042?v=4","gravatar_id":"","url":"https://api.github.com/users/sjsrey","html_url":"https://github.com/sjsrey","followers_url":"https://api.github.com/users/sjsrey/followers","following_url":"https://api.github.com/users/sjsrey/following{/other_user}","gists_url":"https://api.github.com/users/sjsrey/gists{/gist_id}","starred_url":"https://api.github.com/users/sjsrey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjsrey/subscriptions","organizations_url":"https://api.github.com/users/sjsrey/orgs","repos_url":"https://api.github.com/users/sjsrey/repos","events_url":"https://api.github.com/users/sjsrey/events{/privacy}","received_events_url":"https://api.github.com/users/sjsrey/received_events","type":"User","site_admin":false},"repo":{"id":129826838,"node_id":"MDEwOlJlcG9zaXRvcnkxMjk4MjY4Mzg=","name":"scipy_proceedings","full_name":"sjsrey/scipy_proceedings","owner":{"login":"sjsrey","id":118042,"node_id":"MDQ6VXNlcjExODA0Mg==","avatar_url":"https://avatars1.githubusercontent.com/u/118042?v=4","gravatar_id":"","url":"https://api.github.com/users/sjsrey","html_url":"https://github.com/sjsrey","followers_url":"https://api.github.com/users/sjsrey/followers","following_url":"https://api.github.com/users/sjsrey/following{/other_user}","gists_url":"https://api.github.com/users/sjsrey/gists{/gist_id}","starred_url":"https://api.github.com/users/sjsrey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjsrey/subscriptions","organizations_url":"https://api.github.com/users/sjsrey/orgs","repos_url":"https://api.github.com/users/sjsrey/repos","events_url":"https://api.github.com/users/sjsrey/events{/privacy}","received_events_url":"https://api.github.com/users/sjsrey/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sjsrey/scipy_proceedings","description":"Tools used to generate the SciPy conference proceedings","fork":true,"url":"https://api.github.com/repos/sjsrey/scipy_proceedings","forks_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/forks","keys_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/teams","hooks_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/hooks","issue_events_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/issues/events{/number}","events_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/events","assignees_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/assignees{/user}","branches_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/branches{/branch}","tags_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/tags","blobs_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/git/refs{/sha}","trees_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/statuses/{sha}","languages_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/languages","stargazers_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/stargazers","contributors_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/contributors","subscribers_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/subscribers","subscription_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/subscription","commits_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/commits{/sha}","git_commits_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/git/commits{/sha}","comments_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/comments{/number}","issue_comment_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/issues/comments{/number}","contents_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/contents/{+path}","compare_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/merges","archive_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/downloads","issues_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/issues{/number}","pulls_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/pulls{/number}","milestones_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/milestones{/number}","notifications_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/labels{/name}","releases_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/releases{/id}","deployments_url":"https://api.github.com/repos/sjsrey/scipy_proceedings/deployments","created_at":"2018-04-17T01:18:54Z","updated_at":"2018-07-02T13:08:21Z","pushed_at":"2018-07-02T13:08:19Z","git_url":"git://github.com/sjsrey/scipy_proceedings.git","ssh_url":"git@github.com:sjsrey/scipy_proceedings.git","clone_url":"https://github.com/sjsrey/scipy_proceedings.git","svn_url":"https://github.com/sjsrey/scipy_proceedings","homepage":"","size":201298,"stargazers_count":0,"watchers_count":0,"language":"TeX","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":3,"open_issues":0,"watchers":0,"default_branch":"2018"}},"base":{"label":"scipy-conference:2018","ref":"2018","sha":"2e43deb55d94b1876aabfa5d8a4c9367e2c0ada0","user":{"login":"scipy-conference","id":4884274,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ4ODQyNzQ=","avatar_url":"https://avatars2.githubusercontent.com/u/4884274?v=4","gravatar_id":"","url":"https://api.github.com/users/scipy-conference","html_url":"https://github.com/scipy-conference","followers_url":"https://api.github.com/users/scipy-conference/followers","following_url":"https://api.github.com/users/scipy-conference/following{/other_user}","gists_url":"https://api.github.com/users/scipy-conference/gists{/gist_id}","starred_url":"https://api.github.com/users/scipy-conference/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scipy-conference/subscriptions","organizations_url":"https://api.github.com/users/scipy-conference/orgs","repos_url":"https://api.github.com/users/scipy-conference/repos","events_url":"https://api.github.com/users/scipy-conference/events{/privacy}","received_events_url":"https://api.github.com/users/scipy-conference/received_events","type":"Organization","site_admin":false},"repo":{"id":1825629,"node_id":"MDEwOlJlcG9zaXRvcnkxODI1NjI5","name":"scipy_proceedings","full_name":"scipy-conference/scipy_proceedings","owner":{"login":"scipy-conference","id":4884274,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ4ODQyNzQ=","avatar_url":"https://avatars2.githubusercontent.com/u/4884274?v=4","gravatar_id":"","url":"https://api.github.com/users/scipy-conference","html_url":"https://github.com/scipy-conference","followers_url":"https://api.github.com/users/scipy-conference/followers","following_url":"https://api.github.com/users/scipy-conference/following{/other_user}","gists_url":"https://api.github.com/users/scipy-conference/gists{/gist_id}","starred_url":"https://api.github.com/users/scipy-conference/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scipy-conference/subscriptions","organizations_url":"https://api.github.com/users/scipy-conference/orgs","repos_url":"https://api.github.com/users/scipy-conference/repos","events_url":"https://api.github.com/users/scipy-conference/events{/privacy}","received_events_url":"https://api.github.com/users/scipy-conference/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scipy-conference/scipy_proceedings","description":"Tools used to generate the SciPy conference proceedings","fork":false,"url":"https://api.github.com/repos/scipy-conference/scipy_proceedings","forks_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/forks","keys_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/teams","hooks_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/hooks","issue_events_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/events{/number}","events_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/events","assignees_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/assignees{/user}","branches_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/branches{/branch}","tags_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/tags","blobs_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/refs{/sha}","trees_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/statuses/{sha}","languages_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/languages","stargazers_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/stargazers","contributors_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/contributors","subscribers_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/subscribers","subscription_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/subscription","commits_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/commits{/sha}","git_commits_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/git/commits{/sha}","comments_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/comments{/number}","issue_comment_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/comments{/number}","contents_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/contents/{+path}","compare_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/merges","archive_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/downloads","issues_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues{/number}","pulls_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls{/number}","milestones_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/milestones{/number}","notifications_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/labels{/name}","releases_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/releases{/id}","deployments_url":"https://api.github.com/repos/scipy-conference/scipy_proceedings/deployments","created_at":"2011-05-31T10:26:48Z","updated_at":"2018-06-30T22:46:46Z","pushed_at":"2018-07-02T13:08:21Z","git_url":"git://github.com/scipy-conference/scipy_proceedings.git","ssh_url":"git@github.com:scipy-conference/scipy_proceedings.git","clone_url":"https://github.com/scipy-conference/scipy_proceedings.git","svn_url":"https://github.com/scipy-conference/scipy_proceedings","homepage":"","size":192533,"stargazers_count":111,"watchers_count":111,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":248,"mirror_url":null,"archived":false,"open_issues_count":70,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":248,"open_issues":70,"watchers":111,"default_branch":"2018"}},"_links":{"self":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/405"},"html":{"href":"https://github.com/scipy-conference/scipy_proceedings/pull/405"},"issue":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/405"},"comments":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/issues/405/comments"},"review_comments":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/405/comments"},"review_comment":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/pulls/405/commits"},"statuses":{"href":"https://api.github.com/repos/scipy-conference/scipy_proceedings/statuses/94375186982df97f4d2f42c9c9db1aa27d4fa389"}},"author_association":"NONE"}}
{"actor":{"display_login":"sjsrey"}}