From e07ee0b882dc6f656a00c9c5056dc607e7380dd3 Mon Sep 17 00:00:00 2001 From: csubira Date: Wed, 21 Feb 2018 16:48:37 +0100 Subject: [PATCH 01/27] Add new docs folder structure --- docs/examples/01-measures-functions.md | 185 ++++++ docs/examples/02-boundary-functions.md | 76 +++ docs/examples/03-discovery-functions.md | 160 ++++++ docs/guides/01-overview.md | 88 +++ .../02-accessing-the-data-observatory.md | 123 ++++ docs/guides/03-glossary.md | 126 ++++ docs/img/local_male_pop.jpg | Bin 0 -> 60106 bytes docs/img/obs_getboundary.jpg | Bin 0 -> 60240 bytes docs/img/visualize_obs_data.jpg | Bin 0 -> 118175 bytes docs/reference/01-measures-functions.md | 539 ++++++++++++++++++ docs/reference/02-boundary-functions.md | 273 +++++++++ docs/reference/03-discovery-functions.md | 365 ++++++++++++ docs/support/01-support-options.md | 35 ++ docs/support/02-license.md | 32 ++ 14 files changed, 2002 insertions(+) create mode 100644 docs/examples/01-measures-functions.md create mode 100644 docs/examples/02-boundary-functions.md create mode 100644 docs/examples/03-discovery-functions.md create mode 100644 docs/guides/01-overview.md create mode 100644 docs/guides/02-accessing-the-data-observatory.md create mode 100644 docs/guides/03-glossary.md create mode 100644 docs/img/local_male_pop.jpg create mode 100644 docs/img/obs_getboundary.jpg create mode 100644 docs/img/visualize_obs_data.jpg create mode 100644 docs/reference/01-measures-functions.md create mode 100644 docs/reference/02-boundary-functions.md create mode 100644 docs/reference/03-discovery-functions.md create mode 100644 docs/support/01-support-options.md create mode 100644 docs/support/02-license.md diff --git a/docs/examples/01-measures-functions.md b/docs/examples/01-measures-functions.md new file mode 100644 index 0000000..7221eac --- /dev/null +++ b/docs/examples/01-measures-functions.md @@ -0,0 +1,185 @@ + +## Measures functions examples + +- Add a measure to an empty numeric column based on point locations in your table. + +```SQL +UPDATE tablename +SET total_population = OBS_GetUSCensusMeasure(the_geom, 'Total Population') + + +- Add a measure to an empty numeric column based on polygons in your table + +```SQL +UPDATE tablename +SET local_male_population = OBS_GetUSCensusMeasure(the_geom, 'Male Population') +``` + +- Add a measure to an empty numeric column based on point locations in your table + +```SQL +UPDATE tablename +SET median_home_value_sqft = OBS_GetMeasure(the_geom, 'us.zillow.AllHomes_MedianValuePerSqft') +``` + + +- Add a measure to an empty column based on polygons in your table + +```SQL +UPDATE tablename +SET household_count = OBS_GetMeasure(the_geom, 'us.census.acs.B11001001') +``` + + +- Add the Category to an empty column text column based on point locations in your table + +```SQL +UPDATE tablename +SET segmentation = OBS_GetCategory(the_geom, 'us.census.spielman_singleton_segments.X55') +``` + + +- Obtain metadata that can augment with one additional column of US population +data, using a boundary relevant for the geometry provided and latest timespan. +Limit to only the most recent column most relevant to the extent & density of +input geometries in `tablename`. + +```SQL +SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom), 4326), + '[{"numer_id": "us.census.acs.B01003001"}]', + 1, 1, + COUNT(*) +) FROM tablename +``` + +- Obtain metadata that can augment with one additional column of US population +data, using census tract boundaries. + +```SQL +SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom), 4326), + '[{"numer_id": "us.census.acs.B01003001", "geom_id": "us.census.tiger.census_tract"}]', + 1, 1, + COUNT(*) +) FROM tablename +``` + +- Obtain metadata that can augment with two additional columns, one for total +population and one for male population. + +```SQL +SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom), 4326), + '[{"numer_id": "us.census.acs.B01003001"}, {"numer_id": "us.census.acs.B01001002"}]', + 1, 1, + COUNT(*) +) FROM tablename +``` + + +- Validate metadata with two additional columns of US census data; using a boundary relevant for the geometry provided and the latest timespan. Limited to the most recent column, and the most relevant, based on the extent and density of input geometries in `tablename`. + +```SQL +SELECT OBS_MetadataValidation( + ST_SetSRID(ST_Extent(the_geom), 4326), + ST_GeometryType(the_geom), + '[{"numer_id": "us.census.acs.B01003001"}, {"numer_id": "us.census.acs.B01001002"}]', + COUNT(*)::INTEGER +) FROM tablename +GROUP BY ST_GeometryType(the_geom) +``` + + +- Obtain population densities for every geometry in a table, keyed by cartodb_id: + +```SQL +WITH meta AS ( + SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom), 4326), + '[{"numer_id": "us.census.acs.B01003001"}]', + 1, 1, COUNT(*) +) meta FROM tablename) +SELECT id AS cartodb_id, (data->0->>'value')::Numeric AS pop_density +FROM OBS_GetData((SELECT ARRAY_AGG((the_geom, cartodb_id)::geomval) FROM tablename), + (SELECT meta FROM meta)) +``` + +- Update a table with a blank numeric column called `pop_density` with population +densities: + +```SQL +WITH meta AS ( + SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom), 4326), + '[{"numer_id": "us.census.acs.B01003001"}]', + 1, 1, COUNT(*) +) meta FROM tablename), +data AS ( + SELECT id AS cartodb_id, (data->0->>'value')::Numeric AS pop_density + FROM OBS_GetData((SELECT ARRAY_AGG((the_geom, cartodb_id)::geomval) FROM tablename), + (SELECT meta FROM meta))) +UPDATE tablename +SET pop_density = data.pop_density +FROM data +WHERE cartodb_id = data.id +``` + +- Update a table with two measurements at once, population density and household +density. The table should already have a Numeric column `pop_density` and +`household_density`. + +```SQL +WITH meta AS ( + SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom),4326), + '[{"numer_id": "us.census.acs.B01003001"},{"numer_id": "us.census.acs.B11001001"}]', + 1, 1, COUNT(*) +) meta from tablename), +data AS ( + SELECT id, + data->0->>'value' AS pop_density, + data->1->>'value' AS household_density + FROM OBS_GetData((SELECT ARRAY_AGG((the_geom, cartodb_id)::geomval) FROM tablename), + (SELECT meta FROM meta))) +UPDATE tablename +SET pop_density = data.pop_density, + household_density = data.household_density +FROM data +WHERE cartodb_id = data.id +``` + + +- Obtain population densities for every row of a table with FIPS code county IDs +(USA). + +```SQL +WITH meta AS ( + SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom), 4326), + '[{"numer_id": "us.census.acs.B01003001", "geom_id": "us.census.tiger.county"}]' +) meta FROM tablename) +SELECT id AS fips, (data->0->>'value')::Numeric AS pop_density +FROM OBS_GetData((SELECT ARRAY_AGG(fips) FROM tablename), + (SELECT meta FROM meta)) +``` + +- Update a table with population densities for every FIPS code county ID (USA). +This table has a blank column called `pop_density` and fips codes stored in a +column `fips`. + +```SQL +WITH meta AS ( + SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom), 4326), + '[{"numer_id": "us.census.acs.B01003001", "geom_id": "us.census.tiger.county"}]' +) meta FROM tablename), +data as ( + SELECT id AS fips, (data->0->>'value') AS pop_density + FROM OBS_GetData((SELECT ARRAY_AGG(fips) FROM tablename), + (SELECT meta FROM meta))) +UPDATE tablename +SET pop_density = data.pop_density +FROM data +WHERE fips = data.id +``` diff --git a/docs/examples/02-boundary-functions.md b/docs/examples/02-boundary-functions.md new file mode 100644 index 0000000..8339e38 --- /dev/null +++ b/docs/examples/02-boundary-functions.md @@ -0,0 +1,76 @@ +- Insert all Census Tracts from Lower Manhattan and nearby areas within the supplied bounding box to a table named `manhattan_census_tracts` which has columns `the_geom` (geometry) and `geom_refs` (text). + +```sql +INSERT INTO manhattan_census_tracts(the_geom, geom_refs) +SELECT * +FROM OBS_GetBoundariesByGeometry( + ST_MakeEnvelope(-74.0251922607,40.6945658517, + -73.9651107788,40.7377626342, + 4326), + 'us.census.tiger.census_tract') +``` + +- Insert points that lie on Census Tracts from Lower Manhattan and nearby areas within the supplied bounding box to a table named `manhattan_tract_points` which has columns `the_geom` (geometry) and `geom_refs` (text). + +```sql +INSERT INTO manhattan_tract_points (the_geom, geom_refs) +SELECT * +FROM OBS_GetPointsByGeometry( + ST_MakeEnvelope(-74.0251922607,40.6945658517, + -73.9651107788,40.7377626342, + 4326), + 'us.census.tiger.census_tract') +``` + + +- Overwrite a point geometry with a boundary geometry that contains it in your table + +```SQL +UPDATE tablename +SET the_geom = OBS_GetBoundary(the_geom, 'us.census.tiger.block_group') +``` + + +- Write the US Census block group geoid that contains the point geometry for every row as a new column in your table. + +```SQL +UPDATE tablename +SET geometry_id = OBS_GetBoundaryId(the_geom, 'us.census.tiger.block_group') +``` + + +- Use a table of `geometry_id`s (e.g., geoid from the U.S. Census) to select the unique boundaries that they correspond to and insert into a table called, `overlapping_polygons`. This is a useful method for creating new choropleths of aggregate data. + +```SQL +INSERT INTO overlapping_polygons (the_geom, geometry_id, point_count) +SELECT + OBS_GetBoundaryById(geometry_id, 'us.census.tiger.county') As the_geom, + geometry_id, + count(*) +FROM tablename +GROUP BY geometry_id +``` + + +- Insert into table `denver_census_tracts` the census tract boundaries and geom_refs of census tracts which intersect within 10 miles of downtown Denver, Colorado. + +```sql +INSERT INTO denver_census_tracts(the_geom, geom_refs) +SELECT * +FROM OBS_GetBoundariesByPointAndRadius( + CDB_LatLng(39.7392, -104.9903), -- Denver, Colorado + 10000 * 1.609, -- 10 miles (10km * conversion to miles) + 'us.census.tiger.census_tract') +``` + + +- Insert into table `denver_tract_points` points on US census tracts and their corresponding geoids for census tracts which intersect within 10 miles of downtown Denver, Colorado, USA. + +```sql +INSERT INTO denver_tract_points(the_geom, geom_refs) +SELECT * +FROM OBS_GetPointsByPointAndRadius( + CDB_LatLng(39.7392, -104.9903), -- Denver, Colorado + 10000 * 1.609, -- 10 miles (10km * conversion to miles) + 'us.census.tiger.census_tract') +``` \ No newline at end of file diff --git a/docs/examples/03-discovery-functions.md b/docs/examples/03-discovery-functions.md new file mode 100644 index 0000000..679192f --- /dev/null +++ b/docs/examples/03-discovery-functions.md @@ -0,0 +1,160 @@ + +```SQL +SELECT * FROM OBS_Search('home value') +``` + +```SQL +SELECT * FROM OBS_GetAvailableBoundaries(CDB_LatLng(40.7, -73.9)) +``` + +- Obtain all numerators that are available within a small rectangle. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326)) +``` + +- Obtain all numerators that are available within a small rectangle and are for +the United States only. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states}'); +``` + +- Obtain all numerators that are available within a small rectangle and are +employment related for the United States only. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states, subsection/tags.employment}'); +``` + +- Obtain all numerators that are available within a small rectangle and are +related to both employment and age & gender for the United States only. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states, subsection/tags.employment, subsection/tags.age_gender}'); +``` + +- Obtain all numerators that work with US population (`us.census.acs.B01003001`) +as a denominator. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01003001') +WHERE valid_denom IS True; +``` + +- Obtain all numerators that work with US states (`us.census.tiger.state`) +as a geometry. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, 'us.census.tiger.state') +WHERE valid_geom IS True; +``` + +- Obtain all numerators available in the timespan `2011 - 2015`. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, '2011 - 2015') +WHERE valid_timespan IS True; +``` + +- Obtain all denominators that are available within a small rectangle. + +```SQL +SELECT * FROM OBS_GetAvailableDenominators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326)); +``` + +- Obtain all denominators that are available within a small rectangle and are for +the United States only. + +```SQL +SELECT * FROM OBS_GetAvailableDenominators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states}'); +``` + +- Obtain all denominators for male population (`us.census.acs.B01001002`). + +```SQL +SELECT * FROM OBS_GetAvailableDenominators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01001002') +WHERE valid_numer IS True; +``` + +- Obtain all denominators that work with US states (`us.census.tiger.state`) +as a geometry. + +```SQL +SELECT * FROM OBS_GetAvailableDenominators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, 'us.census.tiger.state') +WHERE valid_geom IS True; +``` + +- Obtain all denominators available in the timespan `2011 - 2015`. + +```SQL +SELECT * FROM OBS_GetAvailableDenominators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, '2011 - 2015') +WHERE valid_timespan IS True; +``` + +- Obtain all geometries that are available within a small rectangle. + +```SQL +SELECT * FROM OBS_GetAvailableGeometries( + ST_MakeEnvelope(-74, 41, -73, 40, 4326)); +``` + +- Obtain all geometries that are available within a small rectangle and are for +the United States only. + +```SQL +SELECT * FROM OBS_GetAvailableGeometries( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states}'); +``` + +- Obtain all geometries that work with total population (`us.census.acs.B01003001`). + +```SQL +SELECT * FROM OBS_GetAvailableGeometries( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01003001') +WHERE valid_numer IS True; +``` + +- Obtain all geometries with timespan `2015`. + +```SQL +SELECT * FROM OBS_GetAvailableGeometries( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, '2015') +WHERE valid_timespan IS True; +``` + +- Obtain all timespans that are available within a small rectangle. + +```SQL +SELECT * FROM OBS_GetAvailableTimespans( + ST_MakeEnvelope(-74, 41, -73, 40, 4326)); +``` + +- Obtain all timespans for total population (`us.census.acs.B01003001`). + +```SQL +SELECT * FROM OBS_GetAvailableTimespans( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01003001') +WHERE valid_numer IS True; +``` + +- Obtain all timespans that work with US states (`us.census.tiger.state`) +as a geometry. + +```SQL +SELECT * FROM OBS_GetAvailableTimespans( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, 'us.census.tiger.state') +WHERE valid_geom IS True; +``` \ No newline at end of file diff --git a/docs/guides/01-overview.md b/docs/guides/01-overview.md new file mode 100644 index 0000000..0fa300e --- /dev/null +++ b/docs/guides/01-overview.md @@ -0,0 +1,88 @@ +## Overview + +For Enterprise account plans, the [Data Observatory](https://carto.com/data) provides access to a searchable catalog of advanced location data, such as census block, population segments, boundaries and so on. A set of SQL functions allow you to augment your own data and broaden your analysis by discovering boundaries and measures of data from this catalog. + +This section describes the Data Observatory methods and the type of data that it returns. + +### Methods Overview + +There are several methods for accessing different categories of data into your visualizations. You can discover and retrieve data by requesting OBS functions from the Data Observatory. These Data Observatory functions are designed for specific, targeted methods of data analysis. The response for these functions are classified into two primary types of data results; measures and boundaries. + +- Boundaries are the geospatial boundaries you need to map or aggregate your data. Examples include Country Borders, Zip Code Tabulation Areas, and Counties + +- Measures are the various dimensions of information that CARTO can tell you about a place. Examples include, Population, Household Income, and Median Age + +Depending on the OBS function, you will get one, or both, types of data in your result. See [Measures and Boundary Data](#measures-and-boundary-results) for details about available data. + +#### Measures Methods + +Use location-based measures to analyze your data by accessing population and industry measurements at point locations, or within a region or polygon. These include variables for demographic, economic, and other types of information. + +- See [Measures Functions]({{ site.dataobservatory_docs }}/reference/#measures-functions) for specific OBS functions +- Returns Measures data results + +#### Boundary Methods + +Use global boundaries to analyze your data by accessing multi-scaled geometries for visualizations. Examples include US Block Groups and Census Tracts. These enable you to aggregate your data into geometric polygons. You can also use your own data to query specific boundaries. + +- See [Boundary Functions]({{ site.dataobservatory_docs }}/reference/#boundary-functions) for specific OBS functions +- Returns Boundary data results + +#### Discovery Methods + +Discovery Methods provide easier ways for you to find Measures and Boundaries of interest in the Data Observatory. The Discovery functions allow you to perform targeted searches for Measures, or use your own data to discover what is available at a given location. As this is a **retrieval tool** of the Data Observatory, the query results do not change your table. The response back displays one or more identifiers as matches to your search criteria. Each unique identifier can _then_ be used as part of other OBS functions to access any of the other Data Observatory methods. + +- See [Discovery Functions]({{ site.dataobservatory_docs }}/reference/#discovery-functions) for specific OBS functions +- Returns Boundary or Measures matches for your data + +### Measures and Boundary Results + +The response from the Data Observatory methods are classified as either Measures or Boundary. Depending on your OBS function, you will get one, or both, types of data in your result. + +#### Measures Data + +Measures provide details about local populations, markets, industries and other dimensions. You can search for available Measures using the Discovery methods, or by viewing the Data Catalog. Measures can be requested for Point locations, or can be summarized for Polygons (regions). In general, Point location requests will return raw aggregate values (e.g. Median Rent), or will provide amounts per square kilometer (e.g. Population). The total square kilometers of the area searched will be returned, allowing you to get raw counts, if needed. Alternatively, if you search over a polygon, raw counts will be returned. + +The following table indicates where Measures data results are available. Measures can include raw measures and when indicated, can provide geometries. + +Data Category | Examples | Type of Data Response | Availability +--- | --- +Housing | Vacant Housing Units, Median Rent, Units for Sale, Mortgage Count | Point measurement, Area measurement, With Geo Border | United States +Income | Median Household Income, Gini Index | Point measurement, Area measurement, With Geo Border | United States +Education | Students Enrolled in School, Population Completed H.S | Point measurement, Area measurement, With Geo Border | United States +Languages | Speaks Spanish at Home, Speaks only English at Home | Point measurement, Area measurement, With Geo Border | United States +Employment | Workers over the Age of 16 | Point measurement, Area measurement, With Geo Border | United States +Jobs and Workforce | Origin-Destination of Workforce, Job Wages by job type | Point measurement, Area measurement, With Geo Border | United States +Transportation | Commuters by Public Transportation, Work at Home | Point measurement, Area measurement, With Geo Border | United States +Race, Age and Gender | Asian Population, Median Age, Job wages by race | Point measurement, Area measurement, With Geo Border | United States, Spain +Population | Population per Square Kilometer | Point measurement, Area measurement | United States, Spain + +#### Boundary Data + +The following table indicates where Boundary data results are available. + +Boundary Name | Availability +--- | --- +Countries | Global +First-level administrative subdivisions | Global +Second-level administrative subdivisions | United States +Zip Code Tabulation Areas (ZCTA) | United States +Congressional Districts | United States +Digital Marketing Areas | United States +Census Public Use Microdata Areas | United States +Census Tracts |United States +Census Block Groups | United States +US Census Blocks | United States +Disputed Areas | Global +Marine Area | Global +Oceans | Global +Continents | Global +Timezones | Global + +##### Water Clipping Levels + +Many geometries come with various degrees of water accuracy (how closely they follow features such as coastlines). Water clipping refers to how the level of accuracy is returned by the Data Observatory. Data results can either include no clip (no water areas are clipped in the geometry), or high clip (coastlines and inland waterways are clipped out of the final geometry). For example, US Census data might only show coastlines as a straight border line, and not as an inland water area. To find out which levels of water clipping are available for Boundary layers, refer to the [Data Catalog](https://cartodb.github.io/bigmetadata/index.html). + +**Note:** While high clip water levels may be better for some kinds of maps and analysis, this type of data consumes more account storage space and may be subject to quota limitations. + +For details about how to access any of this data, see [Accessing the Data Observatory]({{ site.dataobservatory_docs }}/guides/accesssing-the-data-observatory/). \ No newline at end of file diff --git a/docs/guides/02-accessing-the-data-observatory.md b/docs/guides/02-accessing-the-data-observatory.md new file mode 100644 index 0000000..7cda496 --- /dev/null +++ b/docs/guides/02-accessing-the-data-observatory.md @@ -0,0 +1,123 @@ +## Accessing the Data Observatory + +The workflow for accessing the Data Observatory includes using a SQL query to apply a specific method of data enrichment or analysis to your data. You can access the Data Observatory by applying a custom query in CARTO Builder, or directly through the SQL API. + +#### Prerequisites + +You must have an Enterprise account and be familiar with using SQL requests. + +- The Data Observatory catalog includes data that is managed by CARTO, on a SaaS cloud platform. For Enterprise users, the Data Observatory can be enabled by contacting CARTO + + **Note:** The following error appears if the Data Observatory has not been enabled for your account, `You have reached the limit of your quota`. [Contact Sales](mailto:sales@carto.com) if this error message appears. + +- A set of Data Observatory functions (prefaced with "OBS" for Observatory), allow you to retrieve boundaries and measures data through a SQL request. These functions should be used with UPDATE and INSERT statements, not SELECT statements, as we are currently not supporting dynamic use of the Data Observatory + +**Tip:** See the recommended [Best Practices](#best-practices) for using the Data Observatory. + +### Enrich from Data Observatory + +As an alternative to using SQL queries, you can apply the _Enrich from Data Observatory_ ANALYSIS to a selected map layer in CARTO Builder. This enables you add a new column with contextual demographic and economic measures, without having to apply the code yourself. For details, see the [Enrich from Data Observatory Guide](https://carto.com/learn/guides/analysis/enrich-from-data-observatory) in our Learn hub. + +### Apply OBS Functions to a Dataset + +This procedure describes how to access the Data Observatory functions by applying SQL queries in a selected dataset. + +1) Review the [prerequisites](#prerequisites) section before attempting to access any of the Data Observatory functions + +2) [View the Data Observatory Catalog](https://cartodb.github.io/bigmetadata/index.html) + +An overview for each of the analyzed methods of data appears, and indicates the unique function signature needed to access the catalog item. You can copy the OBS function from the Data Observatory catalog and modify the placeholder parameters shown in curly brackets (e.g. "{table_name}"). + +3) From _Your datasets_ dashboard in CARTO, click _NEW DATASET_ and _CREATE EMPTY DATASET_. + +This creates an untitled table. You can get population measurements from the Data Observatory to build your dataset and create a map. + +4) The SQL view is available when you are viewing your dataset in table view (Data View). Click the slider to switch between viewing your data by METADATA (table) to _SQL_ (opens the SQL view). + +5) Apply the OBS function to modify your table. + +For example, the following image displays a SQL query using the Boundary method, [`OBS_GetBoundariesByGeometry(geom geometry, geometry_id text)`](https://carto.com/docs/carto-engine/data/boundary-functions/#obsgetboundariesbygeometrygeom-geometry-geometryid-text) function. The SQL query inserts the boundary data as a single polygon geometry for each row of data. + +![Query OBS Function in empty dataset](../img/obs_getboundary.jpg) + + +**Tip:** Want to insert population data to create a dataset? Replace `{my table name}` with your dataset name, and apply the SQL query: + +```sql +INSERT INTO {my table name} (the_geom, name) +SELECT * +FROM OBS_GetBoundariesByGeometry( + st_makeenvelope(-73.97257804870605,40.671134192879286,-73.89052391052246,40.722868115036974, 4326), + 'us.census.tiger.census_tract' +) As m(the_geom, geoid); +``` + +Another example shows how to get the local male population into your dataset. Before applying the SQL query, click _ADD COLUMN_ to create and name a column to store the [`OBS_GetMeasure`]({{ site.dataobservatory_docs}}/reference/#obsgetmeasurepolygon-geometry-measureid-text) data. + +![Query local male population and apply to data](../img/local_male_pop.jpg) + +**Tip:** Want to update your dataset to include the local male population from the Data Observatory? Replace `{my table name}` with your dataset name, and apply the SQL query: + +```sql +UPDATE {my table name} +SET local_male_population = OBS_GetMeasure(the_geom, 'us.census.acs.B01001002') +``` +6) Click _CREATE MAP_ from your dataset, to visualize the Data Observatory results. You can add custom styling, and add widgets to better visualize your data + +![Visualize Data Observatory results](../img/visualize_obs_data.jpg) + + +### SQL API and OBS Functions + +This procedure describes how to access the Data Observatory functions directly through the SQL API. + +1. In order to use the SQL API, you must be [authenticated]({{ site.bdataobservatory_docs }}/guides/authentication/#authentication) using API keys + + **Note:** Review the [prerequisites](#prerequisites) section before attempting to access any of the Data Observatory functions and [view the Data Observatory Catalog](https://cartodb.github.io/bigmetadata/index.html) to identify the OBS function you are looking for. + +2. Query the Data Observatory directly with a specified `OBS` function to apply the results (Measures/Boundaries data) to your table, with the INSERT or UPDATE function + +```sql +https://{username}.carto.com/api/v2/sql?q=UPDATE {tablename} +SET local_male_population = OBS_GetMeasure(the_geom, 'us.census.acs.B01001002')&api_key={api_key} +``` +### Tips + +Other useful tips about OBS functions: + +- Some Data Observatory functions return geometries, enabling you to apply an UPDATE statement with an OBS function, to update `the_geom` column +- To include [water clipping levels]({{ site.dataobservatory_docs }}/guides/overview/#water-clipping-levels) as part of your results, append `_clipped` as part of the OBS function. For example: + +```sql +UPDATE {tablename} +SET local_male_population = OBS_GetMeasure(the_geom, 'us.census.acs.B01001002','area','us.census.tiger.census_tract_clipped') +``` + +### Best Practices + +The following usage notes are recommended when using the Data Observatory functions in SQL queries: + +- It is discouraged to use the SELECT operation with the Data Observatory functions in your map layers. The results may be visible, but CARTO may not support dynamic rendering of the Data Observatory in the future, so your visualizations may break + + The Data Observatory is **recommended** to be used with INSERT or UPDATE operations, for applying analyzed measures and boundaries data to your tables. While SELECT (retrieve) is standard for SQL API requests, be mindful of quota consumption and use INSERT (to insert a new record) or UPDATE (to update an existing record), for best practices. + + **Exception:** [Discovery Methods]({{ site.dataobservatory_docs }}/guides/overview/#discovery-methods) are the exception. You can use SELECT as these functions are not actually retrieving data, they are retrieving ids that you can use for other functions. + +- You can reduce storage space for unneeded geometries and optimize query optimizations by applying the PostGIS [`ST_Simplify`](http://www.postgis.org/docs/ST_Simplify.html) function. For example, you can simplify the `the_geom` for a large table of polygons and reduce the size of them for quicker rendering. For other tips, see the [most commonly used PostGIS functions]({{ site.baseurl }}/faqs/postgresql-and-postgis/#what-are-the-most-common-postgis-functions) that you can apply with CARTO + +- Only point or polygon geometries are supported for OBS functions. If you attempt to apply Measures or Boundary results to line geometries, an error appears + +- The Data Observatory is optimal for modifying existing tables with analytical results, not for building new tables of data + + **Exception:** Exceptions apply for the following boundary functions, since they were designed to return multiple responses of geographical identifiers, as opposed to a single geometry. Create an empty dataset and build a new dataset from a SQL query, using any one of these boundary functions. + + - [`OBS_GetBoundariesByGeometry(geom geometry, geometry_id text)`]({{ site.dataobservatory_docs }}/reference/#boundary-functions#obsgetboundariesbygeometrygeom-geometry-geometryid-text) + - [`OBS_GetPointsByGeometry(polygon geometry, geometry_id text)`]({{ site.dataobservatory_docs }}/reference/#boundary-functions#obsgetpointsbygeometrypolygon-geometry-geometryid-text) + - [`OBS_GetBoundariesByPointAndRadius(point geometry, radius numeric, boundary_id text`]({{ site.dataobservatory_docs }}/reference/#boundary-functions#obsgetboundariesbypointandradiuspoint-geometry-radius-numeric-boundaryid-text) + - [`OBS_GetPointsByPointAndRadius(point geometry, radius numeric, boundary_id text`]({{ site.dataobservatory_docs }}/reference/#boundary-functions#obsgetpointsbypointandradiuspoint-geometry-radius-numeric-boundaryid-text) + +- For optimal performance, each SQL request should not exceed 100 rows. As an alternative, you can use a [SQL Batch Query](/docs/carto-engine/sql-api/batch-queries) for queries with long-running CPU processing times + +### Examples + +View our [CARTO Blogs](https://carto.com/blog/categories/data-observatory/) for examples that highlight the benefits of using the Data Observatory. \ No newline at end of file diff --git a/docs/guides/03-glossary.md b/docs/guides/03-glossary.md new file mode 100644 index 0000000..92cef15 --- /dev/null +++ b/docs/guides/03-glossary.md @@ -0,0 +1,126 @@ +## Glossary + +A list of boundary ids and measure_names for Data Observatory functions. For US based boundaries, the Shoreline Clipped version provides a high-quality shoreline clipping for mapping uses. + +### Boundary IDs + +Boundary Name | Boundary ID | Shoreline Clipped Boundary ID +--------------------- | --------------------- | --- +US States | us.census.tiger.state | us.census.tiger.state_clipped +US County | us.census.tiger.county | us.census.tiger.county_clipped +US Census Zip Code Tabulation Areas | us.census.tiger.zcta5 | us.census.tiger.zcta5_clipped +US Census Tracts | us.census.tiger.census_tract | us.census.tiger.census_tract_clipped +US Elementary School District | us.census.tiger.school_district_elementary | us.census.tiger.school_district_elementary_clipped +US Secondary School District | us.census.tiger.school_district_secondary | us.census.tiger.school_district_secondary_clipped +US Unified School District | us.census.tiger.school_district_unified | us.census.tiger.school_district_unified_clipped +US Congressional Districts | us.census.tiger.congressional_district | us.census.tiger.congressional_district_clipped +US Census Blocks | us.census.tiger.block | us.census.tiger.block_clipped +US Census Block Groups | us.census.tiger.block_group | us.census.tiger.block_group_clipped +US Census PUMAs | us.census.tiger.puma | us.census.tiger.puma_clipped +US Incorporated Places | us.census.tiger.place | us.census.tiger.place_clipped +ES Sección Censal | es.ine.geom | none +Regions (First-level Administrative) | whosonfirst.wof_region_geom | none +Continents | whosonfirst.wof_continent_geom | none +Countries | whosonfirst.wof_country_geom | none +Marine Areas | whosonfirst.wof_marinearea_geom | none +Disputed Areas | whosonfirst.wof_disputed_geom | none + + + +### OBS_GetUSCensusMeasure Names Table + +This list contains human readable names accepted in the ```OBS_GetUSCensusMeasure``` function. For the more comprehensive list of columns available to the ```OBS_GetMeasure``` function, see the [Data Observatory Catalog](https://cartodb.github.io/bigmetadata/index.html). + +Measure ID | Measure Name | Measure Description +--------------------- | --------------------- | --- +us.census.acs.B01002001 | Median Age | The median age of all people in a given geographic area. +us.census.acs.B15003021 | Population Completed Associate’s Degree | The number of people in a geographic area over the age of 25 who obtained a associate’s degree, and did not complete a more advanced degree. +us.census.acs.B15003022 | Population Completed Bachelor’s Degree | The number of people in a geographic area over the age of 25 who obtained a bachelor’s degree, and did not complete a more advanced degree. +us.census.acs.B15003023 | Population Completed Master’s Degree | The number of people in a geographic area over the age of 25 who obtained a master’s degree, but did not complete a more advanced degree. +us.census.acs.B14001007 | Students Enrolled in Grades 9 to 12 | The total number of people in each geography currently enrolled in grades 9 through 12 inclusive. This corresponds roughly to high school. +us.census.acs.B05001006 | Not a U.S. Citizen Population | The number of people within each geography who indicated that they are not U.S. citizens. +us.census.acs.B19001012 | Households with income of $60,000 To $74,999 | The number of households in a geographic area whose annual income was between $60,000 and $74,999. +us.census.acs.B01003001 | Total Population | The total number of all people living in a given geographic area. This is a very useful catch-all denominator when calculating rates. +us.census.acs.B01001002 | Male Population | The number of people within each geography who are male. +us.census.acs.B01001026 | Female Population | The number of people within each geography who are female. +us.census.acs.B03002003 | White Population | The number of people identifying as white, non-Hispanic in each geography. +us.census.acs.B03002004 | Black or African American Population | The number of people identifying as black or African American, non-Hispanic in each geography. +us.census.acs.B03002006 | Asian Population | The number of people identifying as Asian, non-Hispanic in each geography. +us.census.acs.B03002012 | Hispanic Population | The number of people identifying as Hispanic or Latino in each geography. +us.census.acs.B03002005 | American Indian and Alaska Native Population | The number of people identifying as American Indian or Alaska native in each geography. +us.census.acs.B03002008 | Other Race population | The number of people identifying as another race in each geography. +us.census.acs.B03002009 | Two or more races population | The number of people identifying as two or more races in each geography. +us.census.acs.B03002002 | Population not Hispanic | The number of people not identifying as Hispanic or Latino in each geography. +us.census.acs.B23025001 | Population age 16 and over | The number of people in each geography who are age 16 or over. +us.census.acs.B08006001 | Workers over the Age of 16 | The number of people in each geography who work. Workers include those employed at private for-profit companies, the self-employed, government workers and non-profit employees. +us.census.acs.B08006002 | Commuters by Car, Truck, or Van | The number of workers age 16 years and over within a geographic area who primarily traveled to work by car, truck or van. This is the principal mode of travel or type of conveyance, by distance rather than time, that the worker usually used to get from home to work. +us.census.acs.B08006003 | Commuters who drove alone | The number of workers age 16 years and over within a geographic area who primarily traveled by car driving alone. This is the principal mode of travel or type of conveyance, by distance rather than time, that the worker usually used to get from home to work. +us.census.acs.B11001001 | Households | A count of the number of households in each geography. A household consists of one or more people who live in the same dwelling and also share at meals or living accommodation, and may consist of a single family or some other grouping of people. +us.census.acs.B08006004 | Commuters by Carpool | The number of workers age 16 years and over within a geographic area who primarily traveled to work by carpool. This is the principal mode of travel or type of conveyance, by distance rather than time, that the worker usually used to get from home to work. +us.census.acs.B08301010 | Commuters by Public Transportation | The number of workers age 16 years and over within a geographic area who primarily traveled to work by public transportation. This is the principal mode of travel or type of conveyance, by distance rather than time, that the worker usually used to get from home to work. +us.census.acs.B08006009 | Commuters by Bus | The number of workers age 16 years and over within a geographic area who primarily traveled to work by bus. This is the principal mode of travel or type of conveyance, by distance rather than time, that the worker usually used to get from home to work. This is a subset of workers who commuted by public transport. +us.census.acs.B08006011 | Commuters by Subway or Elevated | The number of workers age 16 years and over within a geographic area who primarily traveled to work by subway or elevated train. This is the principal mode of travel or type of conveyance, by distance rather than time, that the worker usually used to get from home to work. This is a subset of workers who commuted by public transport. +us.census.acs.B08006015 | Walked to Work | The number of workers age 16 years and over within a geographic area who primarily walked to work. This would mean that of any way of getting to work, they travelled the most distance walking. +us.census.acs.B08006017 | Worked at Home | The count within a geographical area of workers over the age of 16 who worked at home. +us.census.acs.B09001001 | Children under 18 Years of Age | The number of people within each geography who are under 18 years of age. +us.census.acs.B14001001 | Population 3 Years and Over | The total number of people in each geography age 3 years and over. This denominator is mostly used to calculate rates of school enrollment. +us.census.acs.B14001002 | Students Enrolled in School | The total number of people in each geography currently enrolled at any level of school, from nursery or pre-school to advanced post-graduate education. Only includes those over the age of 3. +us.census.acs.B14001005 | Students Enrolled in Grades 1 to 4 | The total number of people in each geography currently enrolled in grades 1 through 4 inclusive. This corresponds roughly to elementary school. +us.census.acs.B14001006 | Students Enrolled in Grades 5 to 8 | The total number of people in each geography currently enrolled in grades 5 through 8 inclusive. This corresponds roughly to middle school. +us.census.acs.B14001008 | Students Enrolled as Undergraduate in College | The number of people in a geographic area who are enrolled in college at the undergraduate level. Enrollment refers to being registered or listed as a student in an educational program leading to a college degree. This may be a public school or college, a private school or college. +us.census.acs.B15003001 | Population 25 Years and Over | The number of people in a geographic area who are over the age of 25. This is used mostly as a denominator of educational attainment. +us.census.acs.B15003017 | Population Completed High School | The number of people in a geographic area over the age of 25 who completed high school, and did not complete a more advanced degree. +us.census.acs.B15003019 | Population completed less than one year of college, no degree | The number of people in a geographic area over the age of 25 who attended college for less than one year and no further. +us.census.acs.B15003020 | Population completed more than one year of college, no degree | The number of people in a geographic area over the age of 25 who attended college for more than one year but did not obtain a degree. +us.census.acs.B16001001 | Population 5 Years and Over | The number of people in a geographic area who are over the age of 5. This is primarily used as a denominator of measures of language spoken at home. +us.census.acs.B16001002 | Speaks only English at Home | The number of people in a geographic area over age 5 who speak only English at home. +us.census.acs.B16001003 | Speaks Spanish at Home | The number of people in a geographic area over age 5 who speak Spanish at home, possibly in addition to other languages. +us.census.acs.B17001001 | Population for Whom Poverty Status Determined | The number of people in each geography who could be identified as either living in poverty or not. This should be used as the denominator when calculating poverty rates, as it excludes people for whom it was not possible to determine poverty. +us.census.acs.B17001002 | Income In The Past 12 Months Below Poverty Level | The number of people in a geographic area who are part of a family (which could be just them as an individual) determined to be in poverty following the Office of Management and Budget’s Directive 14. (https://www.census.gov/hhes/povmeas/methodology/ombdir14.html) +us.census.acs.B08134010 | Number of workers with a commute of over 60 minutes | The number of workers over the age of 16 who do not work from home and commute in over 60 minutes in a geographic area. +us.census.acs.B12005002 | Never Married | The number of people in a geographic area who have never been married. +us.census.acs.B12005005 | Currently married | The number of people in a geographic area who are currently married. +us.census.acs.B12005008 | Married but separated | The number of people in a geographic area who are married but separated. +us.census.acs.B12005012 | Widowed | The number of people in a geographic area who are widowed. +us.census.acs.B12005015 | Divorced | The number of people in a geographic area who are divorced. +us.census.acs.B19013001 | Median Household Income in the past 12 Months | Within a geographic area, the median income received by every household on a regular basis before payments for personal income taxes, social security, union dues, medicare deductions, etc. It includes income received from wages, salary, commissions, bonuses, and tips; self-employment income from own nonfarm or farm businesses, including proprietorships and partnerships; interest, dividends, net rental income, royalty income, or income from estates and trusts; Social Security or Railroad Retirement income; Supplemental Security Income (SSI); any cash public assistance or welfare payments from the state or local welfare office; retirement, survivor, or disability benefits; and any other sources of income received regularly such as Veterans’ (VA) payments, unemployment and/or worker’s compensation, child support, and alimony. +us.census.acs.B25001001 | Housing Units | A count of housing units in each geography. A housing unit is a house, an apartment, a mobile home or trailer, a group of rooms, or a single room occupied as separate living quarters, or if vacant, intended for occupancy as separate living quarters. +us.census.acs.B25002003 | Vacant Housing Units | The count of vacant housing units in a geographic area. A housing unit is vacant if no one is living in it at the time of enumeration, unless its occupants are only temporarily absent. Units temporarily occupied at the time of enumeration entirely by people who have a usual residence elsewhere are also classified as vacant. +us.census.acs.B25004002 | Vacant Housing Units for Rent | The count of vacant housing units in a geographic area that are for rent. A housing unit is vacant if no one is living in it at the time of enumeration, unless its occupants are only temporarily absent. Units temporarily occupied at the time of enumeration entirely by people who have a usual residence elsewhere are also classified as vacant. +us.census.acs.B19001013 | Households with income of $75,000 To $99,999 | The number of households in a geographic area whose annual income was between $75,000 and $99,999. +us.census.acs.B19001014 | Households with income of $100,000 To $124,999 | The number of households in a geographic area whose annual income was between $100,000 and $124,999. +us.census.acs.B25004004 | Vacant Housing Units for Sale | The count of vacant housing units in a geographic area that are for sale. A housing unit is vacant if no one is living in it at the time of enumeration, unless its occupants are only temporarily absent. Units temporarily occupied at the time of enumeration entirely by people who have a usual residence elsewhere are also classified as vacant. +us.census.acs.B25058001 | Median Rent | The median contract rent within a geographic area. The contract rent is the monthly rent agreed to or contracted for, regardless of any furnishings, utilities, fees, meals, or services that may be included. For vacant units, it is the monthly rent asked for the rental unit at the time of interview. +us.census.acs.B25071001 | Percent of Household Income Spent on Rent | Within a geographic area, the median percentage of household income which was spent on gross rent. Gross rent is the amount of the contract rent plus the estimated average monthly cost of utilities (electricity, gas, water, sewer etc.) and fuels (oil, coal, wood, etc.) if these are paid by the renter. Household income is the sum of the income of all people 15 years and older living in the household. +us.census.acs.B25075025 | Owner-occupied Housing Units valued at $1,000,000 or more. | The count of owner occupied housing units in a geographic area that are valued at $1,000,000 or more. Value is the respondent’s estimate of how much the property (house and lot, mobile home and lot, or condominium unit) would sell for if it were for sale. +us.census.acs.B25081002 | Owner-occupied Housing Units with a Mortgage | The count of housing units within a geographic area that are mortagaged. Mortgage refers to all forms of debt where the property is pledged as security for repayment of the debt, including deeds of trust, trust deed, contracts to purchase, land contracts, junior mortgages, and home equity loans. +us.census.acs.B23025002 | Population in Labor Force | The number of people in each geography who are either in the civilian labor force or are members of the U.S. Armed Forces (people on active duty with the United States Army, Air Force, Navy, Marine Corps, or Coast Guard). +us.census.acs.B23025003 | Population in Civilian Labor Force | The number of civilians 16 years and over in each geography who can be classified as either employed or unemployed below. +us.census.acs.B08135001 | Aggregate travel time to work | The total number of minutes every worker over the age of 16 who did not work from home spent spent commuting to work in one day in a geographic area. +us.census.acs.B19001002 | Households with income less than $10,000 | The number of households in a geographic area whose annual income was less than $10,000. +us.census.acs.B19001003 | Households with income of $10,000 to $14,999 | The number of households in a geographic area whose annual income was between $10,000 and $14,999. +us.census.acs.B19001004 | Households with income of $15,000 to $19,999 | The number of households in a geographic area whose annual income was between $15,000 and $19,999. +us.census.acs.B23025004 | Employed Population | The number of civilians 16 years old and over in each geography who either (1) were at work, that is, those who did any work at all during the reference week as paid employees, worked in their own business or profession, worked on their own farm, or worked 15 hours or more as unpaid workers on a family farm or in a family business; or (2) were with a job but not at work, that is, those who did not work during the reference week but had jobs or businesses from which they were temporarily absent due to illness, bad weather, industrial dispute, vacation, or other personal reasons. Excluded from the employed are people whose only activity consisted of work around the house or unpaid volunteer work for religious, charitable, and similar organizations; also excluded are all institutionalized people and people on active duty in the United States Armed Forces. +us.census.acs.B23025005 | Unemployed Population | The number of civilians in each geography who are 16 years old and over and are classified as unemployed. +us.census.acs.B23025006 | Population in Armed Forces | The number of people in each geography who are members of the U.S. Armed Forces (people on active duty with the United States Army, Air Force, Navy, Marine Corps, or Coast Guard). +us.census.acs.B23025007 | Population Not in Labor Force | The number of people in each geography who are 16 years old and over who are not classified as members of the labor force. This category consists mainly of students, homemakers, retired workers, seasonal workers interviewed in an off season who were not looking for work, institutionalized people, and people doing only incidental unpaid family work. +us.census.acs.B12005001 | Population 15 Years and Over | The number of people in a geographic area who are over the age of 15. This is used mostly as a denominator of marital status. +us.census.acs.B08134001 | Workers age 16 and over who do not work from home | The number of workers over the age of 16 who do not work from home in a geographic area. +us.census.acs.B08134002 | Number of workers with less than 10 minute commute | The number of workers over the age of 16 who do not work from home and commute in less than 10 minutes in a geographic area. +us.census.acs.B08303004 | Number of workers with a commute between 10 and 14 minutes | The number of workers over the age of 16 who do not work from home and commute in between 10 and 14 minutes in a geographic area. +us.census.acs.B08303005 | Number of workers with a commute between 15 and 19 minutes | The number of workers over the age of 16 who do not work from home and commute in between 15 and 19 minutes in a geographic area. +us.census.acs.B08303006 | Number of workers with a commute between 20 and 24 minutes | The number of workers over the age of 16 who do not work from home and commute in between 20 and 24 minutes in a geographic area. +us.census.acs.B08303007 | Number of workers with a commute between 25 and 29 minutes | The number of workers over the age of 16 who do not work from home and commute in between 25 and 29 minutes in a geographic area. +us.census.acs.B08303008 | Number of workers with a commute between 30 and 34 minutes | The number of workers over the age of 16 who do not work from home and commute in between 30 and 34 minutes in a geographic area. +us.census.acs.B08134008 | Number of workers with a commute between 35 and 44 minutes | The number of workers over the age of 16 who do not work from home and commute in between 35 and 44 minutes in a geographic area. +us.census.acs.B08303011 | Number of workers with a commute between 45 and 59 minutes | The number of workers over the age of 16 who do not work from home and commute in between 45 and 59 minutes in a geographic area. +us.census.acs.B19001005 | Households with income of $20,000 To $24,999 | The number of households in a geographic area whose annual income was between $20,000 and $24,999. +us.census.acs.B19001006 | Households with income of $25,000 To $29,999 | The number of households in a geographic area whose annual income was between $20,000 and $24,999. +us.census.acs.B19001007 | Households with income of $30,000 To $34,999 | The number of households in a geographic area whose annual income was between $30,000 and $34,999. +us.census.acs.B19001008 | Households with income of $35,000 To $39,999 | The number of households in a geographic area whose annual income was between $35,000 and $39,999. +us.census.acs.B19001009 | Households with income of $40,000 To $44,999 | The number of households in a geographic area whose annual income was between $40,000 and $44,999. +us.census.acs.B19001010 | Households with income of $45,000 To $49,999 | The number of households in a geographic area whose annual income was between $45,000 and $49,999. +us.census.acs.B19001011 | Households with income of $50,000 To $59,999 | The number of households in a geographic area whose annual income was between $50,000 and $59,999. +us.census.acs.B19001015 | Households with income of $125,000 To $149,999 | The number of households in a geographic area whose annual income was between $125,000 and $149,999. +us.census.acs.B19001016 | Households with income of $150,000 To $199,999 | The number of households in a geographic area whose annual income was between $150,000 and $1999,999. +us.census.acs.B19001017 | Households with income of $200,000 Or More | The number of households in a geographic area whose annual income was more than $200,000. \ No newline at end of file diff --git a/docs/img/local_male_pop.jpg b/docs/img/local_male_pop.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8bdc0ed1c953bb743c3efca09a8df8f41a92acf1 GIT binary patch literal 60106 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 literal 0 HcmV?d00001 diff --git a/docs/img/obs_getboundary.jpg b/docs/img/obs_getboundary.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc0182d79ed093f50bd700541f8e576be7ee0621 GIT binary patch literal 60240 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 literal 0 HcmV?d00001 diff --git a/docs/img/visualize_obs_data.jpg b/docs/img/visualize_obs_data.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe4c1afb59f34f3501f1e3124b987075816328e2 GIT binary patch literal 118175 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

^KS86q|c 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'value')::Numeric AS pop_density +FROM OBS_GetData((SELECT ARRAY_AGG((the_geom, cartodb_id)::geomval) FROM tablename), + (SELECT meta FROM meta)) +``` + +Update a table with a blank numeric column called `pop_density` with population +densities: + +```SQL +WITH meta AS ( + SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom), 4326), + '[{"numer_id": "us.census.acs.B01003001"}]', + 1, 1, COUNT(*) +) meta FROM tablename), +data AS ( + SELECT id AS cartodb_id, (data->0->>'value')::Numeric AS pop_density + FROM OBS_GetData((SELECT ARRAY_AGG((the_geom, cartodb_id)::geomval) FROM tablename), + (SELECT meta FROM meta))) +UPDATE tablename +SET pop_density = data.pop_density +FROM data +WHERE cartodb_id = data.id +``` + +Update a table with two measurements at once, population density and household +density. The table should already have a Numeric column `pop_density` and +`household_density`. + +```SQL +WITH meta AS ( + SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom),4326), + '[{"numer_id": "us.census.acs.B01003001"},{"numer_id": "us.census.acs.B11001001"}]', + 1, 1, COUNT(*) +) meta from tablename), +data AS ( + SELECT id, + data->0->>'value' AS pop_density, + data->1->>'value' AS household_density + FROM OBS_GetData((SELECT ARRAY_AGG((the_geom, cartodb_id)::geomval) FROM tablename), + (SELECT meta FROM meta))) +UPDATE tablename +SET pop_density = data.pop_density, + household_density = data.household_density +FROM data +WHERE cartodb_id = data.id +``` + +## OBS_GetData(ids array[text], metadata json) + +The ```OBS_GetData(ids, metadata)``` function returns a measure and/or +geometry corresponding to the `metadata` JSON array for each every id of +the `ids` array. The metadata argument must be obtained from +`OBS_GetMeta(extent, metadata)`. When obtaining metadata, one must include +the `geom_id` corresponding to the boundary that the `ids` refer to. + +#### Arguments + +Name | Description +---- | ----------- +ids | An array of `TEXT` elements. This should be obtained by using `ARRAY_AGG(col_of_geom_refs)` from the CARTO table one wishes to obtain data for. +metadata | A JSON array composed of metadata output objects from ```OBS_GetMeta(extent, metadata)```. The schema of the elements of the `metadata` JSON array corresponds to that of the output of ```OBS_GetMeta(extent, metadata)```, and this argument must be obtained from that function in order for the call to be valid. + +For this function to work, the `metadata` argument must include a `geom_id` +that corresponds to the ids found in `col_of_geom_refs`. + +#### Returns + +A TABLE with the following schema, where each element of the input `ids` array +corresponds to one row: + +Column | Type | Description +------ | ---- | ----------- +id | Text | ID corresponding to an element of the input `ids` array +data | JSON | A JSON array with elements corresponding to the input `metadata` JSON array + +Each `data` object has the following keys: + +Key | Description +--- | ----------- +value | The value of the measurement or geometry for the geometry corresponding to this row and measurement corresponding to this position in the `metadata` JSON array + +To determine the appropriate cast for `value`, one can use the `numer_type` +or `geom_type` key corresponding to that value in the input `metadata` JSON +array. + +#### Examples + +Obtain population densities for every row of a table with FIPS code county IDs +(USA). + +```SQL +WITH meta AS ( + SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom), 4326), + '[{"numer_id": "us.census.acs.B01003001", "geom_id": "us.census.tiger.county"}]' +) meta FROM tablename) +SELECT id AS fips, (data->0->>'value')::Numeric AS pop_density +FROM OBS_GetData((SELECT ARRAY_AGG(fips) FROM tablename), + (SELECT meta FROM meta)) +``` + +Update a table with population densities for every FIPS code county ID (USA). +This table has a blank column called `pop_density` and fips codes stored in a +column `fips`. + +```SQL +WITH meta AS ( + SELECT OBS_GetMeta( + ST_SetSRID(ST_Extent(the_geom), 4326), + '[{"numer_id": "us.census.acs.B01003001", "geom_id": "us.census.tiger.county"}]' +) meta FROM tablename), +data as ( + SELECT id AS fips, (data->0->>'value') AS pop_density + FROM OBS_GetData((SELECT ARRAY_AGG(fips) FROM tablename), + (SELECT meta FROM meta))) +UPDATE tablename +SET pop_density = data.pop_density +FROM data +WHERE fips = data.id +``` diff --git a/docs/reference/02-boundary-functions.md b/docs/reference/02-boundary-functions.md new file mode 100644 index 0000000..34c01c9 --- /dev/null +++ b/docs/reference/02-boundary-functions.md @@ -0,0 +1,273 @@ +# Boundary Functions + +Use the following functions to retrieve [Boundary](https://carto.com/docs/carto-engine/data/overview/#boundary-data) data. Data ranges from small areas (e.g. US Census Block Groups) to large areas (e.g. Countries). You can access boundaries by point location lookup, bounding box lookup, direct ID access and several other methods described below. + +You can [access](https://carto.com/docs/carto-engine/data/accessing) boundaries through CARTO Builder. The same methods will work if you are using the CARTO Engine to develop your application. We [encourage you](https://carto.com/docs/carto-engine/data/accessing/#best-practices) to use table modifying methods (UPDATE and INSERT) over dynamic methods (SELECT). + +## OBS_GetBoundariesByGeometry(geom geometry, geometry_id text) + +The ```OBS_GetBoundariesByGeometry(geometry, geometry_id)``` method returns a set of boundary geometries that intersect a supplied geometry. This can be used to find all boundaries that are within or overlap a bounding box. You have the ability to choose whether to retrieve all boundaries that intersect your supplied bounding box or only those that fall entirely inside of your bounding box. + +#### Arguments + +Name |Description +--- | --- +geom | a WGS84 geometry +geometry_id | a string identifier for a boundary geometry +timespan (optional) | year(s) to request from ('NULL' (default) gives most recent) +overlap_type (optional) | one of '[intersects](http://postgis.net/docs/manual-2.2/ST_Intersects.html)' (default), '[contains](http://postgis.net/docs/manual-2.2/ST_Contains.html)', or '[within](http://postgis.net/docs/manual-2.2/ST_Within.html)'. + +#### Returns + +A table with the following columns: + +Column Name | Description +--- | --- +the_geom | a boundary geometry (e.g., US Census tract boundaries) +geom_refs | a string identifier for the geometry (e.g., geoids of US Census tracts) + +If geometries are not found for the requested `geom`, `geometry_id`, `timespan`, or `overlap_type`, then null values are returned. + +#### Example + +Insert all Census Tracts from Lower Manhattan and nearby areas within the supplied bounding box to a table named `manhattan_census_tracts` which has columns `the_geom` (geometry) and `geom_refs` (text). + +```sql +INSERT INTO manhattan_census_tracts(the_geom, geom_refs) +SELECT * +FROM OBS_GetBoundariesByGeometry( + ST_MakeEnvelope(-74.0251922607,40.6945658517, + -73.9651107788,40.7377626342, + 4326), + 'us.census.tiger.census_tract') +``` + +#### Errors + +* If an `overlap_type` other than the valid ones listed above is entered, then an error is thrown + +## OBS_GetPointsByGeometry(polygon geometry, geometry_id text) + +The ```OBS_GetPointsByGeometry(polygon, geometry_id)``` method returns point geometries and their geographical identifiers that intersect (or are contained by) a bounding box polygon and lie on the surface of a boundary corresponding to the boundary with same geographical identifiers (e.g., a point that is on a census tract with the same geoid). This is a useful alternative to ```OBS_GetBoundariesByGeometry``` listed above because it returns much less data for each location. + +#### Arguments + +Name |Description +--- | --- +polygon | a bounding box or other geometry +geometry_id | a string identifier for a boundary geometry +timespan (optional) | year(s) to request from (`NULL` (default) gives most recent) +overlap_type (optional) | one of '[intersects](http://postgis.net/docs/manual-2.2/ST_Intersects.html)' (default), '[contains](http://postgis.net/docs/manual-2.2/ST_Contains.html)', or '[within](http://postgis.net/docs/manual-2.2/ST_Within.html)'. + +#### Returns + +A table with the following columns: + +Column Name | Description +--- | --- +the_geom | a point geometry on a boundary (e.g., a point that lies on a US Census tract) +geom_refs| a string identifier for the geometry (e.g., the geoid of a US Census tract) + +If geometries are not found for the requested geometry, `geometry_id`, `timespan`, or `overlap_type`, then NULL values are returned. + +#### Example + +Insert points that lie on Census Tracts from Lower Manhattan and nearby areas within the supplied bounding box to a table named `manhattan_tract_points` which has columns `the_geom` (geometry) and `geom_refs` (text). + +```sql +INSERT INTO manhattan_tract_points (the_geom, geom_refs) +SELECT * +FROM OBS_GetPointsByGeometry( + ST_MakeEnvelope(-74.0251922607,40.6945658517, + -73.9651107788,40.7377626342, + 4326), + 'us.census.tiger.census_tract') +``` + +#### Errors + +* If a geometry other than a point is passed as the first argument, an error is thrown: `Invalid geometry type (ST_Point), expecting 'ST_MultiPolygon' or 'ST_Polygon'` + +## OBS_GetBoundary(point_geometry, boundary_id) + +The ```OBS_GetBoundary(point_geometry, boundary_id)``` method returns a boundary geometry defined as overlapping the point geometry and from the desired boundary set (e.g. Census Tracts). See the [Boundary ID Glossary](https://carto.com/docs/carto-engine/data/glossary/#boundary-ids). This is a useful method for performing aggregations of points. + +#### Arguments + +Name | Description +--- | --- +point_geometry | a WGS84 polygon geometry (the_geom) +boundary_id | a boundary identifier from the [Boundary ID Glossary](https://carto.com/docs/carto-engine/data/glossary/#boundary-ids) +timespan (optional) | year(s) to request from (`NULL` (default) gives most recent) + +#### Returns + +A boundary geometry. If no value is found at the requested `boundary_id` or `timespan`, a null value is returned. + +Value | Description +--- | --- +geom | WKB geometry + +#### Example + +Overwrite a point geometry with a boundary geometry that contains it in your table + +```SQL +UPDATE tablename +SET the_geom = OBS_GetBoundary(the_geom, 'us.census.tiger.block_group') +``` + +#### Errors + +* If a geometry other than a point is passed, an error is thrown: `Invalid geometry type (ST_Line), expecting 'ST_Point'` + +## OBS_GetBoundaryId(point_geometry, boundary_id) + +The ```OBS_GetBoundaryId(point_geometry, boundary_id)``` returns a unique geometry_id for the boundary geometry that contains a given point geometry. See the [Boundary ID Glossary](https://carto.com/docs/carto-engine/data/glossary/#boundary-ids). The method can be combined with ```OBS_GetBoundaryById(geometry_id)``` to create a point aggregation workflow. + +#### Arguments + +Name |Description +--- | --- +point_geometry | a WGS84 point geometry (the_geom) +boundary_id | a boundary identifier from the [Boundary ID Glossary](https://carto.com/docs/carto-engine/data/glossary/#boundary-ids) +timespan (optional) | year(s) to request from (`NULL` (default) gives most recent) + +#### Returns + +A TEXT boundary geometry id. If no value is found at the requested `boundary_id` or `timespan`, a null value is returned. + +Value | Description +--- | --- +geometry_id | a string identifier of a geometry in the Boundaries + +#### Example + +Write the US Census block group geoid that contains the point geometry for every row as a new column in your table. + +```SQL +UPDATE tablename +SET geometry_id = OBS_GetBoundaryId(the_geom, 'us.census.tiger.block_group') +``` + +#### Errors + +* If a geometry other than a point is passed, an error is thrown: `Invalid geometry type (ST_Line), expecting 'ST_Point'` + +## OBS_GetBoundaryById(geometry_id, boundary_id) + +The ```OBS_GetBoundaryById(geometry_id, boundary_id)``` returns the boundary geometry for a unique geometry_id. A geometry_id can be found using the ```OBS_GetBoundaryId(point_geometry, boundary_id)``` method described above. + +#### Arguments + +Name | Description +--- | --- +geometry_id | a string identifier for a Boundary geometry +boundary_id | a boundary identifier from the [Boundary ID Glossary](https://carto.com/docs/carto-engine/data/glossary/#boundary-ids) +timespan (optional) | year(s) to request from (`NULL` (default) gives most recent) + +#### Returns + +A boundary geometry. If a geometry is not found for the requested `geometry_id`, `boundary_id`, or `timespan`, then a null value is returned. + +Key | Description +--- | --- +geom | a WGS84 polygon geometry + +#### Example + +Use a table of `geometry_id`s (e.g., geoid from the U.S. Census) to select the unique boundaries that they correspond to and insert into a table called, `overlapping_polygons`. This is a useful method for creating new choropleths of aggregate data. + +```SQL +INSERT INTO overlapping_polygons (the_geom, geometry_id, point_count) +SELECT + OBS_GetBoundaryById(geometry_id, 'us.census.tiger.county') As the_geom, + geometry_id, + count(*) +FROM tablename +GROUP BY geometry_id +``` + +## OBS_GetBoundariesByPointAndRadius(point geometry, radius numeric, boundary_id text) + +The ```OBS_GetBoundariesByPointAndRadius(point, radius, boundary_id)``` method returns boundary geometries and their geographical identifiers that intersect (or are contained by) a circle centered on a point with a radius. + +#### Arguments + +Name |Description +--- | --- +point | a WGS84 point geometry +radius | a radius (in meters) from the center point +geometry_id | a string identifier for a boundary geometry +timespan (optional) | year(s) to request from (`NULL` (default) gives most recent) +overlap_type (optional) | one of '[intersects](http://postgis.net/docs/manual-2.2/ST_Intersects.html)' (default), '[contains](http://postgis.net/docs/manual-2.2/ST_Contains.html)', or '[within](http://postgis.net/docs/manual-2.2/ST_Within.html)'. + +#### Returns + +A table with the following columns: + +Column Name | Description +--- | --- +the_geom | a boundary geometry (e.g., a US Census tract) +geom_refs| a string identifier for the geometry (e.g., the geoid of a US Census tract) + +If geometries are not found for the requested point and radius, `geometry_id`, `timespan`, or `overlap_type`, then null values are returned. + +#### Example + +Insert into table `denver_census_tracts` the census tract boundaries and geom_refs of census tracts which intersect within 10 miles of downtown Denver, Colorado. + +```sql +INSERT INTO denver_census_tracts(the_geom, geom_refs) +SELECT * +FROM OBS_GetBoundariesByPointAndRadius( + CDB_LatLng(39.7392, -104.9903), -- Denver, Colorado + 10000 * 1.609, -- 10 miles (10km * conversion to miles) + 'us.census.tiger.census_tract') +``` + +#### Errors + +* If a geometry other than a point is passed, an error is thrown. E.g., `Invalid geometry type (ST_Line), expecting 'ST_Point'` + +## OBS_GetPointsByPointAndRadius(point geometry, radius numeric, boundary_id text) + +The ```OBS_GetPointsByPointAndRadius(point, radius, boundary_id)``` method returns point geometries on boundaries (e.g., a point that lies on a Census tract) and their geographical identifiers that intersect (or are contained by) a circle centered on a point with a radius. + +#### Arguments + +Name |Description +--- | --- +point | a WGS84 point geometry +radius | radius (in meters) +geometry_id | a string identifier for a boundary geometry +timespan (optional) | year(s) to request from (`NULL` (default) gives most recent) +overlap_type (optional) | one of '[intersects](http://postgis.net/docs/manual-2.2/ST_Intersects.html)' (default), '[contains](http://postgis.net/docs/manual-2.2/ST_Contains.html)', or '[within](http://postgis.net/docs/manual-2.2/ST_Within.html)'. + +#### Returns + +A table with the following columns: + +Column Name | Description +--- | --- +the_geom | a point geometry (e.g., a point on a US Census tract) +geom_refs | a string identifier for the geometry (e.g., the geoid of a US Census tract) + +If geometries are not found for the requested point and radius, `geometry_id`, `timespan`, or `overlap_type`, then null values are returned. + +#### Example + +Insert into table `denver_tract_points` points on US census tracts and their corresponding geoids for census tracts which intersect within 10 miles of downtown Denver, Colorado, USA. + +```sql +INSERT INTO denver_tract_points(the_geom, geom_refs) +SELECT * +FROM OBS_GetPointsByPointAndRadius( + CDB_LatLng(39.7392, -104.9903), -- Denver, Colorado + 10000 * 1.609, -- 10 miles (10km * conversion to miles) + 'us.census.tiger.census_tract') +``` + +#### Errors + +* If a geometry other than a point is passed, an error is thrown. E.g., `Invalid geometry type (ST_Line), expecting 'ST_Point'` diff --git a/docs/reference/03-discovery-functions.md b/docs/reference/03-discovery-functions.md new file mode 100644 index 0000000..75dc3c3 --- /dev/null +++ b/docs/reference/03-discovery-functions.md @@ -0,0 +1,365 @@ +# Discovery Functions + +If you are using the [discovery methods]({{ site.dataobservatory_docs}}/guides/overview/#discovery-methods) from the Data Observatory, use the following functions to retrieve [boundary]({{ site.dataobservatory_docs}}/guides/overview/#boundary-data) and [measures]({{ site.dataobservatory_docs}}/guides/overview/#measures-data) data. + +## OBS_Search(search_term) + +Use arbitrary text to search all available measures + +#### Arguments + +Name | Description +--- | --- +search_term | a string to search for available measures +boundary_id | a string identifier for a boundary geometry (optional) + +#### Returns + +A TABLE containing the following properties + +Key | Description +--- | --- +id | the unique id of the measure for use with the ```OBS_GetMeasure``` function +name | the human readable name of the measure +description | a brief description of the measure +aggregate | **sum** are raw count values, **median** are statistical medians, **average** are statistical averages, **undefined** other (e.g. an index value) +source | where the data came from (e.g. US Census Bureau) + +#### Example + +```SQL +SELECT * FROM OBS_Search('home value') +``` + +## OBS_GetAvailableBoundaries(point_geometry) + +Returns available `boundary_id`s at a given point geometry. + +#### Arguments + +Name | Description +--- | --- +point_geometry | a WGS84 point geometry (e.g. the_geom) + +#### Returns + +A TABLE containing the following properties + +Key | Description +--- | --- +boundary_id | a boundary identifier from the [Boundary ID Glossary]({{ site.dataobservatory_docs}}/guides/glossary/#boundary-ids) +description | a brief description of the boundary dataset +time_span | the timespan attached the boundary. this does not mean that the boundary is invalid outside of the timespan, but is the explicit timespan published with the geometry. + +#### Example + +```SQL +SELECT * FROM OBS_GetAvailableBoundaries(CDB_LatLng(40.7, -73.9)) +``` + +## OBS_GetAvailableNumerators(bounds, filter_tags, denom_id, geom_id, timespan) + +Return available numerators within a boundary and with the specified +`filter_tags`. + +#### Arguments + +Name | Type | Description +--- | --- | --- +bounds | Geometry(Geometry, 4326) | a geometry which some of the numerator's data must intersect with +filter_tags | Text[] | a list of filters. Only numerators for which all of these apply are returned `NULL` to ignore (optional) +denom_id | Text | the ID of a denominator to check whether the numerator is valid against. Will not reduce length of returned table, but will change values for `valid_denom` (optional) +geom_id | Text | the ID of a geometry to check whether the numerator is valid against. Will not reduce length of returned table, but will change values for `valid_geom` (optional) +timespan | Text | the ID of a timespan to check whether the numerator is valid against. Will not reduce length of returned table, but will change values for `valid_timespan` (optional) + +#### Returns + +A TABLE containing the following properties + +Key | Type | Description +--- | ---- | ----------- +numer_id | Text | The ID of the numerator +numer_name | Text | A human readable name for the numerator +numer_description | Text | Description of the numerator. Is sometimes NULL +numer_weight | Numeric | Numeric "weight" of the numerator. Ignored. +numer_license | Text | ID of the license for the numerator +numer_source | Text | ID of the source for the numerator +numer_type | Text | Postgres type of the numerator +numer_aggregate | Text | Aggregate type of the numerator. If `'SUM'`, this can be normalized by area +numer_extra | JSONB | Extra information about the numerator column. Ignored. +numer_tags | Text[] | Array of all tags applying to this numerator +valid_denom | Boolean | True if the `denom_id` argument is a valid denominator for this numerator, False otherwise +valid_geom | Boolean | True if the `geom_id` argument is a valid geometry for this numerator, False otherwise +valid_timespan | Boolean | True if the `timespan` argument is a valid timespan for this numerator, False otherwise + +#### Examples + +Obtain all numerators that are available within a small rectangle. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326)) +``` + +Obtain all numerators that are available within a small rectangle and are for +the United States only. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states}'); +``` + +Obtain all numerators that are available within a small rectangle and are +employment related for the United States only. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states, subsection/tags.employment}'); +``` + +Obtain all numerators that are available within a small rectangle and are +related to both employment and age & gender for the United States only. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states, subsection/tags.employment, subsection/tags.age_gender}'); +``` + +Obtain all numerators that work with US population (`us.census.acs.B01003001`) +as a denominator. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01003001') +WHERE valid_denom IS True; +``` + +Obtain all numerators that work with US states (`us.census.tiger.state`) +as a geometry. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, 'us.census.tiger.state') +WHERE valid_geom IS True; +``` + +Obtain all numerators available in the timespan `2011 - 2015`. + +```SQL +SELECT * FROM OBS_GetAvailableNumerators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, '2011 - 2015') +WHERE valid_timespan IS True; +``` + +## OBS_GetAvailableDenominators(bounds, filter_tags, numer_id, geom_id, timespan) + +Return available denominators within a boundary and with the specified +`filter_tags`. + +#### Arguments + +Name | Type | Description +--- | --- | --- +bounds | Geometry(Geometry, 4326) | a geometry which some of the denominator's data must intersect with +filter_tags | Text[] | a list of filters. Only denominators for which all of these apply are returned `NULL` to ignore (optional) +numer_id | Text | the ID of a numerator to check whether the denominator is valid against. Will not reduce length of returned table, but will change values for `valid_numer` (optional) +geom_id | Text | the ID of a geometry to check whether the denominator is valid against. Will not reduce length of returned table, but will change values for `valid_geom` (optional) +timespan | Text | the ID of a timespan to check whether the denominator is valid against. Will not reduce length of returned table, but will change values for `valid_timespan` (optional) + +#### Returns + +A TABLE containing the following properties + +Key | Type | Description +--- | ---- | ----------- +denom_id | Text | The ID of the denominator +denom_name | Text | A human readable name for the denominator +denom_description | Text | Description of the denominator. Is sometimes NULL +denom_weight | Numeric | Numeric "weight" of the denominator. Ignored. +denom_license | Text | ID of the license for the denominator +denom_source | Text | ID of the source for the denominator +denom_type | Text | Postgres type of the denominator +denom_aggregate | Text | Aggregate type of the denominator. If `'SUM'`, this can be normalized by area +denom_extra | JSONB | Extra information about the denominator column. Ignored. +denom_tags | Text[] | Array of all tags applying to this denominator +valid_numer | Boolean | True if the `numer_id` argument is a valid numerator for this denominator, False otherwise +valid_geom | Boolean | True if the `geom_id` argument is a valid geometry for this denominator, False otherwise +valid_timespan | Boolean | True if the `timespan` argument is a valid timespan for this denominator, False otherwise + +#### Examples + +Obtain all denominators that are available within a small rectangle. + +```SQL +SELECT * FROM OBS_GetAvailableDenominators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326)); +``` + +Obtain all denominators that are available within a small rectangle and are for +the United States only. + +```SQL +SELECT * FROM OBS_GetAvailableDenominators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states}'); +``` + +Obtain all denominators for male population (`us.census.acs.B01001002`). + +```SQL +SELECT * FROM OBS_GetAvailableDenominators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01001002') +WHERE valid_numer IS True; +``` + +Obtain all denominators that work with US states (`us.census.tiger.state`) +as a geometry. + +```SQL +SELECT * FROM OBS_GetAvailableDenominators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, 'us.census.tiger.state') +WHERE valid_geom IS True; +``` + +Obtain all denominators available in the timespan `2011 - 2015`. + +```SQL +SELECT * FROM OBS_GetAvailableDenominators( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, '2011 - 2015') +WHERE valid_timespan IS True; +``` + +## OBS_GetAvailableGeometries(bounds, filter_tags, numer_id, denom_id, timespan, number_geometries) + +Return available geometries within a boundary and with the specified +`filter_tags`. + +#### Arguments + +Name | Type | Description +--- | --- | --- +bounds | Geometry(Geometry, 4326) | a geometry which must intersect the geometry +filter_tags | Text[] | a list of filters. Only geometries for which all of these apply are returned `NULL` to ignore (optional) +numer_id | Text | the ID of a numerator to check whether the geometry is valid against. Will not reduce length of returned table, but will change values for `valid_numer` (optional) +denom_id | Text | the ID of a denominator to check whether the geometry is valid against. Will not reduce length of returned table, but will change values for `valid_denom` (optional) +timespan | Text | the ID of a timespan to check whether the geometry is valid against. Will not reduce length of returned table, but will change values for `valid_timespan` (optional) +number_geometries | Integer | an additional variable that is used to adjust the calculation of the [score]({{ site.dataobservatory_docs}}/guides/discovery-functions/#returns-4) (optional) + +#### Returns + +A TABLE containing the following properties + +Key | Type | Description +--- | ---- | ----------- +geom_id | Text | The ID of the geometry +geom_name | Text | A human readable name for the geometry +geom_description | Text | Description of the geometry. Is sometimes NULL +geom_weight | Numeric | Numeric "weight" of the geometry. Ignored. +geom_aggregate | Text | Aggregate type of the geometry. Ignored. +geom_license | Text | ID of the license for the geometry +geom_source | Text | ID of the source for the geometry +geom_type | Text | Postgres type of the geometry +geom_extra | JSONB | Extra information about the geometry column. Ignored. +geom_tags | Text[] | Array of all tags applying to this geometry +valid_numer | Boolean | True if the `numer_id` argument is a valid numerator for this geometry, False otherwise +valid_denom | Boolean | True if the `geom_id` argument is a valid geometry for this geometry, False otherwise +valid_timespan | Boolean | True if the `timespan` argument is a valid timespan for this geometry, False otherwise +score | Numeric | Score between 0 and 100 for this geometry, higher numbers mean that this geometry is a better choice for the passed extent +numtiles | Numeric | How many raster tiles were read for score, numgeoms, and percentfill estimates +numgeoms | Numeric | About how many of these geometries fit inside the passed extent +percentfill | Numeric | About what percentage of the passed extent is filled with these geometries +estnumgeoms | Numeric | Ignored +meanmediansize | Numeric | Ignored + +#### Examples + +Obtain all geometries that are available within a small rectangle. + +```SQL +SELECT * FROM OBS_GetAvailableGeometries( + ST_MakeEnvelope(-74, 41, -73, 40, 4326)); +``` + +Obtain all geometries that are available within a small rectangle and are for +the United States only. + +```SQL +SELECT * FROM OBS_GetAvailableGeometries( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states}'); +``` + +Obtain all geometries that work with total population (`us.census.acs.B01003001`). + +```SQL +SELECT * FROM OBS_GetAvailableGeometries( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01003001') +WHERE valid_numer IS True; +``` + +Obtain all geometries with timespan `2015`. + +```SQL +SELECT * FROM OBS_GetAvailableGeometries( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, '2015') +WHERE valid_timespan IS True; +``` + +## OBS_GetAvailableTimespans(bounds, filter_tags, numer_id, denom_id, geom_id) + +Return available timespans within a boundary and with the specified +`filter_tags`. + +#### Arguments + +Name | Type | Description +--- | --- | --- +bounds | Geometry(Geometry, 4326) | a geometry which some of the timespan's data must intersect with +filter_tags | Text[] | a list of filters. Ignore +numer_id | Text | the ID of a numerator to check whether the timespans is valid against. Will not reduce length of returned table, but will change values for `valid_numer` (optional) +denom_id | Text | the ID of a denominator to check whether the timespans is valid against. Will not reduce length of returned table, but will change values for `valid_denom` (optional) +geom_id | Text | the ID of a geometry to check whether the timespans is valid against. Will not reduce length of returned table, but will change values for `valid_geom` (optional) + +#### Returns + +A TABLE containing the following properties + +Key | Type | Description +--- | ---- | ----------- +timespan_id | Text | The ID of the timespan +timespan_name | Text | A human readable name for the timespan +timespan_description | Text | Ignored +timespan_weight | Numeric | Ignored +timespan_aggregate | Text | Ignored +timespan_license | Text | Ignored +timespan_source | Text | Ignored +timespan_type | Text | Ignored +timespan_extra | JSONB | Ignored +timespan_tags | JSONB | Ignored +valid_numer | Boolean | True if the `numer_id` argument is a valid numerator for this timespan, False otherwise +valid_denom | Boolean | True if the `timespan` argument is a valid timespan for this timespan, False otherwise +valid_geom | Boolean | True if the `geom_id` argument is a valid geometry for this timespan, False otherwise + +#### Examples + +Obtain all timespans that are available within a small rectangle. + +```SQL +SELECT * FROM OBS_GetAvailableTimespans( + ST_MakeEnvelope(-74, 41, -73, 40, 4326)); +``` + +Obtain all timespans for total population (`us.census.acs.B01003001`). + +```SQL +SELECT * FROM OBS_GetAvailableTimespans( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01003001') +WHERE valid_numer IS True; +``` + +Obtain all timespans that work with US states (`us.census.tiger.state`) +as a geometry. + +```SQL +SELECT * FROM OBS_GetAvailableTimespans( + ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, 'us.census.tiger.state') +WHERE valid_geom IS True; +``` diff --git a/docs/support/01-support-options.md b/docs/support/01-support-options.md new file mode 100644 index 0000000..682cfe4 --- /dev/null +++ b/docs/support/01-support-options.md @@ -0,0 +1,35 @@ +## Support Options + +Feeling stuck? There are many ways to find help. + +* Ask a question on [GIS StackExchange](https://gis.stackexchange.com/questions/tagged/carto) using the `CARTO` tag. +* [Report an issue](https://github.com/CartoDB/cartodb.js/issues) in Github. +* Engine Plan customers have additional access to enterprise-level support through CARTO's support representatives. + +If you just want to describe an issue or share an idea, just . + +### Issues on Github + +If you think you may have found a bug, or if you have a feature request that you would like to share with the CARTO.js team, please [open an issue](https://github.com/cartodb/cartodb.js/issues/new). + +Before opening an issue, review the [contributing guidelines](https://github.com/CartoDB/cartodb.js/blob/develop/CONTRIBUTING.md#filling-a-ticket). + + +### Community support on GIS Stack Exchange + +GIS Stack Exchange is the most popular community in the geospatial industry. This is a collaboratively-edited question and answer site for geospatial programmers and technicians. It is a fantastic resource for asking technical questions about developing and maintaining your application. + +When posting a new question, please consider the following: + +* Read the GIS Stack Exchange [help](https://gis.stackexchange.com/help) and [how to ask](https://gis.stackexchange.com/help/how-to-ask) pages for guidelines and tips about posting questions. +* Be very clear about your question in the subject. A clear explanation helps those trying to answer your question, as well as those who may be looking for information in the future. +* Be informative in your post. Details, code snippets, logs, screenshots, etc. help others to understand your problem. +* Use code that demonstrates the problem. It is very hard to debug errors without sample code to reproduce the problem. + +### Engine Plan Customers + +Engine Plan customers have additional support options beyond general community support. As per your account Terms of Service, you have access to enterprise-level support through CARTO's support representatives available at [enterprise-support@carto.com](mailto:enterprise-support@carto.com) + +In order to speed up the resolution of your issue, provide as much information as possible (even if it is a link from community support). This allows our engineers to investigate your problem as soon as possible. + +If you are not yet CARTO customer, browse our [plans & pricing](https://carto.com/pricing/) and find the right plan for you. \ No newline at end of file diff --git a/docs/support/02-license.md b/docs/support/02-license.md new file mode 100644 index 0000000..c93d7a9 --- /dev/null +++ b/docs/support/02-license.md @@ -0,0 +1,32 @@ +## License + +The Data Observatory is a collection of data sources with varying licenses and terms of use. We have endeavored to find you data that will work for the broadest set of use-cases. The following third-party data sources are used in the Data Observatory, and we have included the links to the terms governing their use. + +_**Legal Note**: The Data Observatory makes use of a variety of third party data and databases (collectively, the “Data”). You acknowledge that the included Data, and the licenses and terms of use, may be amended from time to time. Whenever you use the Data, you agree to the current relevant terms or license. Some Data will require that you provide attribution to the data source. Other Data may be protected by US or international copyright laws, treaties, or conventions. The Data and associated metadata are provided 'as-is', without express or implied warranty of any kind, including, but not limited to, infringement, merchantability and fitness for a particular purpose. CartoDB is not responsible for the accuracy, completeness, timeliness or quality of the Data._ + +Name | Terms link +-------|--------- +ACS | [https://www.usa.gov/government-works](https://www.usa.gov/government-works) +Australian Bureau of Statistics DataPacks | [https://creativecommons.org/licenses/by/2.5/au/](https://creativecommons.org/licenses/by/2.5/au/) +Bureau of Labor Statistics Quarterly Census of Employment and Wages (QCEW) | [https://www.usa.gov/government-works](https://www.usa.gov/government-works) +Censo Demográfico of the Instituto Brasileiro de Geografia e Estatística (IBGE) | Statistics are provided by the federal Institute of Applied Economic Research (IPEA), many of which are reproduced from another source. Some series are regularly updated, others are not. Licensing information is similar to CC-BY, allowing copying and reuse, but requiring attribution.

[http://www.ipeadata.gov.br/iframe_direitouso.aspx](http://www.ipeadata.gov.br/iframe_direitouso.aspx?width=1009&height=767) +Consumer Data Research Centre | [http://www.nationalarchives.gov.uk/doc/open-government-licence/version/2/](http://www.nationalarchives.gov.uk/doc/open-government-licence/version/2/) +El Instituto Nacional de Estadística (INE) | The National Statistics Institute (INE) of Spain includes data from multiple sources. If you are re-using their data, they explicitly require that you reference them accordingly

[http://www.ine.es/ss/Satellite?L=0&c=Page&cid=1254735849170&p=1254735849170&pagename=Ayuda%2FINELayout](http://www.ine.es/ss/Satellite?L=0&c=Page&cid=1254735849170&p=1254735849170&pagename=Ayuda%2FINELayout) +EuroGraphics EuroGlobalMap | [http://www.eurogeographics.org/content/eurogeographics-euroglobalmap-opendata](http://www.eurogeographics.org/content/eurogeographics-euroglobalmap-opendata)

This product includes Intellectual Property from European National Mapping and Cadastral Authorities and is licensed on behalf of these by EuroGeographics. Original product is available for free at [www.eurogeographics.org](http://www.eurogeographics.org/). Terms of the license available at [http://www.eurogeographics.org/form/topographic-data-eurogeographics](http://www.eurogeographics.org/form/topographic-data-eurogeographics) +GeoNames | [http://www.geonames.org/](http://www.geonames.org/) +GeoPlanet | [https://developer.yahoo.com/geo/geoplanet/](https://developer.yahoo.com/geo/geoplanet/) +Instituto Nacional de Estadística y Geografía | The National Statistics and Geography Institute (INEGI) of Mexico requires credit be given to INEGI as an author

[http://www.inegi.org.mx/terminos/terminos_info.aspx](http://www.inegi.org.mx/terminos/terminos_info.aspx) +National Center for Geographic Information (CNIG) | [https://www.cnig.es/propiedadIntelectual.do](https://www.cnig.es/propiedadIntelectual.do) +National Institute of Statistics and Economic Studies (INSEE) | [http://www.insee.fr/en/service/default.asp?page=rediffusion/copyright.htm](http://www.insee.fr/en/service/default.asp?page=rediffusion/copyright.htm) +Natural Earth | [http://www.naturalearthdata.com/about/terms-of-use/](http://www.naturalearthdata.com/about/terms-of-use/) +Northern Ireland Statistics and Research Agency | [https://www.nisra.gov.uk/statistics/terms-and-conditions](https://www.nisra.gov.uk/statistics/terms-and-conditions) +Office for National Statistics (ONS) | [http://www.nationalarchives.gov.uk/doc/open-government-licence/version/2/](http://www.nationalarchives.gov.uk/doc/open-government-licence/version/2/) +Quattroshapes | [https://github.com/foursquare/quattroshapes/blob/master/LICENSE.md](https://github.com/foursquare/quattroshapes/blob/master/LICENSE.md) +Scotland's Census Data Warehouse by National Records of Scotland | [https://www.nrscotland.gov.uk/copyright-and-disclaimer](https://www.nrscotland.gov.uk/copyright-and-disclaimer) +Spielman & Singleton | [https://www.openicpsr.org/openicpsr/project/100235/version/V5/view](https://www.openicpsr.org/openicpsr/project/100235/version/V5/view) +Statistics Canada Census of Population 2011 | [http://www.statcan.gc.ca/eng/reference/licence](http://www.statcan.gc.ca/eng/reference/licence) +Statistics Canada National Household Survey 2011 | [http://www.statcan.gc.ca/eng/reference/licence](http://www.statcan.gc.ca/eng/reference/licence) +TIGER | [https://www.usa.gov/government-works](https://www.usa.gov/government-works) +Who's on First | [http://whosonfirst.mapzen.com#License](http://whosonfirst.mapzen.com#License) +Zetashapes | [http://zetashapes.com/license](http://zetashapes.com/license) +Zillow Home Value Index | This data is "Aggregate Data", per the Zillow Terms of Use

[http://www.zillow.com/corp/Terms.htm](http://www.zillow.com/corp/Terms.htm) \ No newline at end of file From a3f817b2b80f3418e11206689b60d38b59bebddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 00:59:56 +0200 Subject: [PATCH 02/27] Create 02-contribute.md --- docs/support/02-contribute.md | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 docs/support/02-contribute.md diff --git a/docs/support/02-contribute.md b/docs/support/02-contribute.md new file mode 100644 index 0000000..6eb5f47 --- /dev/null +++ b/docs/support/02-contribute.md @@ -0,0 +1,36 @@ +## Contribute + +CARTO platform is an open-source ecosystem. You can read about the [fundamentals]({{site.fundamental_docs}}/components/) of CARTO architecture and its components. +We are more than happy to receive your contributions to the code and the documentation as well. + +## Filling a ticket + +If you want to open a new issue in our repository, please follow these instructions: + +1. Descriptive title. +2. Write a good description, it always helps. +3. Specify the steps to reproduce the problem. +4. Try to add an example showing the problem. + +## Contributing code + +Best part of open source, collaborate in Data Observatory code!. We like hearing from you, so if you have any bug fixed, or a new feature ready to be merged, those are the steps you should follow: + +1. Fork the repository. +2. Create a new branch in your forked repository. +3. Commit your changes. Add new tests if it is necessary. +4. Open a pull request. +5. Any of the maintainers will take a look. +6. If everything works, it will merged and released \o/. + +If you want more detailed information, this [GitHub guide](https://guides.github.com/activities/contributing-to-open-source/) is a must. + +## Completing documentation + +Data Observatory documentation is located in ```docs/```. That folder is the content that appears in the [Developer Center](http://carto.com/developer-center/data-observatory/). Just follow the instructions described in [contributing code](#contributing-code) and after accepting your pull request, we will make it appear online :). + +**Tip:** A convenient, easy way of proposing changes in documentation is by using the GitHub editor directly on the web. You can easily create a branch with your changes and make a PR from there. + +## Submitting contributions + +You will need to sign a Contributor License Agreement (CLA) before making a submission. [Learn more here](https://carto.com/contributions). From 8e714ddf2f90b2b654006750440c63334495af35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 01:00:10 +0200 Subject: [PATCH 03/27] Rename 02-license.md to 03-license.md --- docs/support/{02-license.md => 03-license.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/support/{02-license.md => 03-license.md} (99%) diff --git a/docs/support/02-license.md b/docs/support/03-license.md similarity index 99% rename from docs/support/02-license.md rename to docs/support/03-license.md index c93d7a9..1038fd8 100644 --- a/docs/support/02-license.md +++ b/docs/support/03-license.md @@ -29,4 +29,4 @@ Statistics Canada National Household Survey 2011 | [http://www.statcan.gc.ca/eng TIGER | [https://www.usa.gov/government-works](https://www.usa.gov/government-works) Who's on First | [http://whosonfirst.mapzen.com#License](http://whosonfirst.mapzen.com#License) Zetashapes | [http://zetashapes.com/license](http://zetashapes.com/license) -Zillow Home Value Index | This data is "Aggregate Data", per the Zillow Terms of Use

[http://www.zillow.com/corp/Terms.htm](http://www.zillow.com/corp/Terms.htm) \ No newline at end of file +Zillow Home Value Index | This data is "Aggregate Data", per the Zillow Terms of Use

[http://www.zillow.com/corp/Terms.htm](http://www.zillow.com/corp/Terms.htm) From 7f6a72a65f70f4378e7997d563d2592748d4e4a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 01:03:19 +0200 Subject: [PATCH 04/27] Create examples.json --- docs/examples/examples.json | 107 ++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 docs/examples/examples.json diff --git a/docs/examples/examples.json b/docs/examples/examples.json new file mode 100644 index 0000000..1da51f8 --- /dev/null +++ b/docs/examples/examples.json @@ -0,0 +1,107 @@ +{ + "main": { + "file": "import/import-from-database.md" + }, + "categories": [ + { + "title": "Import", + "samples": [ + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + }, + { + "title": "Import standard table", + "desc": "Import standard table into your CARTO account.", + "file": "import/import-standard-table.md" + }, + { + "title": "Import sync table", + "desc": "Import sync table into your CARTO account from database.", + "file": "import/import-sync-table.md" + }, + { + "title": "Import sync table as dataset", + "desc": "Import sync table as dataset into your CARTO account.", + "file": "import/import-from-database.md" + } + ] + }, + { + "title": "Export", + "samples": [ + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + }, + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + }, + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + }, + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + } + ] + }, + { + "title": "Tables", + "samples": [ + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + }, + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + }, + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + }, + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + } + ] + }, + { + "title": "Misc", + "samples": [ + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + }, + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + }, + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + }, + { + "title": "Import from database", + "desc": "Import data into your CARTO account from database.", + "file": "import/import-from-database.md" + } + ] + } + ] +} From c10c5c5021a8e340cf201fdb63e2fd11e181dfe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 11:30:46 +0200 Subject: [PATCH 05/27] Create 01-introduction.md --- docs/reference/01-introduction.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/reference/01-introduction.md diff --git a/docs/reference/01-introduction.md b/docs/reference/01-introduction.md new file mode 100644 index 0000000..f807234 --- /dev/null +++ b/docs/reference/01-introduction.md @@ -0,0 +1,5 @@ +## Introduction + +The Data Observatory, available for Enterprise accounts, provides access to a catalog of analyzed data methods, and enables you to apply the results to your own datasets. + +The contents described in this document are subject to CARTO's [Terms of Service](https://carto.com/legal/) From 0e7898fdaba6ecfb2f5b73b0807b060a63072994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 11:31:33 +0200 Subject: [PATCH 06/27] Create 02-authentication.md --- docs/reference/02-authentication.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 docs/reference/02-authentication.md diff --git a/docs/reference/02-authentication.md b/docs/reference/02-authentication.md new file mode 100644 index 0000000..6f3cb49 --- /dev/null +++ b/docs/reference/02-authentication.md @@ -0,0 +1,9 @@ +## Authentication + +Data Observatory, like any other [CARTO platform's component]({{site.fundamental_docs}}/components/), requires using an API Key. From your CARTO dashboard, click _[Your API keys](https://carto.com/login)_ from the avatar drop-down menu to view your uniquely generated API Key for managing data with CARTO Engine. + +![Your API Keys](../img/avatar.gif) + +Learn more about the [basics of authorization]({{site.fundamental_docs}}/authorization/), or dig into the details of [Auth API]({{site.authapi_docs}}/), if you want to know more about this part of CARTO platform. + +The examples in this documentation may include a placeholder for the API Key. Ensure that you modify any placeholder parameters with your own credentials. From a766233af0b1cc78a827346a1f3f33322b5f8f3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 11:32:38 +0200 Subject: [PATCH 07/27] Create 03-versioning.md --- docs/reference/03-versioning.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/reference/03-versioning.md diff --git a/docs/reference/03-versioning.md b/docs/reference/03-versioning.md new file mode 100644 index 0000000..f4fb1dd --- /dev/null +++ b/docs/reference/03-versioning.md @@ -0,0 +1,3 @@ +## Versioning + +Data Observartory uses [Semantic Versioning](http://semver.org/). View our Github repository to find tags for each [release](https://github.com/CartoDB/observatory-extension/releases). From b9f29821f21a3da0cb597c30108d2494f6ef7fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 11:42:37 +0200 Subject: [PATCH 08/27] Update 01-measures-functions.md --- docs/reference/01-measures-functions.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/reference/01-measures-functions.md b/docs/reference/01-measures-functions.md index 6e6c2b7..3bb23da 100644 --- a/docs/reference/01-measures-functions.md +++ b/docs/reference/01-measures-functions.md @@ -1,12 +1,12 @@ -# Measures Functions +## Measures Functions -[Data Observatory Measures](https://carto.com/docs/carto-engine/data/overview/#measures-methods) are the numerical location data you can access. The measure functions allow you to access individual measures to augment your own data or integrate in your analysis workflows. Measures are used by sending an identifier or a geometry (point or polygon) and receiving back a measure (an absolute value) for that location. +[Data Observatory Measures]({{site.dataobservatory_docs}}/guides/overview/#methods-overview) are the numerical location data you can access. The measure functions allow you to access individual measures to augment your own data or integrate in your analysis workflows. Measures are used by sending an identifier or a geometry (point or polygon) and receiving back a measure (an absolute value) for that location. There are hundreds of measures and the list is growing with each release. You can currently discover and learn about measures contained in the Data Observatory by downloading our [Data Catalog](https://cartodb.github.io/bigmetadata/index.html). -You can [access](https://carto.com/docs/carto-engine/data/accessing) measures through CARTO Builder. The same methods will work if you are using the CARTO Engine to develop your application. We [encourage you](https://carto.com/docs/carto-engine/data/accessing/#best-practices) to use table modifying methods (UPDATE and INSERT) over dynamic methods (SELECT). +You can [access]({{site.dataobservatory_docs}}/guides/overview/accessing-the-data-observatory/) measures through CARTO Builder. The same methods will work if you are using the CARTO Engine to develop your application. We [encourage you]({{site.dataobservatory_docs}}/guides/overview/accessing-the-data-observatory/) to use table modifying methods (UPDATE and INSERT) over dynamic methods (SELECT). -## OBS_GetUSCensusMeasure(point geometry, measure_name text) +### OBS_GetUSCensusMeasure(point geometry, measure_name text) The ```OBS_GetUSCensusMeasure(point, measure_name)``` function returns a measure based on a subset of the US Census variables at a point location. The ```OBS_GetUSCensusMeasure``` function is limited to only a subset of all measures that are available in the Data Observatory. To access the full list, use measure IDs with the ```OBS_GetMeasure``` function below. @@ -37,7 +37,7 @@ UPDATE tablename SET total_population = OBS_GetUSCensusMeasure(the_geom, 'Total Population') ``` -## OBS_GetUSCensusMeasure(polygon geometry, measure_name text) +### OBS_GetUSCensusMeasure(polygon geometry, measure_name text) The ```OBS_GetUSCensusMeasure(polygon, measure_name)``` function returns a measure based on a subset of the US Census variables within a given polygon. The ```OBS_GetUSCensusMeasure``` function is limited to only a subset of all measures that are available in the Data Observatory. To access the full list, use the ```OBS_GetMeasure``` function below. @@ -68,7 +68,7 @@ UPDATE tablename SET local_male_population = OBS_GetUSCensusMeasure(the_geom, 'Male Population') ``` -## OBS_GetMeasure(point geometry, measure_id text) +### OBS_GetMeasure(point geometry, measure_id text) The ```OBS_GetMeasure(point, measure_id)``` function returns any Data Observatory measure at a point location. You can browse all available Measures in the [Catalog](https://cartodb.github.io/bigmetadata/index.html). @@ -99,7 +99,7 @@ UPDATE tablename SET median_home_value_sqft = OBS_GetMeasure(the_geom, 'us.zillow.AllHomes_MedianValuePerSqft') ``` -## OBS_GetMeasure(polygon geometry, measure_id text) +### OBS_GetMeasure(polygon geometry, measure_id text) The ```OBS_GetMeasure(polygon, measure_id)``` function returns any Data Observatory measure calculated within a polygon. @@ -134,7 +134,7 @@ SET household_count = OBS_GetMeasure(the_geom, 'us.census.acs.B11001001') * If an unrecognized normalization type is input, raises error: `'Only valid inputs for "normalize" are "area" (default) and "denominator".` -## OBS_GetMeasureById(geom_ref text, measure_id text, boundary_id text) +### OBS_GetMeasureById(geom_ref text, measure_id text, boundary_id text) The ```OBS_GetMeasureById(geom_ref, measure_id, boundary_id)``` function returns any Data Observatory measure that corresponds to the boundary in ```boundary_id``` that has a geometry reference of ```geom_ref```. @@ -196,7 +196,7 @@ UPDATE tablename SET segmentation = OBS_GetCategory(the_geom, 'us.census.spielman_singleton_segments.X55') ``` -## OBS_GetMeta(extent geometry, metadata json, max_timespan_rank, max_score_rank, target_geoms) +### OBS_GetMeta(extent geometry, metadata json, max_timespan_rank, max_score_rank, target_geoms) The ```OBS_GetMeta(extent, metadata)``` function returns a completed Data Observatory metadata JSON Object for use in ```OBS_GetData(geomvals, @@ -321,7 +321,7 @@ SELECT OBS_GetMeta( ) FROM tablename ``` -## OBS_MetadataValidation(extent geometry, geometry_type text, metadata json, target_geoms) +### OBS_MetadataValidation(extent geometry, geometry_type text, metadata json, target_geoms) The ```OBS_MetadataValidation``` function performs a validation check over the known issues using the extent, type of geometry, and metadata that is being used in the ```OBS_GetMeta``` function. @@ -370,7 +370,7 @@ SELECT OBS_MetadataValidation( GROUP BY ST_GeometryType(the_geom) ``` -## OBS_GetData(geomvals array[geomval], metadata json) +### OBS_GetData(geomvals array[geomval], metadata json) The ```OBS_GetData(geomvals, metadata)``` function returns a measure and/or geometry corresponding to the `metadata` JSON array for each every Geometry of From 120d4e7c71a5ad7f8a1f7dc02252e85afcdda594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 11:45:52 +0200 Subject: [PATCH 09/27] Rename 01-measures-functions.md to 04-measures-functions.md --- .../{01-measures-functions.md => 04-measures-functions.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/reference/{01-measures-functions.md => 04-measures-functions.md} (100%) diff --git a/docs/reference/01-measures-functions.md b/docs/reference/04-measures-functions.md similarity index 100% rename from docs/reference/01-measures-functions.md rename to docs/reference/04-measures-functions.md From 85883a1686975a723bf9a19821069266b6621d24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 11:46:19 +0200 Subject: [PATCH 10/27] Rename 02-boundary-functions.md to 05-boundary-functions.md --- .../{02-boundary-functions.md => 05-boundary-functions.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/reference/{02-boundary-functions.md => 05-boundary-functions.md} (100%) diff --git a/docs/reference/02-boundary-functions.md b/docs/reference/05-boundary-functions.md similarity index 100% rename from docs/reference/02-boundary-functions.md rename to docs/reference/05-boundary-functions.md From ddb69e61a3ed6ba70b61cfff9e35c131bb469317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 11:46:39 +0200 Subject: [PATCH 11/27] Rename 03-discovery-functions.md to 06-discovery-functions.md --- .../{03-discovery-functions.md => 06-discovery-functions.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/reference/{03-discovery-functions.md => 06-discovery-functions.md} (100%) diff --git a/docs/reference/03-discovery-functions.md b/docs/reference/06-discovery-functions.md similarity index 100% rename from docs/reference/03-discovery-functions.md rename to docs/reference/06-discovery-functions.md From ab0fb6abf913c617c94886bdf2582ecc85b039b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 11:47:31 +0200 Subject: [PATCH 12/27] Update 05-boundary-functions.md --- docs/reference/05-boundary-functions.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/reference/05-boundary-functions.md b/docs/reference/05-boundary-functions.md index 34c01c9..4a2269d 100644 --- a/docs/reference/05-boundary-functions.md +++ b/docs/reference/05-boundary-functions.md @@ -1,10 +1,10 @@ -# Boundary Functions +## Boundary Functions Use the following functions to retrieve [Boundary](https://carto.com/docs/carto-engine/data/overview/#boundary-data) data. Data ranges from small areas (e.g. US Census Block Groups) to large areas (e.g. Countries). You can access boundaries by point location lookup, bounding box lookup, direct ID access and several other methods described below. You can [access](https://carto.com/docs/carto-engine/data/accessing) boundaries through CARTO Builder. The same methods will work if you are using the CARTO Engine to develop your application. We [encourage you](https://carto.com/docs/carto-engine/data/accessing/#best-practices) to use table modifying methods (UPDATE and INSERT) over dynamic methods (SELECT). -## OBS_GetBoundariesByGeometry(geom geometry, geometry_id text) +### OBS_GetBoundariesByGeometry(geom geometry, geometry_id text) The ```OBS_GetBoundariesByGeometry(geometry, geometry_id)``` method returns a set of boundary geometries that intersect a supplied geometry. This can be used to find all boundaries that are within or overlap a bounding box. You have the ability to choose whether to retrieve all boundaries that intersect your supplied bounding box or only those that fall entirely inside of your bounding box. @@ -88,7 +88,7 @@ FROM OBS_GetPointsByGeometry( * If a geometry other than a point is passed as the first argument, an error is thrown: `Invalid geometry type (ST_Point), expecting 'ST_MultiPolygon' or 'ST_Polygon'` -## OBS_GetBoundary(point_geometry, boundary_id) +### OBS_GetBoundary(point_geometry, boundary_id) The ```OBS_GetBoundary(point_geometry, boundary_id)``` method returns a boundary geometry defined as overlapping the point geometry and from the desired boundary set (e.g. Census Tracts). See the [Boundary ID Glossary](https://carto.com/docs/carto-engine/data/glossary/#boundary-ids). This is a useful method for performing aggregations of points. @@ -121,7 +121,7 @@ SET the_geom = OBS_GetBoundary(the_geom, 'us.census.tiger.block_group') * If a geometry other than a point is passed, an error is thrown: `Invalid geometry type (ST_Line), expecting 'ST_Point'` -## OBS_GetBoundaryId(point_geometry, boundary_id) +### OBS_GetBoundaryId(point_geometry, boundary_id) The ```OBS_GetBoundaryId(point_geometry, boundary_id)``` returns a unique geometry_id for the boundary geometry that contains a given point geometry. See the [Boundary ID Glossary](https://carto.com/docs/carto-engine/data/glossary/#boundary-ids). The method can be combined with ```OBS_GetBoundaryById(geometry_id)``` to create a point aggregation workflow. @@ -154,7 +154,7 @@ SET geometry_id = OBS_GetBoundaryId(the_geom, 'us.census.tiger.block_group') * If a geometry other than a point is passed, an error is thrown: `Invalid geometry type (ST_Line), expecting 'ST_Point'` -## OBS_GetBoundaryById(geometry_id, boundary_id) +### OBS_GetBoundaryById(geometry_id, boundary_id) The ```OBS_GetBoundaryById(geometry_id, boundary_id)``` returns the boundary geometry for a unique geometry_id. A geometry_id can be found using the ```OBS_GetBoundaryId(point_geometry, boundary_id)``` method described above. @@ -188,7 +188,7 @@ FROM tablename GROUP BY geometry_id ``` -## OBS_GetBoundariesByPointAndRadius(point geometry, radius numeric, boundary_id text) +### OBS_GetBoundariesByPointAndRadius(point geometry, radius numeric, boundary_id text) The ```OBS_GetBoundariesByPointAndRadius(point, radius, boundary_id)``` method returns boundary geometries and their geographical identifiers that intersect (or are contained by) a circle centered on a point with a radius. @@ -230,7 +230,7 @@ FROM OBS_GetBoundariesByPointAndRadius( * If a geometry other than a point is passed, an error is thrown. E.g., `Invalid geometry type (ST_Line), expecting 'ST_Point'` -## OBS_GetPointsByPointAndRadius(point geometry, radius numeric, boundary_id text) +### OBS_GetPointsByPointAndRadius(point geometry, radius numeric, boundary_id text) The ```OBS_GetPointsByPointAndRadius(point, radius, boundary_id)``` method returns point geometries on boundaries (e.g., a point that lies on a Census tract) and their geographical identifiers that intersect (or are contained by) a circle centered on a point with a radius. From 10b9fd3e72358cede3b94f3a292dc57ce9192513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 11:48:39 +0200 Subject: [PATCH 13/27] Update 06-discovery-functions.md --- docs/reference/06-discovery-functions.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/reference/06-discovery-functions.md b/docs/reference/06-discovery-functions.md index 75dc3c3..5568670 100644 --- a/docs/reference/06-discovery-functions.md +++ b/docs/reference/06-discovery-functions.md @@ -1,8 +1,8 @@ -# Discovery Functions +## Discovery Functions If you are using the [discovery methods]({{ site.dataobservatory_docs}}/guides/overview/#discovery-methods) from the Data Observatory, use the following functions to retrieve [boundary]({{ site.dataobservatory_docs}}/guides/overview/#boundary-data) and [measures]({{ site.dataobservatory_docs}}/guides/overview/#measures-data) data. -## OBS_Search(search_term) +### OBS_Search(search_term) Use arbitrary text to search all available measures @@ -31,7 +31,7 @@ source | where the data came from (e.g. US Census Bureau) SELECT * FROM OBS_Search('home value') ``` -## OBS_GetAvailableBoundaries(point_geometry) +### OBS_GetAvailableBoundaries(point_geometry) Returns available `boundary_id`s at a given point geometry. @@ -57,7 +57,7 @@ time_span | the timespan attached the boundary. this does not mean that the boun SELECT * FROM OBS_GetAvailableBoundaries(CDB_LatLng(40.7, -73.9)) ``` -## OBS_GetAvailableNumerators(bounds, filter_tags, denom_id, geom_id, timespan) +### OBS_GetAvailableNumerators(bounds, filter_tags, denom_id, geom_id, timespan) Return available numerators within a boundary and with the specified `filter_tags`. @@ -151,7 +151,7 @@ SELECT * FROM OBS_GetAvailableNumerators( WHERE valid_timespan IS True; ``` -## OBS_GetAvailableDenominators(bounds, filter_tags, numer_id, geom_id, timespan) +### OBS_GetAvailableDenominators(bounds, filter_tags, numer_id, geom_id, timespan) Return available denominators within a boundary and with the specified `filter_tags`. @@ -228,7 +228,7 @@ SELECT * FROM OBS_GetAvailableDenominators( WHERE valid_timespan IS True; ``` -## OBS_GetAvailableGeometries(bounds, filter_tags, numer_id, denom_id, timespan, number_geometries) +### OBS_GetAvailableGeometries(bounds, filter_tags, numer_id, denom_id, timespan, number_geometries) Return available geometries within a boundary and with the specified `filter_tags`. From 7340003c91fc24a83455ee276de73ab2850c1880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 11:51:58 +0200 Subject: [PATCH 14/27] Add files via upload --- docs/img/avatar.gif | Bin 0 -> 97238 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/img/avatar.gif diff --git a/docs/img/avatar.gif b/docs/img/avatar.gif new file mode 100644 index 0000000000000000000000000000000000000000..586a34d851830c9103de398f859ee69821dcdbe7 GIT binary patch literal 97238 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

-EKi5$Mp9MIU!_WuI%6185 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 Tk_FHM2m}EC-!cdd1YG(r`7ce) literal 0 HcmV?d00001 From 5aba51d86de7f48b598a4783f7dd3f5c8d5c1ac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 11:56:21 +0200 Subject: [PATCH 15/27] Update 04-measures-functions.md --- docs/reference/04-measures-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/04-measures-functions.md b/docs/reference/04-measures-functions.md index 3bb23da..70a7c95 100644 --- a/docs/reference/04-measures-functions.md +++ b/docs/reference/04-measures-functions.md @@ -32,7 +32,7 @@ value | the raw or normalized measure Add a measure to an empty numeric column based on point locations in your table. -```SQL +```sql UPDATE tablename SET total_population = OBS_GetUSCensusMeasure(the_geom, 'Total Population') ``` From 2778986e15b560fc91d00a7659687d4d598aa516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 12:04:50 +0200 Subject: [PATCH 16/27] Update 04-measures-functions.md --- docs/reference/04-measures-functions.md | 28 ++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/reference/04-measures-functions.md b/docs/reference/04-measures-functions.md index 70a7c95..1694003 100644 --- a/docs/reference/04-measures-functions.md +++ b/docs/reference/04-measures-functions.md @@ -63,7 +63,7 @@ value | the raw or normalized measure Add a measure to an empty numeric column based on polygons in your table -```SQL +```sql UPDATE tablename SET local_male_population = OBS_GetUSCensusMeasure(the_geom, 'Male Population') ``` @@ -94,7 +94,7 @@ value | the raw or normalized measure Add a measure to an empty numeric column based on point locations in your table -```SQL +```sql UPDATE tablename SET median_home_value_sqft = OBS_GetMeasure(the_geom, 'us.zillow.AllHomes_MedianValuePerSqft') ``` @@ -125,7 +125,7 @@ value | the raw or normalized measure Add a measure to an empty column based on polygons in your table -```SQL +```sql UPDATE tablename SET household_count = OBS_GetMeasure(the_geom, 'us.census.acs.B11001001') ``` @@ -159,7 +159,7 @@ value | the raw measure associated with `geom_ref` Add a measure to an empty column based on county geoids in your table -```SQL +```sql UPDATE tablename SET household_count = OBS_GetMeasureById(geoid_column, 'us.census.acs.B11001001', 'us.census.tiger.county') ``` @@ -191,7 +191,7 @@ value | a text based category found at the supplied point Add the Category to an empty column text column based on point locations in your table -```SQL +```sql UPDATE tablename SET segmentation = OBS_GetCategory(the_geom, 'us.census.spielman_singleton_segments.X55') ``` @@ -288,7 +288,7 @@ data, using a boundary relevant for the geometry provided and latest timespan. Limit to only the most recent column most relevant to the extent & density of input geometries in `tablename`. -```SQL +```sql SELECT OBS_GetMeta( ST_SetSRID(ST_Extent(the_geom), 4326), '[{"numer_id": "us.census.acs.B01003001"}]', @@ -300,7 +300,7 @@ SELECT OBS_GetMeta( Obtain metadata that can augment with one additional column of US population data, using census tract boundaries. -```SQL +```sql SELECT OBS_GetMeta( ST_SetSRID(ST_Extent(the_geom), 4326), '[{"numer_id": "us.census.acs.B01003001", "geom_id": "us.census.tiger.census_tract"}]', @@ -312,7 +312,7 @@ SELECT OBS_GetMeta( Obtain metadata that can augment with two additional columns, one for total population and one for male population. -```SQL +```sql SELECT OBS_GetMeta( ST_SetSRID(ST_Extent(the_geom), 4326), '[{"numer_id": "us.census.acs.B01003001"}, {"numer_id": "us.census.acs.B01001002"}]', @@ -360,7 +360,7 @@ errors | A text array with all possible errors Validate metadata with two additional columns of US census data; using a boundary relevant for the geometry provided and the latest timespan. Limited to the most recent column, and the most relevant, based on the extent and density of input geometries in `tablename`. -```SQL +```sql SELECT OBS_MetadataValidation( ST_SetSRID(ST_Extent(the_geom), 4326), ST_GeometryType(the_geom), @@ -408,7 +408,7 @@ array. Obtain population densities for every geometry in a table, keyed by cartodb_id: -```SQL +```sql WITH meta AS ( SELECT OBS_GetMeta( ST_SetSRID(ST_Extent(the_geom), 4326), @@ -423,7 +423,7 @@ FROM OBS_GetData((SELECT ARRAY_AGG((the_geom, cartodb_id)::geomval) FROM tablena Update a table with a blank numeric column called `pop_density` with population densities: -```SQL +```sql WITH meta AS ( SELECT OBS_GetMeta( ST_SetSRID(ST_Extent(the_geom), 4326), @@ -444,7 +444,7 @@ Update a table with two measurements at once, population density and household density. The table should already have a Numeric column `pop_density` and `household_density`. -```SQL +```sql WITH meta AS ( SELECT OBS_GetMeta( ST_SetSRID(ST_Extent(the_geom),4326), @@ -507,7 +507,7 @@ array. Obtain population densities for every row of a table with FIPS code county IDs (USA). -```SQL +```sql WITH meta AS ( SELECT OBS_GetMeta( ST_SetSRID(ST_Extent(the_geom), 4326), @@ -522,7 +522,7 @@ Update a table with population densities for every FIPS code county ID (USA). This table has a blank column called `pop_density` and fips codes stored in a column `fips`. -```SQL +```sql WITH meta AS ( SELECT OBS_GetMeta( ST_SetSRID(ST_Extent(the_geom), 4326), From cff05763686fc74cfbeeb4cc6309cb58d1d9770a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 12:05:22 +0200 Subject: [PATCH 17/27] Update 05-boundary-functions.md --- docs/reference/05-boundary-functions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/reference/05-boundary-functions.md b/docs/reference/05-boundary-functions.md index 4a2269d..36164c1 100644 --- a/docs/reference/05-boundary-functions.md +++ b/docs/reference/05-boundary-functions.md @@ -112,7 +112,7 @@ geom | WKB geometry Overwrite a point geometry with a boundary geometry that contains it in your table -```SQL +```sql UPDATE tablename SET the_geom = OBS_GetBoundary(the_geom, 'us.census.tiger.block_group') ``` @@ -145,7 +145,7 @@ geometry_id | a string identifier of a geometry in the Boundaries Write the US Census block group geoid that contains the point geometry for every row as a new column in your table. -```SQL +```sql UPDATE tablename SET geometry_id = OBS_GetBoundaryId(the_geom, 'us.census.tiger.block_group') ``` @@ -178,7 +178,7 @@ geom | a WGS84 polygon geometry Use a table of `geometry_id`s (e.g., geoid from the U.S. Census) to select the unique boundaries that they correspond to and insert into a table called, `overlapping_polygons`. This is a useful method for creating new choropleths of aggregate data. -```SQL +```sql INSERT INTO overlapping_polygons (the_geom, geometry_id, point_count) SELECT OBS_GetBoundaryById(geometry_id, 'us.census.tiger.county') As the_geom, From 5a19090b418bd5afa146169fb9a9fb865a57fd01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 12:06:47 +0200 Subject: [PATCH 18/27] Update 06-discovery-functions.md --- docs/reference/06-discovery-functions.md | 42 ++++++++++++------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/reference/06-discovery-functions.md b/docs/reference/06-discovery-functions.md index 5568670..0e22b80 100644 --- a/docs/reference/06-discovery-functions.md +++ b/docs/reference/06-discovery-functions.md @@ -27,7 +27,7 @@ source | where the data came from (e.g. US Census Bureau) #### Example -```SQL +```sql SELECT * FROM OBS_Search('home value') ``` @@ -53,7 +53,7 @@ time_span | the timespan attached the boundary. this does not mean that the boun #### Example -```SQL +```sql SELECT * FROM OBS_GetAvailableBoundaries(CDB_LatLng(40.7, -73.9)) ``` @@ -96,7 +96,7 @@ valid_timespan | Boolean | True if the `timespan` argument is a valid timespan f Obtain all numerators that are available within a small rectangle. -```SQL +```sql SELECT * FROM OBS_GetAvailableNumerators( ST_MakeEnvelope(-74, 41, -73, 40, 4326)) ``` @@ -104,7 +104,7 @@ SELECT * FROM OBS_GetAvailableNumerators( Obtain all numerators that are available within a small rectangle and are for the United States only. -```SQL +```sql SELECT * FROM OBS_GetAvailableNumerators( ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states}'); ``` @@ -112,7 +112,7 @@ SELECT * FROM OBS_GetAvailableNumerators( Obtain all numerators that are available within a small rectangle and are employment related for the United States only. -```SQL +```sql SELECT * FROM OBS_GetAvailableNumerators( ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states, subsection/tags.employment}'); ``` @@ -120,7 +120,7 @@ SELECT * FROM OBS_GetAvailableNumerators( Obtain all numerators that are available within a small rectangle and are related to both employment and age & gender for the United States only. -```SQL +```sql SELECT * FROM OBS_GetAvailableNumerators( ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states, subsection/tags.employment, subsection/tags.age_gender}'); ``` @@ -128,7 +128,7 @@ SELECT * FROM OBS_GetAvailableNumerators( Obtain all numerators that work with US population (`us.census.acs.B01003001`) as a denominator. -```SQL +```sql SELECT * FROM OBS_GetAvailableNumerators( ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01003001') WHERE valid_denom IS True; @@ -137,7 +137,7 @@ WHERE valid_denom IS True; Obtain all numerators that work with US states (`us.census.tiger.state`) as a geometry. -```SQL +```sql SELECT * FROM OBS_GetAvailableNumerators( ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, 'us.census.tiger.state') WHERE valid_geom IS True; @@ -145,7 +145,7 @@ WHERE valid_geom IS True; Obtain all numerators available in the timespan `2011 - 2015`. -```SQL +```sql SELECT * FROM OBS_GetAvailableNumerators( ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, '2011 - 2015') WHERE valid_timespan IS True; @@ -190,7 +190,7 @@ valid_timespan | Boolean | True if the `timespan` argument is a valid timespan f Obtain all denominators that are available within a small rectangle. -```SQL +```sql SELECT * FROM OBS_GetAvailableDenominators( ST_MakeEnvelope(-74, 41, -73, 40, 4326)); ``` @@ -198,14 +198,14 @@ SELECT * FROM OBS_GetAvailableDenominators( Obtain all denominators that are available within a small rectangle and are for the United States only. -```SQL +```sql SELECT * FROM OBS_GetAvailableDenominators( ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states}'); ``` Obtain all denominators for male population (`us.census.acs.B01001002`). -```SQL +```sql SELECT * FROM OBS_GetAvailableDenominators( ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01001002') WHERE valid_numer IS True; @@ -214,7 +214,7 @@ WHERE valid_numer IS True; Obtain all denominators that work with US states (`us.census.tiger.state`) as a geometry. -```SQL +```sql SELECT * FROM OBS_GetAvailableDenominators( ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, 'us.census.tiger.state') WHERE valid_geom IS True; @@ -222,7 +222,7 @@ WHERE valid_geom IS True; Obtain all denominators available in the timespan `2011 - 2015`. -```SQL +```sql SELECT * FROM OBS_GetAvailableDenominators( ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, '2011 - 2015') WHERE valid_timespan IS True; @@ -274,7 +274,7 @@ meanmediansize | Numeric | Ignored Obtain all geometries that are available within a small rectangle. -```SQL +```sql SELECT * FROM OBS_GetAvailableGeometries( ST_MakeEnvelope(-74, 41, -73, 40, 4326)); ``` @@ -282,14 +282,14 @@ SELECT * FROM OBS_GetAvailableGeometries( Obtain all geometries that are available within a small rectangle and are for the United States only. -```SQL +```sql SELECT * FROM OBS_GetAvailableGeometries( ST_MakeEnvelope(-74, 41, -73, 40, 4326), '{section/tags.united_states}'); ``` Obtain all geometries that work with total population (`us.census.acs.B01003001`). -```SQL +```sql SELECT * FROM OBS_GetAvailableGeometries( ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01003001') WHERE valid_numer IS True; @@ -297,7 +297,7 @@ WHERE valid_numer IS True; Obtain all geometries with timespan `2015`. -```SQL +```sql SELECT * FROM OBS_GetAvailableGeometries( ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, '2015') WHERE valid_timespan IS True; @@ -342,14 +342,14 @@ valid_geom | Boolean | True if the `geom_id` argument is a valid geometry for th Obtain all timespans that are available within a small rectangle. -```SQL +```sql SELECT * FROM OBS_GetAvailableTimespans( ST_MakeEnvelope(-74, 41, -73, 40, 4326)); ``` Obtain all timespans for total population (`us.census.acs.B01003001`). -```SQL +```sql SELECT * FROM OBS_GetAvailableTimespans( ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, 'us.census.acs.B01003001') WHERE valid_numer IS True; @@ -358,7 +358,7 @@ WHERE valid_numer IS True; Obtain all timespans that work with US states (`us.census.tiger.state`) as a geometry. -```SQL +```sql SELECT * FROM OBS_GetAvailableTimespans( ST_MakeEnvelope(-74, 41, -73, 40, 4326), NULL, NULL, NULL, 'us.census.tiger.state') WHERE valid_geom IS True; From a5a2d59e0b1e2b902bd3a78dae4ba264347a1858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 17:55:26 +0200 Subject: [PATCH 19/27] Update 01-overview.md --- docs/guides/01-overview.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/guides/01-overview.md b/docs/guides/01-overview.md index 0fa300e..a30d871 100644 --- a/docs/guides/01-overview.md +++ b/docs/guides/01-overview.md @@ -2,11 +2,11 @@ For Enterprise account plans, the [Data Observatory](https://carto.com/data) provides access to a searchable catalog of advanced location data, such as census block, population segments, boundaries and so on. A set of SQL functions allow you to augment your own data and broaden your analysis by discovering boundaries and measures of data from this catalog. -This section describes the Data Observatory methods and the type of data that it returns. +This section describes the Data Observatory functions and the type of data that it returns. -### Methods Overview +### Functions Overview -There are several methods for accessing different categories of data into your visualizations. You can discover and retrieve data by requesting OBS functions from the Data Observatory. These Data Observatory functions are designed for specific, targeted methods of data analysis. The response for these functions are classified into two primary types of data results; measures and boundaries. +There are several functions for accessing different categories of data into your visualizations. You can discover and retrieve data by requesting OBS functions from the Data Observatory. These Data Observatory functions are designed for specific, targeted methods of data analysis. The response for these functions are classified into two primary types of data results; measures and boundaries. - Boundaries are the geospatial boundaries you need to map or aggregate your data. Examples include Country Borders, Zip Code Tabulation Areas, and Counties @@ -14,34 +14,34 @@ There are several methods for accessing different categories of data into your v Depending on the OBS function, you will get one, or both, types of data in your result. See [Measures and Boundary Data](#measures-and-boundary-results) for details about available data. -#### Measures Methods +#### Measures Functions Use location-based measures to analyze your data by accessing population and industry measurements at point locations, or within a region or polygon. These include variables for demographic, economic, and other types of information. - See [Measures Functions]({{ site.dataobservatory_docs }}/reference/#measures-functions) for specific OBS functions - Returns Measures data results -#### Boundary Methods +#### Boundary Functions Use global boundaries to analyze your data by accessing multi-scaled geometries for visualizations. Examples include US Block Groups and Census Tracts. These enable you to aggregate your data into geometric polygons. You can also use your own data to query specific boundaries. - See [Boundary Functions]({{ site.dataobservatory_docs }}/reference/#boundary-functions) for specific OBS functions - Returns Boundary data results -#### Discovery Methods +#### Discovery Functions -Discovery Methods provide easier ways for you to find Measures and Boundaries of interest in the Data Observatory. The Discovery functions allow you to perform targeted searches for Measures, or use your own data to discover what is available at a given location. As this is a **retrieval tool** of the Data Observatory, the query results do not change your table. The response back displays one or more identifiers as matches to your search criteria. Each unique identifier can _then_ be used as part of other OBS functions to access any of the other Data Observatory methods. +Discovery Functions provide easier ways for you to find Measures and Boundaries of interest in the Data Observatory. The Discovery functions allow you to perform targeted searches for Measures, or use your own data to discover what is available at a given location. As this is a **retrieval tool** of the Data Observatory, the query results do not change your table. The response back displays one or more identifiers as matches to your search criteria. Each unique identifier can _then_ be used as part of other OBS functions to access any of the other Data Observatory functions. - See [Discovery Functions]({{ site.dataobservatory_docs }}/reference/#discovery-functions) for specific OBS functions - Returns Boundary or Measures matches for your data ### Measures and Boundary Results -The response from the Data Observatory methods are classified as either Measures or Boundary. Depending on your OBS function, you will get one, or both, types of data in your result. +The response from the Data Observatory functions are classified as either Measures or Boundary. Depending on your OBS function, you will get one, or both, types of data in your result. #### Measures Data -Measures provide details about local populations, markets, industries and other dimensions. You can search for available Measures using the Discovery methods, or by viewing the Data Catalog. Measures can be requested for Point locations, or can be summarized for Polygons (regions). In general, Point location requests will return raw aggregate values (e.g. Median Rent), or will provide amounts per square kilometer (e.g. Population). The total square kilometers of the area searched will be returned, allowing you to get raw counts, if needed. Alternatively, if you search over a polygon, raw counts will be returned. +Measures provide details about local populations, markets, industries and other dimensions. You can search for available Measures using the Discovery functions, or by viewing the Data Catalog. Measures can be requested for Point locations, or can be summarized for Polygons (regions). In general, Point location requests will return raw aggregate values (e.g. Median Rent), or will provide amounts per square kilometer (e.g. Population). The total square kilometers of the area searched will be returned, allowing you to get raw counts, if needed. Alternatively, if you search over a polygon, raw counts will be returned. The following table indicates where Measures data results are available. Measures can include raw measures and when indicated, can provide geometries. @@ -85,4 +85,4 @@ Many geometries come with various degrees of water accuracy (how closely they fo **Note:** While high clip water levels may be better for some kinds of maps and analysis, this type of data consumes more account storage space and may be subject to quota limitations. -For details about how to access any of this data, see [Accessing the Data Observatory]({{ site.dataobservatory_docs }}/guides/accesssing-the-data-observatory/). \ No newline at end of file +For details about how to access any of this data, see [Accessing the Data Observatory]({{ site.dataobservatory_docs }}/guides/accesssing-the-data-observatory/). From b3f28098518e902e61523e86a2adbe5b4a5cdfb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Fri, 13 Apr 2018 17:56:20 +0200 Subject: [PATCH 20/27] Update 02-accessing-the-data-observatory.md --- docs/guides/02-accessing-the-data-observatory.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/guides/02-accessing-the-data-observatory.md b/docs/guides/02-accessing-the-data-observatory.md index 7cda496..64d8eba 100644 --- a/docs/guides/02-accessing-the-data-observatory.md +++ b/docs/guides/02-accessing-the-data-observatory.md @@ -26,7 +26,7 @@ This procedure describes how to access the Data Observatory functions by applyin 2) [View the Data Observatory Catalog](https://cartodb.github.io/bigmetadata/index.html) -An overview for each of the analyzed methods of data appears, and indicates the unique function signature needed to access the catalog item. You can copy the OBS function from the Data Observatory catalog and modify the placeholder parameters shown in curly brackets (e.g. "{table_name}"). +An overview for each of the analyzed functions of data appears, and indicates the unique function signature needed to access the catalog item. You can copy the OBS function from the Data Observatory catalog and modify the placeholder parameters shown in curly brackets (e.g. "{table_name}"). 3) From _Your datasets_ dashboard in CARTO, click _NEW DATASET_ and _CREATE EMPTY DATASET_. @@ -36,7 +36,7 @@ This creates an untitled table. You can get population measurements from the Dat 5) Apply the OBS function to modify your table. -For example, the following image displays a SQL query using the Boundary method, [`OBS_GetBoundariesByGeometry(geom geometry, geometry_id text)`](https://carto.com/docs/carto-engine/data/boundary-functions/#obsgetboundariesbygeometrygeom-geometry-geometryid-text) function. The SQL query inserts the boundary data as a single polygon geometry for each row of data. +For example, the following image displays a SQL query using the Boundary function, [`OBS_GetBoundariesByGeometry(geom geometry, geometry_id text)`](https://carto.com/docs/carto-engine/data/boundary-functions/#obsgetboundariesbygeometrygeom-geometry-geometryid-text) function. The SQL query inserts the boundary data as a single polygon geometry for each row of data. ![Query OBS Function in empty dataset](../img/obs_getboundary.jpg) @@ -101,7 +101,7 @@ The following usage notes are recommended when using the Data Observatory functi The Data Observatory is **recommended** to be used with INSERT or UPDATE operations, for applying analyzed measures and boundaries data to your tables. While SELECT (retrieve) is standard for SQL API requests, be mindful of quota consumption and use INSERT (to insert a new record) or UPDATE (to update an existing record), for best practices. - **Exception:** [Discovery Methods]({{ site.dataobservatory_docs }}/guides/overview/#discovery-methods) are the exception. You can use SELECT as these functions are not actually retrieving data, they are retrieving ids that you can use for other functions. + **Exception:** [Discovery Functions]({{ site.dataobservatory_docs }}/guides/overview/#discovery-functions) are the exception. You can use SELECT as these functions are not actually retrieving data, they are retrieving ids that you can use for other functions. - You can reduce storage space for unneeded geometries and optimize query optimizations by applying the PostGIS [`ST_Simplify`](http://www.postgis.org/docs/ST_Simplify.html) function. For example, you can simplify the `the_geom` for a large table of polygons and reduce the size of them for quicker rendering. For other tips, see the [most commonly used PostGIS functions]({{ site.baseurl }}/faqs/postgresql-and-postgis/#what-are-the-most-common-postgis-functions) that you can apply with CARTO @@ -120,4 +120,4 @@ The following usage notes are recommended when using the Data Observatory functi ### Examples -View our [CARTO Blogs](https://carto.com/blog/categories/data-observatory/) for examples that highlight the benefits of using the Data Observatory. \ No newline at end of file +View our [CARTO Blogs](https://carto.com/blog/categories/data-observatory/) for examples that highlight the benefits of using the Data Observatory. From a3fc313ffbb7d9e4950552d8c9038365d6243722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Tue, 17 Apr 2018 14:42:39 +0200 Subject: [PATCH 21/27] Update 02-contribute.md --- docs/support/02-contribute.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/support/02-contribute.md b/docs/support/02-contribute.md index 6eb5f47..3a01392 100644 --- a/docs/support/02-contribute.md +++ b/docs/support/02-contribute.md @@ -27,7 +27,7 @@ If you want more detailed information, this [GitHub guide](https://guides.github ## Completing documentation -Data Observatory documentation is located in ```docs/```. That folder is the content that appears in the [Developer Center](http://carto.com/developer-center/data-observatory/). Just follow the instructions described in [contributing code](#contributing-code) and after accepting your pull request, we will make it appear online :). +Data Observatory documentation is located in ```docs/```. That folder is the content that appears in the [Developer Center](http://carto.com/developers/data-observatory/). Just follow the instructions described in [contributing code](#contributing-code) and after accepting your pull request, we will make it appear online :). **Tip:** A convenient, easy way of proposing changes in documentation is by using the GitHub editor directly on the web. You can easily create a branch with your changes and make a PR from there. From 43408f8de09f7f18f20e88c1d091246aa1d03a06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?I=C3=B1igo=20Medina?= Date: Wed, 18 Apr 2018 12:39:44 +0200 Subject: [PATCH 22/27] Update 02-accessing-the-data-observatory.md --- docs/guides/02-accessing-the-data-observatory.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/guides/02-accessing-the-data-observatory.md b/docs/guides/02-accessing-the-data-observatory.md index 64d8eba..a28e4dc 100644 --- a/docs/guides/02-accessing-the-data-observatory.md +++ b/docs/guides/02-accessing-the-data-observatory.md @@ -6,9 +6,7 @@ The workflow for accessing the Data Observatory includes using a SQL query to ap You must have an Enterprise account and be familiar with using SQL requests. -- The Data Observatory catalog includes data that is managed by CARTO, on a SaaS cloud platform. For Enterprise users, the Data Observatory can be enabled by contacting CARTO - - **Note:** The following error appears if the Data Observatory has not been enabled for your account, `You have reached the limit of your quota`. [Contact Sales](mailto:sales@carto.com) if this error message appears. +- The Data Observatory catalog includes data that is managed by CARTO, on a SaaS cloud platform. For Enterprise users, the Data Observatory can be enabled by contacting CARTO. - A set of Data Observatory functions (prefaced with "OBS" for Observatory), allow you to retrieve boundaries and measures data through a SQL request. These functions should be used with UPDATE and INSERT statements, not SELECT statements, as we are currently not supporting dynamic use of the Data Observatory From 2cc14a98921cbf2fef7dec9fd35cd691c777a211 Mon Sep 17 00:00:00 2001 From: csubira Date: Wed, 25 Apr 2018 18:18:26 +0200 Subject: [PATCH 23/27] Rename avatar img --- docs/img/{avatar.gif => avatar_do.gif} | Bin docs/reference/02-authentication.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/img/{avatar.gif => avatar_do.gif} (100%) diff --git a/docs/img/avatar.gif b/docs/img/avatar_do.gif similarity index 100% rename from docs/img/avatar.gif rename to docs/img/avatar_do.gif diff --git a/docs/reference/02-authentication.md b/docs/reference/02-authentication.md index 6f3cb49..ceb5716 100644 --- a/docs/reference/02-authentication.md +++ b/docs/reference/02-authentication.md @@ -2,7 +2,7 @@ Data Observatory, like any other [CARTO platform's component]({{site.fundamental_docs}}/components/), requires using an API Key. From your CARTO dashboard, click _[Your API keys](https://carto.com/login)_ from the avatar drop-down menu to view your uniquely generated API Key for managing data with CARTO Engine. -![Your API Keys](../img/avatar.gif) +![Your API Keys](../img/avatar_do.gif) Learn more about the [basics of authorization]({{site.fundamental_docs}}/authorization/), or dig into the details of [Auth API]({{site.authapi_docs}}/), if you want to know more about this part of CARTO platform. From 2e365b1eeeb5a5dde78a10aeaa732fc22aed1112 Mon Sep 17 00:00:00 2001 From: Mario de Frutos Date: Tue, 15 May 2018 12:36:48 +0200 Subject: [PATCH 24/27] Py3 for zip_longest --- src/python/test/autotest.py | 146 ++++++++++++++++++------------------ 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/src/python/test/autotest.py b/src/python/test/autotest.py index b779488..e138400 100644 --- a/src/python/test/autotest.py +++ b/src/python/test/autotest.py @@ -1,7 +1,7 @@ from nose.tools import assert_equal, assert_is_not_none from nose_parameterized import parameterized -from itertools import izip_longest +from itertools import zip_longest from util import query from collections import OrderedDict import json @@ -11,78 +11,78 @@ def grouper(iterable, n, fillvalue=None): "Collect data into fixed-length chunks or blocks" # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx args = [iter(iterable)] * n - return izip_longest(fillvalue=fillvalue, *args) + return zip_longest(fillvalue=fillvalue, *args) USE_SCHEMA = True SKIP_COLUMNS = set([ - u'mx.inegi_columns.INDI18', - u'mx.inegi_columns.ECO40', - u'mx.inegi_columns.POB34', - u'mx.inegi_columns.POB63', - u'mx.inegi_columns.INDI7', - u'mx.inegi_columns.EDU28', - u'mx.inegi_columns.SCONY10', - u'mx.inegi_columns.EDU31', - u'mx.inegi_columns.POB7', - u'mx.inegi_columns.VIV30', - u'mx.inegi_columns.INDI12', - u'mx.inegi_columns.EDU13', - u'mx.inegi_columns.ECO43', - u'mx.inegi_columns.VIV9', - u'mx.inegi_columns.HOGAR25', - u'mx.inegi_columns.POB32', - u'mx.inegi_columns.ECO7', - u'mx.inegi_columns.INDI19', - u'mx.inegi_columns.INDI16', - u'mx.inegi_columns.POB65', - u'mx.inegi_columns.INDI3', - u'mx.inegi_columns.INDI9', - u'mx.inegi_columns.POB36', - u'mx.inegi_columns.POB33', - u'mx.inegi_columns.POB58', - u'mx.inegi_columns.DISC4', - u'mx.inegi_columns.VIV41', - u'mx.inegi_columns.VIV40', - u'mx.inegi_columns.VIV17', - u'mx.inegi_columns.VIV25', - u'mx.inegi_columns.EDU10', - u'whosonfirst.wof_disputed_name', - u'us.census.tiger.fullname', - u'whosonfirst.wof_marinearea_name', - u'us.census.tiger.mtfcc', - u'whosonfirst.wof_county_name', - u'whosonfirst.wof_region_name', - u'fr.insee.P12_RP_CHOS', - u'fr.insee.P12_RP_HABFOR', - u'fr.insee.P12_RP_EAUCH', - u'fr.insee.P12_RP_BDWC', - u'fr.insee.P12_RP_MIDUR', - u'fr.insee.P12_RP_CLIM', - u'fr.insee.P12_RP_MIBOIS', - u'fr.insee.P12_RP_CASE', - u'fr.insee.P12_RP_TTEGOU', - u'fr.insee.P12_RP_ELEC', - u'fr.insee.P12_ACTOCC15P_ILT45D', - u'fr.insee.P12_RP_CHOS', - u'fr.insee.P12_RP_HABFOR', - u'fr.insee.P12_RP_EAUCH', - u'fr.insee.P12_RP_BDWC', - u'fr.insee.P12_RP_MIDUR', - u'fr.insee.P12_RP_CLIM', - u'fr.insee.P12_RP_MIBOIS', - u'fr.insee.P12_RP_CASE', - u'fr.insee.P12_RP_TTEGOU', - u'fr.insee.P12_RP_ELEC', - u'fr.insee.P12_ACTOCC15P_ILT45D', - u'uk.ons.LC3202WA0007', - u'uk.ons.LC3202WA0010', - u'uk.ons.LC3202WA0004', - u'uk.ons.LC3204WA0004', - u'uk.ons.LC3204WA0007', - u'uk.ons.LC3204WA0010', - u'br.geo.subdistritos_name' + 'mx.inegi_columns.INDI18', + 'mx.inegi_columns.ECO40', + 'mx.inegi_columns.POB34', + 'mx.inegi_columns.POB63', + 'mx.inegi_columns.INDI7', + 'mx.inegi_columns.EDU28', + 'mx.inegi_columns.SCONY10', + 'mx.inegi_columns.EDU31', + 'mx.inegi_columns.POB7', + 'mx.inegi_columns.VIV30', + 'mx.inegi_columns.INDI12', + 'mx.inegi_columns.EDU13', + 'mx.inegi_columns.ECO43', + 'mx.inegi_columns.VIV9', + 'mx.inegi_columns.HOGAR25', + 'mx.inegi_columns.POB32', + 'mx.inegi_columns.ECO7', + 'mx.inegi_columns.INDI19', + 'mx.inegi_columns.INDI16', + 'mx.inegi_columns.POB65', + 'mx.inegi_columns.INDI3', + 'mx.inegi_columns.INDI9', + 'mx.inegi_columns.POB36', + 'mx.inegi_columns.POB33', + 'mx.inegi_columns.POB58', + 'mx.inegi_columns.DISC4', + 'mx.inegi_columns.VIV41', + 'mx.inegi_columns.VIV40', + 'mx.inegi_columns.VIV17', + 'mx.inegi_columns.VIV25', + 'mx.inegi_columns.EDU10', + 'whosonfirst.wof_disputed_name', + 'us.census.tiger.fullname', + 'whosonfirst.wof_marinearea_name', + 'us.census.tiger.mtfcc', + 'whosonfirst.wof_county_name', + 'whosonfirst.wof_region_name', + 'fr.insee.P12_RP_CHOS', + 'fr.insee.P12_RP_HABFOR', + 'fr.insee.P12_RP_EAUCH', + 'fr.insee.P12_RP_BDWC', + 'fr.insee.P12_RP_MIDUR', + 'fr.insee.P12_RP_CLIM', + 'fr.insee.P12_RP_MIBOIS', + 'fr.insee.P12_RP_CASE', + 'fr.insee.P12_RP_TTEGOU', + 'fr.insee.P12_RP_ELEC', + 'fr.insee.P12_ACTOCC15P_ILT45D', + 'fr.insee.P12_RP_CHOS', + 'fr.insee.P12_RP_HABFOR', + 'fr.insee.P12_RP_EAUCH', + 'fr.insee.P12_RP_BDWC', + 'fr.insee.P12_RP_MIDUR', + 'fr.insee.P12_RP_CLIM', + 'fr.insee.P12_RP_MIBOIS', + 'fr.insee.P12_RP_CASE', + 'fr.insee.P12_RP_TTEGOU', + 'fr.insee.P12_RP_ELEC', + 'fr.insee.P12_ACTOCC15P_ILT45D', + 'uk.ons.LC3202WA0007', + 'uk.ons.LC3202WA0010', + 'uk.ons.LC3202WA0004', + 'uk.ons.LC3204WA0004', + 'uk.ons.LC3204WA0007', + 'uk.ons.LC3204WA0010', + 'br.geo.subdistritos_name' ]) MEASURE_COLUMNS = query(''' @@ -192,7 +192,7 @@ def grouped_measure_columns(filtered_columns): else: groupbypoint[point] = [numer_ids] - for point, numer_ids in groupbypoint.iteritems(): + for point, numer_ids in groupbypoint.items(): for colgroup in grouper(numer_ids, 50): yield point, [c for c in colgroup if c] @@ -215,7 +215,7 @@ def _test_measures(numer_ids, geom): 'normalization': 'predenominated' }) - params = query(u''' + params = query(''' SELECT {schema}OBS_GetMeta({geom}, '{in_params}') '''.format(schema='cdb_observatory.' if USE_SCHEMA else '', geom=geom, @@ -223,15 +223,15 @@ def _test_measures(numer_ids, geom): # We can get duplicate IDs from multi-denominators, so for now we # compress those measures into a single - params = OrderedDict([(p['id'], p) for p in params]).values() + params = list(OrderedDict([(p['id'], p) for p in params]).values()) assert_equal(len(params), len(in_params), 'Inconsistent out and in params for {}'.format(in_params)) - q = u''' + q = ''' SELECT * FROM {schema}OBS_GetData(ARRAY[({geom}, 1)::geomval], '{params}') '''.format(schema='cdb_observatory.' if USE_SCHEMA else '', geom=geom, - params=json.dumps(params).replace(u"'", "''")) + params=json.dumps(params).replace("'", "''")) resp = query(q).fetchone() assert_is_not_none(resp, 'NULL returned for {}'.format(in_params)) rawvals = resp[1] From ef51209ee12fb1352b8f7f8e029efbd68a95ef80 Mon Sep 17 00:00:00 2001 From: csubira Date: Mon, 28 May 2018 17:42:39 +0200 Subject: [PATCH 25/27] Remove broken links issue 348 devcenter --- docs/guides/02-accessing-the-data-observatory.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/guides/02-accessing-the-data-observatory.md b/docs/guides/02-accessing-the-data-observatory.md index a28e4dc..96825de 100644 --- a/docs/guides/02-accessing-the-data-observatory.md +++ b/docs/guides/02-accessing-the-data-observatory.md @@ -101,7 +101,7 @@ The following usage notes are recommended when using the Data Observatory functi **Exception:** [Discovery Functions]({{ site.dataobservatory_docs }}/guides/overview/#discovery-functions) are the exception. You can use SELECT as these functions are not actually retrieving data, they are retrieving ids that you can use for other functions. -- You can reduce storage space for unneeded geometries and optimize query optimizations by applying the PostGIS [`ST_Simplify`](http://www.postgis.org/docs/ST_Simplify.html) function. For example, you can simplify the `the_geom` for a large table of polygons and reduce the size of them for quicker rendering. For other tips, see the [most commonly used PostGIS functions]({{ site.baseurl }}/faqs/postgresql-and-postgis/#what-are-the-most-common-postgis-functions) that you can apply with CARTO +- You can reduce storage space for unneeded geometries and optimize query optimizations by applying the PostGIS [`ST_Simplify`](http://www.postgis.org/docs/ST_Simplify.html) function. For example, you can simplify the `the_geom` for a large table of polygons and reduce the size of them for quicker rendering. For other tips, see the [most commonly used PostGIS functions](https://carto.com/docs/faqs/postgresql-and-postgis/#what-are-the-most-common-postgis-functions) that you can apply with CARTO - Only point or polygon geometries are supported for OBS functions. If you attempt to apply Measures or Boundary results to line geometries, an error appears @@ -118,4 +118,4 @@ The following usage notes are recommended when using the Data Observatory functi ### Examples -View our [CARTO Blogs](https://carto.com/blog/categories/data-observatory/) for examples that highlight the benefits of using the Data Observatory. +View our [CARTO Blogs](https://carto.com/blog/categories/product/) for examples that highlight the benefits of using the Data Observatory. From 78799a59a44e94361046bf8c5d498c9d89ab8615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Ignacio=20S=C3=A1nchez=20Lara?= Date: Mon, 13 Aug 2018 16:45:19 +0200 Subject: [PATCH 26/27] carto-package.json --- carto-package.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 carto-package.json diff --git a/carto-package.json b/carto-package.json new file mode 100644 index 0000000..6eb2516 --- /dev/null +++ b/carto-package.json @@ -0,0 +1,9 @@ +{ + "name": "observatory-server-extension", + "current_version": { + "requires": { + "postgresql": "^10.0.0", + "postgis": "^2.4" + } + } +} From 9ed3c4554721a33d06928ada8b673e6d71b5901e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Guirao=20Rodr=C3=ADguez?= Date: Fri, 17 Aug 2018 11:07:25 +0200 Subject: [PATCH 27/27] Changes in PostGIS version to use 4 numbers --- carto-package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/carto-package.json b/carto-package.json index 6eb2516..8b48ec0 100644 --- a/carto-package.json +++ b/carto-package.json @@ -3,7 +3,7 @@ "current_version": { "requires": { "postgresql": "^10.0.0", - "postgis": "^2.4" + "postgis": "^2.4.0.0" } } }

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