精华内容
下载资源
问答
  • 数据科学 IPython 笔记本 7.2 数据整理

    千次阅读 2019-01-13 21:50:34
    7.2 数据整理 原文:Data Wrangling 译者:飞龙 协议:CC BY-NC-SA 4.0(原文协议:Apache License 2.0) 数据流 直接从 GitHub 挖掘数据,Viz由 GitHub API 提供支持,并利用以下内容: 通过 Python 使用github...

    7.2 数据整理

    原文:Data Wrangling

    译者:飞龙

    协议:CC BY-NC-SA 4.0(原文协议:Apache License 2.0

    数据流

    Imgur

    直接从 GitHub 挖掘数据,VizGitHub API 提供支持,并利用以下内容:

    将来,Google BigQueryGitHub Archive 也可以补充 GitHub API。

    导入

    import re
    
    import pandas as pd
    

    准备仓库数据

    加载仓库数据并删除重复:

    repos = pd.read_csv("data/2017/repos-dump.csv", quotechar='"', skipinitialspace=True)
    print('Shape before dropping duplicates', repos.shape)
    repos = repos.drop_duplicates(subset='full_name', keep='last')
    print('Shape after  dropping duplicates', repos.shape)
    repos.head()
    
    '''
    Shape before dropping duplicates (8697, 5)
    Shape after  dropping duplicates (8697, 5)
    '''
    
    full_name stars forks description language
    0 thedaviddias/Front-End-Checklist 24267 2058 ? The perfect Front-End Checklist for modern w… JavaScript
    1 GoogleChrome/puppeteer 21976 1259 Headless Chrome Node API JavaScript
    2 parcel-bundler/parcel 13981 463 ?? Blazing fast, zero configuration web applic… JavaScript
    3 Chalarangelo/30-seconds-of-code 13466 1185 Curated collection of useful Javascript snippe… JavaScript
    4 wearehive/project-guidelines 11279 970 A set of best practices for JavaScript projects JavaScript

    userrepofull_name分离,变成新列:

    def extract_user(line):
        return line.split('/')[0]
    
    def extract_repo(line):
        return line.split('/')[1]
    
    repos['user'] = repos['full_name'].str[:].apply(extract_user)
    repos['repo'] = repos['full_name'].str[:].apply(extract_repo)
    print(repos.shape)
    repos.head()
    
    # (8697, 7)
    
    full_name stars forks description language user repo
    0 thedaviddias/Front-End-Checklist 24267 2058 ? The perfect Front-End Checklist for modern w… JavaScript thedaviddias Front-End-Checklist
    1 GoogleChrome/puppeteer 21976 1259 Headless Chrome Node API JavaScript GoogleChrome puppeteer
    2 parcel-bundler/parcel 13981 463 ?? Blazing fast, zero configuration web applic… JavaScript parcel-bundler parcel
    3 Chalarangelo/30-seconds-of-code 13466 1185 Curated collection of useful Javascript snippe… JavaScript Chalarangelo 30-seconds-of-code
    4 wearehive/project-guidelines 11279 970 A set of best practices for JavaScript projects JavaScript wearehive project-guidelines

    准备用户数据

    加载用户数据并删除重复:

    users = pd.read_csv("data/2017/user-geocodes-dump.csv", quotechar='"', skipinitialspace=True)
    print('Shape before dropping duplicates', users.shape)
    users = users.drop_duplicates(subset='id', keep='last')
    print('Shape after  dropping duplicates', users.shape)
    users.head()
    
    '''
    Shape before dropping duplicates (6426, 8)
    Shape after  dropping duplicates (6426, 8)
    '''
    
    id name type location lat long city country
    0 dns-violations NaN Organization NaN NaN NaN NaN NaN
    1 hannob Hanno Böck User Berlin 52.520007 13.404954 Berlin Germany
    2 takecian Takeshi Fujiki User Tokyo, Japan 35.689487 139.691706 Tokyo Japan
    3 jtomschroeder Tom Schroeder User Chicago 41.878114 -87.629798 Chicago United States
    4 wapiflapi Wannes Rombouts User France 46.227638 2.213749 NaN France

    id列重命名为user

    users.rename(columns={'id': 'user'}, inplace=True)
    users.head()
    
    user name type location lat long city country
    0 dns-violations NaN Organization NaN NaN NaN NaN NaN
    1 hannob Hanno Böck User Berlin 52.520007 13.404954 Berlin Germany
    2 takecian Takeshi Fujiki User Tokyo, Japan 35.689487 139.691706 Tokyo Japan
    3 jtomschroeder Tom Schroeder User Chicago 41.878114 -87.629798 Chicago United States
    4 wapiflapi Wannes Rombouts User France 46.227638 2.213749 NaN France

    合并仓库和用户数据

    左连接仓库和用户:

    repos_users = pd.merge(repos, users, on='user', how='left')
    print('Shape repos:', repos.shape)
    print('Shape users:', users.shape)
    print('Shape repos_users:', repos_users.shape)
    repos_users.head()
    
    '''
    Shape repos: (8697, 7)
    Shape users: (6426, 8)
    Shape repos_users: (8697, 14)
    '''
    
    full_name stars forks description language user repo name type location lat long city country
    0 thedaviddias/Front-End-Checklist 24267 2058 ? The perfect Front-End Checklist for modern w… JavaScript thedaviddias Front-End-Checklist David Dias User France, Mauritius, Canada NaN NaN NaN NaN
    1 GoogleChrome/puppeteer 21976 1259 Headless Chrome Node API JavaScript GoogleChrome puppeteer NaN Organization NaN NaN NaN NaN NaN
    2 parcel-bundler/parcel 13981 463 ?? Blazing fast, zero configuration web applic… JavaScript parcel-bundler parcel Parcel Organization NaN NaN NaN NaN NaN
    3 Chalarangelo/30-seconds-of-code 13466 1185 Curated collection of useful Javascript snippe… JavaScript Chalarangelo 30-seconds-of-code Angelos Chalaris User Athens, Greece 37.983810 23.727539 Athens Greece
    4 wearehive/project-guidelines 11279 970 A set of best practices for JavaScript projects JavaScript wearehive project-guidelines Hive Organization London 51.507351 -0.127758 London United Kingdom

    整理仓库和用户数据

    重新排序列:

    repos_users = repos_users.reindex_axis(['full_name',
                                            'repo',
                                            'description',
                                            'stars',
                                            'forks',
                                            'language',
                                            'user',
                                            'name',
                                            'type',
                                            'location',
                                            'lat',
                                            'long',
                                            'city',
                                            'country'], axis=1)
    print(repos_users.shape)
    repos_users.head()
    
    # (8697, 14)
    
    full_name repo description stars forks language user name type location lat long city country
    0 thedaviddias/Front-End-Checklist Front-End-Checklist ? The perfect Front-End Checklist for modern w… 24267 2058 JavaScript thedaviddias David Dias User France, Mauritius, Canada NaN NaN NaN NaN
    1 GoogleChrome/puppeteer puppeteer Headless Chrome Node API 21976 1259 JavaScript GoogleChrome NaN Organization NaN NaN NaN NaN NaN
    2 parcel-bundler/parcel parcel ?? Blazing fast, zero configuration web applic… 13981 463 JavaScript parcel-bundler Parcel Organization NaN NaN NaN NaN NaN
    3 Chalarangelo/30-seconds-of-code 30-seconds-of-code Curated collection of useful Javascript snippe… 13466 1185 JavaScript Chalarangelo Angelos Chalaris User Athens, Greece 37.983810 23.727539 Athens Greece
    4 wearehive/project-guidelines project-guidelines A set of best practices for JavaScript projects 11279 970 JavaScript wearehive Hive Organization London 51.507351 -0.127758 London United Kingdom

    添加整体排名

    根据星数对每个元素排名:

    repos_users['rank'] = repos_users['stars'].rank(ascending=False)
    print(repos_users.shape)
    repos_users.head()
    
    # (8697, 15)
    
    full_name repo description stars forks language user name type location lat long city country rank
    0 thedaviddias/Front-End-Checklist Front-End-Checklist ? The perfect Front-End Checklist for modern w… 24267 2058 JavaScript thedaviddias David Dias User France, Mauritius, Canada NaN NaN NaN NaN 3
    1 GoogleChrome/puppeteer puppeteer Headless Chrome Node API 21976 1259 JavaScript GoogleChrome NaN Organization NaN NaN NaN NaN NaN 4
    2 parcel-bundler/parcel parcel ?? Blazing fast, zero configuration web applic… 13981 463 JavaScript parcel-bundler Parcel Organization NaN NaN NaN NaN NaN 11
    3 Chalarangelo/30-seconds-of-code 30-seconds-of-code Curated collection of useful Javascript snippe… 13466 1185 JavaScript Chalarangelo Angelos Chalaris User Athens, Greece 37.983810 23.727539 Athens Greece 13
    4 wearehive/project-guidelines project-guidelines A set of best practices for JavaScript projects 11279 970 JavaScript wearehive Hive Organization London 51.507351 -0.127758 London United Kingdom 16

    验证结果:用户

    等价于 GitHub 搜索查询created:2017-01-01..2017-12-31 stars:> = 100 user:donnemartin

    注意:数据可能稍微差了一些,因为搜索查询将考虑执行查询时的数据。 此笔记本中的数据于 2017 年 1 月 1 日采集,来“冻结” 2017 年的结果。从 2017 年 1 月 1 日开始,执行搜索的时间越长,差异越大。

    repos_users[repos_users['user'] == 'donnemartin']
    
    full_name repo description stars forks language user name type location lat long city country rank
    3308 donnemartin/system-design-primer system-design-primer Learn how to design large-scale systems. Prep … 21780 2633 Python donnemartin Donne Martin User Washington, D.C. 38.907192 -77.036871 Washington United States 5

    验证结果:Python 仓库

    等价于 GitHub 搜索查询created:2017-01-01..2017-12-31 stars:>=100 language:python

    注意:数据可能稍微差了一些,因为搜索查询将考虑执行查询时的数据。 此笔记本中的数据于 2017 年 1 月 1 日采集,来“冻结” 2017 年的结果。从 2017 年 1 月 1 日开始,执行搜索的时间越长,差异越大。

    print(repos_users[repos_users['language'] == 'Python'].shape)
    repos_users[repos_users['language'] == 'Python'].head()
    
    # (1357, 15)
    
    full_name repo description stars forks language user name type location lat long city country rank
    3308 donnemartin/system-design-primer system-design-primer Learn how to design large-scale systems. Prep … 21780 2633 Python donnemartin Donne Martin User Washington, D.C. 38.907192 -77.036871 Washington United States 5
    3309 python/cpython cpython The Python programming language 15060 3779 Python python Python Organization NaN NaN NaN NaN NaN 9
    3310 ageitgey/face_recognition face_recognition The world’s simplest facial recognition api fo… 8487 1691 Python ageitgey Adam Geitgey User Various places NaN NaN NaN NaN 31
    3311 tonybeltramelli/pix2code pix2code pix2code: Generating Code from a Graphical Use… 8037 605 Python tonybeltramelli Tony Beltramelli User Denmark NaN NaN NaN NaN 34
    3312 google/python-fire python-fire Python Fire is a library for automatically gen… 7663 386 Python google Google Organization NaN NaN NaN NaN NaN 36

    验证结果:所有仓库

    等价于 GitHub 搜索查询created:2017-01-01..2017-12-31 stars:>=100

    注意:数据可能稍微差了一些,因为搜索查询将考虑执行查询时的数据。 此笔记本中的数据于 2017 年 1 月 1 日采集,来“冻结” 2017 年的结果。从 2017 年 1 月 1 日开始,执行搜索的时间越长,差异越大。

    print(repos_users.shape)
    repos_users.head()
    
    # (8697, 15)
    
    full_name repo description stars forks language user name type location lat long city country rank
    0 thedaviddias/Front-End-Checklist Front-End-Checklist ? The perfect Front-End Checklist for modern w… 24267 2058 JavaScript thedaviddias David Dias User France, Mauritius, Canada NaN NaN NaN NaN 3
    1 GoogleChrome/puppeteer puppeteer Headless Chrome Node API 21976 1259 JavaScript GoogleChrome NaN Organization NaN NaN NaN NaN NaN 4
    2 parcel-bundler/parcel parcel ?? Blazing fast, zero configuration web applic… 13981 463 JavaScript parcel-bundler Parcel Organization NaN NaN NaN NaN NaN 11
    3 Chalarangelo/30-seconds-of-code 30-seconds-of-code Curated collection of useful Javascript snippe… 13466 1185 JavaScript Chalarangelo Angelos Chalaris User Athens, Greece 37.983810 23.727539 Athens Greece 13
    4 wearehive/project-guidelines project-guidelines A set of best practices for JavaScript projects 11279 970 JavaScript wearehive Hive Organization London 51.507351 -0.127758 London United Kingdom 16

    输出结果

    将结果写出到 csv 来在 Tableau 中可视化:

    users.to_csv('data/2017/users.csv', index=False)
    repos_users.to_csv('data/2017/repos-users-geocodes.csv', index=False)
    repos_users.to_csv('data/2017/repos-users.csv', index=False)
    
    repos_rank = repos_users.reindex_axis(['full_name', 'rank'], axis=1)
    repos_rank.to_csv('data/2017/repos-ranks.csv', index=False)
    
    展开全文
  • 介绍了以数据拥有者和直接使用者(行业用户)为核心的数据整理的关键技术,包括数据结构化处理、数据质量评估及数据清洗、数据规范化、数据融合与摘取、数据整理的发布共享等。最后,针对加强数据整理方面的研究提出...

    摘要:数据是政府、企业和机构的重要资源。数据治理关注数据资源有效利用的众多方面,如数据资产确权、数据管理、数据开放共享、数据隐私保护等。从数据管理的角度,探讨了数据治理中的一项关键技术:数据整理。介绍了以数据拥有者和直接使用者(行业用户)为核心的数据整理的关键技术,包括数据结构化处理、数据质量评估及数据清洗、数据规范化、数据融合与摘取、数据整理的发布共享等。最后,针对加强数据整理方面的研究提出了一些思考。

    1 引言

    大数据作为一种资源,在政府、大型企业和机构中发挥着越来越重要的作用。随着大数据应用的不断推进,与数据资源的价值提炼、保值和增值密切相关的大数据治理越来越引起人们的重视。大数据治理是一项复杂的工程,它需要在国家、行业、企业等多个层面上开展体系化的建设,技术上包含数据资产确权、数据管理、数据开放共享、数据隐私保护等诸多方面。这些技术面临的挑战多、难度大,很多方面还没有形成被广泛认可的系统化的解决方案。本文从数据管理这一关键环节出发,探讨其中的关键支撑技术:数据整理(data wrangling)。

    数据整理也叫数据准备,是在挖掘提炼数据价值的过程中进行的前期的数据预处理工作。它看似不足轻重,实则非常重要。有调查研究表明,很多大数据分析任务80%以上的工作花费在数据整理上,这给数据分析带来了巨大的人力成本。很多分析设想因为承担不起前期的数据整理工作而最终被放弃。更重要的是,由于缺少系统性和理论性的支撑,数据整理的质量千差万别,这给数据分析的结果带来了很大的不确定性,大大影响了大数据价值的挖掘与提炼。因此,人们很有必要重视数据整理的研究工作,它是整个数据治理环节中一项重要的基础性工作,但是这项工作在学术界和企业界并没有得到应有的重视。

    2 数据整理概述

    在数据仓库时代,数据预处理主要指的是抽取、转换和加载(ETL)过程。笔者探讨的数据整理和ETL过程有相似的地方,两者都将多源异构的数据集通过一系列处理和转换,变成想要的输出形式。但二者之间是存在较大差别的,具体如下。

    ● 针对的用户不同。ETL服务于专业的数据工程师,而数据整理服务于企业内部所有的数据使用者,以对数据处理技术不熟悉的业务用户为主。这些用户虽然缺少数据管理与数据处理知识,但对业务非常熟悉,对数据背后的语义更清楚。他们是企业机构大数据价值发现的主力。如何针对这类业务型数据分析人员的需求和特点,提供高效的数据整理工具,是数据整理技术面临的一大挑战。

    ● 数据处理的目的不同。数据仓库中的ETL是为了建立数据仓库采用的相对固定的数据处理流水线。数据处理过程一旦建立,整个过程比较静态,很少再变化。数据整理是针对企业业务系统中的问题,动态构建的数据处理过程。它针对具体问题进行数据预处理,针对不同问题采用不同的数据整理过程,一些任务之间可以共享某些数据整理过程。

    ● 数据处理的对象不同。ETL处理的数据对象多为业务系统数据库中的结构化数据源,这些数据源有很规范的元数据。数据整理则面临更复杂、更多样化的数据源,直接应对大数据多样性(variety)的挑战。这种多源异构性在很多大数据应用中非常常见。数据整理技术通常需要帮助用户将其拥有的数据与外部的一些数据源进行关联和数据融合。融合过程中存在的大量数据质量问题(如数据项缺失、不一致、重复、错位、异常值等)给数据整理带来了巨大挑战。与ETL技术相比,这种变化是一种质的变化。

    数据整理是为了使数据更好地服务于数据分析而对数据进行的审查和转换的过程,它是整个数据分析流程中最占用精力的过程。从技术上讲,数据整理包含前期数据解析与结构化处理、数据质量评估与数据清洗、数据集成和提纯等过程。由于问题的复杂性,数据整理过程通常不是完全自动化的,而是需要用户介入的反复迭代和交互的过程。数据可视化、用户反馈与交互在整个过程中都发挥了重要作用。数据整理是由数据可视化领域的Jeffery Heer教授(华盛顿大学)和数据库领域的Joseph M.Hellerstein教授(加州大学伯克利分校)等人较早提出来并持续开展系列研究的。他们还将研究成果进行了产业化,成功创立了以数据整理为主业的Trifacta公司。本文主要在上述两位教授及其合作者发表的一些成果的基础上,对数据整理包含的一些核心要素进一步地阐述,以期引起人们对数据整理研究和应用的重视。

    3 数据整理的核心技术

    3.1 数据的结构化处理

    很多数据模型和算法是构建在结构化数据基础上的,多源异构数据要更好地与其他数据集融合,结构化处理是必不可少的过程。数据结构化处理首先要对原始数据进行解析,提取出需要的信息,再进一步将其转换成结构化数据。很多非结构化数据、Web数据是以文本形式存在的,需要使用信息抽取技术识别文本中的实体、属性、关系等信息。也有很多数据采用的是结构化强一些的数据模型,如JSO格式,这类数据相对关系型数据更灵活,在结构化转换过程中也需要一些技术上的处理。结构化处理的主要输出形式是二维表或者图数据,它需要用户确定数据在转换过程中采用的规则。

    3.2 数据质量评估与数据清洗

    结构化处理主要是数据表达形式上的转换,数据结构化之后并不意味着能够直接使用。处理后的数据还要进行质量评估,如果发现数据中存在问题,则采取进一步的数据清洗措施。这个过程称作数据质量评估。一些简单的数据质量问题可以利用自动化的算法发现,因为数据质量问题的多样性和不可预测性,数据可视化技术成为数据质量评估的关键技术。借助可视化技术,对数据语义非常了解的业务人员更容易发现数据存在的质量问题(如缺失、不一致、异常等)。伴随着数据质量问题的发现,用户可以定义一些数据清洗规则,批量化地处理数据中存在的质量问题,提高数据清洗的效率。在数据库研究领域,也有人借助众包的思路提升数据清洗的效率。这种做法也是基于用户在数据清洗过程中发挥的重要作用进行的。在数据清洗过程中,需要多轮次的人机交互,系统的交互界面和交互方式对于数据清洗算法的有效性尤为重要。

    3.3 数据规范化

    数据清洗还有一项重要的内容是数据规范化,这也是数据准备中常见的问题。规范化有简单的底层数据层面的,如数据类型转换、单位变换、格式表换等,也有较为复杂的数据项规范化处理,如电话号码、邮编、地址等。这类问题的主要成因是自然语言表达上的差异性会造成同一实体存在多种表达形式。比较典型的例子是地址,人们需要对其进行规范化处理,以提升数据的质量。地址的规范化面临的一个比较大的挑战就是粒度的选取,同一个地址可以用不同粒度进行表达。数据的规范化处理需要根据应用的需求特点,确定数据粒度和表达方式。地址规范化处理背后的问题是实体链指问题,即把同一实体的不同表达形式(不同名字)映射到同一个实体名字上,消除实体表达的语义鸿沟,进而通过关联在数据集中不同地方出现的相同语义的实体,达到数据融合的目的。

    此外,缺失值填充也是数据规范化处理过程中常见的问题。一种处理方式是利用缺失数据的上下文数据,采用数据插值的办法修复缺失数据;另一种处理方式是采用平均值或者缺省值的办法填充缺失数据,有时候也用这种办法替换系统发现的异常值。

    3.4 数据融合与摘取

    很多数据价值的发现源自于多源异构数据之间的关联和在关联数据基础之上进行的数据分析。将多个数据集(很可能来自于多个数据源)融合到一起,可使数据内容更丰富,更容易获得新的发现。然而,多源数据融合所需的数据整理过程面临的挑战是很大的。多源头的数据缺少统一的设计,这导致数据集成和数据融合的难度加大。传统的基于模式的数据集成方法很难发挥出大的作用,解决这一难题更多地要从数据项的层面关联数据。因此,实体链指操作在数据融合过程中就显得尤为重要。数据在实体层面的链指可以丰富实体的语义,建立跨数据项之间的关联。由于实体表达的模糊性,实体上下文信息对实体链指精度的影响非常大,有效利用实体上下文信息(如文本中的语境、表结构中同行属性值等)是实体链指的关键。

    数据融合是数据集整合的过程,有些分析任务未必需要全部整合后的数据,可能仅需要一部分数据支撑分析任务。在这种情况下,需要从数据集中提取部分数据(如一些样本或者数据片段),降低数据量,供数据分析模型实现分析操作。这一过程称作数据摘取,它需要根据任务的特点摘取相关数据。

    3.5 发布共享

    企业中复杂的数据分析任务经常需要被共享,某些数据整理操作也会被重复使用,这意味着数据整理的操作也是企业机构的一种资源。企业需要将这些操作以脚本的形式物化出来,使其能够被检索、分享和重复利用。经过数据整理过程的数据,其世袭关系需要被记录下来,以确保用户能够追溯数据的来源,也便于利用索引技术检索需要的数据整理操作。企业内部对数据整理的共享对于企业内部知识管理、协同工作而言有很重要的意义。

    4 以技术带动数据治理能力

    通过以上分析可以看出,数据整理以提升数据分析的效率和质量为目的,在整个大数据分析流程中占有重要的地位。近些年来,尽管学术界在数据质量管理方面做了大量的研究性工作,但在实际应用中,很多数据整理的需求并没有得到很好的满足,还缺少数据整理方面的工具,尤其是系统化的数据整理工具。对于工业界而言,数据整理工作更多地被看作数据分析人员应完成的工作,人们并没有从工具和系统的角度开发设计高效率的数据准备工具,这使得数据分析人员在执行数据整理任务时,执行了大量重复性的工作。因此,加强数据整理的研究和应用工作是很有必要的。

    4.1 数据的结构化与规范化

    信息抽取是指从非结构化的文本中识别实体,并发现实体的属性、实体之间的关系,在互联网信息抽取、知识库构建等领域发挥着重要的作用。命名实体识别的目的是发现文档中的各种实体,如人物、地理位置、组织、日期、时间等。命名实体识别技术分为以下3类。

    ● 基于正则表达式的命名实体识别:把预先定义的正则表达式和文本进行匹配,把符合正则表达式的文本模式都定位出来。基于正则表达式的命名实体识别一般用于识别日期、时间、金额、电子邮件等规则的文本。

    ● 基于字典的命名实体识别:把文本和字典里的<短语,类别>对进行匹配,对匹配的短语进行实体标注,一般用于识别人名、地名。

    ● 基于机器学习模型的命名实体识别:预先对一部分文档进行实体标注,产生一系列的<短语,类别>对,利用这些文档进行机器学习模型的训练,然后用这个模型对没有遇到过的文档进行命名实体识别和标注。

    指代消解是自然语言处理中和命名实体识别关联的一个重要问题。比如在对某位专家学者进行的一个访谈中,除了第一次提到其姓名、职务之外,之后提到这位专家,文本中可能使用“某博士”“某教授”“他”等代称,或者以其担任的职务相称,如“所长”等。如果访谈中还提及其他人物,并且也使用了类似的代称,那么把这些代称对应到正确的命名实体上就是指代消解。在自然语言处理中,经常遇到的一个问题是命名实体的歧义,比如重名问题。为了让计算机正确地分析自然语言书写的文本,命名实体的歧义需要被消除,也就是把具有歧义的命名实体唯一地标识出来。

    关系抽取是信息抽取的一个重要的子任务,负责从文本中识别出实体之间的语义关系。它分为3类方法:有监督的学习方法,该方法包括基于特征向量的学习方法和基于核函数的学习方法;半监督的学习方法,该方法无需人工标注语料库,但是需要根据预定义好的关系类型人工构造出关系实例,将这个关系实例作为种子集合,然后利用Web或者大规模语料库信息的高度冗余性,充分挖掘关系描述模式,通过模式匹配,抽取新的实体关系实例;无监督的学习方法,该方法是一种自底向上的信息抽取策略,它假设拥有相同语义关系的实体对的上下文信息较为相似,其上下文集合代表该实体对的语义关系。较新的技术是使用向量(embedding,基于词或者实体)的方式将结构化和非结构化数据中提及的实体关联起来,利用向量间的相似性,实现以向量为中介的异构数据的结构化处理和关联。

    4.2 数据集成

    数据集成是伴随企业信息化建设的不断深入而形成的。例如,因业务的需要,企事业单位内部普遍构建了多个异构的信息系统(这些信息系统可以自主选择合适的操作系统,有独立的数据库和应用界面,完全是一个自治的系统),并积累了图片、Word、PDF、Excel、网页等大量非结构化文件。由于开发部门和开发时间的不同,这些信息系统中管理的数据源彼此独立、相互封闭,形成了“信息孤岛”,数据难以在系统之间形成快速有效的共享。数据管理与数据分析需要打破这些“信息孤岛”,实现不同“孤岛”信息系统的互联互通,进而施行精准的决策分析。例如,在电子政务领域中,很多地方的政府机关有多少个委、办、局,就有多少个信息系统,每个信息系统都由独立的信息中心进行维护。政府机关之间需要实现信息互联互通、资源共享,最终实现政务服务的协同操作,从而使社会大众真正享受到一站式办公服务(例如杭州市政府工作报告中的“最多跑一次”改革)。事实上,许多互联网应用(包括机票、酒店、餐饮、租房、商品比价等服务)也是把来自不同数据源中的数据进行有效集成后,对外提供统一的访问服务的。

    数据集成把一组自治、异构数据源中的数据进行逻辑或物理上的集中,并对外提供统一的访问接口,从而实现全面的数据共享。数据集成的核心任务是将互相关联的异构数据源集成到一起,使用户能够以透明的方式访问这些数据源。集成是指维护数据源整体上的数据一致性,提高信息共享利用的效率;透明的方式是指用户无需关心如何实现对异构数据源数据的访问,只关心以何种方式访问何种数据即可。数据集成涉及的数据源通常是异构的,数据源可以是各类数据库,也可以是网页中包含的结构化信息(例如表格)、非结构化信息(网页内容),还可以是文件(例如结构化CSV文件、半结构化的XML文件、非结构化的文本文件)等。数据集成中涉及的数据源具有自治性,这些数据源可以在不通知集成系统的前提下改变自身的结构和数据。

    数据源的异构性和自治性是数据集成系统面临的两个主要挑战。针对这两个挑战,数据集成通常采用如下两种解决方案。

    (1)数据仓库

    人们把一组自治数据源中的数据加载并存储到一个物理数据库(称为数据仓库)中,然后在数据仓库上对集成后的数据进行后续的操作和分析。图1显示了基于数据仓库的数据集成系统架构。数据仓库技术涉及的技术包括ETL、元数据管理和数据仓库本身涉及的技术。ETL定期地从各个数据源中抽取(extract)、转换(transform)、加载(load)数据到数据仓库中。元数据管理涉及对数据源的描述、对数据仓库中数据的描述、数据仓库中数据与数据源中数据之间的语义映射。例如,针对关系数据库类型的数据源,语义映射维护数据源中的某个属性对应于数据仓库的某个属性,并指定如何把属性分配到不同的表中。此外,语义映射还要解决不同数据源间数据描述的不统一、语义冲突、数据的冗余等问题。

    数据整理——大数据治理的关键技术

    图1 基于数据仓库的数据集成系统架构

    (2)虚拟集成系统

    在虚拟集成系统中,数据保存在原来的数据源中,只在查询时才需要访问。图2显示了一个典型的虚拟集成系统的架构,该类集成系统使用中间模式建立全局数据的逻辑视图,中间模式向下协调各数据源系统,向上为访问集成数据的应用提供统一数据模式和数据访问的通用接口。各数据源独立性强,虚拟集成系统则主要为异构数据源提供高层次的数据访问服务。元数据维护数据源的基本信息以及中间模式到数据源之间的语义映射等。虚拟集成系统接收到用户的查询请求后,根据元数据信息进行查询的重写,把对中间模式的查询转化为对数据源的查询。类似于数据库的查询处理,虚拟集成系统也会进行查询的优化,包括访问数据源的顺序、不同数据源之间的操作访问(例如两个数据源之间数据的连接算法)等。每个数据源都连有一个封装器,负责把上层用户的查询转发到数据源,并把数据源返回的结果转发给上层的应用。虚拟集成系统的关键问题是如何构造逻辑视图,并使得不同数据源的数据模式映射到这个中间模式上。

    数据整理——大数据治理的关键技术

    图2 基于中间模式的数据集成系统架构

    无论是基于数据仓库还是基于中间模式的数据集成系统,都需要完成实体与关联抽取、模式匹配(schema matching)、实体对齐(record linkage或entity resolution)和实体融合(data fusion)这4个步骤。面向结构化数据的实体与关联抽取技术比较直观,面向非结构化数据的实体与关联抽取可参考第4.1节。模式匹配主要用于发现并映射两个或多个异构数据源之间的属性对应关系,在大规模数据背景下尤为重要。目前,基于朴素贝叶斯、stacking等机器学习算法的模式匹配得到了广泛的研究,并在某些特定领域得到了良好的应用。基于模式匹配,实体对齐的目标是根据匹配属性的记录特征,将数据源中指代同一实体的记录连接起来。实体对齐主要分为3个步骤:获取候选集、成对匹配、聚簇处理。广义地说,实体对齐的方法可以划分为无监督学习和有监督学习。随着人工智能技术的发展,基于决策树、Logistic回归、支持向量机(support vector machine,SVM)的机器学习方法以及基于词向量(word embedding)的深度学习方法被应用于实体对齐,以提高算法的性能。使用实体对齐可以把一组数据源中同一实体的不同记录连接起来,由于数据质量问题,这些记录在描述同一实体时可能存在数据冲突,例如同一个人的住址在不同数据源之间的描述可能是不一样的。因此,在数据集成的最终环节中,实体融合旨在消除不同数据源之间同一个实体属性值的冲突,将不同的数据信息进行综合,从而提取出统一、丰富、高精度的数据。实体融合的主要方法包括基于规则的无监督学习、结合标注数据的半监督学习等。虽然基于标注数据的半监督学习在精度、召回率等方面均获得了令人满意的效果,但是其最大的挑战在于带标签训练数据的获取往往需要耗费较大的人力和物力。如何利用主动学习获取训练数据以降低研究代价,是当前学术界和工业界研究的热点话题。

    4.3 数据清洗与数据质量评估

    数据清洗是指从数据中检测并纠正可能的错误,以确保数据的质量并符合与领域相关的完整性约束。数据清洗是绝大多数数据驱动的任务的必要步骤。缺乏有效的数据清洗可能会使后续的数据分析产生垃圾进、垃圾出(garbage in,garbage out, GIGO)的不良后果。然而,由于数据越发显著的大规模、异质性、高噪音等特点,数据清洗也面临着极大的挑战,这也是近年来学术界和工业界的攻坚重点。一般来说,数据清洗可以分为两个基本的任务:错误检测,即发现数据中潜在的错误、重复或缺失等;数据修复,即针对发现的错误,对数据进行修复。下面结合一个具体的实例分别进行介绍。

    错误检测任务旨在发现影响数据质量的错误因素。一般将错误因素划分为4类,下面通过图3的示例进行说明。

    数据整理——大数据治理的关键技术

    图3 数据清洗中错误检测的示例

    (1)异常值

    异常值是指明显不符合属性语义的取值。例如,图3中t2的年龄为5岁,显然与其有工作单位这一事实是相悖的。然而,设计一种方法让计算机自动地、通用地检测出异常值是个挑战性很大的问题。现有的代表性解决方案包含以下几类。

    ● 基于统计的方法:首先使用一定的分布对数据进行建模,进而检测某个取值是否显著性地偏离正常值。例如,针对图3示例中年龄的例子,可以使用正态分布对数据建模,并计算均值与标准差。如果某个取值在k倍的标准差(如k=3)外,则认定其为异常值。更进一步地,由于均值对异常值比较敏感,很多方法使用中位数作为均值。

    ● 基于距离的方法:度量数据值之间的距离,将与大多数数据距离过远的值认定为异常值。

    (2)结构性错误

    结构性错误是指数据不符合特定领域语义要求的完整性约束。例如图3示例中t1的工作单位是中国人民大学,其所在城市应该为北京,而非上海。检测结构性错误最直接的方法是从外部输入与领域相关的约束条件,如工作单位决定了所在城市。然而,这种方法往往耗时耗力,且很难达到通用性。因此,现有的大多数工作聚焦于从数据中发现潜在的约束条件,如条件函数依赖、拒绝约束规则等。近些年,也有些研究者考虑借助外部通用的知识图谱及互联网上公开可用的众包服务(crowdsourcing),其基本的思想是通过发现数据中与知识图谱或众包标注违背的部分,归纳出结构性错误。

    (3)记录重复

    记录重复在真实数据中十分普遍,其原因是多方面的,比如数据可能由不同的机构提供,或者数据整合自组织的内外部渠道。例如,图3中的t1和t4实际上指代同一个人,但由于数据存在结构性错误(如t1的城市)、缩写(如t4中的“人大”实为“中国人民大学”的缩写)、属性对应错误(t4中的姓氏与名字填反了)等问题,而被计算机认为是两条不同的记录。记录重复会对数据分析造成很大的影响。人们一般采取实体识别技术解决记录重复问题,其本质与上文提到的实体匹配是相同的。由于前文已经给出了详细的探讨,此处不再赘述。

    (4)数据缺失

    数据缺失是指数据的部分属性不存在于数据库中,例如,图3示例中的t3缺失了工作单位信息。这会在两个层面给数据分析带来负面影响:一方面,数据缺失带来信息的损失;另一方面,不同数据源在数据缺失时使用的默认值不尽相同,如“NA”“NaN”“”等,这会进一步误导后续的分析过程。针对数据缺失,现有的方法是采用缺失值插补(data imputation)技术进行修复,其基本想法是使用合理的模型推断出缺失值。比较简单的办法是使用统一的全局值或其他记录在该属性的平均值进行插补,然而这些方法没有考虑具体的数据记录,在实际中难以得到良好的效果。更为有效的办法是采用最大可能性的数据值并进行推理,例如找出最相似记录的相应取值并进行插补,或通过建立贝叶斯或决策树分类器,将缺失值插补建模成一个分类的问题。

    数据修复任务是指根据检测出的错误对数据进行更新,以达到纠正错误的目的。与前文介绍的错误检测相比,数据修复的挑战性更大,因为通常缺乏对修复进行指导的信号。为了应对这一挑战,现有的方法往往采用外部知识或一些定量的统计指标。最近,也有人提出一些新方法,即采用机器学习的手段融合多源信号,将数据修复建模成一个联合推理的问题。

    5 结束语

    数据整理需要研究的工作还有很多。如何开展有针对性的研究工作,并系统化地集成各方面的相关研究工作,形成数据整理方面整体上的研究和应用影响力?威斯康辛大学麦迪逊分校的AnHai Doan教授等人[4]倡议,从事相关领域的研究学者应充分利用庞大的Python开源社区PyData,投入系统化的数据准备工具研制中,将研究成果更好地应用在实际场景中。这或许是一条较为可行的技术路线。

    展开全文
  • 用Python进行数据整理

    千次阅读 2018-01-14 13:39:24
    数据整理数据整理是在分析,可视化和在使用机器学习建立预测模型之前,进行数据收集,数据评估和数据整理的过程 【数据收集】 方法:1、从网上直接下载数据源;2、用编程方法下载数据源;3、使用手头的文件 ...

    【数据整理】
    数据整理是在分析,可视化和在使用机器学习建立预测模型之前,进行数据收集,数据评估和数据整理的过程
    【数据收集】
    方法:1、从网上直接下载数据源;2、用编程方法下载数据源;3、使用手头的文件
    【数据评估】
    评估我们的数据,已确定哪些是干净的数据,以及一旦丢失哪些数据,我们还需要收集哪些数据。确保我们的数据形式,能让后续分析更轻松一点,更注重这方便一些。


    数据评估主要是评估数据的质量和完整度。
    数据质量问题:1、数据丢失;2、数据无效;3、数据不准确;4、数据不一致,单位不同
    数据整洁度标准:1、每个变量构成一列;2、每个观察结果构成一行;3、每种类型的观察单位构成一个表格。


    评估的方法:目测评估(小样本)、编程评估
    使用.head显示DataFrame前5行
    使用.tail显示DataFrame最后5行
    显示.info显示DataFrame基本摘要
    使用.value_counts显示年份一栏的输入数
    df.Year.value_counts(),value_counts是用于series,不能用于dataframe.
    【数据清洗】
    编程数据清理过程分为3步:定义,代码,练习
    定义:指以书面形式定义数据清洗计划,其中我们需将评估转变为定义的清洗任务。这个计划也可作为一个知道清单,所以其他人(或我们自己将来)也可以回顾和重现自己的工作。
    编码:指将这些定义转换为代码并执行该代码。
    练习:指练习我们的数据集,通常使用代码,以确保有效完成我们的清洗工作。


    • 在清洗之前先准备副本
    df_clean = df.copy()
    • 重命名列标题
    df_clean = df_clean.rename(columns = {'oldname1':'newname1',
                                          'oldname2':'newname2'})
    • 内容不一致问题
    df_clean = pandas.series.replace(to_replace=None,value=None,inplace=False,limit=None,regex=False,method='pad',axis=None)
        * 用"value"或第二个参数替换“to_replace”中给出的值-即第一个参数
        * inplace的默认值为假,我们要将它转换成True.inplace真值是指我们只能在这里写这行代码,并执行这行代码,它所产生的变化将反应在df_clean中,如果这里没有inplace真值,我们就必须将次函数的结果重新赋给Startdate
    展开全文
  • 用R进行数据整理

    千次阅读 2018-04-03 21:14:40
    数据加工或数据整理占用数据科学家或数据分析员大量的时间,而 tidyr 和 dplyr 两种 R 包可使 R 中的这些任务更加简单。 tidyr - 用于重塑数据布局的包 dplyr - 用于帮助转换整洁的表格数据的包 查看 R 语言内的...

    数据加工或数据整理占用数据科学家或数据分析员大量的时间,而 tidyr 和 dplyr 两种 R 包可使 R 中的这些任务更加简单。

    tidyr - 用于重塑数据布局的包

    dplyr - 用于帮助转换整洁的表格数据的包

    查看 R 语言内的数据整理,了解这些包如何能使你操纵数据。你可以使用这些包来帮助你完成下一个编程任务和未来的调查。

    你可能还需要下载这张有用的数据整理速查表。RStudio 上还有其他一些有用的速查表。

    展开全文
  • 本文比较了用于数据准备的几种方法,它们分别是提取-变换-加载批处理(ETL)、流式获取和数据整理。本文还讨论了数据准备如何与可视化分析相关联,以及不同用户角色(如数据科学家或业务分析人员)应如何共同构建...
  • imagenet 数据整理

    千次阅读 2019-02-20 22:49:45
    百万张图片的 imagenet 数据原始大小约为 148G,整理成 TFRecord 格式文件后约为 144G,因此至少要准备 300G 大小。 参考:https://github.com/tensorflow/models/tree/master/research/inception#getting-started 1...
  • TCGA临床数据整理

    千次阅读 2019-12-10 14:49:30
    TCGA临床数据整理是一个基本的操作 我们选择临床数据在Data category 中选择clinical 最重要的在Data format 中一定要选择XML的]格式 选择自己研究的TCGA肿瘤类型,添加到cart里面下载数据 点击download 下载 ...
  • 数据整理—dplyr包(filter系列)

    千次阅读 2019-04-12 11:45:00
    作者:小橙子来源:小橙子学数据分析数据整理/清洗,占据了数据分析80%的时间dplyr提供了一种方式,可以高效处理数据dplyr是什么?官方解释:agrammaro...
  • 千万级微博语料数据整理

    万次阅读 2018-01-27 14:53:55
    整理了千万级的微博数据,可以做各种微博语料分析,字段非常丰富 数据最终是一个json文件,每一行都是一个小的json { &amp;amp;amp;amp;quot;_id&amp;amp;amp;amp;quot;: { &amp;amp;amp;amp;quot...
  • 南方数据整理加工引擎SME

    千次阅读 2012-11-29 21:18:03
    南方数据整理加工引擎SME ... SME是南方数据整理加工引擎的简称,是一款由广东南方数码科技有限公司设计研发的,具体独立自主知识产权的信息化测绘软件。本软件为广大测绘行业用户提供数据质量检查和整
  • Sensor 数据整理

    千次阅读 2015-06-12 22:24:19
    整理下最常见的几颗Sensor数据 分辨率 比例 尺寸ov2710 200w 1/2.7inch 16:9 mi5100 500w 1/2.5inch 4:3 ar0330 300w 1/3inch 3:2/4:3/16:9
  • excel数据整理 我们在日常工作中经常会碰到excel自带公式无法解决的问题,在面对大量数据需要整理计算的时候会消耗大量的时间,如果你了解vba的一些技巧,就可以减少很多工作量。本篇文章将会带你进入一个简单、易懂...
  • 新冠数据整理和简单分析写在前面简单介绍具有离散潜伏期的SEAIR模型推断过程结果展示 写在前面 注意: 本文章涉及内容已形成学术成果发表,只供学习参考,如被发现抄袭,后果自负。 简单介绍 最近花了一些时间完成了...
  • 脱敏数据整理

    千次阅读 2017-09-01 22:23:26
    恢复脱敏字段的思想
  • 新冠数据整理和简单分析(三)—— 使用Anylogic进行仿真实验简单介绍模型介绍SIRSEAIR-C 简单介绍 在上一篇文章中我试图使用Optuna的超参数拟合技术来求更复杂的SIR模型变种,但是遇到了数据无法观测的问题(潜伏期...
  • 新冠数据整理和简单分析

    千次阅读 多人点赞 2020-04-06 19:53:52
    新冠数据整理和分析(一) 提前准备 使用的工具和包 数据来源和读取 时序分析 中国各省确诊时序分析 确诊地图可视化 世界各国确诊时序分析 使用关联网络分析国家间病毒传播 基于DCCA生成去趋势互相关矩阵 使用Gephi...
  • 3.3 耗时耗力的数据整理过程 数据的整理往往是一个痛苦的耗时耗力的过程,有人曾经以做饭菜来打比方:做过饭菜的人都知道,下油锅炒菜的时间其实并不长,几分钟就够了,而做菜之前的买菜、泡菜(用水浸泡菜去除农药...
  • CACD2000人脸数据整理

    千次阅读 2017-06-22 10:15:49
    发现跨年龄的人脸识别并没有贴出来CACD2000的数据解析与整理。这里详细说一下 %load meta.matload('celebrity2000_meta.mat')%read lable then store lable.txtcacd_lable = 'lable.txt'; fid = fopen(cacd_lable,'...
  • excel中的数据整理到mysql数据库

    千次阅读 2011-12-20 23:26:40
    如果有一天,梦醒了,我希望,醒来的我,是清醒的. ...之前当然是把excel中的数据整理一下,最好是整理成一一对应了. 两种方法: 一.用mysql里面的load函数. 这种方法其实应该早点想到的,但是,确实是在我
  • MTCNN训练数据整理

    万次阅读 2017-02-17 14:25:16
    对于训练数据,分为四个组成部分 1. 负样本 3 2. 正样本 1  3. 部分样本 1 4. 关键点样本 2 比例为 3:1:1:2 其中对于 1,2,3中数据,来自wider_face数据库 对于4中数据,来自CelebA...
  • 深度学习中大数据整理问题

    千次阅读 热门讨论 2016-06-14 20:46:39
    这段时间一直在整理数据用于训练,但是从网上找到的数据集往往很凌乱,不能满足使用要求。这些数据集少则几万,多则几十万几百万。如果手动去整理这些数据集无疑是一个繁重的工作,甚至无法去做! 这个时候则需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,978
精华内容 37,991
关键字:

数据整理