Python中数据可视化三种方法

数据可视化是机器学习的关键阶段。要完全理解数据的行为和特征,您必须首先将其可视化。 Python 提供了不同的数据可视化库。

1、使用 TuriCreate
Turicreate 是 Python 提供的用于数据可视化的最佳库之一。

TuriCreate 可用于监督和无监督学习模型。它可用于回归问题、聚类和分类问题。其主要目的是构建模型而不是使用的算法。它提供了多种可轻松用于部署模型的工具。它使定制机器学习模型变得更容易。无需成为机器学习专家即可在应用程序中开发模型并添加推荐、对象检测等功能。该库可以用来代替scikit-learn。

让我们看一下与使用 Python 中的 Turicreate 库进行数据可视化相关的一些术语。

  • Turicreate:它是一个开源库,用于为各种任务创建机器学习模型,例如图像分类、推荐等。
  • SFrame:SFrame被称为可扩展数据帧。表格和可变数据框按列存储数据。
  • Sarray:SFrame 中的列称为 Sarry。

我们可以选择 Turi Create 机器学习模型库:

  • 它提供了各种可视化工具来更有效地可视化和理解数据。
  • 它是一个快速、可扩展的库,适用于大型数据集。
  • 它易于使用且随时可用。
  • 它可以读取 .csv 文件(逗号分隔值)。
  • Pandas 是一种在内存中运行的数据结构。通常不支持大于机器主内存(例如 RAM)的数据帧,而 SFrame 是一种核外数据结构。这意味着如果您没有耗尽磁盘空间(例如硬盘驱动器)和内存(例如RAM),您几乎可以存储任何大型数据帧。
  • Turicreate 库提供了用于数据可视化的内置工具,用于制作交互式图表和图形。

可以使用以下命令安装 turicreate 库:

  1. python -m pip install turicreate  

我们可以制作图表和绘图,例如条形图、散点图、热图、箱线图等。
让我们开始使用 Python 中的 TuriCreate 库可视化数据并制作不同的图表和图形。
我们将从 kaggle 网站获取一个简单的房价预测数据集进行可视化。
数据集的链接是House Data Prediction

Turicreate 中的不同图表和图形
数据可视化的第一步是导入turicreate库。然后我们将探索数据集并制作各种图表和图形。

import turicreate as tr  
import pandas as pd  
import numpy as np  
  
data= turicreate.SFrame.read_csv("House Data Prediction")  
data.head()  

我们已经导入了 turicreate 库。使用 SFrame,我们读取了 CSV 文件。
现在,我们将制作不同的图表和图形来可视化数据集。

条形图:

data['condition'].plot(title = "Bar plot",   
                                  ylabel =
"Price",   
                                  xlabel =
"No. of Floors")  

散点图:

tr.visualization.scatter(data['condition'], data['price'],  
               title = "Scatter Plot"  
                                  ylabel =
"Price",   
                                  xlabel =
"Condition")  

方框图:

tr.visualization.box_plot(data['condition'], data['price'],  
               title = "Box Plot"  
                                  ylabel =
"Price",   
                                  xlabel =
"Condition")  

柱状图:

tr.visualization.histogram(data['condition'], data['price'],  
                                  title = "Histogram",  
                                  ylabel =
"Price",   
                                  xlabel =
"Condition")  


2、 用NumPy 数组转换为图像
一个广受欢迎的数组操作库是 NumPy,有时也称为 Numeric Python。由于图像只是具有不同颜色代码的像素的集合,因此可以使用 NumPy 将数组转换为图像。除了 NumPy 之外,PIL(通常称为 Pillow)也将用于操作和存储数组。

方法:

  • 建立一个 numpy 数组。
  • 如上所述将数组大小调整为适当的尺寸。
  • 使用 PIL 库,从数组创建图像对象,如上所述。
  • 图像对象应以正确的文件格式保存。

要将 NumPy 显示转换为无需代码的图像,您可以使用其他图像处理程序或提供图形 UI (GUI) 的设备。以下是您可以遵循的一般进展:

  • 选择图像编辑程序:安装并打开图像编辑程序,如 Adob​​e Photoshop、GIMP(GNU 图像控制程序),或简单得多的工具,如 Paint 或 Microsoft Paint 3D。
  • 创建新图像:打开产品的另一张图片。制作另一张图片的选择通常在“文档”菜单中查看。
  • 设置尺寸:设置新图片的方面(宽度和级别)以匹配 NumPy 集群的状态。例如,如果您的 NumPy 显示为 400x200 像素,请同样设置图像宽高比。
  • 选择油漆桶或填充工具:大多数图像更改程序都会提供“油漆桶”或“填充”设备。选择该仪器。
  • 导入 NumPy 数组数据:使用填充工具将新图像的每个像素与 NumPy 模型中的比较变量值进行物理绘制。对于大型集群来说,这可能是一个乏味的循环。
  • 保存图像:每当您填充完每个像素后,请使用“记录”菜单中的“保存”或“产品”选项将图片保存为您喜欢的配置(例如 PNG、JPEG)。
  • 指定图像格式:保存图片时,请指出合适的图片设计,并在必要时更改任何压力设置。
  • 调整颜色深度(如果需要):根据您的图像编辑程序,您可以选择更改图像的颜色深度或颜色深度。例如,您可以将灰度 NumPy 簇转换为灰度图像,或将 RGB 显示转换为全色图像。
  • 应用过滤器或升级(可选):图片更改程序通常会提供不同的通道、效果和升级,您可以将其应用于图片。您可以更改亮度、差异、锐度等来提升图片的外观。
  • 添加文本或注释(可选):假设您的图片需要文本或说明,您可以使用图片编辑程序中的文本工具来添加名称、字幕或其他文字数据。
  • 调整大小或裁剪(可选):您可以使用产品中的修剪或调整大小工具来根据具体情况更改图像的大小和合成。
  • 保存您的最后一张图片:每当您对图片感到满意时,请再次保存它以确保您的进度受到保护。


# Python转换程序  
# 来自 numpy 数组的图像    
# 导入任何必要的库  
import numpy as np  
from PIL import Image as im    
# 定义一个主函数  
def main( ):    
     # 使用 numpy 从头开始​​构造一个数组。  
    # 对数组使用函数  
    # 1024x720 = 737280 是金额   
    # 像素数  
    # 数据类型 np. uint8 包含   
    # 数字必须在0到255之间,但必须有  
    # 并且没有非负整数  
    array = np.arange(0, 737280, 1, np.uint8)  
    # Check the type of array  
    print(type(array))  
    # 我们的集合将会很广泛  
    # 737280 像素 这意味着它   
    # 一条延长的黑线  
    print(array.shape)     
    # Resize the array to a more recognizable resolution.  
    array = np.reshape(array, (1024, 720))     
    # 说明数组的形式  
    print(array.shape)  
     # 显示数组  
    print(array)     
    # 构建一个图像  
    # 遍历数组  
    data = im.from array(array)     
   # 保存成品       
    # 作为 PNG 文件  
    data.save('gfg_dummy_pic.png')    
# driver code  
if __name__ == "__main__":  
 # function call  
  main ()  


输出:

<class 'numpy.ndarray'> 
(737280,) 
(1024, 720) 
[[ 0 1 2 ... 205 206 207] 
 [208 209 210 ... 157 158 159] 
 [160 161 162 ... 109 110 111 ] 
 ... 
 [144 145 146 ... 93 94 95] 
 [ 96 97 98 ... 45 46 47] 
 [ 48 49 50 ... 253 254 255]]


3、使用 Matplotlib 进行快速排序的 3D 可视化
一种流行且有效的排序算法称为快速排序,它使用分而治之的方法来组织列表或数组中的项目。尽管快速排序通常作为基于文本的算法实现,但您可以使用 Python 的 Matplotlib 在三个维度上可视化该方法,以更好地理解其功能。

此可视化通过允许您以三维方式可视化排序过程,从而为排序过程的传统二维表示添加了第三个维度。下面概述了如何执行此操作:

通过检查和比较比较和交换片段所需的操作数量,可视化算法可以帮助人们更好地理解它们。由于 3D 算法可视化不太常见,我们将使用 Matplotlib 绘制条形图并对其进行动画处理以表示数组的成员。

数据表示:创建 3D 散点图来首先描述您的列表或数组。每个数据点都是一个 3D 坐标,x 轴表示元素的索引,y 轴表示其值,z 轴最初设置为固定值(例如零)。

分区:快速排序的主要操作是分区,包括选择一个主元并移动其他元素,使所有小于主元的元素位于一侧,所有大于主元的元素位于另一侧。当数据点沿 x 轴移动时,沿 y 轴上下移动枢轴元素可让您在 3D 可视化中以动画方式呈现此过程。

递归:快速排序中使用递归算法。随着程序的继续,算法进行的每个递归调用都可以在可视化中可视化为单独的 3D 散点图。这使得更容易理解算法如何将问题划分为更小的问题。

让我们看一下快速排序 3D 可视化:
方法:

  • 我们将创建一个包含随机元素的数组。
  • 出于可视化的原因,当算法应用于该数组时,将使用yield 语句代替return 语句。
  • 经过比较和交换后,将生成数组的当前状态。因此,进程将返回一个生成器对象。
  • 我们将使用 Matplotlib 动画来说明数组的比较和切换。
  • 然后将绘制图形,返回 Poly3dCollection 对象以在后续动画中使用。


# Importing all required  modules  
import matplotlib.pyplot as plt  
from matplotlib.animation import FuncAnimation  
from mpl_toolkits.mplot3d import axes3d  
import matplotlib as mp  
import numpy as np  
import random  
# quicksort function  
def quicksort(a, l, r):  
    if l>=r:  
        return  
    x=a[l]  
    j=l  
    for i in range(l+1, r+1):  
        if a[i]<=x:  
            j+=1  
            a[j], a[i] = a[i], a[j]  
        yield a  
    a[l], a[j]=a[j], a[l]  
    yield a   
    数组由除法后语句的 yield 生成;
    yield from quicksort(a, l, j-1)  
    yield from quicksort(a, j+1, r)   
# function to plot bars  
def showGraph():     
    # 为不同的随机值  ;
    n=int(input("enter array size\n"))  
    a=[i for i in range(1, n+1)]  
    random.shuffle(a)  
    datasetName='Random'       
    # 函数返回生成器对象;
    generator = quicksort(a, 0, n-1)       
    algoName='Quick Sort'       
    # 图表样式  ;
    plt. style.use('fivethirtyeight')       
    # set the bars' colors  
    data_normalizer = mp. colors.Normalize()   
    color_map = mp. colors.LinearSegmentedColormap(  
       
"my_map",  
        {  
           
"red": [(0, 1.0, 1.0),  
                    (1.0, .5, .5)],  
           
"green": [(0, 0.5, 0.5),  
                      (1.0, 0, 0)],  
           
"blue": [(0, 0.50, 0.5),  
                     (1.0, 0, 0)]  
        }  
    )  
   
    fig = plt.figure()  
    ax = fig.add_subplot(projection='3d')  
    # the bars' z values and locations  
    z = np.zeros(n)  
    dx = np.ones(n)  
    dy = np.ones(n)    
    dz = [i for i in range(len(a))]  
    #  被 Poly3dCollection 返回到一个名为 rects 的变量中;
    rects = ax.bar3d(range(len(a)), a, z, dx,  
                     dy, dz,  
                     color = color_map(data_normalizer(range(n))))  
    将数组的长度设置为 x 和 y 极限的最大值  ......;
    ax.set_xlim(0, len(a))  
    ax.set_ylim(0, int(1.1*len(a)))   
    ax.set_title(
"ALGORITHM : "+algoName+"\n"+"DATA SET : "+datasetName,  
                 fontdict={'fontsize': 13, 'fontweight': 'medium',  
                           'color': 'E4365D'})  
    # Adding text to the chart  
    text = ax.text2D(0.1,0.95,
"", horizontalalignment = 'center',  
                     verticalalignment = 'center',  
                     transform=ax.transAxes,  
                     color =
"E4365D")  
    iteration = [0]  
    # to call the animation function repeatedly  
    def animate(A, rects, iteration):  
        # 从 Poly3DCollection   对象中移除条形图;
        ax.collections.clear()  
        ax.bar3d(range(len(a)), A, z, dx,  
                 dy, dz,  
                 color = color_map(data_normalizer(range(n))))  
        iteration[0] += 1  
        text.set_text(
"iterations : {}".format(iteration[0]))           
    这里调用 animate 函数并提供生成器对象;
    anim = FuncAnimation(fig, func=animate,  
        fargs = (rects, iteration),  
       frames = generator, interval=50,  
        repeat=False)       
    # showing the plot  
    plt.show()   
# function call  
showGraph()