• 读书笔记:《Python 和 Dask 数据科学》



    一. 可扩展计算

    数据集规模

    • 小规模数据集,可以装入内存,可以装入本地磁盘
      • Pandas,NumPy,scikit-learn
    • 中规模数据集,不可以装入内存,可以装入本地磁盘
      • Dask 本地任务调度器
    • 大规模数据集,不可以装入内存,不可以装入本地磁盘
      • Dask 分布式任务调度器
        • 集群资源管理器:
          • Hadoop Yarn
          • Mesos
          • Kubernetes

    调度,扩展,并发和恢复

    • 任务调度器:有向无环图 DAG
    • 扩展:
      • 横向扩展:雇佣更多工人,需要在不同工人之间编排复杂任务
      • 纵向扩展:升级设备,技术升级总会达到极限
    • 并发和资源管理:任务调度器来决定如何处理资源的争用和锁定,避免资源的争用影响性能
    • 失败中恢复:只运行失败的任务,已经完成的任务不需要重新运行

    二. Dask

    Dask 组件和层次

    • 顶层 API:
      • Dask Array:NumPy
      • Dask Bag:Python List,非结构化数据
      • Dask DataFrame:Pandas
      • Dask ML:scikit-learn
        • 序列化模型:pickle,dill
    • 底层 API:
      • Dask delayed:lazy parallel objects
      • Dask Future:Eager parallel objects
    • Dask 子系统:调度器

    Dask 入门

    • 数据类型:
      • 自动从数据推断数据类型,随机抽样
      • 最好显式指定数据类型;或者使用显式指定数据类型的二进制文件格式存储数据(parquet)
    • 跟踪正在运行的任务:from dask.diagnostics import ProgressBar
    • compute:运行计算任务 DAG 并输出结果
    • persist:将中间结果保存在内存中,不需要重新计算,persist 之前的计算任务会在 DAG 中删除
    • DAG 可视化:dd.visualiuze
    • 任务调度:
      • 跟踪中间结果的存储位置,将计算任务放在数据节点上运行,避免在网络上传输中间结果,提高运行效率
      • 数据本地话,避免将数据在 worker 之间移动,使用分布式文件系统(S3,HDFS)

    三. Dask DataFrame

    Dask 和 Pandas

    • 索引和轴:
      • 索引:每行的标识符
      • 轴:0轴沿着行,1轴沿着列
    • Pandas 经过高度优化,可以高效处理内存中的数据
    • Dask 分区:
      • npartitions
      • divisions:分区的边界
      • map_partitions:方法应用到每个分区
    • 混洗 shuffle:将所有分区广播给所有 worker,发生于排序,分组和索引操作时,预先对数据进行排序,尽可能减少混洗操作
    • Dask 的局限性:没有扩展 Pandas 的所有操作
      • 不支持更改 DataFrame 结构:stack,unstack,melt
      • 关系操作涉及混洗成为性能瓶颈:join,merge,groupby,rolling
      • 创建索引需要排序混洗
        • reset_index:不以分区感知的方式建立索引

    数据:读取

    • 数据类型:
      • 显式指定,禁用类型推断
      • 首先全部假定为 np.str 类型,读取后再 head 分析具体类型
      • np.nan 为 float32 类型,uint 无法存储
      • dask 只显示数字数据类型,非数字数字类型显示为 object
    • csv:带分隔符的文本文件
    • sql:关系型数据库
    • HDFS:可以在数据节点上运行计算
    • S3:仅作为数据存储服务
    • Parquet:
      • 读写:fasetparquet,pyarrow
      • 压缩:gzip,lzo,snappy

    数据:清理转换

    • 列操作:
      • 选择列,删除列,重命名
      • 创建新列:apply,assign
    • 行操作:
      • 选择行,loc,可以切片
    • 缺失值:
      • 》50%:删除列
      • 5%~50%:缺失值填充
      • 《5%:删除行
    • 数据重编码:
      • where:替换 False 行
      • mask:替换 True 行
    • 索引,排序,连接
      • 索引已排序:search,filter
      • 两表的索引已对齐:join
      • 列轴连接:join
      • 行轴连接:append

    数据:聚合分析

    相关性不意味着因果关系。

    • 统计信息:
      • mean,std,min,max
      • 偏度:
        • 正偏度:大于中位数,减缓
        • 负偏度:大于中位数,陡峭
        • dask_stats.skew
      • 中位数:quantile(0.5)
      • describe
      • 相关性:corr
    • 聚合分组:
      • groupby
      • agg
      • 自定义聚合对象:dd.Aggregation:
        • 应用于每个分区的函数
        • 聚合每个分区结果的函数
    • 滑动窗口:
      • 窗口大小不能跨越分区
      • 默认前n个窗口,可以设置center=True

    数据:可视化

    • 安斯科姆四重奏:四个数据集具有相同的统计变量,但是具有不同的数据分布
    • Seaborn 可视化:基于 Matplotlib 的封装
    • 可视化的价值在于能够快速直观地从数据中识别和洞察的能力,当可视化大量数据时,则难以观察
    • Datashader 可视化:
      • 仅限位置数据
      • 不需要降低采样
      • 直接接受 Dask 对象
      • 可以交互式可视化:holoviews,geoviews,bokeh

    四. Dask 部署

    Dask 集群在 AWS 中的架构:

    1. Scheduler 调度器:从 Notebook 接受作业,协调工作节点
    2. Worker 工作节点:接受任务并计算
    3. Jupyter Notebook 服务器:提供前端允许用户运行代码
    4. 客户端:向用户展示结果

    配置 AWS 集群:

    1. 生成安全密钥 Access Key
    2. 创建 ECS 集群
    3. 配置集群网络,安全组
    4. 配置文件系统 EFS
    5. 配置 Docker 镜像 ECR
    6. 创建调度器,工作节点,Notebook 服务器镜像
    7. 连接到集群
      1. scheduler hostname:8787
      2. notebook hostname:8888
      3. 显式传递调度器 URI,或者配置 DASK_SCHEDULER_ADDRESS 环境变量
  • 相关阅读:
    nodejs+vue游戏测评交流系统elementui
    修改AVD默认存放位置
    XML Schema(XSD)详解:定义 XML 文档结构合法性的完整指南
    Guava入门~MapMaker
    Kafka消息队列大数据实战教程-第三篇(Kafka分区和副本的创建)
    linux 命令大全
    Reid strong baseline知识蒸馏【附代码】
    Python编程实例-Python网络编程中的一些概念
    python中的继承
    深入理解计算机系统(CSAPP) —— 第二章 信息的表示和处理
  • 原文地址:https://blog.csdn.net/qq_39384184/article/details/127961829