<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Lily Su on Medium]]></title>
        <description><![CDATA[Stories by Lily Su on Medium]]></description>
        <link>https://medium.com/@lilysu?source=rss-ffbe2a892404------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*F0GVvjUA8NtOhi4RQsT00g.jpeg</url>
            <title>Stories by Lily Su on Medium</title>
            <link>https://medium.com/@lilysu?source=rss-ffbe2a892404------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 09 Jun 2026 12:47:15 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@lilysu/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[How Mobile Location Data Could Help You Limit Exposure to Covid-19]]></title>
            <link>https://medium.com/data-science/how-mobile-location-data-could-help-you-limit-exposure-to-covid-19-cb821b560809?source=rss-ffbe2a892404------2</link>
            <guid isPermaLink="false">https://medium.com/p/cb821b560809</guid>
            <category><![CDATA[technology-strategy]]></category>
            <category><![CDATA[marketing-strategies]]></category>
            <category><![CDATA[data]]></category>
            <category><![CDATA[business-development]]></category>
            <category><![CDATA[location-intelligence]]></category>
            <dc:creator><![CDATA[Lily Su]]></dc:creator>
            <pubDate>Mon, 08 Jun 2020 14:50:19 GMT</pubDate>
            <atom:updated>2023-12-28T00:10:29.627Z</atom:updated>
            <content:encoded><![CDATA[<h4>As NYC moves into Phase 1 reopening, here is a look at peak foot traffic among popular shopping areas in the past 6 weeks.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*eoe8kqECxF_oCykS3hqQ_Q.gif" /></figure><p>Going outside the house for any purpose has become an invitation to put oneself in exposure to Covid-19, but what are some measures we can take to limit our risk?</p><p>Online shopping platforms have been overloaded with orders for most of social isolation, making it near impossible to get delivery in especially the outer boroughs in late March and early April. Sometimes choices are limited and making that one trip is inevitable whether to the bank, to do laundry, to get supplies for the next few weeks.</p><p>But beyond just getting up going on our way to the grocery store or post office, is there anything to one can do to avoid that line around the block?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NtN1RtLlVUEtr6H7hxMKfQ.gif" /><figcaption>Mobile Location Data from Left to Right Jackson Heights, Union Square, Rego Park Areas</figcaption></figure><p>As confirmed cases in NYC dwindle and the weather is beginning to feel like summer, antibody testing is still fallible and Covid-19 testing has stayed in short supply. The crux of returning to “normal life” is the mixing of infected and susceptible people unbeknownst to each other leading to the influx of new cases.</p><p>As we have seen in Singapore and South Korea, reopening without clear strategies on mitigating high-exposure situations were followed by a resurgence of new cases. Singapore became the site with the most cases in South Asia in late April. South Korea saw a spike of new cases comparable to where they were at more than a month prior after their first week of re-opening.</p><p>Instead of the back and forth pendulum swings of re-openings and reinstated lock downs, can our awareness of pedestrian traffic contribute to flattening the curve?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*Fke2BylNhz2ID4iCq2CgcA.jpeg" /></figure><p>Data Analytics NYC and Predicio used anonymized mobile location data of the past month to get a general idea of how foot traffic to some of the most populous retail areas in our city has fluctuated hour-by-hour, week-by-week so that you might use such insights to have a safer shopping experience and shorten the time of your trip.</p><p>The anonymous mobile data used for analysis brought to you by Predicio, an up and coming location-based behavioral intelligence startup that provides GDPR-compliant and CCPA-compliant location data from apps where users have consented to share their location.</p><p>We first looked at the data by honing in on a random sample of 100,000 anonymized mobile location points each hour within a 10 x 10 mile radius in the greater NYC region to generate our visualizations hour by hour on Tuesdays over the course of a month.</p><p>Out of our 100,000 data points in our region of interest, we looked at the foot traffic density over a quarter-mile radius around a point of interest and generated these visualizations:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*TnQpsh8JymZOmBMP0xY13g.gif" /></figure><p>We also wanted to people to see how the pedestrian traffic compares in relation to each other hour-by-hour as a whole throughout one day.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3jAzRqAvuG9Y9r5AobG79w.jpeg" /><figcaption>Foot Traffic Count out of a Uniform Sample of Mobile Data Quarter Mile Around our Point of Interest</figcaption></figure><p>On the grounds that the histogram fluctuates widely day-to-day, we combined histograms and took the median foot traffic of the past month.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/907/1*SVRyOPpCUaM_pbxNmaOMnA.jpeg" /><figcaption>Median Foot Traffic Between April 21 — May 15 in a Quarter Mile Around Our Point of Interest</figcaption></figure><p>As one can see, taking the median foot traffic, which eliminates outliers where marginal observations pull at our general pattern, gives a smoother distribution that correlates with our assumptions of traffic as it relates to normal sleeping schedules.</p><p>We deduced that the least crowded times are right when the store opens and evenings before the establishments close.</p><p>We arrived at this conclusion based on the operating hours on Tuesdays being 9AM — 8 PM at our location of interest, then deducing from the foot traffic count by hour. As the establishment approaches opening time, we saw a spike in foot traffic starting from the hour before. The levels of foot traffic from opening time does fluctuate into the afternoon but remains high as compared to 7PM, one hour before closing time.</p><p>It makes sense why people would not like to go run errands in the evenings. Who knows if the merchandise will be out of stock, and worse if the location is crowded one may not accomplish their task before the establishment closes?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/907/1*i7_gUFVt7SkJJ-uoIbW4Yw.jpeg" /><figcaption>April 21 — May 15, Day-to-Day Fluctuations Within the 25 Days of a Quarter Mile Radius from Our Point of Interest</figcaption></figure><p>Some other ways we are looking at the data was to look at a longer span of time, on a day basis to build upon our discovery of patterns.</p><p>In the plot to the left, and bottom, instead of dividing into days, we looking at a continuous stream of hours visually. Then we performed some time series analysis using ARIMA modeling to get a general sense of repeating patterns over days, weeks and months, experimenting with patterns found in various time spans.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*q2wFCEUudV41EokyEZGh5g.jpeg" /><figcaption>Fitting an ARIMA Model Over a Continuous Stream of Hours. The X-axis Represents Our Sample Head Count, Our Y-axis Represents Hours Over Time Starting April 21st 12AM. (ie. Hour 25 is April 22nd 1 AM)</figcaption></figure><p>As you can see, a big part of the work is to separate the signal from the noise. One way that we are also fine-tuning where we are observing the data is to better isolate our mobile data points to only within the block that our point of interest sits upon.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5TneBUjYhA3B7o2gJco82w.png" /><figcaption>Zeroing in On Just Penn Station, Looking at One City Block</figcaption></figure><p>Here’s how we compare to Google Map’s smoothed out plot for Tuesdays for Penn Station filtering out all other foot traffic outside the block above that Penn Station sits upon:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/464/1*zqUtR3-IST5i5fBcflnWGA.jpeg" /><figcaption>From Google Maps for Penn Station on Tuesdays</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QuM4gi_WtBa0IrmCp-OXMw.jpeg" /></figure><p>As one can see, there is a somewhat wide variation in foot traffic based on our data due various reasons such as certain users being more active on their phones and our limited sample intensifying our results.</p><p>If you are curious as to how we arrived at our visuals, the following will be a window into the technical aspects of our analysis, presented in the form of a tutorial.</p><h4>Get the data <a href="https://location-data.predic.io/">here</a>.</h4><p>From the <a href="https://location-data.predic.io/">Predicio data portal</a>, we extracted data by hour, we filtered a geographical radius of interest, picked a specific location to focus on, then made further analyses. The following shows how we did it and how you can manipulate location information too!</p><p>You can use any location data to follow along as long as you have a longitude, latitude and time. Here are two similar open data sets to try a hand: the <a href="https://data.cityofnewyork.us/Transportation/Brooklyn-Bridge-Automated-Pedestrian-Counts-Demons/6fi9-q3ta">NYC Open Data Portal on Pedestrian traffic counts on pedestrians crossing the Brooklyn Bridge</a>, or a pre-configured data set with <a href="https://datamillnorth.org/dataset/leeds-city-centre-footfall-data">people count and eight specific high traffic locations provided by the Leeds City Council</a>.</p><p>Depending on the data you have, you might need to hone down on what you want to focus on and convert to the proper date time. The following code condenses some possible wrangling you might need to make.</p><p>Here are example steps you might decide to take to organize your data:</p><blockquote>1. Narrow down on an area of focus and apply your wrangle function on just the area.</blockquote><blockquote>2. Create a new dataframe that filters just the distance from our point of interest.</blockquote><blockquote>3. Plot a heatmap for each hour and save a cropped screenshot of the plot.</blockquote><pre>def wrangle(X):</pre><pre>    X = X.copy()<br>    X = X.sample(&lt;number to pass in&gt;, replace=True)</pre><pre>    X[&#39;date_EST&#39;] = pd.to_datetime(X[&#39;timestamp&#39;], unit=&#39;s&#39;)<br>    X[&#39;date_EST&#39;] = X[&#39;date_EST&#39;].dt.tz_localize(&#39;UTC&#39;)\<br>                                 .dt.tz_convert(&#39;US/Eastern&#39;)<br>    X[&#39;date&#39;] = X[&#39;date_EST&#39;].dt.date<br>    X[&#39;hour&#39;]  = X[&#39;date_EST&#39;].dt.hour</pre><pre>return X</pre><p>In our analysis, we took a 100,000 sample over a 14 x 14 mile radius per hour around the location of interest.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*9_JtlDAVRxsqV9ECpTY7sw.png" /></figure><p>We then processed just our 2,400,000 sample using the wrangle function to get the proper date time format.</p><p>Due to the fact that the filtering processes taking a good amount of time, we wrapped our loops in TQDM to see a progress bar of the process.</p><pre>df_container = []<br>total_rows = 0<br>cols = [&#39;timestamp&#39;, &#39;lat&#39;, &#39;lng&#39;]</pre><pre>for i in tqdm(range(24)):<br>    i = str(i).zfill(2)</pre><pre>    for j in range(5):<br>        try:<br>            df = pd.read_csv(f&#39;&lt;file_to_read_in \<br>                         {&lt;dynamic number to process,i&gt;} \<br>                          rest_of_file_name<br>                         {&lt;dynamic number to process, j&gt;}&gt;&#39;, \<br>                          delimiter = &#39;\t&#39;, \<br>                          error_bad_lines=False, \ <br>                          usecols = cols)<br>            #keeping track of the total amount of rows for reference<br>            rows, _ = df.shape<br>            total_rows += rows</pre><pre>            #selecting only data that is in the <br>            #area of interest while reading the data in<br>            df = df[(df[&#39;lat&#39;] &gt; &lt;latitute min&gt;) &amp; \<br>                    (df[&#39;lat&#39;] &lt; &lt;latitute max&gt;) &amp; \<br>                    (df[&#39;lng&#39;] &lt; &lt;longitude min&gt;) &amp; \<br>                    (df[&#39;lng&#39;] &gt; &lt;longitude max&gt;)]</pre><pre>            df = wrangle(df)<br>            df_container.append(df)</pre><pre>        except:<br>            continue</pre><pre>df_sample = pd.concat([df for df in df_container])</pre><p>Now that we have a dataframe with the proper time, we’re going to pinpoint our location by creating a new column with our distance from the location of interest using Geopy.</p><pre>lat = &lt;your latitude&gt;<br>lng = &lt;your longitude&gt;</pre><pre>df_sample[&#39;distance_in_km&#39;] = [distance.distance((lat, lng), (i,j)).km for i, j in tqdm(zip(df_sample[&#39;lat&#39;], df_sample[&#39;lng&#39;]))]</pre><p>We then created a new dataframe that isolates only points where distance to point of interest is less than .5 km or a quarter mile radius.</p><pre>df_point_of_interest = df_sample[df_sample[&#39;distance_in_km&#39;] &lt; 0.5]</pre><p>To create a histogram in matplotlib, we plotted the dataframe as a groupby like so:</p><pre>df_point_of_interest.groupby(&#39;hour&#39;) \<br>                    .count() \<br>                    .reset_index() \<br>                    .plot.bar(x=&#39;hour&#39;, y=&#39;timestamp&#39;, \<br>                              color = &#39;orange&#39;, width=0.9, \<br>                              figsize=(10,6));</pre><h4>Filtering the Data to Pin Point Within One Block</h4><p>The method in which we isolate specific locations is to draw polygons in a mapping software not unlike connect-the-dots then convert the polygon shape to a .shp file like below. We show an example of Penn Station:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*15HsJKkz4sexsf86XLnPIw.jpeg" /></figure><p>To filter only mobile data points within our polygon, we geocode our longitude and latitude coordinates into a geopandas dataframe, then create a new column saving the results of a conditional for whether or not our point is in the shape.</p><p>Finally we perform dataframe filtering to extract only dataframe rows within the shape.</p><pre>gdf = geopandas.GeoDataFrame(df,<br>      geometry=geopandas.points_from_xy(df[&#39;lng&#39;], df[&#39;lat&#39;]))</pre><pre>gdf = gdf.assign(**{&#39;within_shape&#39;: gdf.within(i) for i in shapefile_df[&#39;geometry&#39;]})</pre><pre>new_df = gdf[gdf[&#39;within_shape&#39;] == True]</pre><p>The below is the result of our filtering:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hEZZCISCih9VfAt4NSebzA.jpeg" /><figcaption>Isolating Our Data to Just Within One Block</figcaption></figure><p>With our data filtered, we can safely eliminate data outside our scope of interest.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7ty19cVyMqogjebThZFoIw.gif" /><figcaption>From Left to Right, Some Popular Shopping Destinations in the Bronx, in the Flatiron Area of Manhattan, and Penn Station</figcaption></figure><h4>Visualizing Data with a Heatmap</h4><p>To generate the heatmap above, we used Folium, a wrapper around Leaflet.js which makes beautiful interactive maps that you can view in any browser.</p><p>The script we came up with to generate the heatmap works as follows we introduce our script, looping over a visual per hour into multiple parts below:</p><blockquote>1. For each hour, create a dataframe filtered just for the specific hour</blockquote><blockquote>2. The heatmap receives an array of longitude and latitude coordinates and the Folium map settings among other parameters.</blockquote><blockquote>3. Save the Folium map under a url name, then with Selenium, go into the url and take a screenshot and save it.</blockquote><p>Within a for loop between hours 0 and 23, we create a new dataframe filtering only the hour in questions, then generate a plot.</p><pre>folder_path = &lt;path to save our images to&gt;</pre><pre>for i in tqdm(range(24)):<br>    options = webdriver.ChromeOptions()<br>    options.add_argument(&#39;--headless&#39;)<br>    options.add_argument(&#39;--no-sandbox&#39;)<br>    options.add_argument(&#39;--disable-dev-shm-usage&#39;)</pre><pre>    # open it, go to a website, and get results<br>    wd = webdriver.Chrome(&#39;chromedriver&#39;,options=options)<br>    path = os.getcwd()</pre><pre>    # filtering dataframe per hour<br>    hour = df_point_of_interest[df_point_of_interest[&#39;hour&#39;] == i]</pre><p>For the plot, we first instantiate a map object, set an epicenter for the map to center itself to, specify a map theme, then indicate a level of zoom. The code snippet below is a continuation of the for-loop above.</p><pre>    # instantiating the map<br>    point_of_interest_map = folium.Map(location=[lat, lng],  \<br>                                       tiles=&#39;Stamen Toner&#39;, \<br>                                       zoom_start=14)</pre><p>For the heatmap object, we pass in a list of longitudes and latitudes, then specify the radius of our heatmap, max zoom and add to the map that we just instantiated. The code snippet below is a continuation of the for-loop above.</p><pre>    # adding mobile points to map<br>    HeatMap(data= hour[[&#39;lat&#39;, &#39;lng&#39;]] \<br>            .groupby([&#39;lat&#39;, &#39;lng&#39;]) \<br>            .count().reset_index() \<br>            .values.tolist(), \<br>            radius=10, \<br>            max_zoom=13) \<br>            .add_to(point_of_interest_map)</pre><p>Lastly, we create a URL for the .html that we saved out to retrieve from then save our Folium plot at that location. The code snippet below is a continuation of the for-loop above.</p><pre>    mapfile = f&#39;point_of_interest_hour_{i}&#39;</pre><pre>    # saving map as default Folium html<br>    point_of_interest_map.save(f&#39;{mapfile}.html&#39;)</pre><pre>    # creating pointer towards file location<br>    tmpurl=f&#39;file://{path}/{mapfile}.html&#39;</pre><pre>    # getting html map into memory and giving it time to load<br>    wd.get(tmpurl)<br>    time.sleep(random.randint(5,8))</pre><pre>    # saving it as screenshot to covert from html to png<br>    wd.save_screenshot(f&#39;{shared_folder_path}{mapfile}.png&#39;)<br>    wd.quit()</pre><p>We use Selenium the webdriver to go to the webpage and take a screenshot, save, then quit. The code snippet below is a continuation of the for-loop above.</p><pre>    # opening the screenshot in memory<br>    im = Image.open(f&#39;{shared_folder_path}{mapfile}.png&#39;)</pre><pre>    # getting the height<br>    width, height = im.size</pre><pre>    # crop from top left coordinate at (0,0)<br>    # crop to the bottom right at(with, height)<br>    im = im.crop((int(150), int(150), int(width), int(height)))</pre><p>Our output thus far looks like the rainbow and black and white image below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nRq1ltDkmJbBLe6N8euxgQ.jpeg" /><figcaption>The Folium Plot that we Saved (Left) is Then Annotated (Right)</figcaption></figure><p>Because we want our visualizations to be more evocative, we first made some stylistic decisions in a photo editing program like Photoshop, then we automated the process to batch-execute annotations in Python.</p><p>We used Pillow, an imaging library to change the hue and saturation of the heatmap from a rainbow gradient to magenta’s and cyan’Mos. We also eased the map background of black and grays to dark blues and applied text. We plan to showcase a tutorial on image processing in a future article.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*lLLBmN7XbJyeB--LYNMRAg.gif" /></figure><p>This image above, which also uses Pillow for annotation, was generated in Datashader, which handles large datasets well. Datashader integrates with Dask, Holoviews, Bokeh, and Geoviews to create dynamic, zoom-able maps overlayed on map tiles. This default code snippet was what was used to generate the static visualization, which was then compiled via Pillow into a .gif:</p><pre>agg = ds.Canvas().points(hour_df, &#39;lng&#39;, &#39;lat&#39;)<br>    utils.export_image(tf.shade(agg,cmap=bgyw),filename=img_file_name, background=&quot;black&quot;, fmt=&quot;.png&quot;)</pre><p>We, like you, are still enveloped in wonderment of the power in numbers that all cities illuminate. As New York City begins reopening in the coming weeks, we hope you stay safe.</p><h4>Thanks for dropping by!</h4><p>Thanks so much for learning with us. If you’d like to have a conversation surrounding this project, please don’t hesitate to reach out.</p><p>Acknowledgements: Thanks to <a href="https://www.linkedin.com/in/jefntungila/">Jef Ntungila</a> for implementing efficient wrangling, statistical analysis, plotting and optimization.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cb821b560809" width="1" height="1" alt=""><hr><p><a href="https://medium.com/data-science/how-mobile-location-data-could-help-you-limit-exposure-to-covid-19-cb821b560809">How Mobile Location Data Could Help You Limit Exposure to Covid-19</a> was originally published in <a href="https://medium.com/data-science">TDS Archive</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Visualizing Covid-19 Cases for NYC on March 9, 2020]]></title>
            <link>https://medium.com/@lilysu/visualizing-covid-19-cases-for-nyc-on-march-9-2020-a83edd843562?source=rss-ffbe2a892404------2</link>
            <guid isPermaLink="false">https://medium.com/p/a83edd843562</guid>
            <category><![CDATA[nyc-open-data]]></category>
            <category><![CDATA[covid19]]></category>
            <category><![CDATA[coronavirus]]></category>
            <category><![CDATA[data-visualization]]></category>
            <dc:creator><![CDATA[Lily Su]]></dc:creator>
            <pubDate>Tue, 10 Mar 2020 03:41:32 GMT</pubDate>
            <atom:updated>2020-03-16T04:15:20.514Z</atom:updated>
            <content:encoded><![CDATA[<h3>Visualizing Covid-19 Cases for NYC and NYS</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/993/1*lXtxoyVboaQdOaEei6iysQ.png" /></figure><p>The main question on everyone’s minds these days are: “Should I make choices to stay away from all people to avoid getting infected with the Covid-19 Virus?” and “What is the # of confirmed cases nearest to me?”</p><p>Related to these questions is one pressing one: “Where have those infected been exposed to the public?”</p><p>Based on news sources such as The New York State Department of Health, The New York Times, The Wall Street Journal, Business Insider, Patch.com, Spectrum NY1, The Gothamnist and AMNY, I have gathered relevant data regarding the Covid-19 virus and plotted them on a map of NYC.</p><p>To create the map, I sourced geographical shape files from the NYC Open Data Portal — specifically ones with zip codes to map out the NYC neighborhoods and truck route data to display some major roads to help NYC residents orient themselves.</p><p>If you are interested in working on visualizing the data, please find my notebook <a href="https://github.com/LilySu/DataViz/blob/master/Covid_19_NYC_2020_03_08ipynb.ipynb">here</a>.</p><p>Here is another visual of how the cases have been growing in the last 12 days by county. The data is coming from the <a href="https://www.health.ny.gov/diseases/communicable/coronavirus/">New York State Department of Health</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/645/1*-DNAc-KSLD0T1wKC1VItVw.gif" /><figcaption>Positive Covid-19 Cases by New York State County</figcaption></figure><p>Here is what the data looks like from the New York State Department of Health website, transcribed into a dataframe:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3xPUhcwAGBise57St-_tvg.png" /><figcaption>Number of cases by county as a pandas dataframe.</figcaption></figure><p>The county boundaries were from gis.ny.gov.</p><p>Here below are two more maps of the latest positive cases from Saturday, March 14, with 269 cases and Sunday March 15th with 329 cases in New York City.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kTFVlIkwDBN9CXYGFRWkvA.png" /><figcaption>Positive Covid-19 Cases by New York State County on March 14th, 2020</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6Eq-PIYWh3VfzEs9rT2olA.png" /><figcaption>Positive Covid-19 Cases by New York State County on March 15th, 2020</figcaption></figure><p>Please note that as of this time, there are a large amount of factors that prevent the information released by the New York State Department of Health to be current.</p><blockquote>There are limited tests and the tests take time to process.</blockquote><blockquote>It can take up to 2 weeks for those infected to develop symptoms.</blockquote><p>Here is a chart that shows how these factors played out in China:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AUghOwy3kSvDFCEuipW19Q.png" /><figcaption>Chart from the <a href="https://jamanetwork.com/journals/jama/fullarticle/2762130">Journal of the American Medical Association</a>, based on raw case data from the Chinese Center for Disease Control and Prevention</figcaption></figure><p>Based on <a href="https://medium.com/@tomaspueyo/coronavirus-act-today-or-people-will-die-f4d3d9cd99ca">this great analysis</a> by Tomas Pueyo, one can better measure the number of cases by the deaths reported. Here’s what he wrote in the article relating to deaths:</p><blockquote>If you have deaths in your region, you can use that to guess the number of true current cases. We know approximately how long it takes for that person to go from catching the virus to dying on average (<a href="https://github.com/midas-network/COVID-19/tree/master/parameter_estimates/2019_novel_coronavirus">17.3 days</a>). That means the person who died on 2/29 in Washington State probably got infected around 2/12.</blockquote><blockquote>Then, you know the mortality rate. For this scenario, I’m using 1% (we’ll discuss later the details). That means that, around 2/12, there were already around ~100 cases in the area (of which only one ended up in death 17.3 days later).</blockquote><blockquote>Now, use the average doubling time for the coronavirus (time it takes to double cases, on average). It’s <a href="https://github.com/midas-network/COVID-19/tree/master/parameter_estimates/2019_novel_coronavirus">6.2</a>. That means that, in the 17 days it took this person to die, the cases had to multiply by ~8 (=2^(17/6)). That means that, if you are not diagnosing all cases, one death today means 800 true cases today.</blockquote><p>As of today, there are two deaths reported in New York City. It is projected that the death rate of Covid-19 is around 3.6%. So according to him, with two deaths today, there are 1600 true cases in New York City.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a83edd843562" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[3 Things You Probably Didn’t Know About Municipal Services in NYC]]></title>
            <link>https://medium.com/@lilysu/3-things-you-probably-didnt-know-about-municipal-services-in-nyc-6ce3691a50d?source=rss-ffbe2a892404------2</link>
            <guid isPermaLink="false">https://medium.com/p/6ce3691a50d</guid>
            <category><![CDATA[new-york-city]]></category>
            <category><![CDATA[population]]></category>
            <category><![CDATA[department-of-sanitation]]></category>
            <category><![CDATA[municipality]]></category>
            <category><![CDATA[urban-planning]]></category>
            <dc:creator><![CDATA[Lily Su]]></dc:creator>
            <pubDate>Mon, 10 Feb 2020 18:30:42 GMT</pubDate>
            <atom:updated>2020-02-10T18:30:42.589Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/931/1*oxbuZYUxwO5K_UZp4Rp1-w.png" /></figure><p>What defines a city? Why would anyone want to live in a city?</p><p>One may think that a city is defined as the epicenter of the densest population, which has its merits. Recent studies of population density argue that cities, towns, villages, districts and counties are all constructs by the ruling state based on historical population metrics, that, overtime become outdated as it gets a lot more difficult to change boundaries as it was to set up.</p><p>Here is what the New York State Comptroller has to say regarding the concept of a village:</p><blockquote>“All State residents live in either a city or a town, as their boundaries do not overlap. Villages, in contrast, are located within towns, and their residents pay taxes to both the village and town. Historically, villages tend to be formed from the more densely populated section of a town — the area where additional services were likely to be needed.</blockquote><blockquote>In essence, villages were a smaller version of a city, providing services not available in a town, such as water, sewer, police and fire protection. However, suburbanization led to changes in law that allowed such services to be provided without the creation of a village (often through “special districts”).</blockquote><blockquote>Today, police, water, sewer, sanitation and fire protection services are provided routinely throughout towns, and the incorporation of a village is no longer necessary for these purposes.”</blockquote><p>Lets take a look at some quantifiable data regarding the city and draw our own conclusions on the ingenuity of New York City’s urban planning of municipalities.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/720/1*R-5ZKy1j7tN7DDFF1N_3wg.png" /></figure><p>The graph to the left is plotting the number of feet by borough. The department of Sanitation breaks down Queens and Brooklyn into 2 parts.</p><p>The converted road length to miles is in the column to the right in spreadsheet below, condensed by borough, so Manhattan, MN has 677 miles of roads as an example.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*apU2xcJUTihn3jpy3Unpag.png" /></figure><p>Below is a pie chart representation of the above spread sheet. The recorded roads and lengths are provided by the Department of Sanitation which publishes via the NYC Open Data Portal on Snow Plowing Priorities. Roads are mapped out by the department in order of plowing priorities shown at a latter plot.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/616/1*73HjlKJxxduln-lSKAEj5w.png" /></figure><p>Some of the longest roads being Northern Blvd, also known as New York State Route 25A being 12.5 miles , Frances Lewis Blvd, named after a signer of the Declaration of Independence, being 10.8 miles, and Queens Boulevard, being 7.5 miles</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/649/1*CznUlVjkPPuYW8DQEV0ZDQ.png" /></figure><p><em>During the 1920s and 1930s the boulevard was widened in conjunction with the digging of the </em><a href="https://en.wikipedia.org/wiki/IND_Queens_Boulevard_Line"><em>IND Queens Boulevard Line</em></a><em> subway tunnels. … Trenches had to be dug up in the center of the thoroughfare, and to allow pedestrians to pass over the construction, temporary bridges were built.</em></p><p>Now let’s take a look at the NYC population pulling from the Census data from 2010:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dgG0xGKydhaetZrxUaPBvA.png" /></figure><p>In pink are the critical routes for snow plowing. Population density are colors filled in between the roads.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9tkzYneyF7h0ZA66qx3ALg.png" /></figure><p>Below are comparisons of population by numbers of days in a week that trash is picked up.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/940/1*2yX3xkO-fIQPMXjkqM2uzw.png" /></figure><p>Are there any conclusions that you can draw from these visuals?</p><p><a href="https://github.com/LilySu/DataViz/blob/master/SnowPlowFrequency.ipynb">Here</a> is a Jupyter notebook of the code that generated the visualizations.</p><h4>Works Cited:</h4><p>Hevesi Alan G. “Local Government Issues In Focus.” <em>Outdated Municipal Structures</em>, Office Of the New York State Comptroller, Vol.2.№3., 10/2006, <a href="https://www.osc.state.ny.us/localgov/pubs/research/munistructures.pdf">www.osc.state.ny.us/localgov/pubs/research/munistructures.pdf</a> p.3. 10/02/<em>2020</em>.</p><p>New York State Route 25A. Wikipedia. 15/01/2020. Web. <a href="https://en.wikipedia.org/wiki/New_York_State_Route_25A">en.wikipedia.org/wiki/New_York_State_Route_25A</a></p><p>Queens Boulevard. Wikipedia. 15/01/2020. Web. <a href="https://en.wikipedia.org/wiki/Queens_Boulevard">en.wikipedia.org/wiki/Queens_Boulevard</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6ce3691a50d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Thoughts on: “Release Strategies and the Social Impacts of Language Models” OpenAI, Published…]]></title>
            <link>https://medium.com/@lilysu/thoughts-on-release-strategies-and-the-social-impacts-of-language-models-openai-published-e498c9c8f832?source=rss-ffbe2a892404------2</link>
            <guid isPermaLink="false">https://medium.com/p/e498c9c8f832</guid>
            <category><![CDATA[natural-language]]></category>
            <category><![CDATA[policy]]></category>
            <category><![CDATA[naturallanguageprocessing]]></category>
            <category><![CDATA[social-impact]]></category>
            <category><![CDATA[openai]]></category>
            <dc:creator><![CDATA[Lily Su]]></dc:creator>
            <pubDate>Sat, 24 Aug 2019 20:40:05 GMT</pubDate>
            <atom:updated>2019-08-24T20:51:23.009Z</atom:updated>
            <content:encoded><![CDATA[<h3>Thoughts on: “Release Strategies and the Social Impacts of Language Models” OpenAI, Published August 2019</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MHWpzg0kwQhJObQCLW8Qxg.jpeg" /><figcaption>Photo by <a href="https://unsplash.com/@einarr05?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Einar H. Reynis</a> on <a href="https://unsplash.com/search/photos/language?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure><p>We have yet to see<em> who </em>or <em>what</em> will become responsible for the negative consequences to come of large-scale language models.</p><p>The OpenAI paper’s intent has been a company explanation on the delayed release of the full GPT-2 model, while accompanying a 3rd larger, but not full model release, citing observances on existing uses of language models for harmful purposes as cause.</p><p>Providing some records of OpenAI’s efforts in collaborating with various institutions to study the risks associated with the release of language models the paper acknowledges that the language model, once released cannot be easily reverse engineered with high accuracy for the detection of its synthetic source.</p><p>The paper classifies types of risks on the social-political scale, drawing conclusions that among those with moderate programming skill: “a minimal immediate risk of a fully-integrated malicious application” and excusing a take on advanced persistent threats with:</p><blockquote>“Given the specialization required, OpenAI cannot devote significant resources to fighting APT [advanced persistent threat] actors.”</blockquote><p>Yes, but what are some ideas <em>besides the obvious</em> that OpenAI has? Brain-washing? Fraudulent misleading emails? Tampering important instructions? The mass generation of fake comments?</p><p>A more forthright approach would involve presenting some further ideas of how language models can garner misuse other than “generating fake news articles or building spambots for forums and social media” and also present more analysis on methods of prevention from bias since GPT-2 was developed from scraping links to articles from Reddit, a discussion site filled with special interest groups, many of which are controversial due to the ease of anonymizing one’s identity.</p><p>There is an obvious constrained political correctness in tone, with an appearance of empathy, a dash of recitation — that only goes as deep as to deflect by means of referral main topics of concern, shadowing the real need of OpenAI as an organization to uphold their reputation.</p><p>Without a preventative entity responsible for the regulation of language model usage, we await the next big victimization prior to any policy implementation. We all know that policy development is a slow process; so will there ever be a knowledgeable entity who can operate in industry on a financially independent model? How can the largest language model development entities be prompted to come together to create one amid competition for releasing the best model?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e498c9c8f832" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Finding Word Patterns in Online Reviews that Help Businesses Improve]]></title>
            <link>https://medium.com/@lilysu/finding-word-patterns-in-online-reviews-that-help-businesses-improve-e067a75b74e2?source=rss-ffbe2a892404------2</link>
            <guid isPermaLink="false">https://medium.com/p/e067a75b74e2</guid>
            <category><![CDATA[review-analytics]]></category>
            <category><![CDATA[naturallanguageprocessing]]></category>
            <category><![CDATA[nlp]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[open-data]]></category>
            <dc:creator><![CDATA[Lily Su]]></dc:creator>
            <pubDate>Sun, 11 Aug 2019 14:24:21 GMT</pubDate>
            <atom:updated>2020-06-06T17:08:55.590Z</atom:updated>
            <content:encoded><![CDATA[<h3>How We Did It: <a href="https://medium.com/@lilysu/finding-word-patterns-in-online-reviews-that-help-businesses-improve-e067a75b74e2?source=your_stories_page---------------------------">Word Trend Analysis in Online Reviews</a></h3><figure><img alt="Scattertext Python Library Interactive Visualization of the Correlation Between Yelp Reviews and Star Ratings" src="https://cdn-images-1.medium.com/max/1024/1*jhOZSz0V-PV8kK4hSsRA_w.gif" /></figure><p>It can be daunting for a business owner of any popular establishment to sort through their online reviews.</p><p>If we assume that each customer explained specifics for the star ratings they gave, we can begin to sift through the comments, and distinguish through repeat words, whether there are patterns and themes of how an establishment can improve.</p><p>Though there are many types of analysis on review data, word and phrase usage vs the amount of stars given on Yelp reviews of coffee shops in Austin, Texas for 2015–2016 was explored in this blog post.</p><h4>Here are resources for you to replicate this project:</h4><blockquote>Here is the <a href="https://www.dataanalyticsnyc.com/Yelp-CoffeeShop-Visualization.html">URL of the interactive visualization</a> above. (It takes awhile to load).</blockquote><blockquote>This is the <a href="https://github.com/LilySu/DataViz/blob/master/YelpReviewsScattertext.ipynb">Jupyter Notebook</a> of my code to analyse and generate such visualizations.</blockquote><blockquote>The open-source dataset we used can be found <a href="https://data.world/rdowns26/austin-coffee-yelp-reviews">here</a> at the data.world site.</blockquote><blockquote>The Scattertext library source code and documentation can be found <a href="https://github.com/JasonKessler/scattertext">here</a>.</blockquote><p>This is what the original data frame looks like of coffee shop names, the text of the review, and the star ratings:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/991/1*XB9WST6PedojT5HSIh8VDw.png" /></figure><p>A Squarify plot of most frequent word occurrences after tokenization and removal of stop words:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/325/1*pDj7x1QCorxaByCJu6FsWA.png" /><figcaption>Word Popularity as a Squarify Plot</figcaption></figure><p>A bar graph via Matplotlib by word count:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*atv1E90jgA6QYmoeNjYcCQ.png" /><figcaption>Count of Word Occurrences in All Reviews</figcaption></figure><p>An exploration of term explorations following the Scattertext tutorial by finding associations of the highest ratings by star count and the lowest number of star ratings:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QF8Our8p-eMTL9UKB1LNpg.png" /><figcaption>Term Frequencies by High and Lowest Rating Score</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jhOZSz0V-PV8kK4hSsRA_w.gif" /><figcaption>Gif of Interactive Scattertext Plot, Run on D3</figcaption></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e067a75b74e2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motor Vehicle Injuries and Deaths from Nov. 1, 2018 — Apr. 8, 2019]]></title>
            <link>https://medium.com/@lilysu/motor-vehicle-injuries-and-deaths-from-nov-1-2018-apr-8-2019-a3a50b5e063c?source=rss-ffbe2a892404------2</link>
            <guid isPermaLink="false">https://medium.com/p/a3a50b5e063c</guid>
            <category><![CDATA[open-data]]></category>
            <category><![CDATA[nyc]]></category>
            <category><![CDATA[cars]]></category>
            <category><![CDATA[motor]]></category>
            <category><![CDATA[vehicle-injuries]]></category>
            <dc:creator><![CDATA[Lily Su]]></dc:creator>
            <pubDate>Fri, 19 Apr 2019 17:56:24 GMT</pubDate>
            <atom:updated>2019-11-25T16:55:05.463Z</atom:updated>
            <content:encoded><![CDATA[<h3>Motor Vehicle Injuries and Deaths from November 2018 — April 2019</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/808/1*aiMwRsd1wz1DA6buJ3p5Lg.jpeg" /><figcaption>Click <a href="http://dataanalyticsnyc.com/gmap_plot.html">here </a>to manipulate the above visual.</figcaption></figure><p>It’s important for us as humans to have a greater awareness of our state of being in regards to understanding ourselves in relation to our surroundings.</p><p>In this thread of thought, we are interested in sharing our findings on the risks of travel by motor vehicles in the NYC 5-Borough Region.</p><p>We have created visualizations that show the occurrence of accidents by motor vehicles that resulted in damages of over $1000 in the last 6 months, specifically spanning the dates of November 1st, 2018 to April 21, 2019 reported by the <a href="https://trafficstat.nypdonline.org/2e5c3f4b-85c1-4635-83c6-22b27fe7c75c/view/89">Traffic Stat </a>department of the NYPD.</p><p>This information was downloaded from the <a href="https://data.cityofnewyork.us/Public-Safety/NYPD-Motor-Vehicle-Collisions/h9gi-nx95">NYC Open Data</a> portal, which is publicly available from the site courtesy of the NYC government.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/804/1*QDoeeuoETkv-44O4o1axXQ.jpeg" /></figure><p>We found it informative that there were more accidents than we ever imagined, and more casualties than we’ve ever thought for a space so local.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/543/1*Tbb62F30v1_-JyVAFOwXsw.png" /><figcaption>Click <a href="http://dataanalyticsnyc.com/gmap_deaths_plot.html">here</a> to manipulate the above visual.</figcaption></figure><p>There were 111 deaths from November 1st, 2018 to April 21, 2019 due to motor vehicle accidents. The locations of those deaths are mapped to the left.</p><p>What can we deduce from the data?</p><p>It is not surprising that more accidents both with or without casualties tend to happen near major highways in highly trafficked areas.</p><p>101,304 is 1% of the population of NYC, which is 8 million.</p><p>What seems surprising is the sheer mass of casualties that NYC residents have never hear of from these accidents, yet other types casualty situations around the world are the contents broadcasted in the media.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/1*PB9cdifs0SAjDVyDfjnWJw.png" /></figure><p>There were 101,304 motor vehicle accidents total reported by the NYPD between Nov. 01, 2018 — Apr. 21, 2019. There were 20,008 cases of accidents resulting in injuries, which is 19.6% of all accidents, with 81,296 accidents resulting in no casualties.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/569/1*0DyRxHx8fbLdhkZ7YPIATA.png" /></figure><p>Society’s knowledge of these facts can define the society’s awareness to its human condition. The next step is to define the affinity of influencing future outcomes.</p><p>It is possible to find patterns where city municipalities needs more work and more change. The data holds more clarity and more reasons for accountability for greater safety.</p><p>Click <a href="https://github.com/LilySu/DS-Unit-1-Sprint-5-Data-Storytelling-Blog-Post/blob/master/Motor_Vehicles_NYC.ipynb">here</a> for the Jupyter Notebook to see the code source.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a3a50b5e063c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Learning From Open NYC Data]]></title>
            <link>https://medium.com/@lilysu/learning-from-open-nyc-data-10559f75eb3e?source=rss-ffbe2a892404------2</link>
            <guid isPermaLink="false">https://medium.com/p/10559f75eb3e</guid>
            <category><![CDATA[government]]></category>
            <dc:creator><![CDATA[Lily Su]]></dc:creator>
            <pubDate>Thu, 11 Apr 2019 15:36:17 GMT</pubDate>
            <atom:updated>2019-04-23T15:27:46.891Z</atom:updated>
            <content:encoded><![CDATA[<h3>How Open NYC Data Can Help You</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/463/1*l9F9zKlQjHZkK5QLsdCmcQ.png" /></figure><p>Please note that the above graph captures complaints above 3%.</p><p>NYC’s releasing of its city operational data is a step toward a more effective city government.</p><p>When a NYC resident calls 311, that call is logged by the 311 operator by complaint type and location and tracked over time on city departments’ responses till case close. Having this data be accessible to all allows for more eyes and brains on ways to improve our urban standard of living. Deducing new patterns in this data may prove city municipality services to be more impactful for the greater good.</p><p>Data Analysis NYC is here to act as a bridge between that data and residents of NYC to minimize informational asymmetry as with all individuals to institutional entities.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=10559f75eb3e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Machine Learning for the Human Body — A Layman’s Summary of Sparse Inertial Poser: Automatic 3D…]]></title>
            <link>https://medium.com/@lilysu/machine-learning-for-the-human-body-a-laymans-summary-of-sparse-inertial-poser-automatic-3d-53c41f1a5733?source=rss-ffbe2a892404------2</link>
            <guid isPermaLink="false">https://medium.com/p/53c41f1a5733</guid>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Lily Su]]></dc:creator>
            <pubDate>Fri, 28 Sep 2018 21:40:57 GMT</pubDate>
            <atom:updated>2018-09-28T21:40:57.640Z</atom:updated>
            <content:encoded><![CDATA[<h3>Machine Learning for the Human Body — A Layman’s Summary of Sparse Inertial Poser: Automatic 3D Human Pose Estimation from Sparse IMUs</h3><p>Here are some notes I took to better understand the paper: <a href="https://www.researchgate.net/publication/314102066_Sparse_Inertial_Poser_Automatic_3D_Human_Pose_Estimation_from_Sparse_IMUs">Sparse Inertial Poser: Automatic 3D Human Pose Estimation from Sparse IMUs</a></p><p>Body is broken down into its constituent vertices with sets of coordinates. Those coordinates are displaced in two ways:</p><p>The offset of the vertices are influenced by:</p><p>1: 23 joints that has to deal with the pose of the body</p><p>2: 1786 high resolution 3D scans total comprised of multiple poses of 20 females and 20 males.</p><p>All base bodies are rigged with the 23 joints. Every point on the body is influenced by one to four points of the 23. This is because for example, wrist joint movement will not affect ankle movement.</p><p>Each vertex has a weight based on how important it is in influencing the joint location.</p><p>The joint location is determined.</p><p>The weights of how vertexes around the joints are determined.</p><p>The vertex locations based on scanned body shapes are determined.</p><p>There are two different ways this process can be used:</p><p>One can put in a human body in a default pose and churn out a posed body. In this case, only the posing algorithms will be used, which involves joint placement and the vertexes of the model will carry weights based on the joints.</p><p>Or, one can generate a new body of a unique body shape from the database that the algorithm is trained on, that is accurate in both the base pose and various posed positions.</p><p>How it’s used: Maya with some Python-based scripts for adjustment, also Unity with some C# scripts for adjustments.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=53c41f1a5733" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Machine Learning for the Human Body — A Layman’s Summary of Coregistration: Simultaneous Alignment…]]></title>
            <link>https://medium.com/@lilysu/machine-learning-for-the-human-body-a-laymans-summary-of-coregistration-simultaneous-alignment-a526ab9544d0?source=rss-ffbe2a892404------2</link>
            <guid isPermaLink="false">https://medium.com/p/a526ab9544d0</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[human-body]]></category>
            <category><![CDATA[3d-scanning]]></category>
            <category><![CDATA[3d-models]]></category>
            <category><![CDATA[3d]]></category>
            <dc:creator><![CDATA[Lily Su]]></dc:creator>
            <pubDate>Fri, 28 Sep 2018 20:44:03 GMT</pubDate>
            <atom:updated>2018-09-28T21:13:37.122Z</atom:updated>
            <content:encoded><![CDATA[<h3>Machine Learning for the Human Body — A Layman’s Summary of Coregistration: Simultaneous Alignment and Modeling of Articulated 3D Shape</h3><h3>— TL;DR: How It’s Better to Automate the Cleaning of 3D Body Scan Data By Matching Scans to Correct Templates and Learning a Formula as You Go.</h3><p>I am attempting to understand the paper<a href="http://files.is.tue.mpg.de/black/papers/HirshbergECCV2012.pdf"> Coregistration: Simultaneous Alignment and Modeling of Articulated 3D Shape</a> by regurgitating the information in a way that someone with basic understanding of machine learning concepts can understand. <a href="http://files.is.tue.mpg.de/black/papers/mpi-is-tr-004.pdf">Here are some additional supplemental material from the research.</a></p><p>To dumb down the title further for fun: How to Double Task When Fixing Messy Scans</p><p><strong>Why Are We Doing This Research:</strong></p><p>Having a 3D representation of a solid surface is important in making sense of coordinate data. The focus of this paper is on automatically cleaning up choppy scans with missing areas into a model that is anatomically correct and as smooth and solid as possible.</p><p>Now the issue at hand is what is our ideal body and pose to match a messy scan to? What is our guide system? We combine two techniques done in previous papers — a learn-as-we-go approach to place major landmark markers on the body as we morph a template body into the messy scan.</p><p><strong>The Scans:</strong></p><p>First time we did it: 124 scans of 3 females in standing and sitting poses(really 2, but 1 of them was scanned 2 years apart and she changed). Out of that 30 scans of each person as testing data.</p><p>Second time we did it: We used the dataset from a previous research project: 337 scans of 34 different women in 35 poses. 36 landmarks were used for each scan.</p><p>To improve things: We randomly selected 4 females with 10 poses each.</p><p>Each scan had 12 landmarks manually placed.</p><h3>What we did:</h3><p>We trained our data and ran our method through a first batch, and used the information to initially calibrate a second run through the same batch.</p><h3>How we did it:</h3><p><strong>Transformations:</strong></p><p>We thought of the 3D scan data as standalone triangles that can be deformed in a 3x3 rubic’s cube-like caged volume.</p><p>With each triangle, we deformed it 3 ways, and then stitched it back.</p><p>The 3 ways we deformed it was influenced by what the body shape is, what the body pose is, and how would fat, muscle and bone react around the joints, armpits and groin areas.</p><p><strong>Stuff that are done:</strong></p><p>In the first round of learning, scans with manual landmarks are placed in close alignment with that of the respective template. During the next round, we don’t work with landmarks.</p><p>We use PCA(Principal Component Analysis) to match scan to template.</p><p>For the joints, armpits and groin areas, we stiffen the trajectory of where the limbs have been projecting so it doesn’t look like <a href="https://www.google.com/url?sa=i&amp;rct=j&amp;q=&amp;esrc=s&amp;source=images&amp;cd=&amp;ved=2ahUKEwiHmru2t97dAhUQw1kKHR1JBs8Qjxx6BAgBEAI&amp;url=http%3A%2F%2Fallfun.md%2Findex.php%2Farticle%2F41461&amp;psig=AOvVaw3ne3igBm2Q5m2xM0PVE0wH&amp;ust=1538249307229450">Harry Potter’s bent rubber arm. </a>Linear Blend</p><p><strong>Calculating Error:</strong></p><p>We warp the scan to match the template. Distance error between the scan and template is then calculated. <a href="https://web.eecs.umich.edu/~fessler/papers/files/talk/00/00,01,06,seminar.pdf">Geman-McClure Robust Error Function</a></p><p>We apply a negative reward for deformations so that scans have a limit for how much they can deform. Frobenius Norm</p><p>As the scans are matched to each other, there are two mathematical formulas that we use in the calculation to transform the scan that is constantly shifting based on what is being learned.</p><p>There is a different optimal policy for each different body.</p><p>We prevent over-fitting by performing regularization regression in varying the</p><p><strong>Making it better:</strong></p><p>To prevent the formula from over-accounting for details that does not apply to future bodies, calculations with the intensity of deformations on a scale of 0.25 to 5, is run several times, and then picking the best run. Over-fitting, Regularization Regression</p><p><strong>Terms Mentioned in Paper:</strong></p><p>Rodrigues Vectors</p><p>Linear Blend</p><p>Geman-McClure Robust Error Function</p><p>PCA</p><p>Frobenius Norm</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a526ab9544d0" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>