精华内容
下载资源
问答
  • 贴合实际:空讲Python语法,清晰简明地介绍如何用Python处理、分析数据;热点案例:覆盖6大热点应用领域,可直接参考研发,实现数据变现;学习资源:提供所有案例源代码和数据,供读者操作练习,快速上手本书...

    内容全面:借助5大Python工具库,实现数据分析从获取到建模全流程覆盖;

    贴合实际:不空讲Python语法,清晰简明地介绍如何用Python来处理、分析数据;

    热点案例:覆盖6大热点应用领域,可直接参考研发,实现数据变现;

    学习资源:提供所有案例源代码和数据,供读者操作练习,快速上手

    本书主要围绕整个数据分析方法论的常规流程,介绍了Python常用的工具包,包括科学计算库Numpy、数据分析库Pandas、数据挖掘库Scikit-Learn,以及数据可视化库Matplotlib和Seaborn的基本知识,并从数据分析挖掘的实际业务应用出发,讲解了互联网、金融及零售等行业的真实案例,比如客户分群、产品精准营销、房价预测、特征降维等,深入浅出、循序渐进地介绍了Python数据分析的全过程。

    本书内容精炼、重点突出、案例丰富,适合在企业中从事数据分析、数据挖掘、机器学习等工作的人员学习使用,同样适合想从事数据分析挖掘工作的各大中专院校的学生与教师,以及其他对数据分析挖掘技术领域有兴趣爱好的各类人员。

    尚涛,毕业于上海交通大学数学系,拥有数学硕士学位,研究方向为数据挖掘及机器学习领域,曾任职于支付宝、平安科技、易方达基金。现任职于南方基金,专注于信用风险评分、精准营销、推荐系统等领域的数据挖掘项目的研发工作,拥有超过10年的数据挖掘和优化建模经验,以及多年使用Python、SAS、R等软件的经验。在从业经历中,为所在公司的业务方成功实施了众多深受好评的数据挖掘项目,取得了较好的业务价值。

    章 数据分析方法

    11.1 什么是数据分析2

    1.2 数据分析标准流程2

    1.3 数据清洗7

    1.4 数据探索8

    1.5 模型开发10

    1.6 模型应用11

    第二章 初识Python12

    2.1 Python基本概述13

    2.2 Python编程语法基础14

    2.3 数据分析常用Python库22

    2.4 第三方Python库介绍23

    第三章 NumPy数组与矩阵25

    3.1 Ndarray对象26

    3.2 数据类型27

    3.3 数组属性28

    3.4 创建数组30

    3.5 数据索引与切片34

    3.6 数组操作37

    3.7 数组排序51

    3.8 函数54

    3.9 矩阵62

    第四章 Pandas数据分析65

    4.1 系列(Series)66

    4.2 数据帧(DataFrame)68

    4.3 基本功能介绍70

    4.4 读取和写入数据78

    4.5 索引和选择数据84

    4.6 数据合并87

    4.7 累计与分组91

    4.8 时间序列处理96

    4.9 缺失数据处理101

    4.10 函数107

    4.11 描述性统计115

    4.12 绘制图形118

    第五章 Scikit-Learn数据挖掘126

    5.1 机器学习问题127

    5.2 机器学习的基本流程127

    5.3 数据处理128

    5.4 特征选择131

    5.5 模型调用135

    5.6 模型参数说明138

    5.7 交叉验证148

    5.8 模型部署151

    第六章 数据可视化153

    6.1 Matplotlib绘制图形154

    6.2 Seaborn绘制图形163

    6.3 重要类型图形的绘制184

    第七章 数据导入与导出192

    7.1 连接数据库193

    7.2 读取外部数据194

    7.3 导出数据201

    第八章 数据预处理203

    8.1 数据去重204

    8.2 缺失值处理205

    8.3 变量操作210

    8.4 样本选择217

    8.5 数据集操作220

    第九章 数据探索226

    9.1 集中趋势227

    9.2 离散程度230

    9.3 分布状态234

    9.4 相关分析236

    第十章 线性回归分析241

    10.1 线性回归模型242

    10.2 最小二乘估计243

    10.3 显著性检验244

    10.4 预测245

    10.5 相关性246

    10.6 共线性247

    10.7 案例分析——波士顿地区房价预测247

    第十一章 Logistic回归分析260

    11.1 逻辑回归模型介绍261

    11.2 案例分析——泰坦尼克生存预测262

    第十二章 决策树275

    12.1 决策树介绍276

    12.2 案例分析——金融产品推荐277

    第十三章 主成分分析292

    13.1 主成分分析的数学模型293

    13.2 PCA函数说明294

    13.3 案例分析——数据降维295

    第十四章 聚类分析304

    14.1 距离305

    14.2 聚类方法306

    14.3 确定聚类数309

    14.4 聚类的分析步骤311

    14.5 案例分析——客户群聚类分析312

    第十五章 时间序列分析323

    15.1 时间序列的组成部分324

    15.2 确定性的时间序列模型325

    15.3 随机时间序列模型325

    15.4 ARMA模型的识别327

    15.5 时间序列的分析步骤329

    15.6 模型参数的估计329

    15.7 案例分析——大气二氧化碳浓度预测331

    展开全文
  • Python 数据处理系列博客来啦! 本系列将以《Python数据处理》这本书为...这本书主要讲了如何用 Python 处理各种类型的文件,如 JSON、XML、CSV、Excel、PDF 等。后面几章还会讲数据清洗、网页抓取、自动化和规模化...

    Python 数据处理系列博客来啦!

    本系列将以《Python数据处理》这本书为基础,以书中每章一篇博客的形式带大家一起学习 Python 数据处理。书中有些地方讲的不太详细,我会查阅其他资料来补充,力争每篇博客都把知识点涵盖全且通俗易懂。

    这本书主要讲了如何用 Python 处理各种类型的文件,如 JSON、XML、CSV、Excel、PDF 等。后面几章还会讲数据清洗、网页抓取、自动化和规模化等使用技能。我也是 Python 初学者,将以初学者的角度写文章,所以博客对初学者比较友好。

    100 多位经验丰富的开发者参与,在 Github 上获得了近 1000star 的全栈全平台开源项目想了解或参与吗?
    项目地址:https://github.com/cachecats/coderiver

    前言

    以易于机器理解的方式来存储数据的文件格式,通常被称作机器可读的 (machine readable)。常见的机器可读格式包括:

    • 逗号分隔值(Comma-Separated Values,CSV)
    • JavaScript 对象符号(JavaScript Object Notation,JSON)
    • 可扩展标记语言(eXtensible Markup Language,XML)

    在口语和书面语中,提到这些数据格式时通常使用它们的短名字(如 CSV)。 我们将使用这些缩写 。

    一、CSV数据

    CSV 文件(简称为 CSV)是指将数据列用逗号分隔的文件。文件的扩展名是 .csv。

    另一种数据类型,叫作制表符分隔值(tab-separated values,TSV)数据,有时也与 CSV归为一类。TSV 与 CSV 唯一的不同之处在于,数据列之间的分隔符是制表符(tab),而不是逗号。文件的扩展名通常是 .tsv,但有时也用 .csv 作为扩展名。从本质上来看,.tsv 文件与 .csv 文件在Python 中的作用是相同的。

    我们采用的数据源是从世界卫生组织(https://www.who.int/zh/home)中下载的数据。

    打开世卫组织官网后,点击“健康主题”,“数据和统计” 就能找到很多数据。

    这里下载了关于婴幼儿护理的统计数据,并重命名为 data.csv

    csv 文件可以直接用 Excel 打开直观的看到,我们用 Excel 打开如下图:

    接下来就要用 Python 来简单的处理这些数据。

    以列表的形式读取csv数据

    编写一个读取 csv 文件的程序:

    import csv
    
    csvfile = open('./data.csv', 'r')
    reader = csv.reader(csvfile)
    
    for row in reader:
        print(row)
    

    import csv 将导入 Python 自带的 csv 模块。csvfile = open('./data.csv', 'r') 以只读的形式打开数据文件并存储到变量 csvfile 中。然后调用 csv 的 reader() 方法将输出保存在 reader 变量中,再用 for 循环将数据输出。

    运行程序,控制台输出:

    可以看到跟 Excel 打开的内容一致。

    以字典的形式读取csv数据

    改一下代码,以字典的形式读取 csv

    import csv
    
    csvfile = open('./data.csv', 'r')
    reader = csv.DictReader(csvfile)
    
    for row in reader:
        print(row)
    

    控制台输出:

    二、JSON数据

    同样在世卫组织官网下载数据源,重命名为 data.json。用格式化工具打开 json 文件如下:

    编写程序对 json 进行解析

    import json
    
    # 将 json 文件读取成字符串
    json_data = open('./data.json').read()
    # 对json数据解码
    data = json.loads(json_data)
    # data 的类型是 字典dict
    print(type(data))
    # 直接打印 data
    print(data)
    # 遍历字典
    for k, v in data.items():
        print(k + ':' + str(v))
    

    控制台输出:

    Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:

    • json.dumps(): 对数据进行编码。
    • json.loads(): 对数据进行解码。

    在json的编解码过程中,python 的原始类型与json类型会相互转换,具体的转化对照如下:

    Python 编码为 JSON 类型转换对应表:

    Python JSON
    dict object
    list, tuple array
    str string
    int, float, int- & float-derived Enums number
    True true
    False false
    None null

    JSON 解码为 Python 类型转换对应表:

    JSON Python
    object dict
    array list
    string str
    number (int) int
    number (real) float
    true True
    false False
    null None

    三、XML 数据

    XML 格式的数据既便于机器读取,也便于人工读取。但是对于本章的数据集来说,预览并理解 CSV 文件和 JSON 文件要比 XML 文件容易得多。

    xml 格式说明:

    • Tag: 使用<和>包围的部分;
    • Element:被Tag包围的部分,如 2003,可以认为是一个节点,它可以有子节点;
    • Attribute:在Tag中可能存在的 name/value 对,如示例中的 title=“Enemy Behind”,一般表示属性。

    世卫组织的数据不好理解,咱们用个简单的能看得懂的电影数据来做演示:

    <?xml version="1.0" encoding="UTF-8"?>
    <collection shelf="New Arrivals">
        <movie title="Enemy Behind">
            <type>War, Thriller</type>
            <format>DVD</format>
            <year>2003</year>
            <rating>PG</rating>
            <stars>10</stars>
            <description>Talk about a US-Japan war</description>
        </movie>
        <movie title="Transformers">
            <type>Anime, Science Fiction</type>
            <format>DVD</format>
            <year>1989</year>
            <rating>R</rating>
            <stars>8</stars>
            <description>A schientific fiction</description>
        </movie>
        <movie title="Trigun">
            <type>Anime, Action</type>
            <format>DVD</format>
            <episodes>4</episodes>
            <rating>PG</rating>
            <stars>10</stars>
            <description>Vash the Stampede!</description>
        </movie>
        <movie title="Ishtar">
            <type>Comedy</type>
            <format>VHS</format>
            <rating>PG</rating>
            <stars>2</stars>
            <description>Viewable boredom</description>
        </movie>
    </collection>
    

    这个数据相对来说比较简单,只有三层。但原理掌握了,几层数据都能搞定。

    下面编写代码对上面的 xml 进行解析,解析之后再分别格式化成字典和 json 格式的数据输出:

    from xml.etree import ElementTree as ET
    import json
    
    tree = ET.parse('./resource/movie.xml')
    root = tree.getroot()
    
    all_data = []
    
    for movie in root:
        # 存储电影数据的字典
        movie_data = {}
        # 存储属性的字典
        attr_data = {}
    
        # 取出 type 标签的值
        movie_type = movie.find('type')
        attr_data['type'] = movie_type.text
    
        # 取出 format 标签的值
        movie_format = movie.find('format')
        attr_data['format'] = movie_format.text
    
        # 取出 year 标签的值
        movie_year = movie.find('year')
        if movie_year:
            attr_data['year'] = movie_year.text
    
        # 取出 rating 标签的值
        movie_rating = movie.find('rating')
        attr_data['rating'] = movie_rating.text
    
        # 取出 stars 标签的值
        movie_stars = movie.find('stars')
        attr_data['stars'] = movie_stars.text
    
        # 取出 description 标签的值
        movie_description = movie.find('description')
        attr_data['description'] = movie_description.text
    
        # 获取电影名字,以电影名为字典的键,属性信息为字典的值
        movie_title = movie.attrib.get('title')
        movie_data[movie_title] = attr_data
        # 存入列表中
        all_data.append(movie_data)
    
    print(all_data)
    # all_data 此时是一个列表对象,用 json.dumps() 将python对象转换为 json 字符串
    json_str = json.dumps(all_data)
    print(json_str)
    

    注释写的比较详细,下面介绍下 ElementTree 提供的方法。

    3.1 解析的三种方法

    ElementTree 解析 xml 有三种方法:

    1. 调用parse()方法,返回解析树

      tree = ET.parse('./resource/movie.xml')
      root = tree.getroot()
      
    2. 调用from_string(),返回解析树的根元素

      data = open('./resource/movie.xml').read()
      root = ET.fromstring(data)
      
    3. 调用 ElementTree 类的 ElementTree(self, element=None, file=None) 方法

      tree = ET.ElementTree(file="./resource/movie.xml")
      root = tree.getroot() 
      

    3.2 Element 对象

    class xml.etree.ElementTree.Element(tag, attrib={}, **extra)

    Element 对象的属性

    • tag: 标签
    • text: 去除标签,获得标签中的内容。
    • attrib: 获取标签中的属性和属性值。
    • tail: 这个属性可以用来保存与元素相关联的附加数据。它的值通常是字符串,但可能是特定于应用程序的对象。

    Element 对象的方法

    1. clear():清除所有子元素和所有属性,并将文本和尾部属性设置为None。

    2. get(attribute_name, default=None):通过指定属性名获取属性值。

    3. items():以键值对的形式返回元素属性。

    4. keys():以列表的方式返回元素名。

    5. set(attribute_name,attribute_value):在某标签中设置属性和属性值。

    6. append(subelement):将元素子元素添加到元素的子元素内部列表的末尾。

    7. extend(subelements):追加子元素。

    8. find(match, namespaces=None):找到第一个匹配的子元素,match可以是标签名或者path。返回Elememt实例或None。

    9. findall(match, namespaces=None):找到所有匹配的子元素,返回的是一个元素列表。

    10. findtext(match, default=None, namespaces=None):找到匹配第一个子元素的文本。返回的是匹配元素中的文本内容。

    11. getchildren():Python3.2后使用 list(elem) 或 iteration.

    12. getiterator(tag=None):Python3.2后使用 Element.iter()

    13. iter(tag=None):以当前元素为根创建树迭代器。迭代器遍历这个元素和它下面的所有元素(深度优先级)。如果标签不是None或’*’,那么只有标签等于标签的元素才会从迭代器返回。如果在迭代过程中修改树结构,则结果是未定义的。

    14. iterfind(match, namespaces=None): 匹配满足条件的子元素,返回元素。

    3.3 ElementTree 对象

    class xml.etree.ElementTree.ElementTree(element=None, file=None)

    ElementTree是一个包装器类,这个类表示一个完整的元素层次结构,并为标准XML的序列化添加了一些额外的支持。

    1. setroot(element):替换根元素,原来的根元素中的内容会消失。

    2. find(match, namespaces=None):从根元素开始匹配和 Element.find()作用一样。

    3. findall(match, namespaces=None):从根元素开始匹配和 Element.findall()作用一样。

    4. findtext(match, default=None, namespaces=None):从根元素开始匹配和 Element.findtext()作用一样。

    5. getiterator(tag=None):Python3.2后使用 ElementTree.iter() 代替。

    6. iter(tag=None):迭代所有元素

    7. iterfind(match, namespaces=None):从根元素开始匹配和 Element.iterfind()作用一样。

    8. parse(source, parser=None):解析xml文本,返回根元素。

    9. write(file, encoding=”us-ascii”, xml_declaration=None, default_namespace=None, method=”xml”, *, short_empty_elements=True):写出XML文本。

    对 JSON、XML、CSV三种格式数据的处理就讲完啦,下期讲如何处理 Excel 文件,欢迎关注。


    全栈全平台开源项目 CodeRiver

    CodeRiver 是一个免费的项目协作平台,愿景是打通 IT 产业上下游,无论你是产品经理、设计师、程序员或是测试,还是其他行业人员,只要有好的创意、想法,都可以来 CodeRiver 免费发布项目,召集志同道合的队友一起将梦想变为现实!

    CodeRiver 本身还是一个大型开源项目,致力于打造全栈全平台企业级精品开源项目。涵盖了 React、Vue、Angular、小程序、ReactNative、Android、Flutter、Java、Node 等几乎所有主流技术栈,主打代码质量。

    目前已经有近 100 名优秀开发者参与,github 上的 star 数量将近 1000 个。每个技术栈都有多位经验丰富的大佬坐镇,更有两位架构师指导项目架构。无论你想学什么语言处于什么技术水平,相信都能在这里学有所获。

    通过 高质量源码 + 博客 + 视频,帮助每一位开发者快速成长。

    项目地址:https://github.com/cachecats/coderiver


    您的鼓励是我们前行最大的动力,欢迎点赞,欢迎送小星星✨ ~

    展开全文
  • 因为,文章内容不全,所以导致很多看完某篇文章后,需要再去买课程或者找网路。 本文呢,我不仅仅叫你如何学会使用 Numpy 的内置函数,也会带你阅读部分源码「中英对照」。让你更加熟悉这个库,达到知其然,知其...
  • Python 自然语言处理

    2018-05-12 15:47:23
    Python自然语言处理》基于Python编程语言以及一个名为NLTK的自然语言工具包的开源库,但并要求读者有Python编程的经验。全书共11章,按照难易程度顺序编排。第1章到第3章介绍了语言处理的基础,讲述如何使用小的...
  • 全书总结现在你知道了如何使用重要的机器...处理机器学习问题学完了本书介绍的所有强大的方法,你现在可能很想马上行动,开始你最喜欢的算法来解决数据相关的问题。但这通常并不是开始分析的好方法。机器学习算...

    全书总结

    现在你知道了如何使用重要的机器学习算法进行监督学习和无监督学习,这让你可以解

    决很多种机器学习问题。在带你探索机器学习提供的所有可能性之前,我们希望给你一

    些最后的建议、一些额外的资源,并提供关于如何进一步提高机器学习和数据科学技能

    的建议。

    处理机器学习问题

    学完了本书介绍的所有强大的方法,你现在可能很想马上行动,开始用你最喜欢的算法来

    解决数据相关的问题。但这通常并不是开始分析的好方法。机器学习算法通常只是更大的

    数据分析与决策过程的一小部分。为了有效地利用机器学习,我们需要退后一步,全面地

    思考问题。首先,你应该思考想要回答什么类型的问题。你想要做探索性分析,只是看看

    能否在数据中找到有趣的内容?或者你已经有了特定的目标?通常来说,你在开始时有一

    个目标,比如检测欺诈用户交易、推荐电影或找到未知行星。如果你有这样的目标,那么

    在构建系统来实现目标之前,你应该首先思考如何定义并衡量成功,以及成功的解决方案

    对总体业务目标或研究目标有什么影响。假设你的目标是欺诈检测。

    然后就出现了下列问题:

    • 如何度量欺诈预测是否实际有效?

    • 我有没有评估算法的合适数据?

    • 如果我成功了,那么我的解决方案会对业务造成什么影响?

    正如第5章中所述,你最好能使用商业指标直接度量算法的性能,比如增加利润或减少损

    失。但这通常难以做到。一个更容易回答的问题是:“如果我构建出完美的模型,那么会

    怎么样?”如果完美地检测出所有欺诈行为可以为你的公司每月节省100美元,那么这些省下来的钱可能都不够保证让你开始动手开发算法。如果模型可能为你的公司每月节省上

    万美元,那么这个问题就值得探索。

    假设你已经定义好了要解决的问题,知道一种解决方案可能对你的项目产生重大影响;此

    外,你还确信拥有合适的信息来评估模型是否成功。接下来的步骤通常是获取数据并构建

    工作原型。本书中我们讨论过许多你可以使用的模型,以及如何正确地评估和调节这些模

    型。但在尝试这些模型时请记住,这只是更大的数据科学工作流程中的一小部分,模型构

    建通常是“收集新数据、清洗数据、构建模型和分析模型”这个反馈环路的一部分。分析

    模型所犯的错误通常告诉我们:数据中缺失了哪些内容、还可以收集哪些额外数据,或者

    如何重新规划任务使机器学习更加高效。收集更多数据或不同的数据,或者稍微改变任务

    规划,可能会比连续运行网格搜索来调参的回报更高。

    参与决策过程的人

    你还应该考虑是否应该让人参与决策过程,以及如何参与。有些过程(比如无人驾驶汽车

    的行人检测)需要立即做出决定。其他过程可能不需要立刻的响应,所以可以让人来决定

    不确定的决策。举个例子,医疗应用可能需要非常高的精度,单靠机器学习算法可能无法

    达到。但如果一个算法可以自动完成90%、50%甚至只有10%的决策过程,那么都可能

    已经减少了响应时间或降低了成本。许多应用都以“简单情况”为主,算法可以对其做出

    决策,还有相对较少的“复杂情况”,可以将其重新交给人来决定。

    从原型到生产

    本书中讨论的工具对许多机器学习应用来说都是很好的,可以非常快速地进行分析和原

    型设计。许多组织,甚至是非常大型的组织,比如国际银行和全球社交媒体公司,也将

    Python和scikit-learn用于生产系统。但是,许多公司拥有复杂的基础架构,将Python

    集成到这些系统中并不总是很容易。这不一定是个问题。在许多公司中,数据分析团队使

    用Python或R等语言,可以对想法进行快速测试,而生产团队则使用Go、Scala、C++和

    Java等语言来构建鲁棒性更好的可扩展系统。数据分析的需求与构建实时服务并不相同,

    所以这些任务使用不同的语言是有道理的。一个相对常见的解决方案是使用一种高性能语

    言在更大的框架内重新实现分析团队找到的解决方案。这种方法比嵌入整个库或整个编程

    语言并与不同数据格式互相转换要更加简单。

    无论你能否在生产系统中使用scikit-learn,重要的是要记住,生产系统的要求与一次性

    的分析脚本不同。如果将一个算法部署到更大的系统中,那么会涉及软件工程方面的很

    多内容,比如可靠性、可预测性、运行时间和内存需求。对于在这些领域表现良好的机器

    学习系统来说,简单就是关键。请仔细检查数据处理和预测流程中的每一部分,并问你

    自己这些问题:每个步骤增加了多少复杂度?每个组件对数据或计算基础架构的变化的

    鲁棒性有多高?每个组件的优点能否使其复杂度变得合理?如果你正在构建复杂的机器

    学习系统,我们强烈推荐阅读Google机器学习团队的研究者发布的这篇论文:“Machine

    Learning: The High Interest Credit Card of Technical Debt”(http://research.google.com/pubs/

    pub43146.html)。这篇文章重点介绍了在大规模生产中创建并维护机器学习软件的权衡。虽然技术债问题在大规模的长期项目中特别紧迫,但即使是短期和较小的系统,吸取的教

    训也有助于我们构建更好的软件。

    测试生产系统

    在这本书中,我们介绍了如何基于事先收集的测试集来评估算法的预测结果。这被称为离

    线评估(offline evaluation)。但如果你的机器学习系统是面向用户的,那么这只是评估算

    法的第一步。下一步通常是在线测试(online testing)或实时测试(live testing),对在整个

    系统中使用算法的结果进行评估。改变网站向用户呈现的推荐结果或搜索结果,可能会极

    大地改变用户行为,并导致意想不到的结果。为了防止出现这种意外,大部分面向用户的

    服务都会采用A/B测试(A/B testing),这是一种盲的(blind)用户研究形式。在A/B测

    试中,在用户不知情的情况下,为选中的一部分用户提供使用算法A的网站或服务,而为

    其余用户提供算法B。对于两组用户,在一段时间内记录相关的成功指标。然后对算法A

    和算法B的指标进行对比,并根据这些指标在两种方法中做出选择。使用A/B测试让我

    们能够在实际情况下评估算法,这可能有助于我们发现用户与模型交互时的意外后果。通

    常情况下,A是一个新模型,而B是已建立的系统。在线测试中还有比A/B测试更为复杂

    的机制,比如bandit算法。John Myles White的Bandit Algorithms for Website Optimization

    了很好的介绍。

    构建你自己的估计器

    本书包含scikit-learn中实现的大量工具和算法,可用于各种类型的任务。但是,你通常

    需要对数据做一些特殊处理,这些处理方法没有在scikit-learn中实现。在将数据传入

    scikit-learn模型或管道之前,只做数据预处理可能也足够了。但如果你的预处理依赖于

    数据,而且你还想使用网格搜索或交叉验证,那么事情就变得有点复杂了。

    我们在第6章中讨论过将所有依赖于数据的处理过程放在交叉验证循环中的重要性。那

    么如何同时使用你自己的处理过程与scikit-learn工具?有一种简单的解决方案:构建

    你自己的估计器!实现一个与scikit-learn接口兼容的估计器是非常简单的,从而可以

    与Pipeline、GridSearchCV和cross_val_score一起使用。你可以在scikit-learn文档

    estimator),但下面是其要点。实现一个变换器类的最简单的方法,就是从BaseEstimator和

    TransformerMixin继承,然后实现__init__、fit和predict函数,如下所示。

    In[1]:

    from sklearn.base import BaseEstimator, TransformerMixin

    class MyTransformer(BaseEstimator, TransformerMixin):

    def __init__(self, first_parameter=1, second_parameter=2):

    #所有参数必须在__init__函数中指定

    self.first_parameter = 1

    self.second_parameter = 2

    def fit(self, X, y=None):

    # fit应该只接受X和y作为参数

    #即使你的模型是无监督的,你也需要接受一个y参数!

    #下面是模型拟合的代码

    print("fitting the model right here")

    # fit返回self

    return self

    def transform(self, X):

    # transform只接受X作为参数

    #对X应用某种变换

    X_transformed = X + 1

    return X_transformed

    实现一个分类器或回归器的方法是类似的,你只需要从ClassifierMixin或RegressorMixin

    继承,而不是TransformerMixin。此外,你还要实现predict,而不必实现transform。

    从上面的例子中可以看出,实现你自己的估计器需要很少的代码,随着时间的推移,大部

    分scikit-learn用户都会构建出一组自定义模型。

    下一步怎么走

    本书对机器学习进行了介绍,并让你成为一名高效的从业者。但是,如果你想要进一步提

    高机器学习技能,下面是一些关于书籍和更专业的资源的建议,以便你进一步深入研究。

    理论

    在本书中,我们试图直观地解释大多数常见机器学习算法的工作原理,而不要求你在数学或

    计算机科学方面具有坚实的基础。但是,我们讨论的许多模型都使用了概率论、线性代数和

    最优化方面的理论。虽然没有必要理解这些算法的所有实现细节,但我们认为,了解算法背

    后的一些理论知识可以让你成为更优秀的数据科学家。关于机器学习理论有许多好书,如果

    我们所讲的内容激起了你对机器学习可能性的兴趣,那么我们建议你挑选至少一本书深入

    阅读。我们在前言中已经提到过Hastie、Tibshirani和Friedman合著的《统计学习基础》一

    书,这里值得重新推荐一下。另一本相当好读的书是Stephen Marsland的Machine Learning:

    An Algorithmic Perspective(Chapman and Hall/CRC出版社),它还附带有Python代码。还

    有两本强烈推荐的经典著作:一本是Christopher Bishop的Pattern Recognition and Machine

    Learning(Springer出版社),着重于概率框架;另一本是Kevin Murphy的Machine Learning:

    A Probabilistic Perspective(MIT出版社),全面论述了机器学习方法(1000多页),深入介绍

    了最先进的方法,内容比本书要丰富得多。

    其他机器学习框架和包

    虽然scikit-learn是我们最喜欢的机器学习软件包

    1,Python也是我们最喜欢的机器学习语言,但还有许多其他选择。根据你的需求,Python和scikit-learn可能不是你在特定情况

    下的最佳选择。通常情况下,Python很适合尝试与评估模型,但更大型的Web服务和应

    用更常用Java或C++编写,部署模型可能需要与这些系统进行集成。你想要考虑scikit-

    learn之外的选择可能还有一个原因,就是你对统计建模和推断比对预测更感兴趣。在这

    种情况下,你应该考虑使用Python的statsmodels包,它用更具有统计学意义的接口实现

    了多种线性模型。如果你还没有专情于Python,那么还可以考虑使用R,这是数据科学家

    的另一种语言。R是专为统计分析设计的语言,因其出色的可视化功能和许多可用的统计

    建模包(通常是非常专业化的)而闻名。

    另一个常用的机器学习软件包是vowpal wabbit(通常简称为vw,以避免绕口),一个用

    C++编写的高度优化的机器学习包,还有命令行界面。vw对大型数据集和流数据特别有

    用。对于在集群上分布式运行的机器学习算法,在写作本书时最常用的解决方案之一是

    mllib,一个基于spark分布式计算环境构建的Scala库。

    排序、推荐系统与其他学习类型

    本书是一本入门书,所以我们重点介绍最常见的机器学习任务:监督学习中的分类与回

    归,无监督学习中的聚类和信号分解。还有许多类型的机器学习,都有很多重要的应用。

    有两个特别重要的主题没有包含在本书中。第一个是排序问题(ranking),对于特定查询,

    我们希望检索出按相关性排序的答案。你今天可能已经使用过排序系统,它是搜索引擎的

    运行原理。你输入搜索查询并获取答案的有序列表,它们按相关性进行排序。Manning、

    Raghavan和Schuütze合著的Introduction to Information Retrieval一书给出了对排序问题的

    很好介绍。第二个主题是推荐系统(recommender system),就是根据用户偏好向他们提供

    建议。你可能已经在“您可能认识的人”“购买此商品的顾客还购买了”或“您的最佳选

    择”等标题下遇到过推荐系统。关于这一主题有大量文献,如果想立刻投身于这一主题,

    你可能对目前经典的“Netflix大奖挑战”(Netflix prize challenge,http://www.netflixprize.

    com/)感兴趣。Netflix视频流网站发布了关于电影偏好的大型数据集,并对给出最佳推荐

    的团队奖励一百万美元。另一种常见的应用是时间序列预测(比如股票价格),这方面也

    有大量的文献。还有许多类型的机器学习任务,比我们这里列出的要多得多,我们建议你

    从书籍、研究论文和在线社区中获取信息,以找到最适合你实际情况的范式。

    概率建模、推断与概率编程

    大部分机器学习软件包都提供了预定义的机器学习模型,每种模型应用了一种特定算法。

    但是,许多现实世界的问题都具有特殊的结构,如果将这种结构正确地纳入模型,则可以

    得到性能更好的预测。通常来说,具体问题的结构可以用概率论的语言来表述。这种结构

    通常来自于你想要预测的情况的数学模型。为了理解结构化问题的含义,请思考下面这个

    例子。

    假设你想要构建一个在户外空间提供非常详细的位置估计的移动应用,以帮助用户定位历

    史遗迹。手机提供了许多传感器来帮你获取精确的位置测量,比如GPS、加速度计和指南

    针。你可能还有该区域的精确地图。这个问题是高度结构化的。你从地图中知道了感兴趣

    地点的位置和路径。你还从GPS中得到了粗略的位置,而用户设备中的加速度计和指南针可以为你提供非常精确的相对测量。但是,将所有这些工具全部放入黑盒机器学习系统中

    来预测位置,可能并不是最好的主意。这将会丢掉你已经知道的关于现实世界如何运行的

    所有信息。如果指南针和加速度计告诉你一名用户正在向北走,而GPS告诉你该用户正在

    向南走,你可能不相信GPS。如果位置估计告诉你用户刚刚走过一堵墙,你应该也会非常

    怀疑。可以使用概率模型来表述这种情况,然后再使用机器学习或概率推断来找出你应该

    对每种测量方法的信任程度,并推断出该用户位置的最佳猜测。

    一旦你用正确的方式对现状和不同因素共同作用的模型进行表述,那么就有一些方法可以

    利用这些自定义模型直接计算出预测结果。这些方法中最普遍的方法被称为概率编程语

    言,它们提供了一种非常优雅又非常紧凑的方法来表述学习问题。概率编程语言的常见例

    子有PyMC(可用于Python)和Stan(可用于多种语言的框架,包括Python)。虽然这些软

    件包需要你对概率论有一些了解,但它们大大简化了新模型的创建过程。

    神经网络

    虽然我们在第2章和第7章都简要涉及了神经网络的主题,但这是机器学习快速发展的领

    域,每周都会发布新方法和新应用。机器学习和人工智能领域的最新突破都由这些进步所

    驱动,比如Alpha Go程序在围棋比赛中战胜人类冠军、语音理解的性能不断提高,以及

    接近实时的语音翻译的出现。虽然这一领域的进步非常迅速,以致当前对最新进展的任

    何参考很快都会过时,但Ian Goodfellow、Yoshua Bengio和Aaron Courville的新书Deep

    Learning(MIT出版社)对这一主题进行了全面介绍。2

    推广到更大的数据集

    在本书中我们总是假设,所处理的数据可以被存储为内存(RAM)中的一个NumPy数组

    或SciPy稀疏矩阵。即使现代服务器通常都具有数百GB的RAM,但这也是对你所能处理

    数据大小的根本限制。不是所有人都买得起这么大型的机器,甚至连从云端供应商租一台

    都负担不起。不过在大多数应用中,用于构建机器学习系统的数据量相对较小,很少有机

    器学习数据集包含数百GB以上的数据。在多数情况下,这让扩展内存或从云端供应商租

    一台机器变成可行的解决方案。但是,如果你需要处理TB级别的数据,或者需要节省处

    理大量数据的费用,那么有两种基本策略:核外学习(out-of-core learning)与集群上的并

    行化(parallelization over a cluster)。

    核外学习是指从无法保存到主存储器的数据中进行学习,但在单台计算机上(甚至是一

    台计算机的单个处理器)进行学习。数据从硬盘或网络等来源进行读取,一次读取一个

    样本或者多个样本组成的数据块,这样每个数据块都可以读入RAM。然后处理这个数

    据子集并更新模型,以体现从数据中学到的内容。然后舍弃该数据块,并读取下一块数

    据。scikit-learn中的一些模型实现了核外学习,你可以在在线用户指南中找到相关细节

    of-core-learning)。因为核外学习要求所有数据都由一台计算机处理,所以在非常大的数据

    集上的运行时间可能很长。此外,并非所有机器学习算法都可以用这种方法实现。另一种扩展策略是将数据分配给计算机集群中的多台计算机,让每台计算机处理部分数

    据。对于某些模型来说这种方法要快得多,而可以处理的数据大小仅受限于集群大小。

    但是,这种计算通常需要相对复杂的基础架构。目前最常用的分布式计算平台之一是在

    Hadoop之上构建的spark平台。spark在MLLib包中包含一些机器学习功能。如果你的数

    据已经位于Hadoop文件系统中,或者你已经使用spark来预处理数据,那么这可能是最

    简单的选项。但如果你还没有这样的基础架构,建立并集成一个spark集群可能花费过大。

    前面提到的vw包提供了一些分布式功能,在这种情况下可能是更好的解决方案。

    磨练你的技术

    与生活中的许多事情一样,只有实践才能让你成为本书所介绍主题方面的专家。对于不同

    的任务和不同的数据集,特征提取、预处理、可视化和模型构建可能差异很大。你或许足

    够幸运,已经能够访问大量数据集和任务。如果你还没有想到什么任务,那么一个好的起

    点是机器学习竞赛,它会发布一个数据集和一个给定任务,许多团队为得到最佳预测结果

    而展开竞争。许多公司、非盈利组织和大学都会举办这种比赛。要想找到这些比赛,最常

    去的地方之一是Kaggle(https://www.kaggle.com/),这是一个定期举办数据科学比赛的网

    站,其中一些比赛会提供大量奖金。

    Kaggle论坛也是关于机器学习最新工具和技巧的很好的信息来源,在网站上可以找到大量

    数据集。在OpenML平台(http://www.openml.org/)上可以找到更多的数据集及相关任务,

    该平台拥有20 000多个数据集,以及50 000多个相关的机器学习任务。处理这些数据集

    可以提供练习机器学习技能的好机会。比赛的一个缺点是,提供了特定的指标来优化,通

    常还提供了一个固定的、已经预处理过的数据集。请记住,定义问题和收集数据也是现实

    世界问题的重要方面,用正确的方式表示问题可能比努力提高分类器精度的最后一个百分

    点要重要得多。

    总结

    我们希望已经让你相信了机器学习在大量应用中的实用性,以及在实践中实现机器学习的

    简单性。继续挖掘数据,同时不要忽视大局。

    展开全文
  • 在后端编写 远程函数,可以拿到 session、version、当前 JSON 对象、参数名称 等,然后对查到的数据自定义处理 https://github.com/Tencent/APIJSON/issues/101 2.如何控制权限? 在 Access 表配置校验规则,默认...
  • 在后端编写 远程函数,可以拿到 session、version、当前 JSON 对象、参数名称 等,然后对查到的数据自定义处理 https://github.com/APIJSON/APIJSON/issues/101 2.如何控制权限? 在 Access 表配置校验规则,默认...
  • Python访问Mysql数据库

    2011-10-13 10:12:30
    Python 语言写的程序需要编译成二进制代码,可以直接 从源代码运行程序。在计算机内部,Python 解释器把源代码 转换成称为字节码的中间形式,然后再把它翻译成计算机使用 的机器语言并运行。事实上,由于不再需要...
  • 尹成Python27天入门到项目实战

    千人学习 2020-12-05 17:04:22
    数据库实战jython的安装MySQL简介数据库的一般操作MySQL数据类型数据表的创建于删除数据的查询数据的插入数据的删除数据的更新联合查询字段一致数据查询排序排序与分组join与nullmysql用python编程查询数据python...
  • 此外,书中还探讨了如何处理文件和数据库,如何理解对象、方法和面向对象编程,如何使用调试技巧来修正语法、运行时和语义错误。每一章都配有术语表和练习题,方便读者巩固所学的知识和技巧。此外,每一章都抽出一节...
  • 此外,书中还探讨了如何处理文件和数据库,如何理解对象、方法和面向对象编程,如何使用调试技巧来修正语法、运行时和语义错误。每一章都配有术语表和练习题,方便读者巩固所学的知识和技巧。此外,每一章都抽出一节...
  • 此外,书中还探讨了如何处理文件和数据库,如何理解对象、方法和面向对象编程,如何使用调试技巧来修正语法、运行时和语义错误。每一章都配有术语表和练习题,方便读者巩固所学的知识和技巧。此外,每一章都抽出一节...
  • 服务器端如何处理上传的文件 Day53 - 异步任务和定时任务 网站优化第二定律 配置消息队列服务 在项目中使用celery实现任务异步化 在项目中使用celery实现定时任务 Day54 - 单元测试 Day55 - 项目上线 ...
  • 此外,书中还探讨了如何处理文件和数据库,如何理解对象、方法和面向对象编程,如何使用调试技巧来修正语法、运行时和语义错误。每一章都配有术语表和练习题,方便读者巩固所学的知识和技巧。此外,每一章都抽出一节...
  • 高层语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。 可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同...
  • 此外,书中还探讨了如何处理文件和数据库,如何理解对象、方法和面向对象编程,如何使用调试技巧来修正语法、运行时和语义错误。每一章都配有术语表和练习题,方便读者巩固所学的知识和技巧。此外,每一章都抽出一节...
  • 此外,书中还探讨了如何处理文件和数据库,如何理解对象、方法和面向对象编程,如何使用调试技巧来修正语法、运行时和语义错误。每一章都配有术语表和练习题,方便读者巩固所学的知识和技巧。此外,每一章都抽出一节...
  • Apache Pig: 是一个基于Hadoop的大规模数据分析工具,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算 【准备学,计划Hive代替Pig】 ...
  • 第四级镇级主要由腾讯地图行政区划提供,腾讯数据源并经常更新,因此会导致小部分新增、调整的城市第四级没有数据(会上级数据补齐),使用前应该考虑此缺陷。 数据通过使用上级数据补齐的形式(具体细节请参考...
  • HQChart使用教程30-K线图如何对接第3方数据10-如何绘制自定义线段或多边行指标数据 HQChart使用教程30-K线图如何对接第3方数据11-如何绘制多组自定义图标 HQChart使用教程30-K线图如何对接第3方数据12-如何在...
  • 用Python做科学计算 Sphinx 中文文档 精通 Python 设计模式 python 安全编程教程 程序设计思想与方法 知乎周刊·编程小白学Python Scipy 讲义 Python 学习笔记 基础篇 Python 学习笔记 模块篇 Python 标准库 中文版 ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 114
精华内容 45
关键字:

如何用python处理数据不全

python 订阅