1import{S as va,i as wa,s as ya,y as ga,a as l,k as s,q as o,z as ba,c as h,l as r,m as d,r as n,h as i,n as p,A as _a,b as fa,C as e,D as Sa,g as Ea,d as Ca,B as ka}from"../chunks/index.5885d984.js";import{H as za}from"../chunks/global.4dde8b47.js";const Aa=!0,Ta=Object.freeze(Object.defineProperty({__proto__:null,prerender:Aa},Symbol.toStringTag,{value:"Module"}));function Pa(ma){let y,ie,v,t,q,le,he,M,ce,ue,H,pe,fe,O,me,ve,x,we,ye,B,ge,be,W,_e,Se,c,Ee,S,Ce,ke,E,ze,Ae,C,Pe,Ie,k,De,Te,z,je,Ue,qe,m,Me,A,He,Oe,P,xe,Be,I,We,$e,Ne,$,Ge,Ve,N,Fe,Je,G,Le,Ke,b,Qe,D,Re,Xe,Ye,_,Ze,T,et,tt,at,V,ot,nt,F,it,st,J,rt,dt,L,lt,ht,K,ct,ut,Q,pt,ft,R,mt,vt,X,wt,yt,Y,gt,bt,Z,_t,St,ee,Et,Ct,te,kt,zt,ae,At,Pt,j,It,U,Dt,Tt,oe,jt,ne,se;return y=new za({}),{c(){ga(y.$$.fragment),ie=l(),v=s("main"),t=s("div"),q=s("h1"),le=o("Methodology"),he=l(),M=s("p"),ce=o("The recovery metrics on this website are based on a sample of location-based mobility data derived from cell phones."),ue=l(),H=s("p"),pe=o("The recovery metrics on the charts and maps are computed by counting the number of unique visitors in a city's downtown area in the specified time period (standardized by region â see âStandardizationâ section below), and then dividing it by the standardized number of unique visitors during the equivalent time period in 2019."),fe=l(),O=s("p"),me=o("A recovery metric greater than 100% means that for the selected inputs, the mobile device activity increased relative to the comparison period. A value less than 100% means the opposite, that the city's downtown has not recovered to pre-COVID activity levels."),ve=l(),x=s("h2"),we=o("Downtown Geography Selection"),ye=l(),B=s("p"),ge=o('When we launched this project, the geography of what counts as "downtown" involved selecting zip codes (in the US) and Dissemination Areas (in Canada) with the highest job density.'),be=l(),W=s("p"),_e=o("In our October 2023 update, we've improved these definitions to not rely as heavily on administrative or census boundaries, which often do not reflect the actual geographies of citiesâ downtowns. To create these new definitions, we used jobs data to identify concentrations of jobs in individual city blocks and then drew a polygon around these clusters to represent downtown. (For more details, see below)."),Se=l(),c=s("p"),Ee=o("Specifically, to create new geographic definitions of âdowntownâ, we used jobs data from 2019 ("),S=s("a"),Ce=o("in the U.S."),ke=o(") and 2016 ("),E=s("a"),ze=o("in Canada"),Ae=o("). We generated 1 randomly scattered point for every 100 jobs in each block (in the U.S.) or Dissemination Area (in Canada). We then applied the "),C=s("a"),Pe=o("HDBSCAN"),Ie=o(" algorithm to each city individually to create clusters of points within the city, discarding the points designated as ânoiseâ and tuning the parameters to select a cluster representing each cityâs downtown. For this step, we validated these geographies using Google Maps, citiesâ own definitions of their downtowns, our personal knowledge of certain cities, and Brookingsâ 2023 "),k=s("a"),De=o("definitions of downtowns"),Te=o(" across the U.S. Next, we created a buffer around each point in the cluster and created a polygon from the spatial union of these buffers. Lastly, we formed a "),z=s("a"),je=o("concave hull"),Ue=o(" around this polygon to create the final downtown area."),qe=l(),m=s("p"),Me=o("Click "),A=s("a"),He=o("here"),Oe=o(" to download a geojson file of the new downtown boundaries. Click "),P=s("a"),xe=o("here"),Be=o(" to download a geojson file of our original zip-code defined downtowns. Click "),I=s("a"),We=o("here"),$e=o(" to view a pdf of screenshots of the boundaries for each."),Ne=l(),$=s("h2"),Ge=o("Standardization"),Ve=l(),N=s("p"),Fe=o("Because fluctuations in unique device counts over time may reflect changes in sample sizes from data providers rather than actual changes in activity, we standardized the downtown counts using larger geographies. In our previous method, this was the state (in the U.S.) or province (in Canada). Our updated method instead standardizes the data using core based statistical areas (in the U.S.) and census metropolitan areas (in Canada). Standardization using these smaller areas results in more accurate recovery rates, since a cityâs downtown is not affected by the activity patterns of other cities in the same state."),Je=l(),G=s("h2"),Le=o("Data Providers & Imputation"),Ke=l(),b=s("p"),Qe=o("Our mobile device data comes from "),D=s("a"),Re=o("Spectus"),Xe=o(". They source data from multiple providers. One of these providers includes data for the entire study period; however, its sample size declines significantly during this period. A second provider has a significantly larger sample size, but does not include Canadian data before May 2021. We decided to use data from this second provider and impute pre-May 2021 data for Canada, relying on the assumption that differences between the two providers are similar in the US and in Canada."),Ye=l(),_=s("p"),Ze=o("The imputation model we employed is called Self-Attention-based Imputation for Time Series (SAITS). The "),T=s("a"),et=o("SAITS model"),tt=o(", which employs self-attention techniques, identifies relationships within time series data and imputes missing information based on observed trends. The model converts randomly selected observed values into missing values, predicts the missing values, and compares the predicted and original values to evaluate the accuracy of the model."),at=l(),V=s("h2"),ot=o("Measuring recovery rates"),nt=l(),F=s("p"),it=o("Because of the data imputation process, we calculated recovery rates slightly differently for the U.S. and Canada."),st=l(),J=s("p"),rt=o("In the US, we measured recovery rates for each city by:"),dt=l(),L=s("p"),lt=o("1
1) Calculating the sum of daily unique devices both downtown and in the core based statistical area for all of the days in the study period (March through mid-June) in 2019 as well as 2023."),ht=l(),K=s("p"),ct=o("2) Standardizing the counts for each year by dividing the summed device count in the downtown area by the summed device count in the core based statistical area."),ut=l(),Q=s("p"),pt=o("3) Dividing the standardized count in the 2023 study period by the total count in the 2019 study period for each city."),ft=l(),R=s("p"),mt=o("In Canada, we measured recovery rates for each city by:"),vt=l(),X=s("p"),wt=o("1) Calculating the weekly sum of daily unique devices both downtown and in the census metropolitan area."),yt=l(),Y=s("p"),gt=o("2) Standardizing the weekly counts by dividing the weekly summed device count in the downtown area by the weekly summed device count in the census metropolitan area."),bt=l(),Z=s("p"),_t=o("3) Imputing pre-5/17/21 data using these standardized weekly counts (see Data Providers & Imputation section)."),St=l(),ee=s("p"),Et=o("4) Determining weekly recovery rates by dividing the standardized weekly counts in 2023 by the (imputed) standardized weekly counts in the same week in 2019."),Ct=l(),te=s("p"),kt=o("5) Calculating the average weekly recovery rate by city."),zt=l(),ae=s("h2"),At=o("Website:"),Pt=l(),j=s("p"),It=o("This website was built using Svelte with a bit of D3 for the charts. Code is on "),U=s("a"),Dt=o("GitHub"),Tt=l(),oe=s("div"),jt=l(),ne=s("div"),this.h()},l(u){ba(y.$$.fragment,u),ie=h(u),v=r(u,"MAIN",{});var w=d(v);t=r(w,"DIV",{class:!0});var a=d(t);q=r(a,"H1",{});var qt=d(q);le=n(qt,"Methodology"),qt.forEach(i),he=h(a),M=r(a,"P",{});var Mt=d(M);ce=n(Mt,"The recovery metrics on this website are based on a sample of location-based mobility data derived from cell phones."),Mt.forEach(i),ue=h(a),H=r(a,"P",{});var Ht=d(H);pe=n(Ht,"The recovery metrics on the charts and maps are computed by counting the number of unique visitors in a city's downtown area in the specified time period (standardized by region â see âStandardizationâ section below), and then dividing it by the standardized number of unique visitors during the equivalent time period in 2019."),Ht.forEach(i),fe=h(a),O=r(a,"P",{});var Ot=d(O);me=n(Ot,"A recovery metric greater than 100% means that for the selected inputs, the mobile device activity increased relative to the comparison period. A value less than 100% means the opposite, that the city's downtown has not recovered to pre-COVID activity levels."),Ot.forEach(i),ve=h(a),x=r(a,"H2",{});var xt=d(x);we=n(xt,"Downtown Geography Selection"),xt.forEach(i),ye=h(a),B=r(a,"P",{});var Bt=d(B);ge=n(Bt,'When we launched this project, the geography of what counts as "downtown" involved selecting zip codes (in the US) and Dissemination Areas (in Canada) with the highest job density.'),Bt.forEach(i),be=h(a),W=r(a,"P",{});var Wt=d(W);_e=n(Wt,"In our October 2023 update, we've improved these definitions to not rely as heavily on administrative or census boundaries, which often do not reflect the actual geographies of citiesâ downtowns. To create these new definitions, we used jobs data to identify concentrations of jobs in individual city blocks and then drew a polygon around these clusters to represent downtown. (For more details, see below)."),Wt.forEach(i),Se=h(a),c=r(a,"P",{});var f=d(c);Ee=n(f,"Specifically, to create new geographic definitions of âdowntownâ, we used jobs data from 2019 ("),S=r(f,"A",{href:!0});var $t=d(S);Ce=n($t,"in the U.S."),$t.forEach(i),ke=n(f,") and 2016 ("),E=r(f,"A",{href:!0});var Nt=d(E);ze=n(Nt,"in Canada"),Nt.forEach(i),Ae=n(f,"). We generated 1 randomly scattered point for every 100 jobs in each block (in the U.S.) or Dissemination Area (in Canada). We then applied the "),C=r(f,"A",{href:!0});var Gt=d(C);Pe=n(Gt,"HDBSCAN"),Gt.forEach(i),Ie=n(f," algorithm to each city individually to create clusters of points within the city, discarding the points designated as ânoiseâ and tuning the parameters to select a cluster representing each cityâs downtown. For this step, we validated these geographies using Google Maps, citiesâ own definitions of their downtowns, our personal knowledge of certain cities, and Brookingsâ 2023 "),k=r(f,"A",{href:!0});var Vt=d(k);De=n(Vt,"definitions of downtowns"),Vt.forEach(i),Te=n(f," across the U.S. Next, we created a buffer around each point in the cluster and created a polygon from the spatial union of these buffers. Lastly, we formed a "),z=r(f,"A",{href:!0});var Ft=d(z);je=n(Ft,"concave hull"),Ft.forEach(i),Ue=n(f," around this polygon to create the final downtown area."),f.forEach(i),qe=h(a),m=r(a,"P",{});var g=d(m);Me=n(g,"Click "),A=r(g,"A",{href:!0});var Jt=d(A);He=n(Jt,"here"),Jt.forEach(i),Oe=n(g," to download a geojson file of the new downtown boundaries. Click "),P=r(g,"A",{href:!0});var Lt=d(P);xe=n(Lt,"here"),Lt.forEach(i),Be=n(g," to download a geojson file of our original zip-code defined downtowns. Click "),I=r(g,"A",{href:!0});var Kt=d(I);We=n(Kt,"here"),Kt.forEach(i),$e=n(g," to view a pdf of screenshots of the boundaries for each."),g.forEach(i),Ne=h(a),$=r(a,"H2",{});var Qt=d($);Ge=n(Qt,"Standardization"),Qt.forEach(i),Ve=h(a),N=r(a,"P",{});var Rt=d(N);Fe=n(Rt,"Because fluctuations in unique device counts over time may reflect changes in sample sizes from data providers rather than actual changes in activity, we standardized the downtown counts using larger geographies. In our previous method, this was the state (in the U.S.) or province (in Canada). Our updated method instead standardizes the data using core based statistical areas (in the U.S.) and census metropolitan areas (in Canada). Standardization using these smaller areas results in more accurate recovery rates, since a cityâs downtown is not affected by the activity patterns of other cities in the same state."),Rt.forEach(i),Je=h(a),G=r(a,"H2",{});var Xt=d(G);Le=n(Xt,"Data Providers & Imputation"),Xt.forEach(i),Ke=h(a),b=r(a,"P",{});var re=d(b);Qe=n(re,"Our mobile device data comes from "),D=r(re,"A",{href:!0});var Yt=d(D);Re=n(Yt,"Spectus"),Yt.forEach(i),Xe=n(re,". They source data from multiple providers. One of these providers includes data for the entire study period; however, its sample size declines significantly during this period. A second provider has a significantly larger sample size, but does not include Canadian data before May 2021. We decided to use data from this second provider and impute pre-May 2021 data for Canada, relying on the assumption that differences between the two providers are similar in the US and in Canada."),re.forEach(i),Ye=h(a),_=r(a,"P",{});var de=d(_);Ze=n(de,"The imputation model we employed is called Self-Attention-based Imputation for Time Series (SAITS). The "),T=r(de,"A",{href:!0});var Zt=d(T);et=n(Zt,"SAITS model"),Zt.forEach(i),tt=n(de,", which employs self-attention techniques, identifies relationships within time series data and imputes missing information based on observed trends. The model converts randomly selected observed values into missing values, predicts the missing values, and compares the predicted and original values to evaluate the accuracy of the model."),de.forEach(i),at=h(a),V=r(a,"H2",{});var ea=d(V);ot=n(ea,"Measuring recovery rates"),ea.forEach(i),nt=h(a),F=r(a,"P",{});var ta=d(F);it=n(ta,"Because of the data imputation process, we calculated recovery rates slightly differently for the U.S. and Canada."),ta.forEach(i),st=h(a),J=r(a,"P",{});var aa=d(J);rt=n(aa,"In the US, we measured recovery rates for each city by:"),aa.forEac
1h(i),dt=h(a),L=r(a,"P",{});var oa=d(L);lt=n(oa,"1) Calculating the sum of daily unique devices both downtown and in the core based statistical area for all of the days in the study period (March through mid-June) in 2019 as well as 2023."),oa.forEach(i),ht=h(a),K=r(a,"P",{});var na=d(K);ct=n(na,"2) Standardizing the counts for each year by dividing the summed device count in the downtown area by the summed device count in the core based statistical area."),na.forEach(i),ut=h(a),Q=r(a,"P",{});var ia=d(Q);pt=n(ia,"3) Dividing the standardized count in the 2023 study period by the total count in the 2019 study period for each city."),ia.forEach(i),ft=h(a),R=r(a,"P",{});var sa=d(R);mt=n(sa,"In Canada, we measured recovery rates for each city by:"),sa.forEach(i),vt=h(a),X=r(a,"P",{});var ra=d(X);wt=n(ra,"1) Calculating the weekly sum of daily unique devices both downtown and in the census metropolitan area."),ra.forEach(i),yt=h(a),Y=r(a,"P",{});var da=d(Y);gt=n(da,"2) Standardizing the weekly counts by dividing the weekly summed device count in the downtown area by the weekly summed device count in the census metropolitan area."),da.forEach(i),bt=h(a),Z=r(a,"P",{});var la=d(Z);_t=n(la,"3) Imputing pre-5/17/21 data using these standardized weekly counts (see Data Providers & Imputation section)."),la.forEach(i),St=h(a),ee=r(a,"P",{});var ha=d(ee);Et=n(ha,"4) Determining weekly recovery rates by dividing the standardized weekly counts in 2023 by the (imputed) standardized weekly counts in the same week in 2019."),ha.forEach(i),Ct=h(a),te=r(a,"P",{});var ca=d(te);kt=n(ca,"5) Calculating the average weekly recovery rate by city."),ca.forEach(i),zt=h(a),ae=r(a,"H2",{});var ua=d(ae);At=n(ua,"Website:"),ua.forEach(i),Pt=h(a),j=r(a,"P",{});var Ut=d(j);It=n(Ut,"This website was built using Svelte with a bit of D3 for the charts. Code is on "),U=r(Ut,"A",{href:!0});var pa=d(U);Dt=n(pa,"GitHub"),pa.forEach(i),Ut.forEach(i),a.forEach(i),Tt=h(w),oe=r(w,"DIV",{class:!0}),d(oe).forEach(i),jt=h(w),ne=r(w,"DIV",{class:!0}),d(ne).forEach(i),w.forEach(i),this.h()},h(){p(S,"href","https://lehd.ces.census.gov/data/"),p(E,"href","http://odesi2.scholarsportal.info/documentation/CENSUS/2016/cen16labour.html"),p(C,"href","https://scikit-learn.org/stable/modules/generated/sklearn.cluster.HDBSCAN.html"),p(k,"href","https://www.brookings.edu/articles/breaking-the-urban-doom-loop-the-future-of-downtowns-is-shared-prosperity/"),p(z,"href","https://shapely.readthedocs.io/en/stable/reference/shapely.concave_hull.html#shapely.concave_hull"),p(A,"href","/downtowns-hbscan.geojson"),p(P,"href","/downtowns-original.geojson"),p(I,"href","/downtown_definitions_2.pdf"),p(D,"href","https://spectus.ai/"),p(T,"href","https://doi.org/10.1016/j.eswa.2023.119619"),p(U,"href","https://github.com/schoolofcities/downtown-recovery"),p(t,"class","text"),p(oe,"class","text"),p(ne,"class","text")},m(u,w){_a(y,u,w),fa(u,ie,w),fa(u,v,w),e(v,t),e(t,q),e(q,le),e(t,he),e(t,M),e(M,ce),e(t,ue),e(t,H),e(H,pe),e(t,fe),e(t,O),e(O,me),e(t,ve),e(t,x),e(x,we),e(t,ye),e(t,B),e(B,ge),e(t,be),e(t,W),e(W,_e),e(t,Se),e(t,c),e(c,Ee),e(c,S),e(S,Ce),e(c,ke),e(c,E),e(E,ze),e(c,Ae),e(c,C),e(C,Pe),e(c,Ie),e(c,k),e(k,De),e(c,Te),e(c,z),e(z,je),e(c,Ue),e(t,qe),e(t,m),e(m,Me),e(m,A),e(A,He),e(m,Oe),e(m,P),e(P,xe),e(m,Be),e(m,I),e(I,We),e(m,$e),e(t,Ne),e(t,$),e($,Ge),e(t,Ve),e(t,N),e(N,Fe),e(t,Je),e(t,G),e(G,Le),e(t,Ke),e(t,b),e(b,Qe),e(b,D),e(D,Re),e(b,Xe),e(t,Ye),e(t,_),e(_,Ze),e(_,T),e(T,et),e(_,tt),e(t,at),e(t,V),e(V,ot),e(t,nt),e(t,F),e(F,it),e(t,st),e(t,J),e(J,rt),e(t,dt),e(t,L),e(L,lt),e(t,ht),e(t,K),e(K,ct),e(t,ut),e(t,Q),e(Q,pt),e(t,ft),e(t,R),e(R,mt),e(t,vt),e(t,X),e(X,wt),e(t,yt),e(t,Y),e(Y,gt),e(t,bt),e(t,Z),e(Z,_t),e(t,St),e(t,ee),e(ee,Et),e(t,Ct),e(t,te),e(te,kt),e(t,zt),e(t,ae),e(ae,At),e(t,Pt),e(t,j),e(j,It),e(j,U),e(U,Dt),e(v,Tt),e(v,oe),e(v,jt),e(v,ne),se=!0},p:Sa,i(u){se||(Ea(y.$$.fragment,u),se=!0)},o(u){Ca(y.$$.fragment,u),se=!1},d(u){ka(y,u),u&&i(ie),u&&i(v)}}}class ja extends va{constructor(y){super(),wa(this,y,null,Pa,ya,{})}}export{ja as component,Ta as universal};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.