数据变换、可视化

数据变换、可视化

数据变换前的准备工作:字段过滤、数据探索、相关性分析、建模筛选
  • 在数据变换前,我们需要先对字段进行筛选,然后对数据进行探索和相关性分析,接着是选择算法模型(这里暂时不需要进行模型计算),然后针对算法模型对数据的需求进行数据变换,从而完成数据挖掘前的准备工作。
数据变换通过数据平滑、数据聚集、数据概化和规范化等方式将数据转换成适用于数据挖掘的形式。
常见变换方法:
  1. 数据平滑:去除数据中的噪声,将连续数据离散化,可采用分箱、聚类和回归的方式进行数据平滑。

  2. 数据聚集:对数据进行汇总

  3. 数据概化:将数据由较低的概念抽象成为较高的概念,减少数据复杂度。

  4. 数据规范化:使属性数据按比例缩放,将原来的数值映射到一个新的特定区域中。常用方法:最小—最大规范化、Z—score 规范化、按小数定标规范化等。

    1. Min-max 规范化:将原始数据变换到[0,1]的空间中。新数值=(原数值-极小值)/(极大值-极小值)。

      scikit-learn中调用:preprocessing.MinMaxScaler()

    2. Z-Score 规范化:新数值=(原数值-均值)/ 标准差

      优点:算法简单、不受量纲影响、结果易于比较

      缺点:需要数据整体平均值和方差、结果没有实际意义,仅用于比较

      scikit-learn中的调用:preprocessing.scale()

    3. 小数定标规范化:通过移动小数点的位置来进行规范化。小数点移动多少位取决于属性A的取值中的最大绝对值。

      numpy方法实现:j = np.ceil(np.log10(np.max(abs(x))))

      scaled_x = x/(10**j)

  5. 属性构造:构造出新的属性并添加到属性集中。
    在这里插入图片描述

数据可视化视图根据其目的可分为:
  • 分布
  • 时间相关
  • 局部/整体
  • 偏差
  • 相关性
  • 排名
  • 量级
  • 地图
  • 流动
数据可视化工具:
  • 商业智能分析软件
    • Tableau
    • PowerBI
    • FineBI
  • 可视化大屏
    • DataV
    • FineReport
  • 前端可视化组件:基于web渲染的技术。典型的渲染技术:Canvas、SVG和WebGL。canvas和SVG是HTML5中主要的2D图形技术,WebGL是3D框架。
    • canvas适用于位图。
    • SVG指可缩放矢量图形,使用XML格式定义图形。相当于用点和线来描绘了图形,相比于位图来说文件比较小,而且任意缩放都不会失真。
    • webGL是一种3D绘图协议,能在网页浏览器中呈现3D画面技术,并可交互。
    • 常用的可视化组件: Echarts、D3、Three.js和AntV。
  • 编程语言
    • matplotlib
    • seaborn
可视化视图按照数据间关系可分为比较、联系、构成和分布。
  1. 比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图;
  2. 联系:查看两个或两个以上变量之间的关系,比如散点图;
  3. 构成:每个部分占整体的百分比,或者是随着时间的百分比变化,比如饼图;
  4. 分布:关注单个变量,或者多个变量的分布情况,比如直方图。
按照变量个数可分为单变量分析和多变量分析。
  1. 单变量分析指一次只关注一个变量。
  2. 多变量分析可在一张图上可以查看两个以上变量的关系。
常用视图:散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图、二元变量分布和成对关系。
  • 散点图:适合展现两个变量之间的关系。

    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    # 数据准备
    N = 1000
    x = np.random.randn(N)
    y = np.random.randn(N)
    # 用Matplotlib画散点图
    plt.scatter(x, y,marker='x')
    plt.show()
    # 用Seaborn画散点图
    df = pd.DataFrame({'x': x, 'y': y})
    sns.jointplot(x="x", y="y", data=df, kind='scatter');
    plt.show()
    
  • 折线图:可表示数据随时间变化的趋势。

    # 数据准备
    x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
    y = [8, 13, 6, 20, 17, 16, 19, 3, 32, 35]
    # 使用Matplotlib画折线图
    plt.plot(x, y)
    plt.show()
    # 使用Seaborn画折线图
    df = pd.DataFrame({'x': x, 'y': y})
    sns.lineplot(x="x", y="y", data=df)
    plt.show()
    
  • 直方图:将横坐标等分成一定数量的小区间,纵坐标表示落在相应区间内y值的个数。

    # 数据准备
    a = np.random.randn(100)
    s = pd.Series(a) 
    # 用Matplotlib画直方图
    plt.hist(s)
    plt.show()
    # 用Seaborn画直方图
    sns.distplot(s, kde=False)
    plt.show()
    sns.distplot(s, kde=True)
    plt.show()
    
  • 条形图:可帮助查看类别特征。

    # 数据准备
    x = ['Cat1', 'Cat2', 'Cat3', 'Cat4', 'Cat5']
    y = [5, 4, 8, 12, 7]
    # 用Matplotlib画条形图
    plt.bar(x, y)
    plt.show()
    # 用Seaborn画条形图
    sns.barplot(x, y)
    plt.show()
    
  • 箱线图:由最大值(max)、最小值(min)、中位数(median)和上下四分位数(Q3, Q1)五个数值点组成,可分析出数据差异性、离散程度和异常值等。

    # 数据准备
    # 生成0-1之间的10*4维度数据
    data=np.random.normal(size=(10,4)) 
    lables = ['A','B','C','D']
    # 用Matplotlib画箱线图
    plt.boxplot(data,labels=lables)
    plt.show()
    # 用Seaborn画箱线图
    df = pd.DataFrame(data, columns=lables)
    sns.boxplot(data=df)
    plt.show()
    
  • 饼图:可显示出每个部分的百分比。

    # 数据准备
    nums = [25, 37, 33, 37, 6]
    labels = ['High-school','Bachelor','Master','Ph.d', 'Others']
    # 用Matplotlib画饼图
    plt.pie(x = nums, labels=labels)
    plt.show()
    
  • 热力图:一种矩阵表示方法,矩阵中的元素值用颜色来代表,不同的颜色代表不同大小的值。是一种非常直观的多元变量分析方法。

  • # 数据准备
    flights = sns.load_dataset("flights")
    data=flights.pivot('year','month','passengers')
    # 用Seaborn画热力图
    sns.heatmap(data)
    plt.show()
    
  • 蜘蛛图:一种显示一对多关系的方法。

    # 数据准备
    labels=np.array([u"推进","KDA",u"生存",u"团战",u"发育",u"输出"])
    stats=[83, 61, 95, 67, 76, 88]
    # 画图数据准备,角度、状态值
    angles=np.linspace(0, 2*np.pi, len(labels), endpoint=False)
    stats=np.concatenate((stats,[stats[0]]))
    angles=np.concatenate((angles,[angles[0]]))
    # 用Matplotlib画蜘蛛图
    fig = plt.figure()
    ax = fig.add_subplot(111, polar=True)   
    ax.plot(angles, stats, 'o-', linewidth=2)
    ax.fill(angles, stats, alpha=0.25)
    # 设置中文字体
    font = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=14)  
    ax.set_thetagrids(angles * 180/np.pi, labels, FontProperties=font)
    plt.show()
    
  • 二元变量分布:可查看两个变量之间的关系。

    # 数据准备
    tips = sns.load_dataset("tips")
    print(tips.head(10))
    # 用Seaborn画二元变量分布图(散点图,核密度图,Hexbin图)
    sns.jointplot(x="total_bill", y="tip", data=tips, kind='scatter')
    sns.jointplot(x="total_bill", y="tip", data=tips, kind='kde')
    sns.jointplot(x="total_bill", y="tip", data=tips, kind='hex')
    plt.show()
    
  • 成对关系:可显示多个成对双变量的分布。

    # 数据准备
    iris = sns.load_dataset('iris')
    # 用Seaborn画成对关系
    sns.pairplot(iris)
    plt.show()
    

在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sweeney Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值