Mapping John Canaday’s 1976 New York Times Guide to Dining out in New York

Lab Reports, Maps, Visualization


Book cover for The New York Times Guide to Dining Out, 1976

Over the past few months, I have been exploring ways of mapping New York City’s evolving food landscape. I am particularly interested in creating resources that allow researchers and other food enthusiasts to explore restaurants, bars, and cafes that have come and gone over time. In a continuation of this research, I decided to map the restaurants featured in John Canaday’s 1976 New York Times Guide to Dining Out in New York. The book provides a rare chance to learn about restaurants that existed in a time before online directories. 

Today, we are highly accustomed to navigating the world around us through a digital map. My personal mental map of New York City, especially of my gastronomic memories, has been constructed through points on Google Maps. I often get frustrated, however, that businesses just silently fade away from the map when they close. When our knowledge of the city is informed by applications like Google Maps, how does this impact the way we remember the world around us? What can we learn about the city by mapping historic businesses in a familiar format? What stories are waiting to be told in these forgotten places? With these questions in mind, I set to work scanning and parsing John Canaday’s restaurant data to build into an interactive map.


After scanning the 249-page book, I performed optical character recognition (OCR) to convert the images into recognizable text. Luckily, the guide is uniformly structured which allowed me to programmatically parse the data using Python. The first line begins with its rating and name, followed by its address and telephone number, and finally the review. 

Right away, I separated the reviews from one another by replacing the first star in each entry’s review with a regular expression string: ([BREAK]\n\*). Knowing that Python parses text files one line at a time, I wrote a script that counts what line number the script is at and resets when it encounters a [BREAK]. Based on the line count, the script then identifies where the name (line #1), address (line #2), and description (line #3 until the next break) is located in the text file and writes this to a CSV file. 

import csv

descriptions_file = open('raw_guide_descriptions.csv', 'w')
desc_writer = csv.writer(descriptions_file)

headers = ["name", "address_telephone", "description"]


descriptions = {}

with open("nyt_diningout_1976.txt") as txt_file:
    for line in txt_file:
        if line.strip() == '[BREAK]':
            line_num = 0
        if line_num == 1:
            name = line.strip()
            descriptions[name] = {}
        if line_num == 2:
            descriptions[name]["address"] = line.strip()
            descriptions[name]["description"] = []
        if line_num >= 3:
        line_num += 1

keys = list(descriptions.keys())

for k in keys:
    write_list = [k, descriptions[k]['address'], " ".join(descriptions[k]['description'])]


Next, I brought the raw CSV file into Google Sheets where I performed some data cleaning. I separated the rating count from the name of the restaurant, removed the telephone numbers and corrected spellings in the address field, and corrected formatting and spelling in the description field. (I tried my best but due to OCR inaccuracies and time constraints, there may still be errors in the descriptions.) 

In order to map these restaurants, I needed to geocode their addresses to identify their coordinates. I did this using the Geopy Python package with the Nominatim geocoding service. 

from geopy.geocoders import Nominatim
import csv
import time

geolocator = Nominatim(user_agent="restaurants_study")

geocoded_csv = open('raw_addresses_geocoded.csv', 'w')
csv_writer = csv.writer(geocoded_csv)

headers = ['name', 'address', 'found_address', 'latitude', 'longitude']


with open('raw_restaurants.csv') as csv_file:
    csv_reader = csv.reader(csv_file)

    for row in csv_reader:
        location = geolocator.geocode(f"{row[1]}, New York, NY")

        if location is None:
            lat = None
            lat = location.latitude

        if location is None:
            lon = None
            lon = location.longitude

        print(f"{lat}, {lon}")

        if location is None:
            found_add = None
            found_add = location.address


        write_list = [row[0], row[1], found_add, lat, lon]


Next, I summarized Canaday’s reviews using ChatGPT via the OpenAI API to create brief blurbs my users would see when hovering over a point on the map. 

import csv
import json
import openai

openai.api_key = "INSERT KEY HERE"

system_setting = "You are summarizing restaurant reviews."

rest_csv = open('final_restaurant_data.csv')
rest_reader = csv.reader(rest_csv)

gpt_summaries = {}
errors = []

for row in rest_reader:

    prompt = f"Tell me the dishes this restaurant serves, in 20 words or less:{row[20]}"
    res = openai.ChatCompletion.create(
            {"role":"system", "content": system_setting},
            {"role":"user", "content": prompt}
    gpt_summary = res.choices[0].message.content
    gpt_summaries[row[0]] = gpt_summary
    print(f"SUMMARY: {gpt_summary}")

with open("gpt_summaries.json", 'w') as write_file: 
    json.dump(gpt_summaries, write_file, indent=2)

From there, I performed a ton of cleaning on my data using Google Sheets. In many cases, I needed to manually find the coordinates of restaurants whose addresses were incorrectly or unable to be geocoded. I also wanted to include additional information about whether or not the restaurants were still operating, which I did through old-fashioned, tedious Google searches. When all was said and done, I was left with the following dataset:

Finally, I brought this into Tableau where I mapped my restaurants and designed a dashboard that enables users to geographically explore John Canaday’s reviews. 

Screenshot of the data dashboard


John Canaday’s 1976 New York Times Guide to Dining out in New York is a product of the earliest years of professional restaurant criticism. His predecessor at The Times, Craig Claiborne, is often regarded as the father of the modern restaurant review. As the newspaper’s food editor, Claiborne began writing weekly reviews in 1962. At first, these reviews were brief, directory listings with just under 100 words. Eventually, he started including more in depth commentary. In 1970, he published his first “Directory to Dining,”  which subsequently sparked the country’s fascination with restaurant criticism. (Pete Wells for the NY Times

After Claiborne, Raymond Sokolov and John Hess had brief stints contributing restaurant reviews between 1971 and 1974. John Canaday, who had been working as the Times’ art critic, contributed reviews in his spare time between 1974 and 1976. He promoted Mimi Sheraton as the first full-time restaurant critic in August 1976. (

So what does this guide tell us about the state of dining in 1976 New York City? Who was its audience? As Robert Sietsema, a restaurant critic at The Village Voice, wrote for the Columbia Journalism Review in 2010, many of these 1970s restaurants were considered “the exclusive province of businessmen with expense accounts and the idle rich.” (Robert Sietsema for Columbia Journalism Review) Canaday’s reviews certainly seem to cater to an upper middle class who spends their free time attending performances in the Theater District and Lincoln Center. The geography of the restaurants, predominantly centered in Midtown, support Sietsema’s statement that businessmen were likely some of the primary patrons of these establishments. 

These restaurants also illuminate broader trends that characterized American dining throughout the mid to late 20th century. In 1976, French cuisine clearly dominated the fine dining scene. Just under a third of all restaurants included in Canaday’s guide are classified as French. Colloquially, this is known as the era of the Le’s and La’s in fine dining– La Grenouille, Le Cygne, La Caravelle, et cetera. Italian food was also just beginning to enter the upper echelons of fine dining. Canaday made headlines when he gave Italian restaurant Parioli Romanissimo four stars in 1975 ( 

Note: “Continental” cuisine is an umbrella term that refers to a general Western European-style cuisine, typically French, Spanish, and Italian-influenced. 

Notable food and cultural history is threaded throughout the stories of these establishments. The “21” club was a former prohibition-era speakeasy that closed in 2020. Spanish restaurant Meson Botin was an offshoot from Spain’s pavilion at the 1964 World’s Fair. Yunnan Yuan is where owner Peng Chang-kuei invented General Tso’s chicken

At all of these restaurants, it is clear that food and socialization were tightly linked. La Cote Basque was a 1960s hot spot for socialites and celebrities the likes of Jackie Kennedy Onassis and Frank Sinatra. Les Pleiades was an art world hangout, attracting directors of the city’s prestigious museums and prominent gallerists. 

Other restaurants catered to specific communities. Bernstein-On-Essex and Moshe Peking, were some of the first Kosher Chinese restaurants in the city. Their operation contributed to a distinctly New York Jewish identity. Uptown, Czechoslovakia Praha, Ruc, and Vasata, were a part of what was once referred to as Little Czechoslovakia, an Upper East Side enclave of Czech and Slovak immigrants.

Whether it was to see and be seen, to celebrate one’s identity, or to just feel at home, patronizing these restaurants provided customers with a community. While compiling supplemental data for this map, most of my resources included personal blogs written by hobbyist historians and food lovers. Their writing is marked by a pointed nostalgia and longing for these restaurants. 

Out of the 2 restaurants, only 21 are still operating. The closure of a majority of these restaurants seems to have been inevitable. Owners struggled against rising rents and operating costs. Others, in quieter, bittersweet endings, closed simply for the owners’ retirement.

Out of those that have persevered, P.J. Clarke’s, now with five locations, has been open the longest for a total of 140 years. Other restaurants that have been open for 100 years or longer include Keen’s English Chop House (139 years), Barbetta (118 years), John’s of 12th Street (116 years), Grand Central Oyster Bar (111 years), and Sardi’s (103 years). 

Next Steps

It is my hope that this report can set the groundwork for a project that continues to map the disappearing restaurants and dining establishments of New York City. It is important to remember that Canaday’s guide book is one small sliver of the city’s actual gastronomical landscape. Since Craig Claiborne first established the column, all of the Times’ restaurant critics have been white men and women, and their coverage of certain restaurants over others will inevitably be tinged with their biases. It is my hope that my work started here can also eventually tell the stories of restaurants and other community establishments that may not have been given the same attention in the history of food writing. 

Have additional stories to share about restaurants featured in this guide, or others that have played an important role in your life? Drop me a line at


Canaday, John. The New York Times Guide to Dining Out. New York: The New York Times, 1976.