Simulation & Visualization Of Neighborhood Walkability Index

shulin zhang
Data Mining the City
4 min readDec 5, 2018

Authors: Nengjing Deng (nd2559) & Shulin Zhang (sz2586)

Simulation & Visualization Of Neighborhood Walkability Index

An Algorithm As Planners’ Toolkits To Assess And Improve Walkability For Communities

Thesis:

The results of the model will give planners with a walkability measurement standard with a walking speed index that is emerged and revised based on past literature, particularly the theory of Pedestrian’s Desire to Leave a Space by Franek (2013) and a map of walkability in the area described with walking radius. The walking speed index was later calculated to be street weight, which is the constructed walkability score in this model. With such results, planners will be able to understand and analyze the neighborhood walkability, and moreover more confidently and accurately provide improvements for the area.

Simulation & Logic:

Assumptions:

  • Routing is determined by Dijkstra Algorithm.
Dijkstra Algorithm Application 1
Dijkstra Algorithm Application 2
  • Walking Speed developed by the theory of Pedestrian’s Desire to Leave a Space, which indicates the stickiness of the area.
  • Higher stickiness is critical to achieving walkable and prosperous communities.

Encoding the Logic

  • Study Area Selection:
Study Area
  • Street Network Visualization & Default Walking Area:
Default Walking Area from the Center of Study Area
  • Walkability Index

Pedestrian Walking Speed Index =

0.25*Traffic Intensity Index + 0.15*Road Noise Index — 0.46*Open Space Index — 0.72*Greenery Index + 1.27

  • Encode the existing data as factors impacting walking speed
Traffic Intensity & Greenery
Noise Level & Open Space
  • The stickiness of the study area:

Integrate all factors & build walking speed index by the theory of pedestrian’s desire to leave the space.

The stickiness of Study Area

Outputs:

Actual Walking Area from the Center of Study Area
Walking Area Starting from Any Point in Study Area

Conclusion:

1. The model could visualize the walking index in an area In other words and tell the story of the stickiness of the neighbourhood. This further entails that which part of the neighbourhood has more pleasant walking environment, and which does not. Planners can use the result to better layout environmental factors to build a livelier and safer neighbourhood that is attractive for walkers.

2. Flexibility of the model: indicators and street patterns can be customized for specific neighborhoods for any topic of interest.

Learning:

  • Comparing & studying routing algorithms.
  • Coding & visualize existing statistics form reality into simulated street network built in Processing.

Challenges & Limitations:

  • Irregular shapes of roads and communities.
  • Additional influential factors could be incorporated.

Code:

# Dijkstra Algorithmglobal index, optimal, last, minimum, mini
index = [0 for i in range((m+1)*(n+1)+1)]
optimal = [9999 for i in range((m+1)*(n+1)+1)]
last = [0 for i in range((m+1)*(n+1)+1)]
index[0]=1
optimal[0]=0 #i=0 represents starting point
fill(255,255,0)
for k in range((m+1)*(n+1)+1):
for i in range((m+1)*(n+1)+1):
if index[i]==1:
for j in range(1,(m+1)*(n+1)):
if index[j]==0:
if optimal[i]+weight[i][j]<optimal[j]:
optimal[j]=optimal[i]+weight[i][j]
last[j]=i
minimum=9999
mini=0
for i in range((m+1)*(n+1)+1):
if index[i]==0 and optimal[i]<minimum:
minimum=optimal[i]
mini=i
index[mini]=1
for k in range((m+1)*(n+1)+1):
print(k,optimal[k])
for k in range((m+1)*(n+1)):
if k+4<=(m+1)*(n+1):
if optimal[k]<=300 and optimal[k+4]<=300:
rect(((k-1) % 4)*200+5-5,((k-1) / 4)*60+5,10,60)
elif optimal[k]<=300:
rect(((k-1) % 4)*200+5-5,((k-1) / 4)*60+5,10,(300-optimal[k])*60/weight[k][k+4])
elif optimal[k+4]<=300:
rect(((k+4-1) % 4)*200+5-5,((k+4-1) / 4)*60+5-(300-optimal[k+4])*60/weight[k][k+4],10,(300-optimal[k+4])*60/weight[k][k+4])
if k % 4>0:
if optimal[k]<=300 and optimal[k+1]<=300:
rect(((k-1) % 4)*200+5,((k-1) / 4)*60+5-5,200,10)
elif optimal[k]<=300 :
rect(((k-1) % 4)*200+5,((k-1) / 4)*60+5-5,(300-optimal[k])*200/weight[k][k+1],10)
elif optimal[k+1]<=300:
rect(((k+1-1) % 4)*200+5-(300-optimal[k+1])*200/weight[k][k+1],((k+1-1) / 4)*60+5-5,(300-optimal[k+1])*200/weight[k][k+1],10)

--

--