{"id":18426681,"url":"https://github.com/mrjxtr/tokyo_airbnb_analysis_project","last_synced_at":"2026-02-24T15:37:19.518Z","repository":{"id":254415771,"uuid":"845612408","full_name":"mrjxtr/Tokyo_AirBnb_Analysis_Project","owner":"mrjxtr","description":"Full project case study and analysis to show potential opportunities to start an AirBnb business in Tokyo, Japan.","archived":false,"fork":false,"pushed_at":"2024-10-15T22:07:51.000Z","size":7464,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-17T07:58:17.704Z","etag":null,"topics":["data-analysis","data-cleaning","data-science","data-visualization","pandas","python3"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/in/mrjxtr/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrjxtr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-21T15:25:41.000Z","updated_at":"2024-10-15T22:07:49.000Z","dependencies_parsed_at":"2024-09-14T03:32:53.811Z","dependency_job_id":"6fa2edc0-7585-4dcc-8451-c1c063ac33a4","html_url":"https://github.com/mrjxtr/Tokyo_AirBnb_Analysis_Project","commit_stats":null,"previous_names":["mrjxtr/tokyo_airbnb_project","mrjxtr/tokyo_airbnb_analysis_project"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrjxtr%2FTokyo_AirBnb_Analysis_Project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrjxtr%2FTokyo_AirBnb_Analysis_Project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrjxtr%2FTokyo_AirBnb_Analysis_Project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrjxtr%2FTokyo_AirBnb_Analysis_Project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrjxtr","download_url":"https://codeload.github.com/mrjxtr/Tokyo_AirBnb_Analysis_Project/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223286419,"owners_count":17120000,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-analysis","data-cleaning","data-science","data-visualization","pandas","python3"],"created_at":"2024-11-06T05:08:32.822Z","updated_at":"2026-02-24T15:37:14.492Z","avatar_url":"https://github.com/mrjxtr.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TOKYO AIRBNB COMPETITION AND PRICING ANALYSIS\n\n## Project Summary 📝 \u003ca name=\"ProjectSummary\"\u003e\u003c/a\u003e\n\nWelcome to my Tokyo AirBnb **Competition and Pricing Analysis**. This project identifies potential opportunities for starting an Airbnb business in Tokyo, Japan, by leveraging data-driven decision-making and insights. The analysis focuses on pinpointing the most lucrative neighborhoods for new Airbnb ventures, where competition is minimal, and demand is high.\n\n\u003cbr /\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"reports/figures/Tokyo_Airbnb_Competition_and_Pricing.png\"\u003e\n        \u003cimg src=\"reports/figures/Tokyo_Airbnb_Competition_and_Pricing.png\" alt=\"Dashboard\" width=\"500\"\u003e\n    \u003c/a\u003e\n    \n\u003c/div\u003e\n\n\n\u003cdiv align=\"center\"\u003e\n  \n  [![LinkedIn](https://img.shields.io/badge/-LinkedIn-0077B5?style=flat-square\u0026logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/mrjxtr)\n  [![Upwork](https://img.shields.io/badge/-Upwork-6fda44?style=flat-square\u0026logo=upwork\u0026logoColor=white)](https://www.upwork.com/freelancers/~01f2fd0e74a0c5055a?mp_source=share)\n  [![Facebook](https://img.shields.io/badge/-Facebook-1877F2?style=flat-square\u0026logo=facebook\u0026logoColor=white)](https://www.facebook.com/mrjxtr)\n  [![Instagram](https://img.shields.io/badge/-Instagram-E4405F?style=flat-square\u0026logo=instagram\u0026logoColor=white)](https://www.instagram.com/mrjxtr)\n  [![Threads](https://img.shields.io/badge/-Threads-000000?style=flat-square\u0026logo=threads\u0026logoColor=white)](https://www.threads.net/@mrjxtr)\n  [![Twitter](https://img.shields.io/badge/-Twitter-1DA1F2?style=flat-square\u0026logo=twitter\u0026logoColor=white)](https://twitter.com/mrjxtr)\n  [![Gmail](https://img.shields.io/badge/-Gmail-D14836?style=flat-square\u0026logo=gmail\u0026logoColor=white)](mailto:mr.jesterlumacad@gmail.com)\n\n\u003c/div\u003e\n\n\n### Report outline 🧾 \u003ca name=\"Reportoutline\"\u003e\u003c/a\u003e\n\n- [Project Summary](#ProjectSummary)\n  - [Report outline](#Reportoutline)\n  - [Questions to Answer (Business task)](#QuestionstoAnswer)\n  - [Tools used](#Toolsused)\n  - [Analysis Process](#AnalysisProcess)\n- [Step 1 - Gather relevant data](#Gatherrelevantdata)\n- [Step 2 - Process data](#Processdata)\n- [Step 3 - Explore data](#Exploredata)\n  - [Step 3.5 - Visualize data](#Visualizedata)\n- [Step 4 - Create a dashboard](#Createdashboard)\n- [Step 5 - Insights and Recommendations](#inightsandrecommendations)\n  - [Insights](#Insights)\n  - [Recommendations](#Recommendations)\n  - [Conclusion](#Conclusion)\n\n### Questions to Answer (Business task) ✅ \u003ca name=\"QuestionstoAnswer\"\u003e\u003c/a\u003e\n\n1. Which of the top 5 and top 10 neighborhoods in Tokyo have the highest average rates for their rooms?\n\n2. Which of these top 10 neighborhoods have the least amount of competition?\n\n3. Which of these top 10 neighborhoods have the most competition in terms of listings?\n\n4. Which neighborhood(s) would you recommend for Airbnb startups?\n\n5. What room types are most popular in these top 10 neighborhoods?\n\n### Tools used (Tech Stack) 🛠 \u003ca name=\"Toolsused\"\u003e\u003c/a\u003e\n\n1. **VSCode** - For working with Python files, Jupyter Notebooks, and Markdown files.\n\n    - Python, Jupyter Interactive Window, Jupyter Notebook\n\n2. **Python** - For Data Processing, Exploratory Data Analysis and Data Visualization.\n\n    - Pandas, Numpy, Matplotlib, Seaborn\n\n3. **Tableau** - For creating dynamic Dashboards to better present insights.\n\nOther tools:\n\n- **Git** - for version control.\n\n### Analysis Process 🔄 \u003ca name=\"AnalysisProcess\"\u003e\u003c/a\u003e\n\n- **Step 1** - **Gather relevant data** to create this analysis through publicly available open data sources.\n- **Step 2** - **Process data** to ensure that it is ready for Exploratory Data Analysis or EDA (Exploratory Data Analysis).\n- **Step 3** - **Explore data** to identify patterns and trends from the data that answer questions related to the business task.\n  - **Step 3.5** - **Visualize data** to gain a visual representation and better understanding of the data story. This is the second half of the EDA process.\n- **Step 4** - **Create a dashboard** to combine all the generated data visualizations and insights from the EDA process.\n- **Step 5** - Present **insights and recommendations** by exporting figures and charts created during EDA to create a comprehensive report and documentation and by creating a dynamic Tableau dashboard.\n\n## Step 1 - Gather relevant data 🧐 \u003ca name=\"Gatherrelevantdata\"\u003e\u003c/a\u003e\n\nThe [raw data](data/raw/listings.csv) was taken from [Inside AirBnb](https://insideairbnb.com/get-the-data/), an official AirBnb open data source that has AirBnb data from dozens of cities and countries around the world.\n\nFrom all of the cities and countries listed, I navigated to Tokyo, Japan, and extracted the listings.csv file since it is the best option for this analysis.\n\n## Step 2 - Process data 🔃 \u003ca name=\"Processdata\"\u003e\u003c/a\u003e\n\nIn this step of the process, the [clean data](/data/clean/cleaned_listings.csv) is created. This is the data that will be used for data exploration, visualization, and analysis.\n\nThe clean data is created using the [dataset-v1.0.py](scripts/data/dataset-v1.0.py) script shown below.\n\n\u003e🔎Info: I also converted the script into the jupyter notebook [jl-data-cleaning-v1.0.ipynb](notebooks/jl-data-cleaning-v1.0.ipynb). Click the link if you prefer viewing in a jupyter notebook format.\n\n\u003cdetails\u003e\n\n\u003csummary\u003e👀 see code for data processing \u003c/summary\u003e\n\n```python\n# Import necessary libraries\nimport os\nimport numpy as np\nimport pandas as pd\n\n# Read file from root .\\data\\raw\\\nscript_dir = os.path.dirname(__file__)\nlistings_file_path = os.path.join(script_dir, \"../../data/raw/listings.csv\")\n\n# Read the CSV file into a DataFrame\ndf_listings = pd.read_csv(listings_file_path)\n```\n\nRead data from the [raw data folder](data/raw/) and as a Pandas DataFrame.\n\n```python\n# Cleaning df_listings\nlistings_clean = (\n    df_listings.copy()\n)  # Creating copy of the df_listings before making changes\n\n# Cleaning column names since they contain white spaces\nlistings_clean.columns = listings_clean.columns.str.strip().str.lower()\nlistings_clean = (\n    listings_clean.drop(\n        columns=[\n            \"neighbourhood_group\",\n            \"minimum_nights\",\n            \"number_of_reviews\",\n            \"last_review\",\n            \"reviews_per_month\",\n            \"calculated_host_listings_count\",\n            \"availability_365\",\n            \"number_of_reviews_ltm\",\n            \"license\",\n        ]\n    ).drop_duplicates()  # Dropping duplicate data\n)\n\n# Quick check to see if changes were made\nlistings_clean.head()\nlistings_clean.info()\n\n# Replacing non-ASCII characters with blank spaces.\nlistings_clean[\"name\"] = listings_clean[\"name\"].apply(\n    lambda x: \"\" if any(ord(char) \u003e 127 for char in x) else x\n)\nlistings_clean[\"host_name\"] = listings_clean[\"host_name\"].apply(\n    lambda x: \"\" if any(ord(char) \u003e 127 for char in x) else x\n)\n\n# Replace empty strings in the 'price' column with NaN.\nlistings_clean[\"price\"] = pd.to_numeric(\n    listings_clean[\"price\"].replace(\"\", np.nan), errors=\"coerce\"\n)\n\n# Drop rows with NaN values in 'price'\nlistings_clean = listings_clean.dropna(subset=[\"price\"])\n\n# Convert to int64 (this removes decimal places)\nlistings_clean[\"price\"] = listings_clean[\"price\"].astype(int)\n\n# Create a copy of the cleaned listings DataFrame\ndf_listings_cleaned = listings_clean.copy()\n\nprint(df_listings_cleaned.head)\n```\n\nCode for data cleaning as seen in the [dataset-v1.0.py](scripts/data/dataset-v1.0.py) script.\n\n```python\n# Creating directory path for export of cleaned data.\nclean_data_dir = os.path.join(\"..\", \"..\", \"data\", \"clean\")\ncleaned_listings_export_path = os.path.abspath(\n    os.path.join(script_dir, clean_data_dir, \"cleaned_listings.csv\")\n)\n\n# Exporting cleaned data to directory.\ndf_listings_cleaned.to_csv(cleaned_listings_export_path, index=False)\nprint(\"Data Cleaning Completed!\")\n```\n\nexporting data to [processed data folder](data/processed/).\n\n\u003c/details\u003e\n\n## Step 3 - Explore data 🧭 \u003ca name=\"Exploredata\"\u003e\u003c/a\u003e\n\nIn this step of the process, the [clean data](data/clean/cleaned_listings.csv) is explored to get an overview of the data and to identify patterns and trends that we can derive insights from.\n\nData exploration on the [cleaned data](data/clean/cleaned_listings.csv) is done using the [eda-v1.0.py](scripts/data/eda-v1.0.py) script shown below.\n\n\u003e🔎Info: I conducted the data exploration using the `Jupyter Interactive Window` feature in VSCode. Thus, all of the output from this script is generated in the jupyter notebook [jl-data-exploration-v1.0.ipynb](notebooks/jl-data-exploration-v1.0.ipynb). Click the link to view the jupyter notebook with all the EDA outputs.\n\n\u003cdetails\u003e\n\n\u003csummary\u003e👀 see code for data exploration \u003c/summary\u003e\n\n```python\n# Import necessary libraries\nimport os\nimport numpy as np\nimport pandas as pd\n\n# Load the dataset\nscript_dir = os.path.dirname(__file__)\ndata_path = os.path.join(script_dir, \"../../data/clean/cleaned_listings.csv\")\ndf = pd.read_csv(data_path)\n\ndf.head()  # Inspect the first few rows\ndf.info()  # Get basic info about the dataset\ndf.isnull().sum()  # Check for missing values\ndf.describe()  # Summary statistics for numerical columns\ndf.median(numeric_only=True)  # Calculate Median for numerical columns\ndf.mode(numeric_only=True).iloc[0]  # Calculate Mode for numerical columns\ndf.nunique()  # Unique values count for categorical columns\n\n# Distribution of Listings Across Neighborhoods\ndf[\"neighbourhood\"].value_counts()\n\n# Correlation Analysis\n# Select only the numerical columns for the correlation matrix\nnumerical_df = df.select_dtypes(include=[np.number])\ncorrelation_matrix = numerical_df.corr()  # Create the correlation matrix\nprice_correlations = correlation_matrix[\"price\"].sort_values(\n    ascending=False\n)  # Focus on correlation with 'price'\nprint(\"Price Correlations:\\n\", price_correlations)\n\n# Distribution and Analysis of Key Metrics\n# Listings count by Host\nlistings_per_host = (\n    df.groupby(\"host_id\")\n    .size()\n    .sort_values(ascending=False)\n    .reset_index(name=\"listings_count\")\n)\nprint(\"Listings per Host:\\n\", listings_per_host)\n\n# Summary statistics for neighborhoods\nneighbourhood_stats = (\n    df.groupby(\"neighbourhood\")[\"price\"]\n    .agg([\"count\", \"mean\", \"median\", \"std\"])\n    .sort_values(\"count\", ascending=False)\n    .reset_index()\n)\nprint(\"Neighbourhood Stats:\\n\", neighbourhood_stats)\nprint(\"\\nEND OF EXPLORATORY DATA ANALYSIS!\")\n```\n\n\u003c/details\u003e\n\n### Step 3.5 - Visualize data 📈 \u003ca name=\"Visualizedata\"\u003e\u003c/a\u003e\n\nIn this step, I supported my exploratory data analysis with quick data visualization using matplotlib and seaborn to plot the data giving me a better visual understanding of the data story.\n\n\u003e🔎Info: I conducted the data visualization using the `Jupyter Interactive Window` feature in VSCode. Thus, all of the output from this script is generated in the jupyter notebook [jl-data-visualization-v1.0.ipynb](notebooks/jl-data-visualization-v1.0.ipynb). Click the link to view the jupyter notebook with all the EDA outputs.\n\n\u003cdetails\u003e\n\n\u003csummary\u003e👀 see code for data visualization \u003c/summary\u003e\n\n```python\nimport os\n\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport seaborn as sns\nimport utility.plots_cfg  # noqa: F401\nfrom utility.save_plots import export_figs\n\n\n# Load the dataset\nscript_dir = os.path.dirname(__file__)\ndata_path = os.path.join(script_dir, \"../data/clean/cleaned_listings.csv\")\ndf = pd.read_csv(data_path)\n\n\n# *1. Competition by Neighbourhood (Side-by-side chart)\n# Calculate average price per neighbourhood\navg_price_per_neighbourhood = df.groupby(\"neighbourhood\")[\"price\"].mean().reset_index()\navg_price_per_neighbourhood = avg_price_per_neighbourhood.sort_values(\n    by=\"price\", ascending=False\n)\n\n# Select the 2nd to 11th average price per neighbourhood\ntop_neighbourhoods = avg_price_per_neighbourhood.sort_values(\n    by=\"price\", ascending=False\n).iloc[1:11]\n\n# Filter the original dataframe for these neighbourhoods\nfiltered_df = df[df[\"neighbourhood\"].isin(top_neighbourhoods[\"neighbourhood\"])]\n\n# Count of \"id\" (listings) per neighbourhood\nlistings_count = (\n    filtered_df.groupby(\"neighbourhood\")[\"id\"]\n    .count()\n    .reset_index(name=\"listings_count\")\n)\n\n# Count of \"host_id\" per neighbourhood\nhosts_count = (\n    filtered_df.groupby(\"neighbourhood\")[\"host_id\"]\n    .nunique()\n    .reset_index(name=\"hosts_count\")\n)\n\n# Merge the counts into one dataframe for plotting\nmerged_counts = pd.merge(listings_count, hosts_count, on=\"neighbourhood\").sort_values(\n    by=\"listings_count\", ascending=False\n)\n\n# Melt the dataframe to prepare for a side-by-side barplot\nmelted_counts = merged_counts.melt(\n    id_vars=\"neighbourhood\",\n    value_vars=[\"listings_count\", \"hosts_count\"],\n    var_name=\"count_type\",\n    value_name=\"count\",\n)\n# Plot the data\nfig1, ax = plt.subplots(figsize=(10, 6))\nsns.barplot(x=\"neighbourhood\", y=\"count\", hue=\"count_type\", data=melted_counts, ax=ax)\nax.set_title(\"Competition by Neighbourhood\")\nax.set_xlabel(\"Neighbourhood\")\nax.set_ylabel(\"Count\")\nplt.xticks(rotation=45)\nplt.tight_layout()\n\nplt.show()\n\n\n# *2. Pricing \u0026 Competition Correlation (Scatter plot)\n# Calculate the count of \"id\" and average price per \"neighbourhood\"\nfiltered_df2 = (\n    filtered_df.groupby(\"neighbourhood\")\n    .agg(id_count=(\"id\", \"count\"), average_price=(\"price\", \"mean\"))\n    .sort_values(by=\"average_price\", ascending=True)\n    .reset_index()\n)\n\n# Plot the data\nfig2, ax = plt.subplots(figsize=(8, 5))\nsns.regplot(x=\"id_count\", y=\"average_price\", data=filtered_df2, ci=None, ax=ax)\nax.set_title(\"Pricing \u0026 Competition Correlation\")\nax.set_xlabel(\"Number of Listings\")\nax.set_ylabel(\"Average Price\")\nax.set_ylim(0, None)\nplt.tight_layout()\n\nplt.show()\n\n\n# *3. AVG Pricing by Neighbourhood (Bar chart)\nfig3, ax = plt.subplots(figsize=(10, 6))\nsns.barplot(\n    x=\"average_price\",\n    y=\"neighbourhood\",\n    data=filtered_df2.sort_values(by=\"average_price\", ascending=False),\n    palette=\"coolwarm\",\n    ax=ax,\n    orient=\"h\",\n)\nax.set_title(\"Average Pricing by Neighbourhood\")\nax.set_xlabel(\"Neighbourhood\")\nax.set_ylabel(\"Average Price\")\nplt.xticks(rotation=45)\nplt.tight_layout()\n\nplt.show()\n\n\n# *4. Popular Property Types by Neighbourhood (Bar chart)\n# Calculate the count of room types per neighbourhood\nroom_counts = (\n    filtered_df.groupby([\"neighbourhood\", \"room_type\"]).size().reset_index(name=\"count\")\n)\n\n# Determine the total count per neighbourhood\nneighbourhood_order = (\n    room_counts.groupby(\"neighbourhood\")[\"count\"]\n    .sum()\n    .sort_values(ascending=False)\n    .index\n)\n\n# Plot the bar chart\nfig4, ax = plt.subplots(figsize=(12, 7))\nsns.countplot(\n    x=\"neighbourhood\",\n    hue=\"room_type\",\n    data=filtered_df,\n    palette=\"viridis\",\n    ax=ax,\n    order=neighbourhood_order,  # Apply the sorted order\n)\nax.set_title(\"Popular Property Types by Neighbourhood\")\nax.set_xlabel(\"Neighbourhood\")\nax.set_ylabel(\"Count of Property Types\")\nplt.xticks(rotation=45)\nplt.tight_layout()\n\nplt.show()\n\n\n# *5. Host Analysis Based on Listing Volume (Histogram)\nfiltered_df[\"listings_per_host\"] = filtered_df.groupby(\"host_id\")[\"id\"].transform(\n    \"count\"\n)\nfig5, ax = plt.subplots(figsize=(10, 6))\nsns.histplot(filtered_df[\"listings_per_host\"], bins=30, kde=True, color=\"Blue\", ax=ax)\nax.set_title(\"Host Analysis: Listings per Host\")\nax.set_xlabel(\"Number of Listings per Host\")\nax.set_ylabel(\"Frequency\")\nplt.tight_layout()\n\nplt.show()\n\n\n# *6. Correlation Analysis Visualization\nnumerical_df = filtered_df.select_dtypes(include=[float, int])\ncorrelation_matrix = numerical_df.corr()\n\n# Correlation Heatmap\nfig6, ax = plt.subplots(figsize=(12, 8))\nsns.heatmap(correlation_matrix, annot=True, cmap=\"coolwarm\", fmt=\".2f\", ax=ax)\nax.set_title(\"Correlation Heatmap of Numerical Features\")\n\nplt.show()\n\n\n# *7.Correlation with 'price'\nprice_correlations = correlation_matrix[\"price\"].sort_values(ascending=False)\nfig7, ax = plt.subplots(figsize=(10, 6))\nprice_correlations.drop(\"price\").plot(kind=\"bar\", color=\"skyblue\", ax=ax)\nax.set_title(\"Correlation of Features with Price\")\nax.set_xlabel(\"Features\")\nax.set_ylabel(\"Correlation Coefficient\")\nplt.xticks(rotation=45)\nplt.tight_layout()\n\nplt.show()\n\n\nscript_dir = os.path.dirname(__file__)\nexport_dir = os.path.join(script_dir, \"../reports/figures/\")\nfigures = [\n    (fig1, \"competition_by_neighbourhood.png\"),\n    (fig2, \"pricing_and_competition_correlation.png\"),\n    (fig3, \"average_pricing_by_neighbourhood.png\"),\n    (fig4, \"popular_property_types_by_neighbourhood.png\"),\n    (fig5, \"listings_per_host_histogram.png\"),\n    (fig6, \"correlation_heatmap.png\"),\n    (fig7, \"correlation_with_price.png\"),\n]\n\nfor index, (fig, filename) in enumerate(figures, start=1):\n    export_figs(export_dir, fig, index, filename)\n\nprint(\"Figures exported to ../reports/figures/\")\n\n```\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\n**Charts generated using Matplotlib and Seaborn**\n\nFigure 1 - Competition by Neighbourhood \u003ca name=\"fig1\"\u003e\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"reports/figures/fig_001_competition_by_neighbourhood.png\"\u003e\n        \u003cimg src=\"reports/figures/fig_001_competition_by_neighbourhood.png\" alt=\"fig_001\" width=\"650\"\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003e👀 see insights\u003c/b\u003e\u003c/summary\u003e\n\n- **Least Competitive Neighborhoods: (Top 5)**\n  - **Chuo Ku** so far leads in all categories being the second to the highest in terms of average price (¥26,597) but having relatively low competition with only 49 competitor hosts and 232 listings.\n  - Other less competitive neighborhoods include **Ome Shi** and **Meguro Ku**, with minimal listings (21 and 49, respectively) and hosts (15 and 49), presenting further opportunities for market penetration with less competitive pressure.\n\n- **Least Competitive Neighborhoods:**\n  - **Ome Shi** and **Meguro Ku** have the fewest listings (21 and 49, respectively) with only 15 and 49 hosts, making them potentially lucrative areas for new entrants.\n  - These neighborhoods have fewer competitors while still maintaining relatively high average prices, suggesting potential for growth with less risk.\n\n- **Most Competitive Neighborhoods:**\n  - **Shinjuku Ku** and **Taito Ku** lead in competition with the highest number of listings (2,897 and 1,711, respectively).\n  - **Shibuya Ku** has fewer listings (977) but maintains a high average rate, suggesting it is a sought-after location with strong demand.\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\nFigure 2 - Pricing and Competition Correlation \u003ca name=\"fig2\"\u003e\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"reports/figures/fig_001_competition_by_neighbourhood.png\"\u003e\n        \u003cimg src=\"reports/figures/fig_002_pricing_and_competition_correlation.png\" alt=\"fig_002\" width=\"650\"\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003e👀 see insights\u003c/b\u003e\u003c/summary\u003e\n\n- **Prince and Competition Correlation:**\n  - A relatively **flat trend line** in this correlation chart indicates that there is **little to no correlation** between average prices per neighbourhood and the number of listings per neighbourhood across the top 10 neighbourhoods.\n  - This means **higher competition does not mean lower prices** and **higher prices do not mean lower competition**.\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\nFigure 3 - Average Pricing by Neighbourhood \u003ca name=\"fig3\"\u003e\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"reports/figures/fig_001_competition_by_neighbourhood.png\"\u003e\n        \u003cimg src=\"reports/figures/fig_003_average_pricing_by_neighbourhood.png\" alt=\"fig_003\" width=\"650\"\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003e👀 see insights\u003c/b\u003e\u003c/summary\u003e\n\n- **Highest Average Room Rates:**\n  - **Top 5 neighborhoods** with the highest average room rates are **Shibuya Ku (¥27,029)**, **Chuo Ku (¥26,597)**, **Minato Ku (¥25,748)**, **Taito Ku (¥24,928)**, and **Ome Shi (¥24,858)**.\n  - These neighborhoods have the highest overall average rate across the top 10 neighborhoods which is ¥24,173, indicating a healthy market for premium-priced listings.\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\nFigure 4 - Popular Property Types by Neighbourhood \u003ca name=\"fig4\"\u003e\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"reports/figures/fig_001_competition_by_neighbourhood.png\"\u003e\n        \u003cimg src=\"reports/figures/fig_004_popular_property_types_by_neighbourhood.png\" alt=\"fig_004\" width=\"650\"\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\u003cb\u003e👀 see insights\u003c/b\u003e\u003c/summary\u003e\n\n- **Room Types Popularity:**\n  - **Entire home/apartment** room types are the most popular across neighborhoods followed by **Private room**. The gap between **Entire home/apartment** and **Private room** room types is relatively large, especially in the neighborhoods where the number of listings is high.\n  - Higher average prices in these neighborhoods coupled with data that shows higher listings **Entire home/apartment** and **Private room** indicates a strong demand for more premium room types.\n\n\u003c/details\u003e\n\n\u003cbr /\u003e\n\nOther figures can be found in the [reports/figures](/reports/figures) folder.\n\n## Step 4 - Create a dashboard 📊 \u003ca name=\"Createdashboard\"\u003e\u003c/a\u003e\n\nUtilized **Tableau** to combine all the generated data visualizations and insights from the exploratory data analysis into one dashboard for a more birds-eye-view of the data.\n\n[View Dashboard in Tableau Public](https://public.tableau.com/views/Book3_17249856024470/Dashboard2?:language=en-US\u0026:sid=\u0026:redirect=auth\u0026:display_count=n\u0026:origin=viz_share_link) to experience the dynamic dashboard for yourself.\n\n\u003e💡Tip: Once you are in the Tableau Public dashboard, try clicking on the bards in the chart and zooming into the map to see data for specific neighborhoods.\n\n[![Dashboard](reports/figures/Tokyo_Airbnb_Competition_and_Pricing.png)](https://public.tableau.com/views/Book3_17249856024470/Dashboard2?:language=en-US\u0026:sid=\u0026:redirect=auth\u0026:display_count=n\u0026:origin=viz_share_link)\n\nAs the original goal of the analysis was to determine competition and pricing in Tokyo, the dashboard was created with that main purpose in mind, to provide a comprehensive view of the data.\n\n## Step 5 - Insights and Recommendations 🧠 \u003ca name=\"inightsandrecommendations\"\u003e\u003c/a\u003e\n\n### Insights ❕ \u003ca name=\"Insights\"\u003e\u003c/a\u003e\n\n\u003cbr /\u003e\n\n- **Highest Average Room Rates:** *see [Figure 3](#fig3)*\n  - **Top 5 neighborhoods** with the highest average room rates are **Shibuya Ku (¥27,029)**, **Chuo Ku (¥26,597)**, **Minato Ku (¥25,748)**, **Taito Ku (¥24,928)**, and **Ome Shi (¥24,858)**.\n  - These neighborhoods have the highest overall average rate across the top 10 neighborhoods which is ¥24,173, indicating a healthy market for premium-priced listings.\n\n\u003cbr /\u003e\n\n- **Least Competitive Neighborhoods: (Top 5)** *see [Figure 1](#fig1)*\n  - **Chuo Ku** so far leads in all categories being the second to the highest in terms of average price (¥26,597) but having relatively low competition with only 49 competitor hosts and 232 listings.\n  - Other less competitive neighborhoods include **Ome Shi** and **Meguro Ku**, with minimal listings (21 and 49, respectively) and hosts (15 and 49), presenting further opportunities for market penetration with less competitive pressure.\n  \n\u003cbr /\u003e\n\n- **Least Competitive Neighborhoods:** *see [Figure 1](#fig1)*\n  - **Ome Shi** and **Meguro Ku** have the fewest listings (21 and 49, respectively) with only 15 and 49 hosts, making them potentially lucrative areas for new entrants.\n  - These neighborhoods have fewer competitors while still maintaining relatively high average prices, suggesting potential for growth with less risk.\n\n\u003cbr /\u003e\n\n- **Most Competitive Neighborhoods:** *see [Figure 1](#fig1)*\n  - **Shinjuku Ku** and **Taito Ku** lead in competition with the highest number of listings (2,897 and 1,711, respectively).\n  - **Shibuya Ku** has fewer listings (977) but maintains a high average rate, suggesting it is a sought-after location with strong demand.\n\n\u003cbr /\u003e\n\n- **Prince and Competition Correlation:** *see [Figure 2](#fig2)*\n  - A relatively **flat trend line** in this correlation chart indicates that there is **little to no correlation** between average prices per neighbourhood and the number of listings per neighbourhood across the top 10 neighbourhoods.\n  - This means **higher competition does not mean lower prices** and **higher prices do not mean lower competition**.\n\n\u003cbr /\u003e\n\n- **Room Types Popularity:** *see [Figure 4](#fig4)*\n  - **Entire home/apartment** room types are the most popular across neighborhoods followed by **Private room**. The gap between **Entire home/apartment** and **Private room** room types is relatively large, especially in the neighborhoods where the number of listings is high.\n  -Higher average prices in these neighborhoods coupled with data that shows higher listings **Entire home/apartment** and **Private room** indicates a strong demand for more premium room types.\n\n\u003cbr /\u003e\n\n### Recommendations ❕ \u003ca name=\"Recommendations\"\u003e\u003c/a\u003e\n\n- **Capitalize on Chuo Ku's High Price and Low Competition:** Focus on entering the market in **Chuo Ku**, where the potential for high earnings meets relatively low competition. Developing properties with unique offerings or upscale amenities could attract premium guests and maximize profits.\n\n\u003cbr /\u003e\n\n- **Capitalize on High-Rate Neighborhoods:** Maintain a presence in premium areas like **Shibuya Ku** and **Minato Ku**. Consider investing in unique or high-end properties that cater to international tourists and business travelers, given their willingness to pay above-average rates.\n\n\u003cbr /\u003e\n\n- **Differentiate in Competitive Markets:** In more saturated areas like **Taito Ku**, **Shibuya Ku**, and **Minato Ku**, stand out by offering specialized stays (e.g., themed properties or local partnerships) that cater to niche markets or unique guest experiences.\n\u003cbr /\u003e\n\n- **Expand in Low-Competition Areas:** Target other less competitive neighborhoods like **Ome Shi** for new listings, leveraging the neighborhood's untapped potential while maintaining competitive pricing.\n\n\u003cbr /\u003e\n\n- **Explore Room Type Demand:** Further analysis is needed to understand room type preferences in these neighborhoods. Focus on offering a mix of room types (e.g., entire homes, private rooms) tailored to the target audience's needs in the selected neighborhoods.\n\n### Conclusion ❕ \u003ca name=\"Conclusion\"\u003e\u003c/a\u003e\n\nBy strategically entering low-competition, high-potential neighborhoods such as **Chuo Ku** and effectively differentiating offerings in more competitive areas, Airbnb hosts can optimize profitability and gain a stronger foothold in Tokyo's dynamic market. Further understanding of room type demand will refine these strategies, ensuring a successful and sustainable Airbnb business.\n\n📝 **Let's Connect!**\n\n[![LinkedIn](https://img.shields.io/badge/-LinkedIn-0077B5?style=flat-square\u0026logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/mrjxtr)\n[![Upwork](https://img.shields.io/badge/-Upwork-6fda44?style=flat-square\u0026logo=upwork\u0026logoColor=white)](https://www.upwork.com/freelancers/~01f2fd0e74a0c5055a?mp_source=share)\n[![Facebook](https://img.shields.io/badge/-Facebook-1877F2?style=flat-square\u0026logo=facebook\u0026logoColor=white)](https://www.facebook.com/mrjxtr)\n[![Instagram](https://img.shields.io/badge/-Instagram-E4405F?style=flat-square\u0026logo=instagram\u0026logoColor=white)](https://www.instagram.com/mrjxtr)\n[![Threads](https://img.shields.io/badge/-Threads-000000?style=flat-square\u0026logo=threads\u0026logoColor=white)](https://www.threads.net/@mrjxtr)\n[![Twitter](https://img.shields.io/badge/-Twitter-1DA1F2?style=flat-square\u0026logo=twitter\u0026logoColor=white)](https://twitter.com/mrjxtr)\n[![Gmail](https://img.shields.io/badge/-Gmail-D14836?style=flat-square\u0026logo=gmail\u0026logoColor=white)](mailto:youremail@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrjxtr%2Ftokyo_airbnb_analysis_project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrjxtr%2Ftokyo_airbnb_analysis_project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrjxtr%2Ftokyo_airbnb_analysis_project/lists"}