Наука за социални данни —„какво, защо, как?

0. Въведението

Добре дошли в моя блог. Казвам се Хана Мулис и съм амбициозен учен по социални данни. Мислех, че може да е добра идея да напиша въвеждаща публикация в блог за това какво представлява науката за социалните данни, тъй като искам да започна да водя блог за различни модели и методи за наука за данни, които могат да се използват за анализиране на социални данни. Науката за данни често се обсъжда като някаква магическа тема, като термини като „изкуствен интелект“ в ерата на генеративния AI привличат вниманието на хората. Надявам се да допринеса за демистификация на темата, като пиша за нея по небрежен, но практически начин. Но преди да навлезем в плевелите, ето малко за мен:

  • Бакалавър по политически науки, магистър по компютърни социални науки
  • Работен опит в гражданското общество, в момента работи като сътрудник по одит и анализатор на данни за счетоводна фирма Big 4
  • Израснал в по-голямата си част в САЩ и завършил гимназия/университет в Швеция. Владее два езика на английски и шведски от детството, тъй като има майка шведка и баща американец. 🇸🇪🇺🇸

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

Успоредно с моето собствено пътуване да разбера какво искам да правя с кариерата си, забелязах, докато разглеждах обявите за работа, че областите и работодателите, които традиционно наемат социални учени, стават все по-ориентирани на данни в резултат на нарастването на наличните данни, могат да се възползват от.

Тези данни могат да идват от различни източници, като например от извличане на социални медии и различни уебсайтове за информация до свободно достъпни набори от данни от правителствени статистически агенции до увеличаващо се използване на софтуер и системи за информационни технологиив почти всеки икономически сектор. Наистина би било трудно да се намери компания сега, която няма дигитализирани и автоматизирани системи за проследяване на техните бизнес процеси (особено в Швеция без пари в брой и с висока дигитална връзка, където живея). И не струва нищо, че всички тези източници на данни генерират нови данни непрекъснато и по същество мигновено. Убеден съм, че интересът ми към социалните науки и науката за данните не е просто ниша, но ще стане решаващ за навигирането в нашата все по-взаимосвързана глобална цифрова екосистема.

Като цяло целта на този блог е:

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

лично: харесвам някаква нотация, но не много доказателства, както и лесни за четене обяснения, свързващи математическите концепции с използваните алгоритми/методи и как да тълкувам това в обхвата на зададеният въпрос).

  • накрая, блоговете са добър начин за размисъл върху тези теми, особено като човек, който няма много формално математическо образование, е сравнително начинаещ програмист и е непрестанно любопитен социален учен.

Чувствайте се свободни да следвате, ако също се интересувате да научите как науката за данни може да се използва при изучаване на теми от социалните науки!

1. Какво представлява науката за социалните данни?

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

Важно: Трябва да се отбележи, че има специфични етични опасения, свързани със събирането и анализа на социални данни, както и с валидността и проблеми с надеждносттакоито социалните данни, по-специално, за разлика от други видове данни, могат да имат. Това са много големи теми за обсъждане, така че планирам да пиша повече по тези въпроси в бъдеще в отделни публикации в блогове. Знанието за това как да разсъждавате и да правите заключения за това как да се справяте с тези проблеми и да се ориентирате в свят, в който стойността на данните непрекъснато се променя, със сигурност е голям фактор за разграничаване между тези, които са учили наука за данни в отдел STEM, и тези, които идват от академична подготовка като моята.

Науката за социалните данни често се използва взаимозаменяемо с компютърната социална наука. В тази публикация в блога ще продължа да използвам наука за социалните данни вместо компютърна социална наука, тъй като „наука за данни“ е на нашумелият термин, който за по-добро или по-лошо, говори повече на неакадемична аудитория. Имайки предвид това, искам да направя кратък преглед на това, което изучавах по време на магистърската си програма, тъй като теоретичната основа на голяма част от изучаваното даде силна основа на нас, студентите, за видовете въпроси, на които може да се отговори с тези методи.

Компютърната социална наука се отнася до изчислително интензивните методи, използвани за моделиране, анализиране и симулиране на социални явления.

Катедрата, в която учих, е специализирана в аналитична социология – подход в рамките на социологията, който се фокусира върху това как социалните явления на макроравнище, като разпространение на вярвания и поведение или модели на сегрегация, например, могат да бъдат разбрани от изучаване на механизмите, чрез които са се появили. Този подход е тясно свързан с изследването на социалната сложност, което е концептуална рамка, която подчертава често нелинейните и динамични взаимовръзки между социалните процеси на микро- и макрониво . Емпирично изследване може да се извърши, например, чрез анализиране на цифрова информация, особено голямото количество данни, които са налични на уебсайтове на социални медии, до които се осъществява достъп чрез API или чрез уеб скрапинг. Компютърно генерираните симулации на социални резултати и механизмите, които ги причиняват, са полезни за изграждане и тестване на теория.

Също така си струва да се отбележи, че изчислителната социална наука не е непременно самозагрижена за междучовешките социални взаимоотношения; има и изчислителни социални научни изследвания за това, например, как организациите се свързват една с друга и как това може да доведе до определени резултати на „макро ниво“, или изучаване на това как обществото категоризира някакъв конкретен обект (било то спор за знаменитост или вирусен туит ) чрез анализиране на езика, използван за описанието му. Повече информация за изследователските методи, описани в предишния параграф, и въпросите, които поставям тук, можете да намерите в раздел 3.

2.Защо наука за социални данни?

Някак си отговорих на този въпрос, тъй като се отнася до моите собствени мотивации в раздел 0, но смятам, че науката за социалните данни, като набор от умения на съвременния пазар на труда (а не само преместен в академичните среди), си струва да се пише за нея в повече общ смисъл и в някои повече подробности, така че ето.

Светът става все по-дигитален. От пазаруването до начина, по който общуваме помежду си, до образованието и здравеопазването, всичко това все повече се случва онлайн.

Честно казано, трудно ми е да се сетя за области от собствения си живот, които не са поне по някакъв начин цифрово регистрирани или допирателни до онлайн света.

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

Голяма част от това, което описах по-горе, е „нормална“ (поне за разлика от темата на тази публикация в блога) наука за данни. Всички тези точки са особено верни, когато анализирате данни, които сами по себе си не са генерирани от хора. В сегашната си роля на сътрудник по одит и анализатор на данни прекарвам голяма част от времето си в анализиране и обработка на финансови данни (основно данни от главната книга и как отразяват евентуални баланси + отчети за приходите), които се измерват както непрекъснато, така и обобщени на различни времеви интервали във времето за финансови отчети. Компаниите също така събират данни за представянето на своите служители (HR данни); проучване на пазара и ефективност на рекламата (маркетингови данни); брой продажби, производствени разходи и популярност (данни за продукта); техния инвентар и вериги за доставки; и потребителски данни, които регистрират всякакво взаимодействие между потребителя и компанията (покупки, комуникация, данни за контакт и т.н.).

Социалните данни, от друга страна, се състоят от информация, генерирана от физически лица чрез взаимодействия онлайн, било то в социални медийни платформи, форуми или блогове.

Социалните данни обхващат широк набор от типове данни, като текст, изображения, видеоклипове, коментари, харесвания и споделяния. Произвежда се, когато индивиди взаимодействат онлайн, като споделят съдържание, изразяват мнения и се ангажират с други хора онлайн. Данните за дигитално проследяване, като заявки за търсене и модели за навигация, както и базирани на местоположението данни, като модели на мобилност, са друг вид социални данни, които се генерират от индивиди, но вероятно по-малко преднамерено от данните, произведени чрез взаимодействие онлайн (точно поради тази причина да имате предвид етични съображения при анализиране на социални данни е изключително важно!). Тези данни често са неструктурирани поради множеството типове данни, могат да бъдат трудни за стандартизиране (и по този начин да се анализират сравнително и между платформите на социалните медии) и могат да бъдат „шумни“. Шум се отнася до данни, които са безполезни от аналитична гледна точка и обикновено обозначава вида спам данни, които съдържат произволни низове от текст и числа, които нямат смисъл сами по себе си. Може да се използва голямо разнообразие от техники за обработка и структуриране на данните, което се обсъжда малко повече в раздел 3.

Колкото и предизвикателство да е работата с неструктурирани данни, социалните данни са богати на възможности за анализ и прозрения. В един несигурен свят, където водени от човека конфликти, изменението на климата и финансовите кризи могат да избухнат по всяко време, застрашавайки „бизнеса както обикновено“, на който съвременната икономика разчита, за да функционира ефективно, >знанията за това как да се анализират социални данни са от решаващо значение за процесите на анализ на риска и планиране на смекчаване на всички големи организации. Социалните данни също са все по-полезни при анализиране на тенденции, предпочитания, поведение и настроения в обществената сфера. „Сравнително екстремен случай на анализ на социални данни за тенденциите и предпочитанията на потребителите е как платформата за бърза мода Shein непрекъснато калибрира дизайните, които предлага, като консолидира мрежа от няколко хиляди фабрики в Китай под собствения си софтуер за управление, който събира незабавна обратна връзка за това кои артикули са популярни или не, което им позволява да поръчват нова инвентаризация на популярните дизайни от тази мрежа от фабрики, по същество при поискване». Анализът на общественото мнение е друг пример за анализ на социални данни, който се опитва да екстраполира въз основа на социални данни как обществеността гледа на конкретни проблеми, колко ефективни са обществените кампании и т.н. Този вид анализ беше широко използван от правителствата по време на кризата с Covid-19 например и оттогава бяха проведени много изследвания за оценка на механизмите за обратна връзка между това как правителствата комуникират с обществеността и как обществеността комуникира относно правителствената политика , особено в кризисна ситуация, когато значението на точната информация е голямо.

Бързо споменах преди в тази публикация, че има етични последици, присъщи на събирането и анализа на социални данни; че социалните данни страдат от уникални проблеми с валидността и надеждността; и неструктурирания и шумен характер на социалните данни, който ги прави трудни за анализ. За да разширим малко проблемите с валидността и надеждността, присъщи на социалните данни, социалните данни са засегнати от пристрастия. Пристрастие може да възникне от определени статистически непредставителни потребители, които са по-видни в онлайн пространството; или разпространение на невярна информация в онлайн социална мрежа по-бързо и по-широко от правилната информация, която след това може да изглежда по-представителна за това, което мисли широката общественост без това всъщност е така, за да дам два често срещани примера. Ето защо е изключително важно тези, които работят в областта на науката за социалните данни, както да разберат кога различни методи и модели за наука на данните са подходящи за използване въз основа на структурата и съдържанието на данните, така и да бъдат запознати с различни техники за валидиране и проверка на данни с цел осигуряване на качество и точност на данните. Кръстосаното препращане на информация, триангулирането на множество източници на данни и проверката на данни чрез външни средства може да помогне да се гарантира надеждността на социалните данни за анализ. Подобно на това, че искам да разширя етичните съображения в науката за социалните данни в самостоятелна публикация в блог, техниките за валидиране и проверка на данни също ще бъдат допълнително обсъдени в бъдещи публикации в блогове, тъй като те могат да варират в зависимост от структурата и формата на данните, които се анализират .

3. Как мога да анализирам социални данни?

Дотук накратко обобщих какво представляват социалните данни и науката за социалните данни, теоретичните основи на областта и защо науката за социалните данни е уместна извън академичните изследвания. Също така подчертах предизвикателствата при работата със социални данни, където вярвам, че е от основно значение да притежавате умения за аналитично и критично мислене, за да използвате правилно всички потенциални прозрения, които се получават. В този раздел ще напиша малко за разликите между това какво представляват метод, алгоритъм и модел, тъй като тези термини често се използват взаимозаменяемо, когато не са наистина взаимозаменяеми. След това ще изброя някои от най-често срещаните методи и модели за машинно обучение, всички от които се стремя да преразгледам, когато актуализирам този блог. И накрая, ще представя две от аналитичните рамки, които са общи и специфични за анализа на социални данни: анализ на социални мрежи и моделиране, базирано на агенти.

Първо, каква е разликата между метод, алгоритъм и модел? Тези термини често се използват взаимозаменяемо, но се различават един от друг. Рискувам да прозвуча малко педантично тук, но както казваме на шведски, rätt ska vara rätt („което е правилно, трябва да е правилно“, моят превод).

Методът е процедура, която се състои от поредица от инструкции за извършване на действие, с набор от входни параметри за персонализиране на тези действия и (обикновено по отношение на науката за данните така или иначе) изход на някои мил. Методът определя реда на операциите и критериите, по които се обработват данните. В обектно-ориентираното програмиране методите са там, където действията се кодират вътре в клас.

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

Добър начин за разграничаване на методи и алгоритми е чрез визуализиране на поредицата от операции като схема на потока с ясен набор от стандарти за прекратяване. По-долу е екранна снимка от Wikipedia, показваща Евклидовия алгоритъм за изчисляване на най-големия общ делител (или най-голямото число, което дели две числа без остатък) на две числа, което е добра демонстрация на това как тези „инструкции“ могат да трансформират входните данни в желания изход, в рамките на ограничено пространство и време.

И накрая, моделът е просто казано резултатът от алгоритъма/метода. Това е, което виждате след почистване на данните и въвеждането им в някаква функция в R/Python.

Как можем да свържем тези понятия? Нека вземем пример за един от най-често използваните модели (!!!) в науката за данни: линейна регресия. Ако използвате проста едномерна линейна регресия, за да оцените връзката между една независима променлива и една зависима променлива, тогава стойността на коефициента (наклон) на независимата променливапредставлява модела. Стойностите на коефициента, които виждате във вашата IDE, са моделът.

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

Често моделите на линейна регресия използват метода на обикновените най-малки квадрати (OLS), който минимизира сумата от квадратите на разликите между наблюдаваната зависима променлива във входния набор от данни и изхода на линейната функция на независимата променлива. Това се прави, за да се оценят неизвестните параметри в модела. Методът OLS определя постоянния бета коефициент (т.е. пресечната точка на линейната зависимост) и стойността на коефициента на независимата променлива (наклон на линейната зависимост, както е визуализиран в 2D декартова равнина). Бих искал да навляза дълбоко в математиката зад този прост метод, но тази публикация вече е доста дълга и намерих друг блог, който го обяснява елегантно и по лесен за разбиране начин, вижте го тук.

За да обобщим тази странична допирателна, това, което виждате във вашата IDE, след като поставите данните си в някаква функция, не е алгоритъм или метод , но вместо това е моделната. Rätt ska vara rätt!

Кои тогава са някои от най-често срещаните методи и алгоритми, използвани в машинното обучение?

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

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

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

Анализ на социални мрежи

Сега към един от любимите ми методи за количествено изследване: анализ на социални мрежи(SNA). SNA изследва социалните структури чрез рамката на мрежите. Социалните структури се състоят от възли, които могат да бъдат индивиди или „актьори“ като държави/организации, и връзките, които ги свързват, които, когато се визуализират, представляват мрежа. Оттам могат да се анализират показатели за това как възлите са свързани, естеството на техните връзки помежду си, разпределението на възлите и дали има някакво сегментиране в мрежата.

В SNA фокусът не е върху индивидуалните атрибути или характеристики на възлите, а по-скоро върху техните взаимоотношения и как взаимодействат помежду си.

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

Ще бъда честен. Когато за първи път научавах за SNA, мислех, че е малко непосилно: има много терминология и показатели, специфични за изучаването на мрежи, произтичащи от произхода на SNA в теорията на графите. Данните, които анализирахме в клас, също бяха доста скучни за мен: направихме много задачи за изучаване на груповата динамика между ученици в основните училища. Основно теми като кой е популярен, кой не е, защо може да е така. Когато обаче обсъждах идеи за дисертация с моя научен ръководител, той ме насочи към посоката на използване на SNA, за да проуча как организациите се свързват една с друга в съответното им социално пространство. Интересувам се от международни отношения, така че структурният акцент на SNA се оказа много удобен, когато се опитвах да разбера как държавите се отнасят една към друга предвид структурата на международната система, в която се намират.

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

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

Базираното на агенти моделиране (ABM) е техника за изчислително моделиране, която симулира сложни системи, където можете да промените параметрите и поведението на автономните агенти и да видите как те взаимодействат помежду си. В ABM отделните агенти са моделирани като ограничено рационални автономни единици, които могат да възприемат своята среда, да вземат решения въз основа на набор от правила или стратегии и да взаимодействат с други агенти и околната среда. ABM има за цел да улови появата на сложно поведение и свойства на системно ниво от взаимодействията на отделните агенти. Чрез локални взаимодействия и прости правила, сложни модели, явления или резултати могат да възникнат на глобално ниво.

ABM дава възможност за изследване на сложни системи, които са трудни за анализ чрез традиционни математически или аналитични методи.

Тя дава възможност за изследване на динамиката, вериги за обратна връзка и възникващи свойства на системи с множество взаимодействащи си компоненти. Чрез конструирането на модел, който представя поведението и взаимодействията на агентите в симулирана среда, можете да получите представа за колективното поведение на системата, тестване на различни сценарии, оценете въздействието на интервенциите на политиката и правете прогнози за резултатите на системно ниво.

Лично (и за съжаление), това е моделът, с който ми е най-малко удобно да работя. Въпреки това, това е един от най-интересните подходи, когато се опитвате да тествате теории за движения отдолу нагоре и разпространение на идеи. В моята магистърска програма използвахме 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)