Почему все едут в Исландию?

Я пытаюсь понять рост туризма в Исландии с помощью общедоступных источников данных.

Halló aftur! (И снова здравствуйте на исландском). В свободное время я с удовольствием смотрю видео на YouTube по самым разным темам, от фотографии, кинематографии, футбола, комедии и т. Д. Я недавно начал следить за каналом Джонни Харриса после просмотра его видео о создании студии мечты и наткнулся на его анализ того, почему туризм в Исландии резко выросла (ссылка ниже). Я всегда хотел посетить Исландию с моим другом фотографом Пабло из-за красивых пейзажей страны.

В этом посте я решил попытаться понять, почему в Исландии наблюдается такой стремительный рост туризма, используя общедоступные источники данных. Само видео хорошо объясняет внезапный всплеск / всплеск туризма и дает несколько веских причин. Я хочу здесь не опровергать его аргументы, а скорее использовать данные, чтобы увидеть, что я из них узнаю. Я нахожу общедоступные источники данных, очищаю данные, визуализирую их и делаю прогнозы с помощью Facebook Prophet.

Источники данных

Свое расследование я начал так же, как в колледже, когда писал исследовательскую работу: поиски в Google. Я пытался найти актуальные общедоступные наборы данных, которые я мог бы загрузить и проанализировать. Я остановился на трех основных наборах данных, ссылки на которые я прикрепил сюда:

  1. Посетители Исландии через аэропорт Кефлавик: это главный узел международных перевозок. Я не нашел статистику по всем посетителям со всех транспортных узлов, но решил, что это хорошая выборка из всей совокупности.
airport = pd.read_excel(“/Users/stephenhyungilkim/Desktop/Iceland/hola.xlsx”, parse_dates=[“year”], index_col=”year”, freq=’Y’)
airport.head(5)

2. Список фактов Исландия: это было получено от Всемирного банка, и я сократил его до 20 наиболее важных факторов. Всего было более +150 разных категорий, и я сократил их до самых интересных для себя.

Https://data.worldbank.org/country/iceland

facts = pd.read_csv(“/Users/stephenhyungilkim/Desktop/Iceland/chau.csv”, parse_dates=[“Date”], index_col=”Date”)
facts.head(5)

Вот список всех сокращенных столбцов:

3. Годовое количество пассажиров авиакомпаний: иностранные посетители, прибывшие в Исландию по воздуху и по морю с 1949 по 2017 год.

visitor = pd.read_excel(“/Users/stephenhyungilkim/Desktop/Iceland/foreign-visitors-to-iceland-1949–2017.xls”,parse_dates=[“Date”])
#Foreign visitor arrivals by air and sea to Iceland 1949–2017
visitor.head(5)

Предварительная обработка данных

Facebook Prophet требует, чтобы данные были в определенном формате, чтобы соответствовать модели и делать прогнозы. Я использовал набор данных 3, чтобы сделать прогноз Facebook Prophet, поскольку он содержал переменную, которую я искал, - количество посетителей. Однако два других набора данных (1 и 2) также интересны с точки зрения корреляции, закономерностей и т. Д.

visitor[‘Date’] = pd.DatetimeIndex(visitor[‘Date’])
visitor.dtypes

Убедитесь, что набор данных является временным рядом:

visitor = visitor.drop([‘percentage change’], axis=1)

Я сбрасываю процентное изменение и оставляю только дату и количество посетителей. Мы сделаем прогноз количества посетителей на будущие даты, которые мы укажем позже.

visitor = visitor.rename(columns={‘Date’: ‘ds’,
 ‘visitors’: ‘y’})
visitor.head(5)

Столбцы должны быть переименованы в "ds", что соответствует дате, и "y", что является переменной, значение для которой мы прогнозируем.

Мы готовы использовать Facebook Prophet, но прежде давайте визуализируем этот и два других набора данных.

Визуализация данных

Начнем с визуализации первого набора данных. В США явно много заинтересованных туристов… не знаю, почему, возможно, молва и более дешевые авиабилеты способствуют этому (я хотел проанализировать стоимость авиабилетов, но не смог найти общедоступных данных…).

airport.plot(figsize=(15,10))
plt.title(‘Visitors to Iceland Through Keflavik Airport’)
plt.ylabel(‘Visitors’)
plt.xlabel(‘Date’)

Давайте теперь посмотрим на набор данных №2. Поскольку у нас так много разных переменных, я начну с correlation_matrix в порядке убывания. Существуют очевидные подозреваемые, такие как «Воздушный транспорт, перевозимые пассажиры» и «Международный туризм, количество прибытий» сильно коррелированы, поскольку больше пассажиров = больше прибытий, но есть и другие, такие как «Отношение ликвидных резервов банка к активам банка (%)» и « ВНД на душу населения (в нынешней национальной валюте) более удивительны и провокационны.

corr_matrix = facts.corr()
corr_matrix[“International tourism, number of arrivals”].sort_values(ascending=False)

Я также пробовал использовать гистограмму, но она оказалась не такой полезной, как я думал, поэтому я ее не использовал…

Теперь посмотрим на набор данных №3.

ax = visitor.set_index(‘ds’).plot(figsize=(15,10))
ax.set_ylabel(‘Monthly Number of Airline Passengers’)
ax.set_xlabel(‘Date’)
#ax.set_yscale(‘log’)
plt.show()

Как сказал Джонни Харрис в видео, вы видите стремительный рост количества пассажиров с течением времени. Поскольку масштаб слишком велик, я сделал график логарифмической шкалой. Тот же код, за исключением еще одной строки:

ax = visitor.set_index(‘ds’).plot(figsize=(15,10))
ax.set_ylabel(‘Monthly Number of Airline Passengers’)
ax.set_xlabel(‘Date’)
ax.set_yscale(‘log’)
plt.show()

Прогнозирование с помощью Facebook Prophet

Хотя я в основном применяю модели машинного обучения из библиотеки scikitlearn из-за их простоты, я хотел попробовать прогнозирование временных рядов с помощью Facebook Prophet. Я прочитал статью, написанную Сьюзан Ли, и выполнил действия, описанные в статье ниже:

Https://www.digitalocean.com/community/tutorials/a-guide-to-time-series-forecasting-with-prophet-in-python-3

Давайте установим модель с неопределенностью 95%. Дополнительная информация о пророке: https://facebook.github.io/prophet/

# set the uncertainty interval to 95% (the Prophet default is 80%)
my_model = Prophet(interval_width=0.95)

Примерка модели…

my_model.fit(visitor)

Установка будущих дат. Обратите внимание, что я поставил «А» для частоты годовых.

future_dates = my_model.make_future_dataframe(periods=10, freq=’A’)
future_dates.tail()

Выше созданы фреймы данных за 2022, 2023, 2024, 2025, 2026 годы.

forecast = my_model.predict(future_dates)
forecast[[‘ds’, ‘yhat’, ‘yhat_lower’, ‘yhat_upper’]].tail()

Получаем значения нашей независимой переменной. Yhat_lower - это нижняя граница, а yhat_upper - верхняя граница.

my_model.plot(forecast, uncertainty=True)

Ниже представлен график прогноза:

Above, we have a forecast plot.

Prophet также позволяет нам разбить его на составляющие наших прогнозов:

Заключительные слова

Хотя поездка в Исландию может оставаться фантастикой, поскольку в начале года я исчерпал свое количество отпусков, было интересно использовать общедоступные источники данных, чтобы лучше понять, почему Исландия стала таким популярным туристическим направлением в последнее время. Я бы хотел связать набор данных №3 с набором исторических данных о погоде. Я пробовал использовать API OpenWeatherMap, который прост в использовании, но требует оплаты за его полную функциональность. Исландия определенно в моем списке желаний!