• HTML5 WebSocket权威指南

    《HTML5 WebSocket权威指南》是HTML5 WebSocket领域最权威的著作之一,它系统、全面地讲解了HTML5 WebSocket的各个方面,是Web开发人员和架构师学习WebSocket的最佳选择。书中讨论了基于WebSocket的架构师如何减少不必要的网络开销和延迟层,如何通过WebSocket对广泛使用的协议(如XMPP和STOMP)进行分层,如何保护WebSocket连接和在企业部署基于 WebSocket的应用程序。主要内容包括: WebSocket API和协议、WebSocket协议通信的例子、WebSocket的安全性和企业部署、内置即时通信和聊天应用程序的WebSocket与XMPP、通过WebSocket的STOMP实现发布/订阅消息传递协议,以及用远程帧缓冲协议实现VNC。,

    5
    95
    73.58MB
    2018-01-18
    10
  • 淘宝技术这十年

    《淘宝技术这十年》内容简介:任何网站的发展都不是一蹴而就的。它在发展过程中会遇到各种各样的问题和业务带来的压力。正是这些问题和压力推动着技术的进步和发展,而技术的发展反过来又会促进业务的更大提升。如今淘宝网的流量排名已是全球前15名、国内前3名,其系统服务器也从一台发展到万台以上。, 《淘宝技术这十年》从工程师的角度讲述淘宝这个超大规模互联网系统的成长历程,及其所有主动和被动的技术变革的前因后果。书中有幕后故事、产品经验、架构演进、技术启蒙,也有大牛成长、业内八卦、失败案例、励志故事。《淘宝技术这十年》文风流畅,有技术人员特有的幽默感;内容积极正面,有现场感,全部是作者亲身经历。

    0
    1
    67.15MB
    2017-12-15
    8
  • 从Paxos到Zookeeper 分布式一致性原理与实践

    《Paxos到Zookeeper:分布式一致性原理与实践》从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议。同时,本书深入介绍了分布式一致性问题的工业解决方案——ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法、内部实现及运维技巧,旨在帮助读者全面了解ZooKeeper,并更好地使用和运维ZooKeeper。全书共8章,分为五部分:第一部分(第1章)主要介绍了计算机系统从集中式向分布式系统演变过程中面临的挑战,并简要介绍了ACID、CAP和BASE等经典分布式理论;第二部分(第2~4章)介绍了2PC、3PC和Paxos三种分布式一致性协议,并着重讲解了ZooKeeper中使用的一致性协议——ZAB协议;第三部分(第5~6章)介绍了ZooKeeper的使用方法,包括客户端API的使用以及对ZooKeeper服务的部署与运行,并结合真实的分布式应用场景,总结了ZooKeeper使用的最佳实践;第四部分(第7章)对ZooKeeper的架构设计和实现原理进行了深入分析,包含系统模型、Leader选举、客户端与服务端的工作原理、请求处理,以及服务器角色的工作流程和数据存储等;第五部分(第8章)介绍了ZooKeeper的运维实践,包括配置详解和监控管理等,重点讲解了如何构建一个高可用的ZooKeeper服务。 目录 · · · · · · 第1章分布式架构 1 1.1 从集中式到分布式 1 1.1.1 集中式的特点 2 1.1.2 分布式的特点 2 1.1.3 分布式环境的各种问题 4 1.2 从ACID到CAP/BASE 5 1.2.1 ACID 5 1.2.2 分布式事务 8 1.2.3 CAP和BASE理论 9 小结 15 第2章一致性协议 17 2.1 2PC与3PC 17 2.1.1 2PC 17 2.1.2 3PC 21 2.2 Paxos算法 24 2.2.1 追本溯源 25 2.2.2 Paxos理论的诞生 26 2.2.3 Paxos算法详解 27 小结 37 第3章Paxos的工程实践 39 3.1 Chubby 39 3.1.1 概述 39 3.1.2 应用场景 40 3.1.3 设计目标 40 3.1.4 Chubby技术架构 43 3.1.5 Paxos协议实现 52 3.2 Hypertable 55 3.2.1 概述 55 3.2.2 算法实现 57 小结 58 第4章ZooKeeper与Paxos 59 4.1 初识ZooKeeper 59 4.1.1 ZooKeeper介绍 59 4.1.2 ZooKeeper从何而来 62 4.1.3 ZooKeeper的基本概念 62 4.1.4 为什么选择ZooKeeper 64 4.2 ZooKeeper的ZAB协议 65 4.2.1 ZAB协议 65 4.2.2 协议介绍 66 4.2.3 深入ZAB协议 71 4.2.4 ZAB与Paxos算法的联系与区别 77 小结 78 第5章使用ZooKeeper 79 5.1 部署与运行 79 5.1.1 系统环境 79 5.1.2 集群与单机 80 5.1.3 运行服务 84 5.2 客户端脚本 88 5.2.1 创建 88 5.2.2 读取 89 5.2.3 更新 90 5.2.4 删除 91 5.3 Java客户端API使用 91 5.3.1 创建会话 91 5.3.2 创建节点 95 5.3.3 删除节点 99 5.3.4 读取数据 100 5.3.5 更新数据 109 5.3.6 检测节点是否存在 113 5.3.7 权限控制 115 5.4 开源客户端 120 5.4.1 ZkClient 120 5.4.2 Curator 130 小结 162 第6章ZooKeeper的典型应用场景 163 6.1 典型应用场景及实现注 163 6.1.1 数据发布/订阅 164 6.1.2 负载均衡 166 6.1.3 命名服务 170 6.1.4 分布式协调/通知 173 6.1.5 集群管理 179 6.1.6 Master选举 185 6.1.7 分布式锁 188 6.1.8 分布式队列 194 小结 197 6.2 ZooKeeper在大型分布式系统中的应用 197 6.2.1 Hadoop 198 6.2.2 HBase 203 6.2.3 Kafka 207 6.3 ZooKeeper在阿里巴巴的实践与应用 213 6.3.1 案例一消息中间件:Metamorphosis 213 6.3.2 案例二 RPC服务框架:Dubbo 217 6.3.3 案例三基于MySQL Binlog的增量订阅和消费组件:Canal 219 6.3.4 案例四分布式数据库同步系统:Otter 223 6.3.5 案例五轻量级分布式通用搜索平台:终搜 226 6.3.6 案例六实时计算引擎:JStorm 238 小结 242 第7章ZooKeeper技术内幕 243 7.1 系统模型 243 7.1.1 数据模型 243 7.1.2 节点特性 244 7.1.3 版本——保证分布式数据原子性操作 246 7.1.4 Watcher——数据变更的通知 249 7.1.5 ACL——保障数据的安全 265 7.2 序列化与协议 272 7.2.1 Jute介绍 272 7.2.2 使用Jute进行序列化 273 7.2.3 深入Jute 275 7.2.4 通信协议 277 7.3 客户端 284 7.3.1 一次会话的创建过程 286 7.3.2 服务器地址列表 289 7.3.3 ClientCnxn:网络I/O 295 7.4 会话 298 7.4.1 会话状态 298 7.4.2 会话创建 299 7.4.3 会话管理 304 7.4.4 会话清理 307 7.4.5 重连 309 7.5 服务器启动 311 7.5.1 单机版服务器启动 312 7.5.2 集群版服务器启动 315 7.6 Leader选举 321 7.6.1 Leader选举概述 321 7.6.2 Leader选举的算法分析 323 7.6.3 Leader选举的实现细节 328 7.7 各服务器角色介绍 335 7.7.1 Leader 335 7.7.2 Follower 338 7.7.3 Observer 339 7.7.4 集群间消息通信 339 7.8 请求处理 342 7.8.1 会话创建请求 343 7.8.2 SetData请求 351 7.8.3 事务请求转发 354 7.8.4 GetData请求 355 7.9 数据与存储 356 7.9.1 内存数据 356 7.9.2 事务日志 358 7.9.3 snapshot——数据快照 364 7.9.4 初始化 368 7.9.5 数据同步 372 小结 376 第8章ZooKeeper运维 379 8.1 配置详解 379 8.1.1 基本配置 379 8.1.2 高级配置 380 8.2 四字命令 384 8.3 JMX 390 8.3.1 开启远程JMX 390 8.3.2 通过JConsole连接ZooKeeper 391 8.4 监控 397 8.4.1 实时监控 397 8.4.2 数据统计 398 8.5 构建一个高可用的集群 398 8.5.1 集群组成 398 8.5.2 容灾 399 8.5.3 扩容与缩容 402 8.6 日常运维 402 8.6.1 数据与日志管理 402 8.6.2 Too many connections 404 8.6.3 磁盘管理 405 小结 405 附录AWindows平台上部署ZooKeeper 406 附录B从源代码开始构建 409 附录C各发行版本重大更新记录 414 附录DZooKeeper源代码阅读指引 418

    0
    0
    113.38MB
    2017-12-13
    2
  • linux命令行和shell脚本编程 第三版

    目录 · · · · · · 第一部分 Linux 命令行 第1章 初识Linux shell  2 1.1 什么是Linux  2 1.1.1 深入探究Linux内核  3 1.1.2 GNU工具  6 1.1.3 Linux桌面环境  8 1.2 Linux发行版  12 1.2.1 核心Linux发行版  13 1.2.2 特定用途的Linux发行版  13 1.2.3 Linux LiveCD  14 1.3 小结  15 第2章 走进shell  16 2.1 进入命令行  16 2.1.1 控制台终端  17 2.1.2 图形化终端  17 2.2 通过Linux控制台终端访问CLI  18 2.3 通过图形化终端仿真访问CLI  20 2.4 使用GNOME Terminal仿真器  21 2.4.1 访问GNOME Terminal  21 2.4.2 菜单栏  22 2.5 使用Konsole Terminal仿真器  25 2.5.1 访问Konsole Terminal  25 2.5.2 菜单栏  26 2.6 使用xterm终端仿真器  29 2.6.1 访问xterm  30 2.6.2 命令行参数  30 2.7 小结  32 第3章 基本的bash shell命令  33 3.1 启动shell  33 3.2 shell提示符  34 3.3 bash手册  34 3.4 浏览文件系统  37 3.4.1 Linux文件系统  37 3.4.2 遍历目录  40 3.5 文件和目录列表  42 3.5.1 基本列表功能  42 3.5.2 显示长列表  44 3.5.3 过滤输出列表  45 3.6 处理文件  46 3.6.1 创建文件  47 3.6.2 复制文件  47 3.6.3 制表键自动补全  50 3.6.4 链接文件  50 3.6.5 重命名文件  52 3.6.6 删除文件  54 3.7 处理目录  55 3.7.1 创建目录  55 3.7.2 删除目录  55 3.8 查看文件内容  58 3.8.1 查看文件类型  58 3.8.2 查看整个文件  59 3.8.3 查看部分文件  61 3.9 小结  63 第4章 更多的bash shell命令  64 4.1 监测程序  64 4.1.1 探查进程  64 4.1.2 实时监测进程  70 4.1.3 结束进程  72 4.2 监测磁盘空间  73 4.2.1 挂载存储媒体  73 4.2.2 使用df命令  76 4.2.3 使用du命令  77 4.3 处理数据文件  78 4.3.1 排序数据  78 4.3.2 搜索数据  81 4.3.3 压缩数据  83 4.3.4 归档数据  84 4.4 小结  85 第5章 理解shell  86 5.1 shell的类型  86 5.2 shell的父子关系  88 5.2.1 进程列表  91 5.2.2 别出心裁的子shell用法  93 5.3 理解shell的内建命令  96 5.3.1 外部命令  96 5.3.2 内建命令  97 5.4 小结  101 第6章 使用Linux环境变量  103 6.1 什么是环境变量  103 6.1.1 全局环境变量  104 6.1.2 局部环境变量  105 6.2 设置用户定义变量  106 6.2.1 设置局部用户定义变量  106 6.2.2 设置全局环境变量  107 6.3 删除环境变量  109 6.4 默认的shell环境变量  110 6.5 设置PATH环境变量  113 6.6 定位系统环境变量  114 6.6.1 登录shell  115 6.6.2 交互式shell进程  119 6.6.3 非交互式shell  120 6.6.4 环境变量持久化  121 6.7 数组变量  121 6.8 小结  122 第7章 理解Linux文件权限  124 7.1 Linux的安全性  124 7.1.1 /etc/passwd文件  124 7.1.2 /etc/shadow文件  126 7.1.3 添加新用户  127 7.1.4 删除用户  129 7.1.5 修改用户  130 7.2 使用Linux组  132 7.2.1 /etc/group文件  133 7.2.2 创建新组  133 7.2.3 修改组  134 7.3 理解文件权限  135 7.3.1 使用文件权限符  135 7.3.2 默认文件权限  136 7.4 改变安全性设置  138 7.4.1 改变权限  138 7.4.2 改变所属关系  139 7.5 共享文件  140 7.6 小结  142 第8章 管理文件系统  143 8.1 探索Linux文件系统  143 8.1.1 基本的Linux文件系统  143 8.1.2 日志文件系统  145 8.1.3 写时复制文件系统  147 8.2 操作文件系统  147 8.2.1 创建分区  147 8.2.2 创建文件系统  151 8.2.3 文件系统的检查与修复  153 8.3 逻辑卷管理  154 8.3.1 逻辑卷管理布局  154 8.3.2 Linux中的LVM  155 8.3.3 使用Linux LVM  156 8.4 小结  162 第9章 安装软件程序  163 9.1 包管理基础  163 9.2 基于Debian的系统  164 9.2.1 用aptitude管理软件包  164 9.2.2 用aptitude安装软件包  166 9.2.3 用aptitude更新软件  168 9.2.4 用aptitude卸载软件  169 9.2.5 aptitude仓库  169 9.3 基于Red Hat的系统  171 9.3.1 列出已安装包  171 9.3.2 用yum安装软件  173 9.3.3 用yum更新软件  174 9.3.4 用yum卸载软件  174 9.3.5 处理损坏的包依赖关系  175 9.3.6  yum软件仓库  176 9.4 从源码安装  177 9.5 小结  180 第10章 使用编辑器  181 10.1 vim编辑器  181 10.1.1 检查vim软件包  181 10.1.2 vim基础  183 10.1.3 编辑数据  185 10.1.4 复制和粘贴  185 10.1.5 查找和替换  186 10.2 nano编辑器  187 10.3 emacs编辑器  188 10.3.1 检查emacs软件包  189 10.3.2 在控制台中使用emacs  190 10.3.3 在GUI环境中使用emacs  195 10.4 KDE系编辑器  196 10.4.1 KWrite编辑器  196 10.4.2 Kate编辑器  200 10.5 GNOME编辑器  202 10.5.1 启动gedit  203 10.5.2 基本的gedit功能  203 10.5.3 设定偏好设置  204 10.6 小结  206 第二部分 shell脚本编程基础 第11章 构建基本脚本  210 11.1 使用多个命令  210 11.2 创建shell脚本文件  211 11.3 显示消息  212 11.4 使用变量  214 11.4.1 环境变量  214 11.4.2 用户变量  215 11.4.3 命令替换  216 11.5 重定向输入和输出  218 11.5.1 输出重定向  218 11.5.2 输入重定向  219 11.6 管道  220 11.7 执行数学运算  222 11.7.1 expr命令  223 11.7.2 使用方括号  224 11.7.3 浮点解决方案  225 11.8 退出脚本  228 11.8.1 查看退出状态码  228 11.8.2 exit命令  229 11.9 小结  231 第12章 使用结构化命令  232 12.1 使用if-then语句  232 12.2 if-then-else语句  235 12.3 嵌套if  235 12.4 test命令  238 12.4.1 数值比较  240 12.4.2 字符串比较  242 12.4.3 文件比较  246 12.5 复合条件测试  254 12.6 if-then的高级特性  255 12.6.1 使用双括号  255 12.6.2 使用双方括号  256 12.7 case命令  257 12.8 小结  258 第13章 更多的结构化命令  260 13.1 for命令  260 13.1.1 读取列表中的值  261 13.1.2 读取列表中的复杂值  262 13.1.3 从变量读取列表  263 13.1.4 从命令读取值  264 13.1.5 更改字段分隔符  265 13.1.6 用通配符读取目录  266 13.2 C语言风格的for命令  268 13.2.1 C语言的for命令  268 13.2.2 使用多个变量  269 13.3 while命令  270 13.3.1 while的基本格式  270 13.3.2 使用多个测试命令  271 13.4 until命令  272 13.5 嵌套循环  274 13.6 循环处理文件数据  276 13.7 控制循环  277 13.7.1 break命令  277 13.7.2 continue命令  280 13.8 处理循环的输出  282 13.9 实例  283 13.9.1 查找可执行文件  284 13.9.2 创建多个用户账户  285 13.10 小结  286 第14章 处理用户输入  287 14.1 命令行参数  287 14.1.1 读取参数  287 14.1.2 读取脚本名  289 14.1.3 测试参数  291 14.2 特殊参数变量  292 14.2.1 参数统计  292 14.2.2 抓取所有的数据  294 14.3 移动变量  295 14.4 处理选项  296 14.4.1 查找选项  297 14.4.2 使用getopt命令  300 14.4.3 使用更高级的getopts  302 14.5 将选项标准化  305 14.6 获得用户输入  306 14.6.1 基本的读取  306 14.6.2 超时  307 14.6.3 隐藏方式读取  308 14.6.4 从文件中读取  309 14.7 小结  309 第15章 呈现数据  311 15.1 理解输入和输出  311 15.1.1 标准文件描述符  311 15.1.2 重定向错误  313 15.2 在脚本中重定向输出  315 15.2.1 临时重定向  315 15.2.2 永久重定向  316 15.3 在脚本中重定向输入  317 15.4 创建自己的重定向  317 15.4.1 创建输出文件描述符  318 15.4.2 重定向文件描述符  318 15.4.3 创建输入文件描述符  319 15.4.4 创建读写文件描述符  320 15.4.5 关闭文件描述符  321 15.5 列出打开的文件描述符  322 15.6 阻止命令输出  323 15.7 创建临时文件  324 15.7.1 创建本地临时文件  324 15.7.2 在/tmp目录创建临时文件  325 15.7.3 创建临时目录  326 15.8 记录消息  327 15.9 实例  328 15.10 小结  330 第16章 控制脚本  331 16.1 处理信号  331 16.1.1 重温Linux信号  331 16.1.2 生成信号  332 16.1.3 捕获信号  334 16.1.4 捕获脚本退出  335 16.1.5 修改或移除捕获  335 16.2 以后台模式运行脚本  338 16.2.1 后台运行脚本  338 16.2.2 运行多个后台作业  340 16.3 在非控制台下运行脚本  341 16.4 作业控制  342 16.4.1 查看作业  342 16.4.2 重启停止的作业  344 16.5 调整谦让度  345 16.5.1 nice命令  345 16.5.2 renice命令  346 16.6 定时运行作业  346 16.6.1 用at命令来计划执行作业  347 16.6.2 安排需要定期执行的脚本  349 16.6.3 使用新shell启动脚本  352 16.7 小结  353 第三部分 高级shell脚本编程 第17章 创建函数  356 17.1 基本的脚本函数  356 17.1.1 创建函数  357 17.1.2 使用函数  357 17.2 返回值  359 17.2.1 默认退出状态码  359 17.2.2 使用return命令  360 17.2.3 使用函数输出  361 17.3 在函数中使用变量  362 17.3.1 向函数传递参数  362 17.3.2 在函数中处理变量  364 17.4 数组变量和函数  366 17.4.1 向函数传数组参数  366 17.4.2 从函数返回数组  368 17.5 函数递归  369 17.6 创建库  370 17.7 在命令行上使用函数  371 17.7.1 在命令行上创建函数  372 17.7.2 在.bashrc文件中定义函数  372 17.8 实例  374 17.8.1 下载及安装  374 17.8.2 构建库  374 17.8.3 shtool库函数  376 17.8.4 使用库  376 17.9 小结  377 第18章 图形化桌面环境中的脚本编程  378 18.1 创建文本菜单  378 18.1.1 创建菜单布局  379 18.1.2 创建菜单函数  380 18.1.3 添加菜单逻辑  380 18.1.4 整合shell脚本菜单  381 18.1.5 使用select命令  382 18.2 制作窗口  384 18.2.1 dialog包  384 18.2.2 dialog选项  389 18.2.3 在脚本中使用dialog命令  391 18.3 使用图形  393 18.3.1 KDE环境  393 18.3.2 GNOME环境  396 18.4 小结  400 第19章 初识sed和gawk  401 19.1 文本处理  401 19.1.1 sed编辑器  401 19.1.2 gawk程序  404 19.2 sed编辑器基础  410 19.2.1 更多的替换选项  410 19.2.2 使用地址  411 19.2.3 删除行  414 19.2.4 插入和附加文本  415 19.2.5 修改行  417 19.2.6 转换命令  418 19.2.7 回顾打印  419 19.2.8 使用sed处理文件  421 19.3 小结  423 第20章 正则表达式  424 20.1 什么是正则表达式  424 20.1.1 定义  424 20.1.2 正则表达式的类型  425 20.2 定义BRE模式  426 20.2.1 纯文本  426 20.2.2 特殊字符  427 20.2.3 锚字符  428 20.2.4 点号字符  430 20.2.5 字符组  430 20.2.6 排除型字符组  432 20.2.7 区间  433 20.2.8 特殊的字符组  434 20.2.9 星号  434 20.3 扩展正则表达式  436 20.3.1 问号  436 20.3.2 加号  437 20.3.3 使用花括号  437 20.3.4 管道符号  438 20.3.5 表达式分组  439 20.4 正则表达式实战  439 20.4.1 目录文件计数  440 20.4.2 验证电话号码  441 20.4.3 解析邮件地址  443 20.5 小结  444 第21章 sed进阶  445 21.1 多行命令  445 21.1.1 next命令  446 21.1.2 多行删除命令  449 21.1.3 多行打印命令  449 21.2 保持空间  450 21.3 排除命令  451 21.4 改变流  454 21.4.1 分支  454 21.4.2 测试  455 21.5 模式替代  456 21.5.1 &符号  457 21.5.2 替代单独的单词  457 21.6 在脚本中使用sed  458 21.6.1 使用包装脚本  458 21.6.2 重定向sed的输出  459 21.7 创建sed实用工具  460 21.7.1 加倍行间距  460 21.7.2 对可能含有空白行的文件加倍行间距  460 21.7.3 给文件中的行编号  461 21.7.4 打印末尾行  462 21.7.5 删除行  463 21.7.6 删除HTML标签  466 21.8 小结  467 第22章 gawk进阶  469 22.1 使用变量  469 22.1.1 内建变量  469 22.1.2 自定义变量  474 22.2 处理数组  476 22.2.1 定义数组变量  476 22.2.2 遍历数组变量  477 22.2.3 删除数组变量  478 22.3 使用模式  478 22.3.1 正则表达式  478 22.3.2 匹配操作符  479 22.3.3 数学表达式  480 22.4 结构化命令  480 22.4.1 if语句  480 22.4.2 while语句  482 22.4.3 do-while语句  483 22.4.4 for语句  484 22.5 格式化打印  484 22.6 内建函数  487 22.6.1 数学函数  487 22.6.2 字符串函数  488 22.6.3 时间函数  490 22.7 自定义函数  490 22.7.1 定义函数  490 22.7.2 使用自定义函数  491 22.7.3 创建函数库  491 22.8 实例  492 22.9 小结  493 第23章 使用其他shell  495 23.1 什么是dash shell  495 23.2 dash shell的特性  496 23.2.1 dash命令行参数  496 23.2.2 dash环境变量  497 23.2.3 dash内建命令  499 23.3 dash脚本编程  500 23.3.1 创建dash脚本  500 23.3.2 不能使用的功能  500 23.4 zsh shell  502 23.5 zsh shell的组成  503 23.5.1 shell选项  503 23.5.2 内建命令  504 23.6 zsh脚本编程  508 23.6.1 数学运算  508 23.6.2 结构化命令  509 23.6.3 函数  510 23.7 小结  510 第四部分 创建实用的脚本 第24章 编写简单的脚本实用工具  514 24.1 归档  514 24.2 管理用户账户  523 24.2.1 需要的功能  523 24.2.2 创建脚本  530 24.2.3 运行脚本  535 24.3 监测磁盘空间  537 24.3.1 需要的功能  537 24.3.2 创建脚本  540 24.3.3 运行脚本  541 24.4 小结  542 第25章 创建与数据库、Web及电子 邮件相关的脚本  543 25.1 MySQL数据库  543 25.1.1 使用MySQL  543 25.1.2 在脚本中使用数据库  552 25.2 使用Web  555 25.2.1 安装Lynx  556 25.2.2 lynx命令行  557 25.2.3 Lynx配置文件  558 25.2.4 从Lynx中获取数据  559 25.3 使用电子邮件  561 25.4 小结  564 第26章 一些小有意思的脚本  565 26.1 发送消息  565 26.1.1 功能分析  565 26.1.2 创建脚本  568 26.2 获取格言  573 26.2.1 功能分析  574 26.2.2 创建脚本  577 26.3 编造借口  583 26.3.1 功能分析  583 26.3.2 创建脚本  586 26.4 小结  587 附录A bash命令快速指南  589 附录B sed和gawk快速指南  597

    1
    0
    8.32MB
    2017-12-07
    2
  • 【带目录】图解设计模式 结城浩

    原版连续畅销12年、重印25次! 194张图表 + Java示例代码 = 轻松理解GoF的23种设计模式 《程序员的数学》《数学女孩》作者结城浩又一力作 ◆图文并茂 194张图表(包括57张UML类图)穿插文中,帮助理解各设计模式 ◆通俗易懂 用浅显的语言逐一讲解23种设计模式,读完此书会发现GoF书不再晦涩难懂 ◆专业实用 编写了Java程序代码来实现设计模式,每章附带练习题和答案,用以熟练掌握设计 模式 ◆拓展进阶 必要时对Java语言的功能进行了补充说明,可加深对Java的理解。此外,如果了解C++语言,同样可以轻松理解本书内容 本书适合以下读者阅读 •对面向对象开发感兴趣的人 •对设计模式感兴趣的人(特别是阅读了GoF书但是觉得难以理解的人) •所有Java程序员(特别是对抽象类和接口的理解不充分的人) 目录 · · · · · · 第1部分 适应设计模式  1 第1章 Iterator模式——一个一个遍历  1 1.1 Iterator模式  2 1.2 示例程序  2 Aggregate接口  3 Iterator接口  5 Book类  5 BookShelf类  5 BookShelfIteraotr类  6 Main类  7 1.3 Iterator模式中的登场角色  8 1.4 拓展思路的要点  9 不管实现如何变化,都可以使用Iterator  9 难以理解抽象类和接口  9 Aggregate和Iterator的对应  9 容易弄错“下一个”  10 还容易弄错“最后一个”  10 多个Iterator  10 迭代器的种类多种多样  10 不需要deleteIterator  10 1.5 相关的设计模式  11 1.6 本章所学知识  11 1.7 练习题  11 第2章 Adapter模式——加个“适配器”以便于复用  13 2.1 Adapter模式  14 2.2 示例程序(1)(使用继承的适配器)  14 Banner类  15 Print接口  16 PrintBanner类  16 Main类  16 2.3 示例程序(2)(使用委托的示例程序)  17 Print类  18 PrintBanner类  18 2.4 Adapter模式中的登场角色  18 2.5 拓展思路的要点  19 什么时候使用Adapter模式  19 如果没有现成的代码  20 版本升级与兼容性  20 功能完全不同的类  20 2.6 相关的设计模式  20 2.7 本章所学知识  21 2.8 练习题  21 第2部分 交给子类  23 第3章 Template Method模式——将具体处理交给子类  23 3.1 Template Method模式  24 什么是模板  24 什么是Template Method模式  24 3.2 示例程序  24 AbstractDisplay类  25 CharDisplay类  26 StringDisplay类  27 Main类  28 3.3 Template Method模式中的登场角色  28 3.4 拓展思路的要点  29 可以使逻辑处理通用化  29 父类与子类之间的协作  29 父类与子类的一致性  29 3.5 相关的设计模式  30 3.6 延伸阅读:类的层次与抽象类  30 父类对子类的要求  30 抽象类的意义  30 父类与子类之间的协作  31 3.7 本章所学知识  31 3.8 练习题  31 第4章 Factory Method模式——将实例的生成交给子类  33 4.1 Factory Method模式  34 4.2 示例程序  34 Product类  35 Factory类  35 IDCard类  36 IDCardFactory类  36 Main类  37 4.3 Factory Method模式中的登场角色  37 4.4 拓展思路的要点  39 框架与具体加工  39 生成实例——方法的三种实现方式  39 使用模式与开发人员之间的沟通  40 4.5 相关的设计模式  40 4.6 本章所学知识  41 4.7 练习题  41 第3部分 生成实例  43 第5章 Singleton模式——只有一个实例  43 5.1 Singleton模式  44 5.2 示例程序  44 Singleton类  44 Main类  45 5.3 Singleton模式中的登场角色  46 5.4 拓展思路的要点  46 为什么必须设置限制  46 何时生成这个唯一的实例  46 5.5 相关的设计模式  47 5.6 本章所学知识  47 5.7 练习题  47 第6章 Prototype模式——通过复制生成实例  49 6.1 Prototype模式  50 6.2 示例程序  50 Product接口  51 Manager类  52 MessageBox类  52 UnderlinePen类  53 Main类  54 6.3 Prototype模式中的登场角色  55 6.4 拓展思路的要点  56 不能根据类来生成实例吗  56 类名是束缚吗  56 6.5 相关的设计模式  57 6.6 延伸阅读:clone方法和java.lang.Clonable接口  57 Java语言的clone  57 clone方法是在哪里定义的  58 需要实现Cloneable的哪些方法  58 clone方法进行的是浅复制  58 6.7 本章所学知识  58 6.8 练习题  59 第7章 Builder模式——组装复杂的实例  61 7.1 Builder模式  62 7.2 示例程序  62 Builder类  63 Director类  63 TextBuilder类  64 HTMLBuilder类  65 Main类  65 7.3 Builder模式中的登场角色  67 7.4 相关的设计模式  69 7.5 拓展思路的要点  69 谁知道什么  69 设计时能够决定的事情和不能决定的事情  70 代码的阅读方法和修改方法  70 7.6 本章所学知识  70 7.7 练习题  70 第8章 Abstract Factory模式——将关联零件组装成产品  73 8.1 Abstract Factory模式  74 8.2 示例程序  74 抽象的零件:Item类  77 抽象的零件:Link类  78 抽象的零件:Tray类  78 抽象的产品:Page类  79 抽象的工厂:Factory类  79 使用工厂将零件组装称为产品:Main类  80 具体的工厂:ListFactory类  81 具体的零件:ListLink类  82 具体的零件:ListTray类  82 具体的产品:ListPage类  83 8.3 为示例程序增加其他工厂  84 具体的工厂:TableFactory类  85 具体的零件:TableLink类  86 具体的零件:TableTray类  86 具体的产品:TablePage类  87 8.4 Abstract Factory模式中的登场角色  87 8.5 拓展思路的要点  89 易于增加具体的工厂  89 难以增加新的零件  89 8.6 相关的设计模式  89 8.7 延伸阅读:各种生成实例的方法的介绍  90 8.8 本章所学知识  91 8.9 练习题  91 第4部分 分开考虑  93 第9章 Bridge模式——将类的功能层次结构与实现层次结构分离  93 9.1 Bridge模式  94 9.2 示例程序  95 类的功能层次结构:Display类  96 类的功能层次结构:CountDisplay类  97 类的实现层次结构:DisplayImpl类  97 类的实现层次结构:StringDisplayImpl类  98 Main类  98 9.3 Bridge模式中的登场角色  99 9.4 拓展思路的要点  100 分开后更容易扩展  100 继承是强关联,委托是弱关联  100 9.5 相关的设计模式  101 9.6 本章所学知识  101 9.7 练习题  102 第10章 Strategy模式——整体地替换算法  103 10.1 Strategy模式  104 10.2 示例程序  104 Hand类  105 Strategy接口  106 WinningStrategy类  106 ProbStrategy类  107 Player类  109 Main类  109 10.3 Strategy模式中的登场角色  111 10.4 拓展思路的要点  112 为什么需要特意编写Strategy角色  112 程序运行中也可以切换策略  112 10.5 相关的设计模式  113 10.6 本章所学知识  113 10.7 练习题  113 第5部分 一致性  117 第11章 Composite模式——容器与内容的一致性  117 11.1 Composite模式  118 11.2 示例程序  118 Entry类  119 File类  120 Directory类  121 FileTreatMentException类  122 Main类  122 11.3 Composite模式中的登场角色  124 11.4 拓展思路的要点  125 多个和单个的一致性  125 Add方法应该放在哪里  126 到处都存在递归结构  126 11.5 相关的设计模式  126 11.6 本章所学知识  127 11.7 练习题  127 第12章 Decorator模式——装饰边框与被装饰物的一致性  129 12.1 Decorator模式  130 12.2 示例程序  130 Display类  131 StringDisplay类  132 Border类  132 SideBorder类  133 FullBorder类  134 Main类  135 12.3 Decorator模式中的登场角色  136 12.4 拓展思路的要点  137 接口(API)的透明性  137 在不改变被装饰物的前提下增加功能  138 可以动态地增加功能  138 只需要一些装饰物即可添加许多功能  138 java.io包与Decorator模式  138 导致增加许多很小的类  139 12.5 相关的设计模式  139 12.6 延伸阅读:继承和委托中的一致性  140 继承——父类和子类的一致性  140 委托——自己和被委托对象的一致性  140 12.7 本章所学知识  142 12.8 练习题  142 第6部分 访问数据结构  145 第13章 Visitor模式——访问数据结构并处理数据  145 13.1 Visitor模式  146 13.2 示例程序  146 Visitor类  147 Element接口  148 Entry类  148 File类  148 Directory类  149 ListVisitor类  150 FileTreatmentException类  151 Main类  151 Visitor与Element之间的相互调用  152 13.3 Visitor模式中的登场角色  154 13.4 拓展思路的要点  155 双重分发  155 为什么要弄得这么复杂  155 开闭原则——对扩展开放,对修改关闭  155 易于增加ConcreteVisitor角色  156 难以增加ConcreteElement角色  156 Visitor工作所需的条件  156 13.5 相关的设计模式  157 13.6 本章所学知识  157 13.7 练习题  157 第14章 Chain of Responsibility模式——推卸责任  161 14.1 Chain of Responsibility模式  162 14.2 示例程序  162 Trouble类  163 Support类  163 NoSupport类  164 LimitSupport类  164 OddSupport类  165 SpecialSupport类  165 Main类  166 14.3 Chain of Responsibility模式中的登场角色  167 14.4 拓展思路的要点  168 弱化了发出请求的人和处理请求的人之间的关系  168 可以动态地改变职责链  168 专注于自己的工作  169 推卸请求会导致处理延迟吗  169 14.5 相关的设计模式  169 14.6 本章所学知识  169 14.7 练习题  169 第7部分 简单化  171 第15章 Facade模式——简单窗口  171 15.1 Facade模式  172 15.2 示例程序  172 Database类  173 HtmlWriter类  174 PageMaker类  175 Main类  176 15.3 Facade模式中的登场角色  176 15.4 拓展思路的要点  177 Facade角色到底做什么工作  177 递归地使用Facade模式  178 开发人员不愿意创建Facade角色的原因——心理原因  178 15.5 相关的设计模式  178 15.6 本章所学知识  178 15.7 练习题  179 第16章 Mediator模式——只有一个仲裁者  181 16.1 Mediator模式  182 16.2 示例程序  182 Mediator接口  185 Colleague接口  186 ColleagueButton类  186 ColleagueTextField类  187 ColleagueCheckbox类  188 LoginFrame类  188 Main类  191 16.3 Mediator模式中的登场角色  191 16.4 拓展思路的要点  192 当发生分散灾难时  192 通信线路的增加  193 哪些角色可以复用  193 16.5 相关的设计模式  193 16.6 本章所学知识  193 16.7 练习题  194 第8部分 管理状态  195 第17章 Observer模式——发送状态变化通知  195 17.1 Observer模式  196 17.2 示例程序  196 Observer接口  196 NumberGenerator类  197 RandomNumberGenerator类  198 DigitObserver类  198 GraphObserver类  199 Main类  199 17.3 Observer模式中的登场角色  200 17.4 拓展思路的要点  201 这里也出现了可替换性  201 Observer的顺序  202 当Observer的行为会对Subject产生影响时  202 传递更新信息的方式  202 从“观察”变为“通知”  203 Model/View/Controller(MVC)  203 17.5 延伸阅读:java.util.Observer接口  203 17.6 相关的设计模式  204 17.7 本章所学知识  204 17.8 练习题  204 第18章 Memento模式——保存对象状态  207 18.1 Memento模式  208 18.2 示例程序  208 Memento类  209 Gamer类  210 Main类  211 18.3 Memento模式中的登场角色  215 18.4 拓展思路的要点  216 两种接口(API)和可见性  216 需要多少个Memento  217 Memento的有效期限是多久  217 划分Caretaker角色和Originator角色的意义  217 18.5 相关的设计模式  218 18.6 本章所学知识  218 18.7 练习题  218 第19章 State模式——用类表示状态  221 19.1 State模式  222 19.2 示例程序  222 金库警报系统  222 不使用State模式的伪代码  223 使用了State模式的伪代码  224 State接口  226 DayState类  226 NightState类  227 Context接口  228 SafeFrame类  228 Main类  231 19.3 State模式中的登场角色  232 19.4 拓展思路的要点  233 分而治之  233 依赖于状态的处理  233 应当是谁来管理状态迁移  233 不会自相矛盾  234 易于增加新的状态  234 实例的多面性  235 19.5 相关的设计模式  235 19.6 本章所学知识  235 19.7 练习题  236 第9部分 避免浪费  237 第20章 Flyweight模式——共享对象,避免浪费  237 20.1 Flyweight模式  238 20.2 示例程序  238 BigChar类  240 BigCharFactory类  241 BigString类  242 Main类  244 20.3 Flyweight模式中的登场角色  244 20.4 拓展思路的要点  245 对多个地方产生影响  245 Intrinsic与Extrinsic  246 不要让被共享的实例被垃圾回收器回收了  246 内存之外的其他资源  247 20.5 相关的设计模式  247 20.6 本章所学知识  247 20.7 练习题  247 第21章 Proxy模式——只在必要时生成实例  249 21.1 Proxy模式  250 21.2 示例程序  250 Printer类  251 Printable接口  252 PrinterProxy类  253 Main类  254 21.3 Proxy模式中的登场角色  254 21.4 拓展思路的要点  255 使用代理人来提升处理速度  255 有必要划分代理人和本人吗  256 代理与委托  256 透明性  256 HTTP代理  256 各种Proxy模式  257 21.5 相关的设计模式  257 21.6 本章所学知识  257 21.7 练习题  257 第10部分 用类来表现  259 第22章 Command模式——命令也是类  259 22.1 Command模式  260 22.2 示例程序  260 Command接口  261 MacroCommand类  262 DrawCommand类  263 Drawable接口  263 DrawCanvas类  264 Main类  265 22.3 Command模式中的登场角色  268 22.4 拓展思路的要点  269 命令中应该包含哪些信息  269 保存历史记录  269 适配器  269 22.5 相关的设计模式  271 22.6 本章所学知识  272 22.7 练习题  272 第23章 Interpreter模式——语法规则也是类  273 23.1 Interpreter模式  274 23.2 迷你语言  274 迷你语言的命令  274 迷你语言程序示例  275 迷你语言的语法  278 终结符表达式与非终结符表达式  279 23.3 示例程序  279 Node类  281 ProgramNode类  281 CommandListNode类  282 CommandNode类  283 RepeatCommandNode类  284 PrimitiveCommandNode类  285 Context类  285 ParseException类  286 Main类  287 23.4 Interpreter模式中的登场角色  288 23.5 拓展思路的要点  289 还有其他哪些迷你语言  289 跳过标记还是读取标记  290 23.6 相关的设计模式  290 23.7 本章所学知识以及本书的结束语  290 23.8 练习题  290 附录  293 附录A 习题解答  294 附录B 示例程序的运行步骤  359 附录C GoF对设计模式的分类  361 附录D 设计模式Q&A  362 附录E 参考书籍  365

    5
    0
    44.92MB
    2017-12-05
    3
  • (带书签)机器学习实战(单页版)

    内容简介 · · · · · · 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存、谋发展的决定性手段,这使得这一过去为分析师和数学家所专属的研究领域越来越为人们所瞩目。 本书第一部分主要介绍机器学习基础,以及如何利用算法进行分类,并逐步介绍了多种经典的监督学习算法,如k近邻算法、朴素贝叶斯算法、Logistic回归算法、支持向量机、AdaBoost集成方法、基于树的回归算法和分类回归树(CART)算法等。第三部分则重点介绍无监督学习及其一些主要算法:k均值聚类算法、Apriori算法、FP-Growth算法。第四部分介绍了机器学习算法的一些附属工具。 全书通过精心编排的实例,切入日常工作任务,摒弃学术化语言,利用高效的可复用Python代码来阐释如何处理统计数据,进行数据分析及可视化。通过各种实例,读者可从中学会机器学习的核心算法,并能将其运用于一些策略性任务中,如分类、预测、推荐。另外,还可用它们来实现一些更高级的功能,如汇总和简化等。 作者简介 · · · · · · Peter Harrington 拥有电气工程学士和硕士学位,他曾经在美国加州和中国的英特尔公司工作7年。Peter拥有5项美国专利,在三种学术期刊上发表过文章。他现在是Zillabyte公司的首席科学家,在加入该公司之前,他曾担任2年的机器学习软件顾问。Peter在业余时间还参加编程竞赛和建造3D打印机。 目 录 第一部分 分类 第1章 机器学习基础  2 1.1  何谓机器学习  3 1.1.1  传感器和海量数据  4 1.1.2  机器学习非常重要  5 1.2  关键术语  5 1.3  机器学习的主要任务  7 1.4  如何选择合适的算法  8 1.5  开发机器学习应用程序的步骤  9 1.6  Python语言的优势  10 1.6.1  可执行伪代码  10 1.6.2  Python比较流行  10 1.6.3  Python语言的特色  11 1.6.4  Python语言的缺点  11 1.7  NumPy函数库基础  12 1.8  本章小结  13 第2章 k-近邻算法   15 2.1  k-近邻算法概述  15 2.1.1  准备:使用Python导入数据  17 2.1.2  从文本文件中解析数据  19 2.1.3  如何测试分类器  20 2.2  示例:使用k-近邻算法改进约会网站的配对效果  20 2.2.1  准备数据:从文本文件中解析数据  21 2.2.2  分析数据:使用Matplotlib创建散点图  23 2.2.3  准备数据:归一化数值  25 2.2.4  测试算法:作为完整程序验证分类器  26 2.2.5  使用算法:构建完整可用系统  27 2.3  示例:手写识别系统  28 2.3.1  准备数据:将图像转换为测试向量  29 2.3.2  测试算法:使用k-近邻算法识别手写数字  30 2.4  本章小结  31 第3章 决策树   32 3.1  决策树的构造  33 3.1.1  信息增益  35 3.1.2  划分数据集  37 3.1.3  递归构建决策树  39 3.2  在Python中使用Matplotlib注解绘制树形图  42 3.2.1  Matplotlib注解  43 3.2.2  构造注解树  44 3.3  测试和存储分类器  48 3.3.1  测试算法:使用决策树执行分类  49 3.3.2  使用算法:决策树的存储  50 3.4  示例:使用决策树预测隐形眼镜类型  50 3.5  本章小结  52 第4章 基于概率论的分类方法:朴素贝叶斯   53 4.1  基于贝叶斯决策理论的分类方法  53 4.2  条件概率  55 4.3  使用条件概率来分类  56 4.4  使用朴素贝叶斯进行文档分类  57 4.5  使用Python进行文本分类  58 4.5.1  准备数据:从文本中构建词向量  58 4.5.2  训练算法:从词向量计算概率  60 4.5.3  测试算法:根据现实情况修改分类器  62 4.5.4  准备数据:文档词袋模型  64 4.6  示例:使用朴素贝叶斯过滤垃圾邮件  64 4.6.1  准备数据:切分文本  65 4.6.2  测试算法:使用朴素贝叶斯进行交叉验证  66 4.7  示例:使用朴素贝叶斯分类器从个人广告中获取区域倾向  68 4.7.1  收集数据:导入RSS源  68 4.7.2  分析数据:显示地域相关的用词  71 4.8  本章小结  72 第5章 Logistic回归   73 5.1  基于Logistic回归和Sigmoid函数的分类  74 5.2  基于最优化方法的最佳回归系数确定  75 5.2.1  梯度上升法  75 5.2.2  训练算法:使用梯度上升找到最佳参数  77 5.2.3  分析数据:画出决策边界  79 5.2.4  训练算法:随机梯度上升  80 5.3  示例:从疝气病症预测病马的死亡率  85 5.3.1  准备数据:处理数据中的缺失值  85 5.3.2  测试算法:用Logistic回归进行分类  86 5.4  本章小结  88 第6章 支持向量机  89 6.1  基于最大间隔分隔数据  89 6.2  寻找最大间隔  91 6.2.1  分类器求解的优化问题  92 6.2.2  SVM应用的一般框架  93 6.3  SMO高效优化算法  94 6.3.1  Platt的SMO算法  94 6.3.2  应用简化版SMO算法处理小规模数据集  94 6.4  利用完整Platt SMO算法加速优化  99 6.5  在复杂数据上应用核函数  105 6.5.1  利用核函数将数据映射到高维空间  106 6.5.2  径向基核函数  106 6.5.3  在测试中使用核函数  108 6.6  示例:手写识别问题回顾  111 6.7  本章小结  113 第7章 利用AdaBoost元算法提高分类 性能   115 7.1  基于数据集多重抽样的分类器  115 7.1.1  bagging:基于数据随机重抽样的分类器构建方法  116 7.1.2  boosting  116 7.2  训练算法:基于错误提升分类器的性能  117 7.3  基于单层决策树构建弱分类器  118 7.4  完整AdaBoost算法的实现  122 7.5  测试算法:基于AdaBoost的分类  124 7.6  示例:在一个难数据集上应用AdaBoost  125 7.7  非均衡分类问题  127 7.7.1  其他分类性能度量指标:正确率、召回率及ROC曲线  128 7.7.2  基于代价函数的分类器决策控制  131 7.7.3  处理非均衡问题的数据抽样方法  132 7.8  本章小结  132 第二部分 利用回归预测数值型数据 第8章 预测数值型数据:回归   136 8.1  用线性回归找到最佳拟合直线  136 8.2  局部加权线性回归  141 8.3  示例:预测鲍鱼的年龄  145 8.4  缩减系数来“理解”数据  146 8.4.1  岭回归  146 8.4.2  lasso  148 8.4.3  前向逐步回归  149 8.5  权衡偏差与方差  152 8.6  示例:预测乐高玩具套装的价格  153 8.6.1  收集数据:使用Google购物的API  153 8.6.2  训练算法:建立模型  155 8.7  本章小结  158 第9章 树回归  159 9.1  复杂数据的局部性建模  159 9.2  连续和离散型特征的树的构建  160 9.3  将CART算法用于回归  163 9.3.1  构建树  163 9.3.2  运行代码  165 9.4  树剪枝  167 9.4.1  预剪枝  167 9.4.2  后剪枝  168 9.5  模型树  170 9.6  示例:树回归与标准回归的比较  173 9.7  使用Python的Tkinter库创建GUI  176 9.7.1  用Tkinter创建GUI  177 9.7.2  集成Matplotlib和Tkinter  179 9.8  本章小结  182 第三部分 无监督学习 第10章 利用K-均值聚类算法对未标注数据分组  184 10.1  K-均值聚类算法  185 10.2  使用后处理来提高聚类性能  189 10.3  二分K-均值算法  190 10.4  示例:对地图上的点进行聚类  193 10.4.1  Yahoo! PlaceFinder API  194 10.4.2  对地理坐标进行聚类  196 10.5  本章小结  198 第11章 使用Apriori算法进行关联分析  200 11.1  关联分析  201 11.2  Apriori原理  202 11.3  使用Apriori算法来发现频繁集  204 11.3.1  生成候选项集  204 11.3.2  组织完整的Apriori算法  207 11.4  从频繁项集中挖掘关联规则  209 11.5  示例:发现国会投票中的模式  212 11.5.1  收集数据:构建美国国会投票记录的事务数据集  213 11.5.2  测试算法:基于美国国会投票记录挖掘关联规则  219 11.6  示例:发现毒蘑菇的相似特征  220 11.7  本章小结  221 第12章 使用FP-growth算法来高效发现频繁项集  223 12.1  FP树:用于编码数据集的有效方式  224 12.2  构建FP树  225 12.2.1  创建FP树的数据结构  226 12.2.2  构建FP树  227 12.3  从一棵FP树中挖掘频繁项集  231 12.3.1  抽取条件模式基  231 12.3.2  创建条件FP树  232 12.4  示例:在Twitter源中发现一些共现词  235 12.5  示例:从新闻网站点击流中挖掘  238 12.6  本章小结  239 第四部分 其他工具 第13章 利用PCA来简化数据  242 13.1  降维技术  242 13.2  PCA  243 13.2.1  移动坐标轴  243 13.2.2  在NumPy中实现PCA  246 13.3  示例:利用PCA对半导体制造数据降维  248 13.4  本章小结  251 第14章 利用SVD简化数据  252 14.1  SVD的应用  252 14.1.1  隐性语义索引  253 14.1.2  推荐系统  253 14.2  矩阵分解  254 14.3  利用Python实现SVD  255 14.4  基于协同过滤的推荐引擎  257 14.4.1  相似度计算  257 14.4.2  基于物品的相似度还是基于用户的相似度?  260 14.4.3  推荐引擎的评价  260 14.5  示例:餐馆菜肴推荐引擎  260 14.5.1  推荐未尝过的菜肴  261 14.5.2  利用SVD提高推荐的效果  263 14.5.3  构建推荐引擎面临的挑战  265 14.6  基于SVD的图像压缩  266 14.7  本章小结  268 第15章 大数据与MapReduce  270 15.1  MapReduce:分布式计算的框架  271 15.2  Hadoop流  273 15.2.1  分布式计算均值和方差的mapper  273 15.2.2  分布式计算均值和方差的reducer  274 15.3  在Amazon网络服务上运行Hadoop程序  275 15.3.1  AWS上的可用服务  276 15.3.2  开启Amazon网络服务之旅  276 15.3.3  在EMR上运行Hadoop作业  278 15.4  MapReduce上的机器学习  282 15.5  在Python中使用mrjob来自动化MapReduce  283 15.5.1  mrjob与EMR的无缝集成  283 15.5.2  mrjob的一个MapReduce脚本剖析  284 15.6  示例:分布式SVM的Pegasos算法  286 15.6.1  Pegasos算法  287 15.6.2  训练算法:用mrjob实现MapReduce版本的SVM  288 15.7  你真的需要MapReduce吗?  292 15.8  本章小结  292 附录A  Python入门  294 附录B  线性代数  303 附录C  概率论复习  309 附录D  资源  312 索引  313 版权声明  316

    1
    0
    38.93MB
    2017-10-18
    10
  • 用Python写网络爬虫

    作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用。使用Python这样的简单编程语言,你可以使用少量编程技能就可以爬取复杂的网站。 《用Python写网络爬虫》作为使用Python来爬取网络数据的杰出指南,讲解了从静态页面爬取数据的方法以及使用缓存来管理服务器负载的方法。此外,本书还介绍了如何使用AJAX URL和Firebug扩展来爬取数据,以及有关爬取技术的更多真相,比如使用浏览器渲染、管理cookie、通过提交表单从受验证码保护的复杂网站中抽取数据等。本书使用Scrapy创建了一个高级网络爬虫,并对一些真实的网站进行了爬取。 《用Python写网络爬虫》介绍了如下内容: 通过跟踪链接来爬取网站; 使用lxml从页面中抽取数据; 构建线程爬虫来并行爬取页面; 将下载的内容进行缓存,以降低带宽消耗; 解析依赖于JavaScript的网站; 与表单和会话进行交互; 解决受保护页面的验证码问题; 对AJAX调用进行逆向工程; 使用Scrapy创建高级爬虫。 本书读者对象 本书是为想要构建可靠的数据爬取解决方案的开发人员写作的,本书假定读者具有一定的Python编程经验。当然,具备其他编程语言开发经验的读者也可以阅读本书,并理解书中涉及的概念和原理。 目录 第1章 网络爬虫简介 1 1.1 网络爬虫何时有用 1 1.2 网络爬虫是否合法 2 1.3 背景调研 3 1.3.1 检查robots.txt 3 1.3.2 检查网站地图 4 1.3.3 估算网站大小 5 1.3.4 识别网站所用技术 7 1.3.5 寻找网站所有者 7 1.4 编写第一个网络爬虫 8 1.4.1 下载网页 9 1.4.2 网站地图爬虫 12 1.4.3 ID遍历爬虫 13 1.4.4 链接爬虫 15 1.5 本章小结 22 第2章 数据抓取 23 2.1 分析网页 23 2.2 三种网页抓取方法 26 2.2.1 正则表达式 26 2.2.2 Beautiful Soup 28 2.2.3 Lxml 30 2.2.4 性能对比 32 2.2.5 结论 35 2.2.6 为链接爬虫添加抓取回调 35 2.3 本章小结 38 第3章 下载缓存 39 3.1 为链接爬虫添加缓存支持 39 3.2 磁盘缓存 42 3.2.1 实现 44 3.2.2 缓存测试 46 3.2.3 节省磁盘空间 46 3.2.4 清理过期数据 47 3.2.5 缺点 48 3.3 数据库缓存 49 3.3.1 NoSQL是什么 50 3.3.2 安装MongoDB 50 3.3.3 MongoDB概述 50 3.3.4 MongoDB缓存实现 52 3.3.5 压缩 54 3.3.6 缓存测试 54 3.4 本章小结 55 第4章 并发下载 57 4.1 100万个网页 57 4.2 串行爬虫 60 4.3 多线程爬虫 60 4.3.1 线程和进程如何工作 61 4.3.2 实现 61 4.3.3 多进程爬虫 63 4.4 性能 67 4.5 本章小结 68 第5章 动态内容 69 5.1 动态网页示例 69 5.2 对动态网页进行逆向工程 72 5.3 渲染动态网页 77 5.3.1 PyQt还是PySide 78 5.3.2 执行JavaScript 78 5.3.3 使用WebKit与网站交互 80 5.3.4 Selenium 85 5.4 本章小结 88 第6章 表单交互 89 6.1 登录表单 90 6.2 支持内容更新的登录脚本扩展 97 6.3 使用Mechanize模块实现自动化表单处理 100 6.4 本章小结 102 第7章 验证码处理 103 7.1 注册账号 103 7.2 光学字符识别 106 7.3 处理复杂验证码 111 7.3.1 使用验证码处理服务 112 7.3.2 9kw入门 112 7.3.3 与注册功能集成 119 7.4 本章小结 120 第8章 Scrapy 121 8.1 安装 121 8.2 启动项目 122 8.2.1 定义模型 123 8.2.2 创建爬虫 124 8.2.3 使用shell命令抓取 128 8.2.4 检查结果 129 8.2.5 中断与恢复爬虫 132 8.3 使用Portia编写可视化爬虫 133 8.3.1 安装 133 8.3.2 标注 136 8.3.3 优化爬虫 138 8.3.4 检查结果 140 8.4 使用Scrapely实现自动化抓取 141 8.5 本章小结 142 第9章 总结 143 9.1 Google搜索引擎 143 9.2 Facebook 148 9.2.1 网站 148 9.2.2 API 150 9.3 Gap 151 9.4 宝马 153 9.5 本章小结 157

    0
    0
    9.99MB
    2017-10-17
    12
  • 利用Python进行数据分析

    内容简介 · · · · · · 【名人推荐】 “科学计算和数据分析社区已经等待这本书很多年了:大量具体的实践建议,以及大量综合应用方法。本书在未来几年里肯定会成为Python领域中技术计算的权威指南。” ——Fernando Pérez 加州大学伯克利分校 研究科学家, IPython的创始人之一 【内容简介】 还在苦苦寻觅用Python控制、处理、整理、分析结构化数据的完整课程?本书含有大量的实践案例,你将学会如何利用各种Python库(包括NumPy、pandas、matplotlib以及IPython等)高效地解决各式各样的数据分析问题。 由于作者Wes McKinney是pandas库的主要作者,所以本书也可以作为利用Python实现数据密集型应用的科学计算实践指南。本书适合刚刚接触Python的分析人员以及刚刚接触科学计算的Python程序员。 •将IPython这个交互式Shell作为你的首要开发环境。 •学习NumPy(Numerical Python)的基础和高级知识。 •从pandas库的数据分析工具开始。 •利用高性能工具对数据进行加载、清理、转换、合并以及重塑。 •利用matplotlib创建散点图以及静态或交互式的可视化结果。 •利用pandas的groupby功能对数据集进行切片、切块和汇总操作。 •处理各种各样的时间序列数据。 •通过详细的案例学习如何解决Web分析、社会科学、金融学以及经•济学等领域的问题。 作者简介 · · · · · · Wes McKinney 资深数据分析专家,对各种Python库(包括NumPy、pandas、matplotlib以及IPython等)等都有深入研究,并在大量的实践中积累了丰富的经验。撰写了大量与Python数据分析相关的经典文章,被各大技术社区争相转载,是Python和开源技术社区公认的权威人物之一。开发了用于数据分析的著名开源Python库——pandas,广获用户好评。在创建Lambda Foundry(一家致力于企业数据分析的公司)之前,他曾是AQR Capital Management的定量分析师。 目录 · · · · · · 目录 前言 1 第1章 准备工作 5 本书主要内容 5 为什么要使用Python进行数据分析 6 重要的Python库 7 安装和设置 10 社区和研讨会 16 使用本书 16 致谢 18 第2章 引言 20 来自bit.ly的1.usa.gov数据 21 MovieLens 1M数据集 29 1880—2010年间全美婴儿姓名 35 小结及展望 47 第3章 IPython:一种交互式计算和开发环境 48 IPython基础 49 内省 51 使用命令历史 60 与操作系统交互 63 软件开发工具 66 IPython HTML Notebook 75 利用IPython提高代码开发效率的几点提示 77 高级IPython功能 79 致谢 81 第4章 NumPy基础:数组和矢量计算 82 NumPy的ndarray:一种多维数组对象 83 通用函数:快速的元素级数组函数 98 利用数组进行数据处理 100 用于数组的文件输入输出 107 线性代数 109 随机数生成 111 范例:随机漫步 112 第5章 pandas入门 115 pandas的数据结构介绍 116 基本功能 126 汇总和计算描述统计 142 处理缺失数据 148 层次化索引 153 其他有关pandas的话题 158 第6章 数据加载、存储与文件格式 162 读写文本格式的数据 162 二进制数据格式 179 使用HTML和Web API 181 使用数据库 182 第7章 数据规整化:清理、转换、合并、重塑 186 合并数据集 186 重塑和轴向旋转 200 数据转换 204 字符串操作 217 示例:USDA食品数据库 224 第8章 绘图和可视化 231 matplotlib API入门 231 pandas中的绘图函数 244 绘制地图:图形化显示海地地震危机数据 254 Python图形化工具生态系统 260 第9章 数据聚合与分组运算 263 GroupBy技术 264 数据聚合 271 分组级运算和转换 276 透视表和交叉表 288 示例:2012联邦选举委员会数据库 291 第10章 时间序列 302 日期和时间数据类型及工具 303 时间序列基础 307 日期的范围、频率以及移动 311 时区处理 317 时期及其算术运算 322 重采样及频率转换 327 时间序列绘图 334 移动窗口函数 337 性能和内存使用方面的注意事项 342 第11章 金融和经济数据应用 344 数据规整化方面的话题 344 分组变换和分析 355 更多示例应用 361 第12章 NumPy高级应用 368 ndarray对象的内部机理 368 高级数组操作 370 广播 378 ufunc高级应用 383 结构化和记录式数组 386 更多有关排序的话题 388 NumPy的matrix类 393 高级数组输入输出 395 性能建议 397 附录A Python语言精要 401

    0
    0
    54B
    2017-10-17
    6
  • 【带书签】RESTful Web Services中文版

    本书向读者介绍了什么是REST、什么是面向资源的架构(Resource-Oriented Architecture,ROA)、REST式设计的优点、REST式Web服务的真实案例分析、如何用各种流行的编程语言编写Web服务客户端、如何用三种流行的框架(Ruby on Rails、Restlet和Django)实现REST式服务等。不仅讲解REST与面向资源的架构(ROA)的概念与原理,还向读者介绍如何编写符合REST风格的Web 2.0应用。本书详实、易懂,实战性强,提供了大量RESTful Web服务开发的最佳实践和指导,适合广大的Web开发人员、Web架构师及对Web开发或Web架构感兴趣的广大技术人员与学生阅读。

    0
    28
    27.16MB
    2017-10-17
    15
  • MongoDB权威指南(第二版)

    内容简介 · · · · · · mongodb如何帮你管理通过web应用收集的海量数据呢?通过本书的权威解读,你会了解面向文档数据库的诸多优点,会发现mongodb如此稳定、性能优越甚至能够无限水平扩展背后的原因。 《mongodb权威指南》的两位作者来自开发并支持开源数据库mongodb的公司10gen。数据库开发人员可将此书作为参考指南,系统管理员可以从本书中找到高级配置技巧,其他用户可以了解一些基本概念和用例。你会发现,将数据组织成自包含的json风格的文档比组织成关系型数据库中的记录要容易得多。 作者简介 · · · · · · KristinaccChodorow 13310gen的软件工程师,2MongoDB项目的核心成员.a负责数据库服务器、PHP驱动、Perl驱动等模块.a她曾在世界级的大会上发言,2包括OSCON、LinuxCon、FOSDEM和Latinoware.a

    0
    0
    67.43MB
    2017-10-17
    5
  • 知无不言

    回答1个问题,每日最多计数5次
关注 私信
上传资源赚积分or赚钱