《数据挖掘》一书。 从Facebook,Twitter,LinkedIn,Instagram,GitHub检索信息»

图片 嗨,habrozhiteli! 在流行的社交网络(Twitter,Facebook,LinkedIn和Instagram)的肠道中,隐藏了最丰富的信息存储。 通过这本书,研究人员,分析师和开发人员将学习如何使用Python代码,Jupyter Notebook或Docker容器提取这种独特的数据。 首先,您将熟悉最受欢迎的社交网络(Twitter,Facebook,LinkedIn,Instagram),网页,博客和提要,电子邮件和GitHub的功能。 然后使用Twitter示例开始数据分析。 阅读本书以:

  • 了解社交网络的现代景观;
  • 学习使用Docker轻松操作本书中提供的代码;
  • 了解如何调整代码并将其交付到GitHub开放存储库;
  • 了解如何使用Python 3的功能来分析收集的数据;
  • 掌握高级分析技术,例如TFIDF,余弦相似度,搭配分析,点击检测和模式识别;
  • 了解如何使用Python和JavaScript创建漂亮的数据可视化。

摘录。 4.3。 数据聚类技术简介


现在,我们已经了解了如何访问LinkedIn API,我们将继续进行特定的分析并详细讨论聚类 [这种类型的分析通常也称为近似重合模糊匹配和/或重复数据删除方法-。]-没有老师的机器学习方法,在任何一组数据分析工具中都被认为是必不可少的。 聚类算法采用元素集合,然后根据旨在比较集合中元素的某种标准将它们分为较小的集合(簇)。

聚类是数据分析的基本方法,因此您可以更全面地了解它。本章包括脚注和注解,描述了作为其基础的数学装置。 如果您想了解这些细节是很好的,但是为了成功地使用聚类方法,您不需要了解所有的细微差别,当然,您不需要第一次了解它们。 您可能需要三思而后行才能消化一些信息,特别是如果您没有经过数学培训的话。

例如,如果您正在考虑转移到另一个城市,则可以尝试按地理区域合并LinkedIn联系人,以便更好地评估可用的经济机会。 稍后我们将回到这个想法,但是现在我们将简要讨论与聚类相关的一些细微差别。

在实施针对来自LinkedIn或其他来源的数据聚类问题的解决方案时,您将反复遇到至少两个主要主题(下面的边栏中“降维在聚类中的作用”中给出了第三个主题的讨论)。

数据标准化
即使您使用了非常好的API,也很少会以所需的格式提供数据-通常,将数据转换为适合分析的形式需要花费比简单的转换更多的时间。 例如,LinkedIn用户在描述其帖子时允许某些自由,因此并非总是能够获得完全正常的描述。 一位经理可以选择“首席技术总监”的名字,另一位经理可以选择更模糊的名字“ TRP”,而第三位经理可以以某种不同的方式描述同一职位。 下面我们将回到数据规范化问题,并实现一个模板来处理LinkedIn数据中的某些方面。

亲和力定义
具有一组规范化的元素,您可能希望评估它们中任何两个元素的相似性,无论是职位名称或公司名称,职业兴趣的描述,地名还是其值可以用任意文本表示的任何其他字段。 为此,您需要定义一种启发式方法,以评估任何两个值的相似性。 在某些情况下,相似性的定义非常明显,但在其他情况下,可能会遇到一些困难。

例如,比较两个人的总服务时长是通过简单的加法运算完成的,但是以全自动的方式比较更广泛的专业特征(例如“领导能力”)可能是一个挑战。

降维在聚类中的作用


数据的规范化和相似性的确定是在抽象级别进行聚类时会遇到的两个主要主题。 但是还有第三个主题-降维,一旦数据规模不再是微不足道,它就变得很重要。 为了使用相似性度量将集合中的元素分组,理想地,希望将每个元素与每个其他元素进行比较。 在这种情况下,在最坏的情况下,对于一组n个元素,您将必须计算大约n 2次相似度,才能将n个元素中的每一个与n -1个其他元素进行比较。

在计算机科学中,这种情况称为二次复杂性问题 ,通常表示为O(n 2 。 在对话中,通常将其称为“大O的二次增长问题”。 对于非常大的n个值, O(n 2问题变得无法解决,并且在大多数情况下,术语“ 无法解决”意味着您必须等待“太长时间”才能计算解。 “太长”-可能是分钟,几年或时代,具体取决于任务的性质及其局限性。

关于降维方法的综述不在当前讨论范围之内,因此,我们仅注意到典型的降维方法涉及使用函数将“完全相似”的元素组织成固定数量的组,以便可以将每个组中的元素完全视为相似。 降维通常不仅是一门科学,而且是一门艺术,通常被成功使用它来获得竞争优势的组织视为机密信息或商业秘密。

聚类方法是任何数据分析专家工具库中的主要部分,因为从军事情报到银行业务和景观设计等几乎任何行业,您都可能需要分析大量的非标准关系数据,并且根据专家分析,职位空缺的增长往年清楚地证明了这一点。

通常,公司会创建一个数据库来收集任何信息,但并非每个字段都可能包含一些预定义集中的值。 这可能是由于应用程序用户界面的逻辑未完全考虑,无法预先确定所有可接受的值或需要使用户能够根据需要输入任何文本的缘故。 尽管如此,结果始终是相同的:您将获得大量的非标准化数据。 即使在某个字段中总共可以存储N个不同的字符串值,它们中的一些实际上也意味着相同的概念。 可能由于多种原因而出现重复-由于拼写错误,使用缩写或缩写以及不同的字符寄存器。

如上所述,这是在分析来自LinkedIn的数据时出现的典型情况:用户可以以自由文本形式输入其信息,这不可避免地导致变化的增加。 例如,如果您决定研究专业网络并确定大多数联系人在哪里工作,则必须考虑用于编写公司名称的常用选项。 即使是最简单的公司名称,也几乎可以肯定会遇到几个选项(例如,“ Google”(缩写为“ Google,Inc.”)),并且您必须考虑所有这些选项才能将它们转换为标准格式。 在标准化公司名称时,一个很好的起点可能是标准化LLC和Inc.等名称的缩写。

4.3.1。 标准化数据进行分析


作为研究聚类算法的必要且有用的介绍,我们考虑了解决LinkedIn数据标准化问题时可能遇到的几种典型情况。 在本节中,我们实现用于标准化公司和职务的标准模板。 作为更高级的练习,我们还将简要讨论从领英个人资料中消除地名的歧义和地理编码的问题。 (也就是说,我们将尝试将LinkedIn资料中的地名(例如“ Greater Nashville Area”)转换为可映射的坐标。)

标准化数据的主要结果是能够考虑和分析重要特征并使用高级分析方法(例如聚类)的能力。 对于来自LinkedIn的数据,我们将研究帖子和地理位置等功能。

规范化和公司计数


让我们尝试通过您的专业网络标准化公司的名称。 如上所述,您可以通过两种主要方式从LinkedIn提取数据:以编程方式使用LinkedIn API或以通讯录的形式使用专业网络的导出机制,其中包括姓名,职位,公司和联系方式等基本信息。

想象一下,我们已经有了一个包含从LinkedIn导出的联系人的CSV文件,现在我们可以规范化并显示所选的实体,如示例4.4所示。

如示例中的注释中所述,您需要按照从“ LinkedIn上下载”部分中的说明,使用从LinkedIn导出的联系人重命名CSV文件,然后将其复制到程序代码可以找到的特定目录中。

示例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,x = 23),其中args定义为参数列表[1,7],kw定义为字典{'x':23}。 其他Python编程技巧可在附录B中找到。

请记住,要处理更复杂的情况(例如,将随时间变化的同一家公司的不同名称标准化),例如O'Reilly Media,则需要编写更复杂的代码。 在这种情况下,该公司的名称可以表示为O'Reilly&Associates,O'Reilly Media,O'Reilly,Inc.。 或者只是O'Reilly [如果在您看来,您正面临着巨大的困难,请想象一下Dun&Bradstreet的专家必须做什么样的工作(http://bit.ly/1a1m4Om),该工作专门从事信息编目并面临着编译和编辑任务。伴随着一个注册表,其中包含世界上各种语言的公司名称-ed。 ]。

关于作者


Matthew Russell (@ptwobrussell)是田纳西州中部的一位领先专家。 在工作中,他努力成为领导者,帮助他人成为领导者,并创建高效的团队来解决复杂的问题。 在工作之外,他反思现实,实践明显的个人主义,为僵尸末日和机器叛乱做准备。

Mikhail Klassen,@ MikhailKlassen是Paladin AI的高级数据处理和分析专家,Paladin AI是一家创建自适应学习技术的新兴公司。 他拥有麦克马斯特大学(McMaster University)的天体物理学博士学位,以及哥伦比亚大学(Columbia University)的应用物理学学士学位。 迈克尔喜欢人工智能问题,并且出于良好目的喜欢使用数据分析工具。 当它不起作用时,通常会读取或移动。

»这本书的更多信息可以在出版商的网站上找到
» 目录
» 摘录

小贩优惠券可享受25%的折扣- 数据挖掘

支付纸质版本的书后,就会通过电子邮件发送电子书。

Source: https://habr.com/ru/post/zh-CN466729/


All Articles