[Markdown]
## Assignment
We will be focusing on the yelp business dataset to do an exploratory analysis. This dataset provides information about businesses, user reviews, and more from Yelp's database. The data is split into separate files (business, checkin, photos, review, tip, and user), and is available in either JSON or SQL format. You might use this to investigate the distributions of scores on yelp, look at how many reviews users typically leave or look for regional trends about restaurants. Note that this is a large, structured dataset and you don't need to look at all of the data to answer interesting questions.

In the first phase, you should seek to gain an overview of the shape & structure of your dataset. What variables does the dataset contain? How are they distributed? Are there any notable data quality issues? Are there any surprising relationships among the variables? Be sure to perform "sanity checks" for any patterns you expect the data to contain.

In the second phase, you should investigate your initial questions, as well as any new questions that arise during your exploration. For each question, start by creating a visualization that might provide a useful answer. Then refine the visualization (by adding additional variables, changing sorting or axis scales, filtering or subsetting data, etc.) to develop better perspectives, explore unexpected observations, or sanity check your assumptions. You should repeat this process for each of your questions, but feel free to revise your questions or branch off to explore new questions if the data warrants.

[Code] 
import pandas as pd
business\_path = "yelp\_academic\_dataset\_business.json"
df\_business = pd.read\_json(business\_path, lines=True)
df\_business.info()

# Schema of Dataframe
# Columns in df with counts, datatype, and example values:
# business\_id (150346, object, ym3e\_a1L4gyKZWU1-LuRYQ)
# name (150346, object, J J Gandy's Pies)
# address (150346, object, 5703 W Smith Valley Rd)
# city (150346, object, Tampa)
# state (150346, object, TN)
# postal\_code (150346, object, 46227)
# latitude (150346, float64, 43.5939441)
# longitude (150346, float64, -86.2621502)
# stars (150346, float64, 4.5)
# review\_count (150346, int64, 21)
# is\_open (150346, int64, 1)
# attributes (136602, object, {'ByAppointmentOnly': 'True', 'BusinessAcceptsCreditCards': 'True'})
# categories (150243, object, Pizza, Restaurants, Food)
# hours (127123, object, {'Monday': '12:0-0:0', 'Tuesday': '12:0-0:0', 'Wednesday': '12:0-0:0', 'Thursday': '12:0-0:0', 'Friday': '12:0-0:0', 'Saturday': '12:0-0:0', 'Sunday': '12:0-0:0'})

[Markdown]
# Exploratory Visual Analysis

## Initial Questions

1. How are rating stars distributed in Nashville?
2. How do rating stars correlate with different attributes of food businesses in Nashville?
3. How do combinations of different attributes impact rating stars of food businesses in Nashville?

[Code] 
 # filter to only food businesses in Nashville
 df\_business\_nashville = df\_business.query("state == 'TN' and city == 'Nashville'")
 df\_business\_food = df\_business\_nashville[df\_business\_nashville.categories.str.contains('Food', na=False)]
 df\_business\_food.head()
df\_business\_food.stars
df\_categories = df\_business\_food.assign(categories=df\_business\_food.categories.str.split(',')).explode('categories').reset\_index(drop=True)
df\_categories

[Code] 
alt.Chart(df\_business).mark\_bar().encode(
 x=alt.X("is\_open:N", title="Business Open?"),
 y=alt.Y("count()", title="Business Count"),
).properties(
 title="Counts of businesses: open or not"
)

[Code] 
alt.Chart(df\_business).mark\_bar().encode(
 x=alt.X("stars:N", title="Rating Stars"),
 y=alt.Y("count()", title="Business Count"),
).properties(
 title="Counts of businesses of different rating stars"
)
[마크다운]
과제 ## 과제
탐색적 분석을 수행하기 위해 Yelp 비즈니스 데이터 집합에 초점을 맞출 것입니다. 이 데이터 세트는 Yelp 데이터베이스에서 비즈니스, 사용자 리뷰 등에 대한 정보를 제공합니다. 데이터는 별도의 파일(비즈니스, 체크인, 사진, 리뷰, 팁, 사용자)로 나뉘며 JSON 또는 SQL 형식으로 사용할 수 있습니다. 이 데이터를 사용하여 Yelp의 점수 분포를 조사하거나, 사용자가 일반적으로 얼마나 많은 리뷰를 남기는지 살펴보거나, 레스토랑에 대한 지역별 트렌드를 살펴볼 수 있습니다. 이 데이터는 구조화된 대규모 데이터 집합이므로 흥미로운 질문에 답하기 위해 모든 데이터를 살펴볼 필요는 없습니다.

첫 번째 단계에서는 데이터 집합의 형태와 구조에 대한 개요를 파악해야 합니다. 데이터 집합에 어떤 변수가 포함되어 있나요? 어떻게 분포되어 있나요? 주목할 만한 데이터 품질 문제가 있는가? 변수 간에 놀라운 관계가 있나요? 데이터에 포함될 것으로 예상되는 모든 패턴에 대해 '건전성 검사'를 수행해야 합니다.

두 번째 단계에서는 초기 질문과 탐색 중에 발생하는 새로운 질문을 조사해야 합니다. 각 질문에 대해 유용한 답을 제공할 수 있는 비주얼리제이션을 만드는 것부터 시작합니다. 그런 다음, 추가 변수 추가, 정렬 또는 축 척도 변경, 데이터 필터링 또는 하위 집합 변경 등을 통해 비주얼리제이션을 구체화하여 더 나은 관점을 개발하고, 예상치 못한 관찰 사항을 탐색하거나, 가정을 점검합니다. 각 질문에 대해 이 프로세스를 반복하되, 데이터에 따라 질문을 수정하거나 새로운 질문을 탐색하기 위해 분기하여 자유롭게 진행하세요.

[코드] 
PANDAS를 PD로 가져오기
business\_path = "yelp\_academic\_dataset\_business.json"
df\_business = pd.read\_json(business\_path, lines=True)
df\_business.info()

# 데이터 프레임의 스키마
# 카운트, 데이터 유형 및 예제 값이 있는 df의 열입니다:
# business\_id (150346, object, ym3e\_a1L4gyKZWU1-LuRYQ)
# 이름(150346, 객체, 제이제이 갠디스 파이)
# 주소(150346, 객체, 5703 W Smith Valley Rd)
# 도시 (150346, 객체, Tampa)
# 주 (150346, 객체, TN)
# 우편\_코드 (150346, 객체, 46227)
# 위도(150346, float64, 43.5939441)
# 경도 (150346, float64, -86.2621502)
# 별 (150346, float64, 4.5)
# 리뷰\_count (150346, int64, 21)
# is\_open (150346, int64, 1)
# attributes (136602, object, {'ByAppointmentOnly': 'True', 'BusinessAcceptsCreditCards': 'True'})
# 카테고리 (150243, 객체, 피자, 레스토랑, 음식)
# hours (127123, object, {'Monday': '12:0-0:0', 'Tuesday': '12:0-0:0', 'Wednesday': '12:0-0:0', 'Thursday': '12:0-0:0', 'Friday': '12:0-0:0', 'Saturday': '12:0-0:0', 'Sunday': '12:0-0:0'})

[Markdown]
# 탐색적 시각적 분석

## 초기 질문

1. 내슈빌에서 별점은 어떻게 분포되어 있나요?
2. 별점은 내슈빌에서 음식점의 다양한 속성과 어떤 상관관계가 있나요?
3. 다양한 속성의 조합이 내슈빌 음식점의 평점 별에 어떤 영향을 미치나요?

[코드] 
 # 내슈빌의 음식 업소만 필터링합니다.
 df\_business\_nashville = df\_business.query("state == 'TN' and city == 'Nashville'")
 df\_business\_food = df\_business\_nashville[df\_business\_nashville.categories.str.contains('Food', na=False)]
 df\_business\_food.head()
df\_business\_food.stars
df\_categories = df\_business\_food.assign(categories=df\_business\_food.categories.str.split(',')).explode('categories').reset\_index(drop=True)
df\_categories

[코드] 
alt.Chart(df\_business).mark\_bar().encode(
 x=alt.X("is\_open:N", title="비즈니스 오픈?"),
 y=alt.Y("count()", title="비즈니스 카운트"),
).properties(
 title="비즈니스 수: 열려 있는지 여부"
)

[코드] 
alt.Chart(df\_business).mark\_bar().encode(
 x=alt.X("별:N", title="별 등급"),
 y=alt.Y("count()", title="비즈니스 수"),
).properties(
 title="별 등급이 다른 비즈니스 수"
)