Почему все едут в Исландию?
Я пытаюсь понять рост туризма в Исландии с помощью общедоступных источников данных.
Halló aftur! (И снова здравствуйте на исландском). В свободное время я с удовольствием смотрю видео на YouTube по самым разным темам, от фотографии, кинематографии, футбола, комедии и т. Д. Я недавно начал следить за каналом Джонни Харриса после просмотра его видео о создании студии мечты и наткнулся на его анализ того, почему туризм в Исландии резко выросла (ссылка ниже). Я всегда хотел посетить Исландию с моим другом фотографом Пабло из-за красивых пейзажей страны.
В этом посте я решил попытаться понять, почему в Исландии наблюдается такой стремительный рост туризма, используя общедоступные источники данных. Само видео хорошо объясняет внезапный всплеск / всплеск туризма и дает несколько веских причин. Я хочу здесь не опровергать его аргументы, а скорее использовать данные, чтобы увидеть, что я из них узнаю. Я нахожу общедоступные источники данных, очищаю данные, визуализирую их и делаю прогнозы с помощью Facebook Prophet.
Источники данных
Свое расследование я начал так же, как в колледже, когда писал исследовательскую работу: поиски в Google. Я пытался найти актуальные общедоступные наборы данных, которые я мог бы загрузить и проанализировать. Я остановился на трех основных наборах данных, ссылки на которые я прикрепил сюда:
- Посетители Исландии через аэропорт Кефлавик: это главный узел международных перевозок. Я не нашел статистику по всем посетителям со всех транспортных узлов, но решил, что это хорошая выборка из всей совокупности.
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. Я прочитал статью, написанную Сьюзан Ли, и выполнил действия, описанные в статье ниже:
Давайте установим модель с неопределенностью 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, который прост в использовании, но требует оплаты за его полную функциональность. Исландия определенно в моем списке желаний!