Explore, visualize, and understand DC’s Airbnb landscape—interactive dashboards and maps powered by open data and modern web tech.
🔗 Live Website
🔗 Tableau Dashboard
🔗 Exploratory Data Analysis (EDA)
⚠️ ℹ️ Status: This project is under active, rapid refinement. Adding a summary analysis and updating the dashboard for the GitHub Pages version.
- Project Overview
- Features
- Tools & Technologies
- Usage
- Gallery
- References
- License
- Acknowledgements
- Author
This full-stack project explores the landscape of short-term rentals in Washington, DC. Using data from Inside AirBnB, it combines:
- A live, interactive web dashboard hosted on GitHub Pages
- A Tableau story-style EDA for strategic analysis
- A PostgreSQL backend with Flask and Django implementations
- A Jupyter-based ETL pipeline that transforms and loads data for multiple outputs
The goal is to visualize the availability, pricing, and neighborhood distribution of short-term rentals and highlight interesting patterns in the DC vacation rental market.
- Dynamic map with multiple layers and neighborhood overlays
- Interactive plots aggregating neighborhood trends
- Tableau dashboard for filtering and exploring rental trends
- Clean ETL pipeline to prep and load data across platforms
- Choropleth and bubble maps to compare neighborhoods
- Flask and Django versions for backend experimentation
- Mobile-friendly static version with JavaScript interactivity
- Data: Inside AirBnB, CSV, PostgreSQL, SQLite
- Backend: Flask, Django, SQL, Jupyter, Pandas
- Frontend: JavaScript, Plotly, Leaflet, Bootstrap, HTML/CSS
- Visualization: Tableau, Choropleths, Bubble Maps, Plotly
- Deployment: GitHub Pages, Tableau Public
- Visit GitHub Pages version
- Explore listings, prices, and availability
- Navigate through the embedded Tableau dashboard
- Edit and run
./notebooks/data_pipeline_postgres_export.ipynbto clean and update source data - Automatically loads PostgreSQL tables and exports data for Flask and GitHub Pages
- Flask app:
flask/app.py(pulls from PostgreSQL) - Django app:
django/django_airbnb_dc(uses SQLite)
Restore the included PostgreSQL backup:
pg_restore -U <username> -d <dbname> -1 airbnb.backup- Run all cells in
./notebooks/data_pipeline_postgres_export.ipynbto update the source data - Recheck plotPriceAvailability annotations in
plots.jsafter updates - Review
schema.sqlandneighbourhoods_dictindata_processing.ipynb - Export updated
map_listingsandprice_availabilityviews to CSV for GitHub Pages - Leave Tableau as-is (June 2024)
The Flask / Django version of the price-availability chart has formatting issues. Be sure to toggle the allDCData filter correctly in plotPriceAvailability().
Tableau Dashboard:
Web Dashboards Plots:
Interactive Map:
Entity Relationship Diagram:
Parts of this project served as capstones for two of HarvardX’s free online computer science courses:
Dataset provided by Inside AirBnB.
Neighborhood population and housing unit data from Census Reporter.
Creative Commons Attribution 4.0 International License
- Thanks to Imen Najar for early insights and support.
- Thanks to Geronimo Perez for feedback and assistance during development.
Bryan Johns, October 2024
[email protected] | LinkedIn | GitHub | Portfolio
— Fluent in Data. Fluent in Human.












