Социальная наука о данных — что, почему, как?

0. Введение

Добро пожаловать в мой блог. Меня зовут Ханна Маллис, и я начинающий специалист по социальным данным. Я подумал, что было бы неплохо написать вступительный пост в блоге о том, что такое наука о социальных данных, поскольку я хочу начать вести блог о различных моделях и методах науки о данных, которые можно использовать для анализа социальных данных. Наука о данных часто обсуждается как какая-то волшебная тема, а такие термины, как «искусственный интеллект» в эпоху генеративного ИИ, привлекают внимание людей. Я надеюсь внести свой вклад в демистификацию темы, написав о ней в небрежной, но практичной манере. Но прежде чем углубляться в тему, немного обо мне:

  • Бакалавр политических наук, магистр вычислительных социальных наук
  • Опыт работы в гражданском обществе, в настоящее время работает помощником по аудиту и аналитиком данных в бухгалтерской фирме «Большой четверки».
  • Вырос по большей части в США и закончил среднюю школу/университет в Швеции. С детства говорит на двух языках по-английски и по-шведски благодаря тому, что у него мама-шведка, а папа-американец. 🇸🇪🇺🇸

Во время получения степени бакалавра я понял, что больше всего мне нравятся занятия по количественным методам, особенно после того, как я научился использовать Stata в курсе эконометрики. Мой партнер работает инженером-программистом, и встреча с некоторыми из его друзей, работающих в области науки о данных, укрепила мой интерес к науке о данных как к будущей карьере. В то же время я люблю читать и обсуждать вопросы, которые теория социальных наук может помочь в анализе и понимании, и поэтому был рад найти магистерскую программу, которая действительно фокусируется на этих методах, поскольку они применимы к типичным темам социальных наук: анализсоциальных отношений и поведения,и какэтиотносятся к более широким социальным явлениям, которые формируют нашу повседневную жизнь.

Параллельно с моим собственным путешествием по выяснению того, что я хочу делать в своей карьере, я заметил, просматривая объявления о вакансиях, что области и работодатели, которые традиционно нанимают социологов, становятся все более ориентированными на данные в результате всплеск доступных данных, которые они могут использовать.

Эти данные могут поступать из различных источников, например, от выборки информации из социальных сетей и различных веб-сайтов до свободно доступных наборов данных от государственных статистических агентств до расширения использования программное обеспечение и системы информационных технологий практически во всех секторах экономики. В самом деле, сейчас трудно найти компанию, у которой нет цифровых и автоматизированных систем для отслеживания своих бизнес-процессов (особенно в Швеции, где нет наличных денег и широко подключены к цифровым технологиям, где я живу). И ничего не стоит то, что все эти источники данных непрерывно и практически мгновенно генерируют новые данные. Я убежден, что мой интерес к социальным наукам и науке о данных — это не просто ниша, а решающий фактор в навигации по нашей все более взаимосвязанной глобальной цифровой экосистеме.

В целом цель этого блога:

  • поделиться некоторыми методами и моделями, которые я изучил (и изучаю!) для анализа социальных вопросов.
  • анализировать эти социальные вопросы с помощью R и, по возможности, Python.
  • для обсуждения тем, связанных с наукой о социальных данных, на шведском языке и с использованием общедоступных наборов данных на шведском языке. Я планирую перевести многие из своих постов, так как обнаружил, что на шведском языке не так много ресурсов по науке о данных.
  • писать сообщения в блогах, которые переплетают теорию социальных наук с используемыми алгоритмом/моделью/методом, чтобы мотивировать, почему именно эти методы полезны.
  • соответственно, то, чего мне не хватает во многих постах в блогах по науке о данных, — это брифинги по математическим основам алгоритмов/моделей. К сожалению, у меня не так много формального математического образования, кроме некоторых курсов по статистике, поэтому для меня важно понимать связи между теорией и алгоритмами/моделями в действии. Поэтому я попытаюсь написать краткие резюме о математике, лежащей в основе используемых алгоритмов/моделей/методов.

(От себялично: мне нравятся некоторые обозначения, но не тонна доказательств, а также легко читаемые пояснения, связывающие математические концепции с используемыми алгоритмами/методами и как интерпретировать это в рамках заданный вопрос).

  • наконец, ведение блога — это хороший способ поразмышлять на эти темы, особенно для человека, не имеющего серьезного математического образования, относительно начинающего программиста и бесконечно любопытного социолога.

Не стесняйтесь следовать, если вы также заинтересованы в том, чтобы узнать, как наука о данных может использоваться в изучении тем социальных наук!

1. Что такое социальная наука о данных?

Наука о данных – это междисциплинарная область, уходящая корнями в статистику и информатику. Он направлен на экстраполяцию информации из данных, как правило, из больших и зашумленных наборов данных. Социальные науки о данных используют многие методы, используемые в науке о данных, для изучения человеческого поведения и/или социальных последствий. Основные различия между ними заключаются в задаваемых вопросах и характере собираемых и анализируемых данных.

Важно. Следует отметить, что существуют определенные этические проблемы, связанные со сбором и анализом социальных данных, а также с достоверностью и проблемы с надежностью, которые могут быть у социальных данных, в отличие от других типов данных. Это очень обширные темы для обсуждения, поэтому в будущем я планирую больше писать об этих вопросах в отдельных постах в блоге. Знание того, как рассуждать и делать выводы о том, как справляться с этими проблемами и ориентироваться в мире, где ценность данных постоянно меняется, безусловно, является важным фактором, отличающим тех, кто изучал науку о данных на факультете STEM, и тех, кто пришел из академическое образование, как у меня.

Науку о социальных данных часто называют вычислительными социальными науками. В этом сообщении блога я продолжу использовать социальную науку о данных вместо вычислительной социальной науки, поскольку «наука о данных» — это модный термин, который для лучшего понимания или, что еще хуже, больше обращается к неакадемической аудитории. Тем не менее, я хочу дать краткий обзор того, что я изучал во время моей программы магистратуры, поскольку теоретическая основа многого из того, что было изучено, дала нам, студентам, прочную основу для вопросов, на которые можно ответить с помощью этих методов.

Вычислительные социальные науки относятся к методам, требующим больших вычислительных ресурсов, которые используются для моделирования, анализа и имитации социальных явлений.

Факультет, на котором я учился, специализируется на аналитической социологии — подходе в социологии, который фокусируется на том, как социальные явления на макроуровне, такие как распространение убеждений и поведения или модели сегрегации, например, могут быть поняты с помощью изучение механизмов их возникновения. Этот подход тесно связан с изучением социальной сложности, которая представляет собой концептуальную основу, подчеркивающую часто нелинейные и динамические взаимосвязи между социальными процессами на микро- и макроуровнях. . Эмпирические исследования можно проводить, например, путем анализа цифровой информации, особенно большого объема данных, доступных на веб-сайтах социальных сетей, доступ к которым осуществляется с помощью API или веб-скрапинга. Сгенерированные компьютером симуляции социальных результатов и механизмов, которые их вызывают, полезны для построения и проверки теории.

Также стоит отметить, что вычислительная социальная наука не обязательно занимается толькомежчеловеческими социальными отношениями; существуют также компьютерные исследования в области социальных наук, например, о том, как организации взаимодействуют друг с другом и как это может привести к определенным результатам на «макроуровне», или изучение того, как общество классифицирует какой-либо конкретный объект (будь то спор о знаменитостях или вирусный твит). ), анализируя язык, используемый для его описания. Более подробную информацию о методах исследования, описанных в предыдущем абзаце, и вопросы, которые я поднимаю здесь, можно найти в разделе 3.

2.Почему наука о социальных данных?

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

Мир становится все более цифровым. От покупок до того, как мы общаемся друг с другом, от образования до здравоохранения, все это все чаще происходит в Интернете.

Честно говоря, мне трудно думать о сферах моей жизни, которые не хотя бы каким-то образом зарегистрированы в цифровом виде или не связаны с онлайн-миром.

Данные, генерируемые всеми этими взаимодействиями, постоянно регистрируются и хранятся в базах данных. В какой-то момент ученые, работавшие в социальных сетях в нулевых, поняли, что все эти данные можно использовать для получения информации, которая, в свою очередь, может быть использована для выявления закономерностей, определения тенденций, прогнозировать результаты, улучшать внутренние процессы и принимать обоснованные решения. Компании использовали эти новообретенные методы и методологии анализа данных, чтобы помочь своим предприятиям оптимизировать операции, улучшить качество обслуживания клиентов и выявить возможности для роста. Наличие надежного и надежного процесса обработки данных может привести к повышению внутренней эффективности, экономии средств и конкурентным преимуществам на рынке.

Многое из того, что я описал выше, является «нормальной» (по крайней мере, в отличие от темы этого поста в блоге) наукой о данных. Все эти моменты особенно верны при анализе данных, которые не генерируются людьми как таковыми. В моей нынешней роли помощника по аудиту и аналитика данных я трачу много времени на анализ и обработку финансовых данных (в первую очередь данных главной бухгалтерской книги и того, как они отражают возможные балансовые отчеты + отчеты о прибылях и убытках), которые измеряются как непрерывно, так и агрегируются в различных временные интервалы во времени для финансовой отчетности. Компании также собирают данные об эффективности своих сотрудников (данные о персонале); исследование рынка и эффективность рекламы (маркетинговые данные); объемы продаж, производственные затраты и популярность (данные о товарах); их запасы и цепочки поставок; и данные о потребителе, в которых регистрируются любые взаимодействия между потребителем и компанией (покупки, общение, контактные данные и т. д.).

Социальные данные, с другой стороны, состоят из информации, генерируемой отдельными людьми посредством взаимодействия в Интернете, будь то на платформах социальных сетей, форумах или блогах.

Социальные данные охватывают широкий спектр типов данных, таких как текст, изображения, видео, комментарии, лайки и публикации. Он создается, когда люди взаимодействуют в Интернете, делятся контентом, выражают мнения и взаимодействуют с другими людьми в Интернете. Данные цифровой трассировки, такие как поисковые запросы и шаблоны навигации, а также данные о местоположении, например шаблоны мобильности, — это еще один вид социальных данных, которые генерируются отдельными лицами. но, вероятно, менее преднамеренно, чем данные, полученные в результате взаимодействия в Интернете (именно поэтому помнить об этических соображениях при анализе социальных данных чрезвычайно важно!). Эти данные часто неструктурированы из-за множества типов данных, их трудно стандартизировать (и, следовательно, проводить сравнительный анализ на разных платформах социальных сетей), и они могут быть «зашумленными». Зашумленность относится к данным, бесполезным с аналитической точки зрения, и обычно обозначает тип спам-данных, которые содержат случайные строки текста и чисел, которые сами по себе не имеют смысла. Для обработки и структурирования данных можно использовать широкий спектр методов, которые более подробно обсуждаются в разделе 3.

Как бы ни было сложно работать с неструктурированными данными, социальные данные богаты возможностями для анализа и понимания. В нестабильном мире, где конфликты, вызванные деятельностью человека, изменение климата и финансовые кризисы могут вспыхнуть в любое время, ставя под угрозу обычное ведение бизнеса, от которого зависит эффективная работа современной экономики, знание того, как анализировать социальные данные, имеет решающее значение для всех процессов анализа рисков и планирования их снижения в крупных организациях. Социальные данные также становятся все более полезными для анализа тенденций, предпочтений, поведения и настроений в общественной сфере. Относительно крайний случай анализа социальных данных о потребительских тенденциях и предпочтениях — это то, как платформа быстрой моды Shein постоянно корректирует дизайн, который она предлагает, объединяя сеть из нескольких тысяч фабрик в Китае с помощью своего собственного программного обеспечения для управления, которое собирает мгновенную обратную связь о том, какие товары популярны или нет, что позволяет им заказывать новый ассортимент популярных моделей из этой сети фабрик, по существу, по требованию. Анализ общественного мнения — еще один пример анализа социальных данных, который пытается экстраполировать на основе социальных данных то, как общественность относится к конкретным проблемам, насколько эффективны общественные кампании и т. д. Такого рода анализ широко использовался правительствами во время кризиса Covid-19, например, и с тех пор было проведено множество исследований для оценки механизмов обратной связи между тем, как правительства общаются с общественностью, и тем, как общественность сообщает о государственной политике. , особенно в кризисной ситуации, когда важность достоверной информации высока.

Ранее в этом посте я быстро упомянул, что сбор и анализ социальных данных влечет за собой этические последствия; что социальные данные страдают от уникальных проблем достоверности и надежности; и неструктурированный и зашумленный характер социальных данных, что затрудняет их анализ. Чтобы немного рассказать о проблемах валидности и надежности, присущих социальным данным, скажем, что социальные данные подвержены предвзятости. Предвзятость может возникать из-за того, что определенные, статистически нерепрезентативные пользователи являются более заметными в онлайн-пространстве; или ложная информация, распространяемая в онлайновой социальной сети быстрее и шире, чем правильная информация, которая затем может представляться более репрезентативной для того, что думает более широкая общественность без что на самом деле имеет место, чтобы привести два общих примера. Поэтому очень важно, чтобы те, кто работает в сфере социальных данных, понимали, когда уместно использовать различные методы и модели науки о данных, исходя из структуры и содержания данных, и были осведомлены о различных методах проверки и проверки данных, чтобы обеспечить качество и точность данных. Перекрестные ссылки на информацию, триангуляция нескольких источников данных и проверка данных с помощью внешних средств могут помочь обеспечить надежность социальных данных для анализа. Подобно тому, как я хочу расширить этические соображения в науке о социальных данных в отдельном сообщении в блоге, методы проверки и проверки данных также будут обсуждаться в будущих сообщениях в блоге, поскольку они могут варьироваться в зависимости от структуры и формата анализируемых данных. .

3. Как я могу анализировать социальные данные?

До сих пор я кратко резюмировал, что такое социальные данные и наука о социальных данных, теоретические основы этой области и почему наука о социальных данных актуальна вне академических исследований. Я также подчеркнул трудности работы с социальными данными, где я считаю, что крайне важно иметь навыки аналитического и критического мышления, чтобы правильно использовать любые потенциальные идеи, которые могут быть получены. В этом разделе я немного напишу о различиях между тем, что такое метод, алгоритм и модель, поскольку эти термины часто используются взаимозаменяемо, когда на самом деле они не взаимозаменяемы. Затем я перечислю некоторые из наиболее распространенных методов и моделей машинного обучения, все из которых я постараюсь пересмотреть при обновлении этого блога. Наконец, я представлю две аналитические модели, общие и специфичные для анализа социальных данных: анализ социальных сетей и агентное моделирование.

Прежде всего, в чем разница между методом, алгоритмом и моделью? Эти термины часто используются взаимозаменяемо, но они отличаются друг от друга. Рискну показаться здесь немного педантичным, но, как мы говорим по-шведски, rätt ska vara rätt («что правильно, то и правильно», мой перевод).

Метод – это процедура, состоящая из последовательности инструкций по выполнению действия, с набором входных параметров для настройки этих действий и (во всяком случае, с точки зрения науки о данных) выводом некоторого добрый. Метод определяет порядок операций и критерии обработки данных. В объектно-ориентированном программировании методы — это место, где действия закодированы внутри класса.

Алгоритм во многом похож на метод и представляет собой пошаговый набор инструкций, которые выполняются последовательно. Ключевое различие между методом и алгоритмом заключается в том, что алгоритмы выражаются в пределах конечного пространства и времени, а это означает, что алгоритмическая обработка имеет конечное состояние, которое производит результат. Короче говоря, можно сказать, что все алгоритмы являются методами, но не все методы являются алгоритмами.

Хороший способ отличить методы от алгоритмов – визуализировать последовательность операций в виде блок-схемы с четким набором стандартов завершения. Ниже приведен снимок экрана из Википедии, показывающий алгоритм Евклида для вычисления наибольшего общего делителя (или наибольшего числа, которое делит два числа без остатка) двух чисел, т.е. хорошая демонстрация того, как эти «инструкции» могут преобразовывать входные данные в желаемый результат в условиях ограниченного пространства и времени.

Наконец, модель — это, проще говоря, результат работы алгоритма/метода. Это то, что вы видите после очистки данных и ввода их в какую-то функцию в R/Python.

Как мы можем связать эти понятия вместе? Давайте рассмотрим пример одной из наиболее часто используемых моделей (!!!) в науке о данных: линейной регрессии. Если вы используете простую одномерную линейную регрессию для оценки взаимосвязи между одной независимой переменной и одной зависимой переменной, то значение коэффициента (наклон) независимой переменной представляет собой модель. Значения коэффициентов, которые вы видите в своей среде IDE, являются моделью.

Однако до того, как коэффициенты модели будут выведены и можно будет сделать выводы, должен произойти еще один процесс.

Часто в моделях линейной регрессии используется метод обычных наименьших квадратов (OLS), метод, который минимизирует сумму квадратов различий между наблюдаемой зависимой переменной во входном наборе данных. и выход линейной функции независимой переменной. Это делается для оценки неизвестных параметров в модели. Метод OLS определяет постоянный бета-коэффициент (т. е. точку пересечения линейной зависимости) и значение коэффициента независимой переменной (наклон линейной зависимости, визуализированный на двухмерной декартовой плоскости). Я хотел бы углубиться в математику, лежащую в основе этого простого метода, но этот пост уже немного длинный, и я нашел другой блог, который объяснил это элегантно и легко для понимания, проверьте это здесь.

Подводя итог этой боковой касательной, то, что вы видите в своей среде IDE после помещения ваших данных в какую-то функцию, не является алгоритмом или методом. , а вместо этого — модель. Рэтт ска вара рэтт!

Каковы же наиболее распространенные методы и алгоритмы, используемые в машинном обучении?

  • Монте-Карло (особенно цепь Маркова Монте-Карло, MCMC)
  • Алгоритмы кластеризации (иерархические, k-средние)
  • Алгоритмы классификации (Наивный Байес, случайные леса, SVM, персептрон)
  • Снижение размерности (факторный анализ, PCA, t-SNE, LDA)
  • Различные алгоритмы повышения, такие как AdaBoost
  • Градиентный спуск
  • k-ближайшие соседи
  • Q-обучение
  • Вложения
  • Токенизация

Часто используемые модели в машинном обучении:

  • Регрессионный анализ (линейный, логистический, полиномиальный, смешанный логит, пробит, фиксированные эффекты и некоторые другие)
  • Обобщенные линейные модели (логистическая, биномиальная, пуассоновская)
  • Искусственные нейронные сети
  • Деревья решений
  • Анализ выживания
  • Анализ временных рядов
  • Обработка естественного языка
  • Анализ настроений

Анализ социальных сетей

Теперь перейдем к одному из моих любимых методов количественного исследования: анализу социальных сетей (SNA). SNA исследует социальные структуры в рамках сетей. Социальные структуры состоят из узлов, которыми могут быть отдельные лица или «действующие лица», такие как государства/организации, и связывающие их связи, которые при визуализации представляют собой сеть. Оттуда можно проанализировать показатели того, как узлы связаны, характер их связей друг с другом, распределение узлов и наличие какой-либо сегментации в сети.

В SNA основное внимание уделяется не отдельным атрибутам или характеристикам узлов, а скорее их отношениям и тому, как они взаимодействуют друг с другом.

SNA позволяет аналитикам визуализировать и количественно определять структуру социальных сетей, определять ключевых участников или объекты и анализировать, как информация, ресурсы и влияние распространяются по сети. Он обеспечивает мощную основу для понимания социальных отношений, динамики влияния, распространения информации, моделей сотрудничества и социальной сплоченности в данной социальной системе. Применяя методы сетевого анализа, аналитики могут выявлять скрытые закономерности, определять ключевых игроков или влиятельных лиц, оценивать надежность сети и уязвимость, предсказывать поведение и информировать процессы принятия решений. В целом СНС обеспечивает количественный и визуальный(!) подход к изучению структуры и динамики социальных отношений, облегчая понимание социальных явлений, которые могут быть неочевидны при изолированном изучении отдельных субъектов.

Я буду честен. Когда я впервые узнал о SNA, я подумал, что это немного сложно: существует много терминологии и метрик, характерных для изучения сетей, вытекающих из истоков SNA в теории графов. Данные, которые мы анализировали на уроке, мне тоже показались довольно скучными: мы выполняли много заданий по изучению групповой динамики между учащимися начальных классов. В основном такие темы, как кто популярен, кто нет, почему это может быть. Однако, когда я обсуждал тезисы с моим научным руководителем, он указал мне направление использования СНС для изучения того, как организации взаимодействуют друг с другом в соответствующем социальном пространстве. Я интересуюсь международными отношениями, поэтому структурный акцент СНС оказался очень удобным при попытке понять, как государства относятся друг к другу с учетом структуры международной системы, в которой они находятся.

Процесс SNA заключается в том, чтобы сначала обработать большое количество реляционных данных и описать общую структуру сети. Затем, глядя на сетевые показатели, такие как центральность и сила связи, можно определить, кто является влиятельными узлами. Основываясь на характере связей между узлами, вы можете дополнительно изучить такие понятия, как гомофилия (степень, в которой узлы образуют связи с похожими другими, которые можно дополнительно изучить как функцию демографических статус, такой как возраст или пол), предпочтительная привязанность (вероятность узлов, у которых уже есть наибольшее количество связей, сформировать даже больше, чем у тех, у которых их меньше всего) , и как узлы могут группироваться вместе (другими словами, образуя клики). Структурные свойства, такие как отсутствие связей между двумя частями сети (структурные дыры), были исследованы с точки зрения социального капитала, и некоторые данные позволяют предположить, что использование структурных дыра может дать предпринимателю конкурентное преимущество (см. основополагающую статью Рональда Берта, 2000 г., здесь). Хотя в этом разделе я коснусь SNA только поверхностно из-за того, насколько она широка в качестве исследовательской основы, я надеюсь вернуться к ней в более позднем сообщении в блоге, где я изложу общие показатели и методы, используемые при исследовании реляционных данных.

Агентное моделирование

Агентное моделирование (АВМ) – это метод компьютерного моделирования, который моделирует сложные системы, где вы можете изменить параметры и поведение автономных агентов и посмотреть, как они взаимодействуют друг с другом. >. В ABM отдельные агенты моделируются как ограниченно рациональные автономные сущности, которые могут воспринимать свою среду, принимать решения на основе набора правил или стратегий и взаимодействовать с другими агентами и средой. ABM стремится зафиксировать появление сложного поведения и свойств системного уровня в результате взаимодействия отдельных агентов. Через локальные взаимодействия и простые правила могут возникать сложные шаблоны, явления или результаты на глобальном уровне.

ABM позволяет изучать сложные системы, которые трудно анализировать с помощью традиционных математических или аналитических методов.

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

Лично мне (и прискорбно) это модель, с которой мне наименее комфортно работать. Тем не менее, это один из самых интересных подходов при попытке проверить теории восходящих движений и распространения идей. В моей программе MSc мы использовали NetLogo, симпатичное маленькое программное обеспечение, в котором, как только вы преодолеете начальную кривую обучения, вы сможете легко настраивать параметры и манипулировать средами, чтобы увидеть, как ваши агенты взаимодействуют друг с другом. Вы также можете управлять NetLogo из R, что помогает строить графики по результатам, которые вы получаете при повторении вашей ABM. Это то, в чем я надеюсь развить свои навыки со временем, поскольку ABM очень круты в теории и полезны при моделировании различных контрфактических ситуаций, которые исследователи и аналитики всегда заинтересованы в более глубоком понимании.

Приложение

Если вы дочитали до этого места в этом блоге, спасибо за прочтение!

Я сделал небольшую карту мира в качестве шапки блога с помощью R, главным образом потому, что хотел что-то, что я мог бы настроить, чтобы сделать милое изображение в шапке блога (я беззастенчиво девчушка и буду использовать пастельные цветовые схемы, когда это возможно), а также показать простой проект, который можно выполнить, когда вы новичок в R. Я получил код из этой статьи, а список цветов, которые можно использовать при настройке визуализаций в R, вы можете найти здесь.

library(dplyr)
library(maps)
library(geosphere)

# No margins
par(mar=c(0,0,0,0)) 

# Cities
Stockholm<-c(59,18)
Istanbul<-c(41,28)
Philadelphia<-c(39,-75)
Porto<-c(41,-8)
Jerusalem<-c(31,35)

data <- rbind(Stockholm, Istanbul, Philadelphia, Porto, Jerusalem) %>% 
  as.data.frame()

colnames(data) <- c("lat","long")

# World map
map('world',
    col="#f2f2f2", fill=TRUE, bg="white", lwd=0.05,
    mar=rep(0,4),border=0, ylim=c(-80,80) 
)

# Generate all pairs of coordinates
all_pairs <- cbind(t(combn(data$long, 2)), t(combn(data$lat, 2))) %>% as.data.frame()
colnames(all_pairs) <- c("long1","long2","lat1","lat2")

# A function that connects points on the plot 
# gcIntermediate is imported from the package "geosphere" and uses the shortest path between two points
# We don't want to see a horizontal line, so we also include in the function a way to
# break the line into 2 sections when the distance between 2 points is longer than 180 degrees
plot_my_connection=function( dep_lon, dep_lat, arr_lon, arr_lat, ...){
  inter <- gcIntermediate(c(dep_lon, dep_lat), c(arr_lon, arr_lat), n=50, addStartEnd=TRUE, breakAtDateLine=F)             
  inter=data.frame(inter)
  diff_of_lon=abs(dep_lon) + abs(arr_lon)
  if(diff_of_lon > 180){
    lines(subset(inter, lon>=0), ...)
    lines(subset(inter, lon<0), ...)
  }else{
    lines(inter, ...)
  }
}

# Connect each city to each other:
for(i in 1:nrow(all_pairs)){
  plot_my_connection(all_pairs$long1[i], all_pairs$lat1[i], all_pairs$long2[i], all_pairs$lat2[i], col="thistle", lwd=1)
}

# Add points and names of cities:
points(x=data$long, y=data$lat, col="lightpink", cex=2, pch=20)
text(rownames(data), x=data$long, y=data$lat,  col="rosybrown", cex=1, pos=4)