Привет, Хаброжители! В недрах популярных социальных сетей — Twitter, Facebook, LinkedIn и Instagram — скрыты богатейшие залежи информации. Из этой книги исследователи, аналитики и разработчики узнают, как извлекать эти уникальные данные, используя код на Python, Jupyter Notebook или контейнеры Docker. Сначала вы познакомитесь с функционалом самых популярных социальных сетей (Twitter, Facebook, LinkedIn, Instagram), веб-страниц, блогов и лент, электронной почты и GitHub. Затем приступите к анализу данных на примере Twitter. Прочитайте эту книгу, чтобы:
Теперь, получив представление о том, как получить доступ к LinkedIn API, перейдем к конкретному анализу и подробно обсудим кластеризацию [Этот вид анализа также часто называют методом приближенного совпадения, нечеткого соответствия и/или дедупликацией — ред.] — метод машинного обучения без учителя, считающийся основным в любом наборе инструментов анализа данных. Алгоритм кластеризации принимает коллекцию элементов и делит их на более мелкие коллекции (кластеры) согласно некоторому критерию, предназначенному для сравнения элементов в коллекции.
Например, если вы подумываете о переезде в другой город, вы можете попробовать объединить контакты в LinkedIn по географическим регионам, чтобы лучше оценить имеющиеся экономические возможности. Мы вернемся к этой идее чуть позже, а пока вкратце обсудим некоторые нюансы, связанные с кластеризацией.
При реализации решений задач кластеризации данных из LinkedIn или из других источников вы неоднократно будете сталкиваться, по крайней мере, с двумя основными темами (обсуждение третьей приводится во врезке «Роль уменьшения размерности в кластеризации» ниже).
Нормализация данных
Даже при использовании очень хорошего API данные редко бывают предоставлены в нужном вам формате, — часто требуется нечто большее, чем простое преобразование, чтобы привести данные в форму, пригодную для анализа. Например, пользователи LinkedIn допускают определенные вольности, описывая свои должности, поэтому не всегда удается получить идеально нормализованные описания. Один руководитель может выбрать название «главный технический директор», другой — более двусмысленное название «ГТО», а третий может описать ту же должность как-то иначе. Чуть ниже мы вернемся к проблеме нормализации данных и реализуем шаблон для обработки определенных ее аспектов в данных LinkedIn.
Определение сходства
Имея набор хорошо нормализованных элементов, вы можете пожелать оценить сходство любых двух из них, будь то названия должностей или компаний, описание профессиональных интересов, географические названия или любые другие поля, значения которых могут быть представлены произвольным текстом. Для этого вам нужно определить эвристику, оценивающую сходство двух любых значений. В некоторых ситуациях определение сходства вполне очевидно, но в других может быть сопряжено с некоторыми сложностями.
Например, сравнение общего трудового стажа двух человек реализуется простыми операциями сложения, но сравнение более широких профессиональных характеристик, таких как «лидерские способности», полностью автоматизированным образом может оказаться довольно сложной задачей.
Методы кластеризации являются основной частью арсенала инструментов любого специалиста по анализу данных, потому что почти в любой отрасли — от военной разведки до банковского дела и ландшафтного дизайна — может потребоваться проанализировать по-настоящему огромный объем нестандартных реляционных данных, и рост числа вакансий специалистов по данным за предыдущие годы служит тому явным свидетельством.
Как правило, для сбора какой-либо информации компания создает базу данных, но не каждое поле может содержать значения из некоторого предопределенного набора. Это может быть обусловлено не до конца продуманной логикой работы пользовательского интерфейса приложения, невозможностью заранее определить все допустимые значения или необходимостью дать пользователям возможность вводить любой текст по своему желанию. Как бы то ни было, результат всегда одинаков: вы получаете большой объем нестандартизованных данных. Даже если в определенном поле в общей сложности может храниться N разных строковых значений, некоторое их количество фактически будет обозначать одно и то же понятие. Дубликаты могут возникать по разным причинам — из-за орфографических ошибок, использования аббревиатур или сокращений, а также разных регистров символов.
Как упоминалось выше, это классическая ситуация, возникающая при анализе данных из LinkedIn: пользователи могут вводить свою информацию в свободном текстовом виде, что неизбежно приводит к нарастанию вариаций. Например, если вы решите исследовать свою профессиональную сеть и определить, где работает большинство ваших контактов, вам придется рассмотреть часто используемые варианты написания названий компаний. Даже самые простые названия компаний могут иметь несколько вариантов, с которыми вы почти наверняка столкнетесь (например, «Google» — сокращенная форма «Google, Inc.»), и вам придется учесть все эти варианты, чтобы привести их к стандартной форме. При стандартизации названий компаний хорошей отправной точкой может стать нормализация сокращений в названиях, таких как LLC и Inc.
В качестве необходимого и полезного вступления перед изучением алгоритмов кластеризации рассмотрим несколько типичных ситуаций, с которыми можно столкнуться, решая задачу нормализации данных из LinkedIn. В этом разделе мы реализуем типовой шаблон нормализации названий компаний и должностей. В качестве более продвинутого упражнения мы также кратко обсудим проблему устранения неоднозначности и геокодирования географических названий из профиля LinkedIn. (То есть мы попытаемся преобразовать географические названия из профилей LinkedIn, такие как «Greater Nashville Area» (Большой Нэшвилл), в координаты, которые можно нанести на карту.)
Давайте попробуем стандартизировать названия компаний из вашей профессиональной сети. Как рассказывалось выше, извлечь данные из LinkedIn можно двумя основными способами: программным, с помощью LinkedIn API, или с использованием механизма экспортирования профессиональной сети в виде адресной книги, которая включает такие основные сведения, как имя, должность, компания и контактная информация.
Представим, что у нас уже есть CSV-файл с контактами, экспортированный из LinkedIn, и теперь мы можем нормализовать и вывести выбранные сущности, как показано в примере 4.4.
Ниже приводятся результаты простого частотного анализа:
Имейте в виду, что для обработки более сложных ситуаций, например, для нормализации разных названий одной и той же компании, менявшихся с течением времени, таких как O’Reilly Media, вам потребуется написать более замысловатый код. В данном случае название этой компании может быть представлено как O’Reilly & Associates, O’Reilly Media, O’Reilly, Inc. или просто O’Reilly [Если вам покажется, что вас поджидают большие сложности, просто представьте, какую работу пришлось проделать специалистам компании Dun & Bradstreet (http://bit.ly/1a1m4Om), специализирующейся на каталогизации информации и столкнувшейся с задачей составления и сопровождении реестра с названиями компаний на самых разных языках мира — ред.].
Мэтью Рассел (Matthew Russell, @ptwobrussell) — ведущий специалист из Мидл Теннесси (Middle Tennessee). На работе старается быть лидером, помогает другим становиться лидерами и создает высокоэффективные команды для решения сложных задач. Вне работы размышляет о реальности, практикует ярко выраженный индивидуализм и готовится к зомби-апокалипсису и восстанию машин.
Михаил Классен (Mikhail Klassen, @MikhailKlassen) — главный специалист по обработке и анализу данных в Paladin AI, начинающей компании, создающей адаптивные технологии обучения. Имеет степень кандидата астрофизики, полученную в Университете Макмастера (McMaster University), и степень бакалавра в области прикладной физики, полученную в Колумбийском университете (Columbia University). Михаил увлекается проблемами искусственного интеллекта и применением инструментов для анализа данных в благих целях. Когда он не работает, то обычно читает или путешествует.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 25% по купону — Data Mining
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
- Узнать о современном ландшафте социальных сетей;
- Научиться использовать Docker, чтобы легко оперировать кодами, приведёнными в книге;
- Узнать, как адаптировать и поставлять код в открытый репозиторий GitHub;
- Научиться анализировать собираемые данные с использованием возможностей Python 3;
- Освоить продвинутые приемы анализа, такие как TFIDF, косинусное сходство, анализ словосочетаний, определение клика и распознавание образов;
- Узнать, как создавать красивые визуализации данных с помощью Python и JavaScript.
Отрывок. 4.3. Краткое введение в приемы кластеризации данных
Теперь, получив представление о том, как получить доступ к LinkedIn API, перейдем к конкретному анализу и подробно обсудим кластеризацию [Этот вид анализа также часто называют методом приближенного совпадения, нечеткого соответствия и/или дедупликацией — ред.] — метод машинного обучения без учителя, считающийся основным в любом наборе инструментов анализа данных. Алгоритм кластеризации принимает коллекцию элементов и делит их на более мелкие коллекции (кластеры) согласно некоторому критерию, предназначенному для сравнения элементов в коллекции.
Кластеризация — это фундаментальный метод анализа данных, поэтому, чтобы вы могли получить более полное представление о нем, эта глава включает сноски и примечания с описанием математического аппарата, лежащего в его основе. Хорошо, если вы постараетесь понять эти детали, но, чтобы успешно использовать методы кластеризации, не требуется понимать все тонкости, и, конечно же, от вас не требуется, чтобы вы разобрались в них с первого раза. Вам может потребоваться немного поразмышлять, чтобы переварить некоторые сведения, особенно если у вас нет математической подготовки.
Например, если вы подумываете о переезде в другой город, вы можете попробовать объединить контакты в LinkedIn по географическим регионам, чтобы лучше оценить имеющиеся экономические возможности. Мы вернемся к этой идее чуть позже, а пока вкратце обсудим некоторые нюансы, связанные с кластеризацией.
При реализации решений задач кластеризации данных из LinkedIn или из других источников вы неоднократно будете сталкиваться, по крайней мере, с двумя основными темами (обсуждение третьей приводится во врезке «Роль уменьшения размерности в кластеризации» ниже).
Нормализация данных
Даже при использовании очень хорошего API данные редко бывают предоставлены в нужном вам формате, — часто требуется нечто большее, чем простое преобразование, чтобы привести данные в форму, пригодную для анализа. Например, пользователи LinkedIn допускают определенные вольности, описывая свои должности, поэтому не всегда удается получить идеально нормализованные описания. Один руководитель может выбрать название «главный технический директор», другой — более двусмысленное название «ГТО», а третий может описать ту же должность как-то иначе. Чуть ниже мы вернемся к проблеме нормализации данных и реализуем шаблон для обработки определенных ее аспектов в данных LinkedIn.
Определение сходства
Имея набор хорошо нормализованных элементов, вы можете пожелать оценить сходство любых двух из них, будь то названия должностей или компаний, описание профессиональных интересов, географические названия или любые другие поля, значения которых могут быть представлены произвольным текстом. Для этого вам нужно определить эвристику, оценивающую сходство двух любых значений. В некоторых ситуациях определение сходства вполне очевидно, но в других может быть сопряжено с некоторыми сложностями.
Например, сравнение общего трудового стажа двух человек реализуется простыми операциями сложения, но сравнение более широких профессиональных характеристик, таких как «лидерские способности», полностью автоматизированным образом может оказаться довольно сложной задачей.
Роль уменьшения размерности в кластеризации
Нормализация данных и определение сходства — это две главные темы, с которыми вы будете сталкиваться в кластеризации на абстрактном уровне. Но есть еще третья тема — сокращение размерности, которая становится актуальной, как только масштаб данных перестает быть тривиальным. Для группировки элементов в множестве с использованием метрики сходства в идеале желательно сравнить каждый элемент с каждым другим элементом. В этом случае, при наихудшем развитии событий, для множества из n элементов вам придется вычислить степень сходства примерно n2 раз, чтобы сравнить каждый из n элементов с n–1 другими элементами.
В информатике эту ситуацию называют проблемой квадратичной сложности и обычно обозначают как O(n2); в разговорах ее обычно называют «проблемой квадратичного роста большого О». Проблемы O(n2) становятся неразрешимыми для очень больших значений n, и в большинстве случаев термин неразрешимые означает, что вам придется ждать «слишком долго», пока решение будет вычислено. «Слишком долго» — это могут быть минуты, годы или эпохи, в зависимости от характера задачи и ее ограничений.
Обзор методов уменьшения размерности выходит за рамки текущего рассмотрения, по¬этому отметим лишь, что типичный метод уменьшения размерности предусматривает использование функции для организации «достаточно похожих» элементов в фиксированное число групп, чтобы элементы в каждой группе можно было в полной мере считать похожими. Уменьшение размерности часто является не только наукой, но и искусством, и обычно считается конфиденциальной информацией или коммерческой тайной организациями, которые успешно используют ее для получения конкурентного преимущества.
Методы кластеризации являются основной частью арсенала инструментов любого специалиста по анализу данных, потому что почти в любой отрасли — от военной разведки до банковского дела и ландшафтного дизайна — может потребоваться проанализировать по-настоящему огромный объем нестандартных реляционных данных, и рост числа вакансий специалистов по данным за предыдущие годы служит тому явным свидетельством.
Как правило, для сбора какой-либо информации компания создает базу данных, но не каждое поле может содержать значения из некоторого предопределенного набора. Это может быть обусловлено не до конца продуманной логикой работы пользовательского интерфейса приложения, невозможностью заранее определить все допустимые значения или необходимостью дать пользователям возможность вводить любой текст по своему желанию. Как бы то ни было, результат всегда одинаков: вы получаете большой объем нестандартизованных данных. Даже если в определенном поле в общей сложности может храниться N разных строковых значений, некоторое их количество фактически будет обозначать одно и то же понятие. Дубликаты могут возникать по разным причинам — из-за орфографических ошибок, использования аббревиатур или сокращений, а также разных регистров символов.
Как упоминалось выше, это классическая ситуация, возникающая при анализе данных из LinkedIn: пользователи могут вводить свою информацию в свободном текстовом виде, что неизбежно приводит к нарастанию вариаций. Например, если вы решите исследовать свою профессиональную сеть и определить, где работает большинство ваших контактов, вам придется рассмотреть часто используемые варианты написания названий компаний. Даже самые простые названия компаний могут иметь несколько вариантов, с которыми вы почти наверняка столкнетесь (например, «Google» — сокращенная форма «Google, Inc.»), и вам придется учесть все эти варианты, чтобы привести их к стандартной форме. При стандартизации названий компаний хорошей отправной точкой может стать нормализация сокращений в названиях, таких как LLC и Inc.
4.3.1. Нормализация данных для анализа
В качестве необходимого и полезного вступления перед изучением алгоритмов кластеризации рассмотрим несколько типичных ситуаций, с которыми можно столкнуться, решая задачу нормализации данных из LinkedIn. В этом разделе мы реализуем типовой шаблон нормализации названий компаний и должностей. В качестве более продвинутого упражнения мы также кратко обсудим проблему устранения неоднозначности и геокодирования географических названий из профиля LinkedIn. (То есть мы попытаемся преобразовать географические названия из профилей LinkedIn, такие как «Greater Nashville Area» (Большой Нэшвилл), в координаты, которые можно нанести на карту.)
Главным результатом усилий по нормализации данных является возможность учитывать и анализировать важные признаки и использовать передовые методы анализа, такие как кластеризация. В случае с данными из LinkedIn мы будем изучать такие признаки, как должности и географические местоположения.
Нормализация и подсчет компаний
Давайте попробуем стандартизировать названия компаний из вашей профессиональной сети. Как рассказывалось выше, извлечь данные из LinkedIn можно двумя основными способами: программным, с помощью LinkedIn API, или с использованием механизма экспортирования профессиональной сети в виде адресной книги, которая включает такие основные сведения, как имя, должность, компания и контактная информация.
Представим, что у нас уже есть CSV-файл с контактами, экспортированный из LinkedIn, и теперь мы можем нормализовать и вывести выбранные сущности, как показано в примере 4.4.
Как описывается в комментариях внутри примеров, вам нужно переименовать CSV-файл с контактами, который вы экспортировали из LinkedIn, следуя инструкциям в разделе «Загрузка файла с информацией о контактах в LinkedIn», и скопировать в определенный каталог, где его сможет найти программный код.
Пример 4.4. Простая нормализация сокращений в названиях компаний
import os import csv from collections import Counter from operator import itemgetter from prettytable import PrettyTable # Загрузите данные из LinkedIn: https://www.linkedin.com/psettings/member-data. # Получив запрос, LinkedIn подготовит архив с данными из вашего профиля, # который вы сможете загрузить. Поместите этот архив в папку # resources/ch03-linkedin/. CSV_FILE = os.path.join("resources", "ch03-linkedin", 'Connections.csv') # Определить набор преобразований, превращающих первый элемент # во второй. Здесь перечисляются некоторые распространенные # сокращения и реализуется их удаление. transforms = [(', Inc.', ''), (', Inc', ''), (', LLC', ''), (', LLP', ''), (' LLC', ''), (' Inc.', ''), (' Inc', '')] companies = [c['Company'].strip() for c in contacts if c['Company'].strip() != ''] for i, _ in enumerate(companies): for transform in transforms: companies[i] = companies[i].replace(*transform) pt = PrettyTable(field_names=['Company', 'Freq']) pt.align = 'l' c = Counter(companies) [pt.add_row([company, freq]) for (company, freq) in sorted(c.items(), key=itemgetter(1), reverse=True) if freq > 1] print(pt)
Ниже приводятся результаты простого частотного анализа:
В языке Python поддерживается возможность передачи аргументов функциям путем разыменования списка и/или словаря, что иногда очень удобно, как показано в примере 4.4. Например, вызов f(*args, **kw) эквивалентен вызову f(1, 7, х=23), где args аргументов определяется как список [1,7] и kw — как словарь {'x': 23}. Другие советы по программированию на языке Python вы найдете в приложении В.
Имейте в виду, что для обработки более сложных ситуаций, например, для нормализации разных названий одной и той же компании, менявшихся с течением времени, таких как O’Reilly Media, вам потребуется написать более замысловатый код. В данном случае название этой компании может быть представлено как O’Reilly & Associates, O’Reilly Media, O’Reilly, Inc. или просто O’Reilly [Если вам покажется, что вас поджидают большие сложности, просто представьте, какую работу пришлось проделать специалистам компании Dun & Bradstreet (http://bit.ly/1a1m4Om), специализирующейся на каталогизации информации и столкнувшейся с задачей составления и сопровождении реестра с названиями компаний на самых разных языках мира — ред.].
Об авторах
Мэтью Рассел (Matthew Russell, @ptwobrussell) — ведущий специалист из Мидл Теннесси (Middle Tennessee). На работе старается быть лидером, помогает другим становиться лидерами и создает высокоэффективные команды для решения сложных задач. Вне работы размышляет о реальности, практикует ярко выраженный индивидуализм и готовится к зомби-апокалипсису и восстанию машин.
Михаил Классен (Mikhail Klassen, @MikhailKlassen) — главный специалист по обработке и анализу данных в Paladin AI, начинающей компании, создающей адаптивные технологии обучения. Имеет степень кандидата астрофизики, полученную в Университете Макмастера (McMaster University), и степень бакалавра в области прикладной физики, полученную в Колумбийском университете (Columbia University). Михаил увлекается проблемами искусственного интеллекта и применением инструментов для анализа данных в благих целях. Когда он не работает, то обычно читает или путешествует.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 25% по купону — Data Mining
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
dron88
Если уровень программирования на Python равен Сильному стажору и очень слабому джуну, книга будет посильной?
ph_piter Автор
Да, там достаточно подробно все расписано