Neighborhood Patterns
Legacy Product
This page references SafeGraph Patterns, Weekly Patterns, and/or Neighborhood Patterns, legacy products that will no longer be available at the start of 2023. If you are interested in foot traffic data, please contact us and we can refer you to a mobility data partner.
SafeGraph’s Neighborhood Patterns dataset contains footfall data aggregated by census block group (CBG) in the U.S. and dissemination area (DA) in Canada. Learn which day of the week a CBG or DA is busiest, what time of the day a CBG or DA is busiest, where devices that stop during breakfast, lunch, and dinner travel from, and how weekday and weekend demographics compare. This data is ideal for site-selection use cases and other use cases where you need to understand how busy an area is, when it is busy and the demographics of the visitors.
Contents:
Neighborhood Patterns Schema
Column Name | Description | Type | Example |
---|---|---|---|
area | The designation of the area being described. Canadian DAs have a "CA:" prefix to differentiate from US CBGs. | String | 131000000000 |
area_type | The type of area specified in the area column. Canadian DAs will have 'Census Block Group' here. | String | Census Block Group |
origin_area_type | The type of area used in the device_home_areas and device_daytime_areas columns. Canadian DAs have 'Census Block Group' here but both CBGs and DAs will appear in these columns. | String | Census Block Group |
date_range_start | Start time for measurement period in ISO 8601 format of YYYY-MM-DDTHH:mm:SS±hh:mm (local time with offset from GMT). | String | 2020-03-01T00:00:00-06:00 |
date_range_end | End time for measurement period in ISO 8601 format of YYYY-MM-DDTHH:mm:SS±hh:mm (local time with offset from GMT). The end time will be the last day of the month at 12 a.m. local time. | String | 2020-04-01T00:00:00-06:00 |
day_counts | The frequency of each day of the week that occurred in the date range in local time. | JSON {String:Int} | {"Monday": 4, "Tuesday": 5, "Wednesday": 4, "Thursday": 4, "Friday": 4, "Saturday": 4, "Sunday": 4 } |
raw_stop_counts | Number of stops by devices in our panel to this area during the date range. A stop must have a minimum duration of 1 minute to be included. The count includes stops by devices whose home area is the same as this area. | Integer | 428840 |
raw_device_counts | Number of unique devices in our panel that stopped in this area during the date range. This includes devices whose home area is the same as this area. | Integer | 109161 |
stops_by_day | The number of stops in this area each day (local time) over the covered time period. | JSON [Integer] | [33, 22, 33, 22, 33, 22, 22, 21, 23, 33, 22, 11, 44, 22, 22, 44, 11, 33, 44, 44, 44, 33, 34, 44, 22, 33, 44, 44, 34, 43, 43] |
stops_by_each_hour | The number of stops in this area that began each hour (local time) over the covered time period. | JSON [Integer] | [33, 22, 33, 22, 33, 22, 22, 21, 23, 33, 22, 11, 44, 22, 22, 44, 11, 33, 44, 44, 44, 33, 34, 44, 22, 33, 44, 44, 34, 43, 43....] |
🛡 device_home_areas | The number of devices that stopped in this area by home origin area. The area itself is included as a potential key. See Determining Home Location and Privacy is applied to this column. | JSON {String:Int} | {"360610112021": 603, "460610112021": 243, "560610112021": 106, "660610112021": 87, "CA:24110035": 51} |
🛡 weekday_device_home_areas | This column is the same as device_home_areas except it only includes those devices that stopped in the area Monday through Friday local time. | JSON {String:Int} | {"130890212162":91,"131210101101":22,"CA:24110035":20} |
🛡 weekend_device_home_areas | This column is the same as device_home_areas except it only includes those visitors that visited on Saturday or Sunday local time. | JSON {String:Int} | {"130890212162":91,"131210101101":22,"CA:24110035":20} |
🛡 breakfast_device_home_areas | This column is the same as the device_home_areas except it only includes those devices that stopped in the area between 6 am and 10:59 am local time. | JSON {String:Int} | {"130890212162":91,"131210101101":22,"CA:24110035":20} |
🛡 lunch_device_home_areas | This column is the same as device_home_areas except it only includes those devices that stopped in the area between 11 am and 2:59 pm local time. | JSON {String:Int} | {"130890212162":91,"131210101101":22,"CA:24110035":80} |
🛡 afternoon_tea_device_home_areas | This column is the same as device_home_areas except it only includes those devices that stopped in the area between 3 pm and 4:59 pm local time. | JSON {String:Int} | {"130890212162":91,"131210101101":82,"CA:24110035":25} |
🛡 dinner_device_home_areas | This column is the same as device_home_areas except it only includes those devices that stopped in the area between 5 pm and 8:59 pm local time. | JSON {String:Int} | {"130890212162":91,"131210101101":82,"CA:24110035":25} |
🛡 nightlife_device_home_areas | This column is the same as device_home_areas except it only includes those devices that stopped in the area between 9 pm and midnight local time. | JSON {String:Int} | {"130890212162":91,"131210101101":82,"CA:24110035":25} |
🛡 work_hours_device_home_areas | This column is the same as device_home_areas except it only includes those devices that stopped in the area between 7:30 am and 5:30 pm Monday through Friday local time. | JSON {String:Int} | {"130890212162":91,"131210101101":22,"CA:24110035":80} |
🛡 work_behavior_device_home_areas | This column is the same as work_hours_device_home_areas but only includes devices that dwelled for at least 6 hours and excludes devices whose visit is in the same gh7 as their home location. | JSON {String:Int} | {"130890212162":42,"131210101101":11,"CA:24110035":68} |
🛡 device_daytime_areas | The number of devices that stopped in this area by that device's primary daytime origin area. See Determining Home Location and Privacy is applied to this column | JSON {String:Int} | {"131210101101":987,"131210119002":450,"CA:24110035":447, "130890212163":396,"131210116211":300,"130670302292":282, "130590004023":278,"131350503103":261, ... , ... , "131350502131":50} |
distance_from_home | Median distance from home travelled by devices (of devices whose home we have identified) in meters. | Integer | 29385 |
distance_from_primary_daytime_location | Median distance, in meters, traveled to the stopping point(s) within the area by devices from their device_daytime_area (of devices whose device_daytime_area we have identified). We determine device_daytime_area within 100 meters and find the median distance per device (if more than one stop in the area for a device) to calculate the median for all devices. | Integer | 29385 |
median_dwell | Median dwell time in minutes. Note that we are only including stops that have a dwell of at least 1 minute. | Double | 5 |
top_same_day_brand | Brands that the devices that stopped in this area visited in the same day as the stop in this area. Limited to top 20. The value shown for each brand is a percentage representing: devices going to both the brand and the area / total devices stopping in the area. | JSON {String: Integer} | {"mcdonalds": 7,"amc": 5,"target": 3} |
top_same_month_brand | Brands that the devices that stopped in this area visited in the same month as the stop in this area. Limited to top 20. The value shown for each brand is a percentage representing: devices going to both the brand and the area / total devices stopping in the area. | JSON {String: Integer} | {"mcdonalds": 7,"amc": 5,"target": 3} |
popularity_by_each_hour | The number of stops in this area each hour (local time) over the covered time period, regardless of when the stop started. This is a complementary column to stops_by_each_hour . | Array | [33, 22, 33, 22, 33, 22, 22, 21, 23, 33, 22, 11, 44, 22, 22, 44, 11, 33, 44, 44, 44, 33, 34, 44, 22, 33, 44, 44, 34, 43, 43....] |
popularity_by_hour_monday | A 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Monday in the time range. | Array | [9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628] |
popularity_by_hour_tuesday | A 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Tuesday in the time range. | Array | [9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628] |
popularity_by_hour_wednesday | A 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Wednesday in the time range. | Array | [9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628] |
popularity_by_hour_thursday | A 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Thursday in the time range. | Array | [9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628] |
popularity_by_hour_friday | A 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Friday in the time range. | Array | [9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628] |
popularity_by_hour_saturday | A 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Saturday in the time range. | Array | [9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628] |
popularity_by_hour_sunday | A 24-element array with one value for each hour of the day (hour 0 to hour 23) representing the number of stops that occurred for that hour on any Sunday in the time range. | Array | [9877,8233,7520,7512,7992,11259,19885,29153,31278, 34235,36753,41983,48438,48909,47167,48258,48485, 47134,43544,37033,29193,22308,16456,12628] |
🛡 device_type | The number of devices that stopped in the area that are using Android vs. iOS. | JSON {String: Integer} | {"android": 6, "ios": 8} |
iso_country_code | The 2 letter ISO 3166-1 alpha-2 country code of the area. | String | CA |
region | When iso_country_code == US , then this is the USA state or territory. When iso_country_code == CA , then this is the Canadian Province or territory. | String | MD |
y | The year of the measurement period (included for easier filtering) | Integer | 2021 |
m | The month of the measurement period (included for easier filtering) | Integer | 6 |
🛡 We do not report data unless at least 2 visitors are observed from that group. If there are between 2 and 4 visitors this is reported as 4. See more on privacy here.
Panel Overview Data
Along with the Neighborhood Patterns file, we also deliver Panel Overview Data (see below) to help you better understand the context of the data appearing in Neighborhood Patterns. In particular, the size of the panel of devices changes from month to month, so understanding the make-up of the panel helps to normalize stop counts over time.
Home Location Distributions by State/Census Block Group
[home_panel_summary.csv]
Column Name | Description | Type | Example |
---|---|---|---|
year | Calendar Year | Integer | 2018 |
month | Calendar month starting from 1 as January | Integer | 1 |
region | Lowercase abbreviation of U.S. state or territory, or the Canadian province or territory | String | ny |
iso_country_code | The 2 letter ISO 3166-1 alpha-2 country code. | String | US |
census_block_group | FIPS code for the U.S. Census block group or PR-CD-DA code for the Canadian Dissemination Area (prefixed with "CA:") | String | 530330080012 |
number_devices_residing | Number of distinct devices observed with a primary nighttime location in the specified census block group or dissemination area. | Integer | 54481 |
number_devices_primary_daytime | Number of distinct devices observed with a primary daytime location in the specified census block group or dissemination area. | Integer | 54482 |
Key Concepts
Generating Neighborhood Patterns
Neighborhood Patterns uses the same underlying mobile device data as Monthly and Weekly Patterns, but is aggregated to census block groups and dissemination areas rather than POIs.
The data was generated by:
- Creating clusters of pings from a panel of anonymous mobile devices using DBSCAN.
- Filtering out any cluster that had a duration of less than 1 minute. (Note that this is different than a "visit" in Monthly and Weekly Patterns, which has a threshold of 4 minutes).
- Counting each resulting cluster as a "stop."
- Aggregating the stops by census block group and dissemination areas.
The data is released monthly (by the 7th) with each monthly release reflecting what occurred during the prior calendar month.
Privacy
To preserve privacy, we apply differential privacy techniques to the following columns: device_home_areas
, work_hours_device_home_areas
, work_behavior_device_home_areas
, weekday_device_home_areas
, weekend_device_home_areas
, breakfast_device_home_areas
, lunch_device_home_areas
, afternoon_tea_device_home_areas
, dinner_device_home_areas
, nightlife_device_home_areas
, device_daytime_areas
, and device_type
.
We have added Laplacian noise to the values in these columns. After adding noise, only attributes (e.g., a census block group) with at least two devices are included in the data. For these columns, we do not report data unless at least 2 visitors are observed from that group. If there are between 2 and 4 visitors, this is reported as 4.
Determining Home Location
Neighborhood Patterns uses the same logic as the Patterns product to determine home location, for the following columns and files:
device_home_areas
- All of the
*_device_home_areas
columns distance_from_home
home_panel_summary.csv
Known Data Issues or Artifacts
See the Known Issues or Data Artifacts in Developer Tools for more information.
Updated over 1 year ago