SQL — Analýza pražských pronájmů Airbnb

Zpět na blog

SQL — Analýza pražských pronájmů Airbnb

sql sqlite airbnb analýza

Dnešní doba má pro datové analytiky spoustu výhod. Jednou z nich je i to, že velké firmy běžně sdílejí svoje data s veřejností. Nesdílejí samozřejmě úplně vše, ale to, co dávají k dispozici, bývá zajímavým zdrojem informací.

Data z Airbnb

Airbnb poskytuje několik datových sad, které si můžete stáhnout zcela volně a bez registrace.

Data, která pro naši dnešní datovou analýzu použijeme, jsou z března 2022. Airbnb nabízí i několik starších, archivních datových sad. To pro případ, že bychom potřebovali srovnat, jak se situace vyvíjela v průběhu času (např. během epidemie, po různých regulacích, apod.).

V tomto článku použijeme soubor listings.csv a uložíme ho pod názvem airbnb-prague-listings.csv.

Tato sada obsahuje souhrnné informace a metriky pro pronájmy a ubytování v Praze, které jsou dle autorů vhodné pro vizualizace. Tak uvidíme.

Struktura dat

Soubor (tabulka) obsahuje následující sloupce:

  • id
  • name
  • host_id
  • host_name
  • neighbourhood_group
  • neighbourhood
  • latitude
  • longitude
  • room_type
  • price
  • minimum_nights
  • number_of_reviews
  • last_review
  • reviews_per_month
  • calculated_host_listings_count
  • availability_365
  • number_of_reviews_ltm
  • license

I když jsou názvy většiny sloupců popisné a zřejmé, je vždy dobré mít po ruce Data Dictionary, které nám význam jednotlivých položek vysvětlí.

Lokální datová analytika

Další z výhod, které si dnes datoví analytici užívají, je výběr z obrovského množství nástrojů. Mnoho z nich je zdarma a často fungují na lokálním PC.

Věděli jste, že databáze SQLite, kterou pro tuto analýzu používáme má limit velikosti databáze neuvěřitelných 281 terabyte!

Kdo by si ještě před pár lety představil, že bude bez problémů analyzovat na svém PC desítky nebo i stovky milionů řádků?

DB Browser for SQLite

Než vůbec začneme data analyzovat, převedeme zdrojový soubor CSV do SQL tabulky. SQL je ideální jazyk, který nám pomůže snadno a rychle zkoumat data.

Jako SQL databázi využijeme SQLite, která je součástí nástroje s mírně krkolomným názvem DB Browser for SQLite. Ten umí spoustu věcí a navíc je zdarma.

Pokud DB Browser for SQLite na svém PC nemáte, bude se vám hodit tento návod.

Rychlé grafy

Skvělou funkcionalitou DB Browseru je možnost jednoduchého vytváření vizualizací. Stačí pár kliknutí a zobrazí se graf, který je propojen s daty v tabulce. Barvy můžete měnit a graf také snadno uložíte do souboru.

DB Browser Plot

Pokud se vám možnost Plot nezobrazuje, zapněte jí v menu Pohled -> Plot.

Vytvoření nové databáze

Nejdřív si vytvoříme novou, prázdnou databázi.

Do ní naimportujeme CSV soubor airbnb-prague-listings.csv, který automaticky vytvoří novou tabulku s názvem airbnb-prague-listings.

Krok 1

Krok 2

Krok 3

Krok 4

Krok 5

Takto jednoduše získáme z textového CSV souboru SQL databázi, díky které můžeme analyzovat data lokálně. Velmi rychlé a praktické.

Praha a Airbnb

Airbnb zveřejňuje vybrané pražské statistiky na webu. My se jimi budeme inspirovat, ale nebudeme je na 100 % kopírovat.

I když jsou v datové sadě ceny za noc uvedené v lokální měně (tedy v Kč), na výše uvedené stránce se zobrazují v amerických dolarech. Pouhým selským rozumem ale odhalíme, že průměrná cena ubytování $3505/noc (asi 82000 Kč) je nereálná.

Celkový počet záznamů

Kolik je záznamů v souboru, který jsme si stáhli? Na to odpoví jednoduché SQL.

SELECT COUNT(*) AS "Celkový počet"
FROM "airbnb-prague-listings"
;
Celkový počet
-------------
6632

Zápasíte s SQL? Získejte nové dovednosti v SQL kurzech, kterým věří největší společnosti a státní instituce.

Typ pokoje

Hostitelé na Airbnb mohou nabízet celé domy, byty, soukromé anebo sdílené pokoje. Nověji také hotelové pokoje.

Tento SQL dotaz nám ukáže, jakých typů ubytování je v Praze nejvíc.

WITH airbnb AS (
	SELECT room_type, COUNT(*) AS "Počet"
	FROM "airbnb-prague-listings"
	GROUP BY room_type
	ORDER BY 2 DESC
)
SELECT *, ROUND(((0.0+"počet")/SUM("počet") OVER()) * 100, 2) || '%' AS "Podíl"
FROM airbnb
;
room_type       | Počet | Podíl
----------------|-------|--------
Entire home/apt | 5095  | 76.82%
Private room    | 1208  | 18.21%
Hotel room      | 234   | 3.53%
Shared room     | 95    | 1.43%

Airbnb Typ pokoje

Všimli jste si způsobu, jakým počítáme podíl v procentech? SQLite (stejně jako další RDBMS) umí pokročilé agregační funkce, které jsou nazývány window functions nebo také analytical functions. Takové funkce dokáží pracovat s hodnotami z více řádků. My jsme využili SUM, abychom dostali celkový součet jednotlivých typů pokojů. Díky tomu pak snadno spočítáme podíl v procentech.

Průměrná doba pobytu

Co myslíte, bude v nabídce pražských Airbnb pronájmů více krátkodobých nebo dlouhodobých pobytů?

Airbnb definuje pobyty s minimální délkou pobytu do 30 dnů jako krátkodobé. Použijeme tedy stejnou definici.

WITH airbnb AS (
	SELECT minimum_nights,
		CASE 
			WHEN minimum_nights < 30 THEN 'Krátkodobý pronájem' 
			ELSE 'Dlouhodobý pronájem' 
		END AS Typ
	FROM "airbnb-prague-listings"
)
SELECT Typ, COUNT(*) AS "Počet"
FROM airbnb
GROUP BY Typ
ORDER BY "Počet" DESC
;

Airbnb Průměrná doba pobytu

Na první pohled je jasné, že nabídka krátkodobých pobytů převažuje. To není nic překvapivého, protože cílová skupina pronajímatelů jsou hlavně turisté, kteří nebudou v bytě bydlet dlouho.

Airbnb sice tvrdí, že se trh přesunul k dlouhodobějším pobytům, ale v případě Prahy to určitě neplatí.

Průměrná cena

Kolik stojí noc v Praze? Pokud bychom zahrnuli do výpočtu průměrné ceny všechny záznamy, byl by výsledek hodně zkreslený.

SELECT neighbourhood, 
	COUNT(price) AS "Počet ubytování",
	CAST(AVG(price) AS INTEGER) AS "Průměrná cena"
FROM "airbnb-prague-listings"
WHERE last_review > '2021-10-01'
	AND neighbourhood LIKE 'Praha%'
GROUP BY neighbourhood
HAVING "Počet ubytování" > 10
ORDER BY "Průměrná cena" DESC
LIMIT 5
;
neighbourhood | Počet ubytování | Průměrná cena
--------------|-----------------|---------------
Praha 1       | 1531            | 2515
Praha 7       | 158             | 2072
Praha 2       | 559             | 1950
Praha 3       | 341             | 1784
Praha 13      | 22              | 1721

Airbnb Průměrná cena

Určitě jste si všimli, že jsme pro výpočet uplatnili následující omezení:

  • Ubytování, které bylo hodnoceno během posledních 6 měsíců
  • Název čtvrti začíná na Praha
  • Čtvrť má v nabídce více než 10 ubytování, aby nám příliš malý počet nezkreslil výsledky
  • Pouze TOP 5 podle ceny

Počet nabídek jednotlivých hostitelů

Někteří hostitelé Airbnb nabízí více než jedno ubytování. Mohou nabízet samostatné pokoje v jednom bytě nebo více bytů či domů jako celek.

Hostitele s více nabídkami můžeme považovat za podnikatele, kteří ve všech nemovitostech určitě nebydlí.

WITH airbnb AS (
	SELECT DISTINCT host_name || ' (' || host_id || ')' AS "Hostitel", 
		calculated_host_listings_count,
		CASE calculated_host_listings_count WHEN 1 THEN 'Jedno' ELSE 'Více' END AS "Počet ubytování"
	FROM "airbnb-prague-listings"
)
SELECT "Počet ubytování", COUNT(*) AS "Počet"
FROM airbnb
GROUP BY "Počet ubytování"

Airbnb Počet ubytování hostitelů

Výsledek ukazuje, že téměř polovina hostitelů nabízí více než jedno ubytování.

Pražští ubytovací magnáti

Kdo má v nabídce nejvíc ubytování? A o jakém počtu nabídek za jednoho hostitele se vůbec bavíme? Jsou to jednotky, desítky nebo ještě víc?

Pro zajímavost se také podíváme, za jakou průměrnou cenu za noc ubytování nabízí.

SELECT host_name || ' (' || host_id || ')' AS "Hostitel", 
	calculated_host_listings_count, 
	CAST(AVG(price) AS INTEGER) AS "Průměrná cena/noc"
FROM "airbnb-prague-listings"
GROUP BY Hostitel, calculated_host_listings_count
ORDER BY calculated_host_listings_count DESC
LIMIT 5
Hostitel                    | calculated_host_listings_count | Průměrná cena/noc
----------------------------|--------------------------------|-------------------
Josef (8087351)             | 86                             | 2113
Michal & Friends (52431987) | 76                             | 2537
Anton & Vika (9550037)      | 65                             | 2060
Prague For You (1167781)    | 58                             | 4405
Klara (5282)                | 55                             | 3970

Airbnb Ubytovací magnáti

Poznámka: Pro analýzu nebyly použity žádné soukromé informace. Jména, nabídky a další údaje o recenzích jsou veřejně přístupné na stránkách Airbnb.

Závěrem

Jako při každé analýze, je potřeba vzít v úvahu nejen data samotná, ale i data která nejsou k dispozici a také širší souvislosti. Profesionální analytik nikdy nesklouzne k rychlým a zjednodušujícím interpretacím.

Nejlepší analytici proto vždy kromě dat používají selský rozum.


Líbil se vám článek? Sdílejte ho s ostatními

nebo nám napište něco hezkého. Děkujeme!

Zpět na blog

Python pro každý den

Jak si užít Python a nezabloudit v kódu

Zobrazit knihu

Úvod do jazyka R

Naučte se efektivní datovou analýzu.

Zobrazit kurz

Pandas - analýza a zpracování dat

Naučte se základy Pandas - pythonovské knihovny, která je standardem pro analýzu a zpracování dat.

Zobrazit kurz

Hledáme další autory

Publikujte na Lovely Blogu a inspirujte ostatní! Sdílením svých znalosti si budujete osobní značku.

Kontaktujte nás

Odběr novinek

Novinky, návody a tipy přímo do vašeho emailu.

Copyright © 2018-2024, Colorbee, s.r.o.

Designed by grafikli.cz in Prague.