• Python实现简单的数据可视化


    现在python这门解释型语言被越来越多的人们喜欢,强大的库支持,使得编程过程变得简单。

    我是一个传统的C语言支持者,往后也打算慢慢的了解Python的强大。

    今天我就学习一下使用python实现数据可视化。

    参考:https://mp.weixin.qq.com/s/Nb2ci6d5MhoRoepu6G3YdQ

    1 安装依赖库
    ——

    ◈ NumPy 用于简化数组和矩阵的操作

    ◈ SciPy 用于数据科学

    ◈ Matplotlib 用于绘图

    在windows下我使用Pycharm作为IDE,安装库也十分方便,直接在包管理工具终添加即可,如果超时无法下载,可以参照我之前的博客换成国内源。

    2 导入依赖包
    ——

    import numpy as np               #使用as重命名
    from scipy import stats          #可以只导入包的一部分
    import matplotlib.pyplot as plt  #import matplotlib.pyplot == from matplotlib import pyplot

    3 定义变量
    ——

    python中的变量在第一次赋值时被声明,变量类型由分配给变量的值推断。习惯上,不使用大写字母命名。

    input_file_name = "anscombe.csv"
    delimiter = " " #数据之间的分隔符
    skip_header = 3 #文件开头要跳过的行
    column_x = 0
    column_y = 1

    4 读取数据
    ——

    毫无疑问,我们要事先得到需要可视化的数据:

    (这里我们只对四个部分中部分一的进行处理)

    使用 NumPy 中函数 genfromtxt() 读取 CSV 文件非常容易,该函数生成 NumPy 数组:

    data = np.genfromtxt(input_file_name, delimiter = delimiter, skip_header = skip_header)

    在 Python 中,一个函数可以有数量可变的参数,你可以通过指定所需的参数来传递一个参数的子集。数组是非常强大的矩阵状对象,可以很容易地分割成更小的数组:

    这里的:就指代全部选择

    x = data[:, column_x]           #x取所有行的column_x列
    y = data[:, column_y]           #y取所有行的column_y列

    5 拟合数据
    ——

    SciPy 提供了方便的数据拟合功能,例如 linregress() 函数提供了一些与拟合相关的重要值,如斜率、截距和两个数据集的相关系数:

    slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
    print("Slope: {:f}".format(slope))
    print("Intercept: {:f}".format(intercept))
    print("Correlation coefficient: {:f}".format(r_value))

    因为 linregress() 提供了几条信息,所以结果可以同时保存到几个变量中。

    6 绘图
    ——

    Matplotlib 库仅仅绘制数据点,因此,你应该定义要绘制的点的坐标。已经定义了 x 和 y 数组,所以你可以直接绘制它们,但是你还需要更多的点来画直线。

    linspace() 函数可以方便地在两个值之间生成一组等距值。再利用强大的 NumPy 数组可以轻松计算纵坐标,该数组可以像普通数值变量一样在公式中使用

    fit_x = np.linspace(x.min() - 1, x.max() + 1, 100)  #随机生成100个线性数据
    fit_y = slope * fit_x + intercept

    要绘图,首先,定义一个包含所有图形的图形对象

    fig_width = 7 #inch
    fig_height = fig_width / 16 * 9 #inch
    fig_dpi = 100
    fig = plt.figure(figsize = (fig_width, fig_height), dpi = fig_dpi)

    参数也非常好理解,最后调用figure()函数生成一个图形。

    一个图形可以画几个图;在 Matplotlib 中,这些图被称为。本示例定义一个单轴对象来绘制数据点:

    ax = fig.add_subplot(111)
    ax.plot(fit_x, fit_y, label = "Fit", linestyle = '-')
    ax.plot(x, y, label = "Data", marker = '.', linestyle = '')
    ax.legend()
    ax.set_xlim(min(x) - 1, max(x) + 1)
    ax.set_ylim(min(y) - 1, max(y) + 1)
    ax.set_xlabel('x')
    ax.set_ylabel('y')

    如果要保存图片,有:

    fig.savefig('fit_python.png')

    如果要显示(而不是保存)该绘图,请调用:

    plt.show()

    7 结果
    ——

    终端输出:

     生成图像:

    怎么样,感觉还不错吧,Python真是个好用的工具,以后会更新更多的实用的案例~


    完整代码:

    import numpy as np               #使用as重命名
    from scipy import stats          #可以只导入包的一部分
    import matplotlib.pyplot as plt  #import matplotlib.pyplot == from matplotlib import pyplot
    
    input_file_name = "anscombe.csv"
    delimiter = "	"                 #数据之间的分隔符
    skip_header = 2                  #文件开头要跳过的行
    column_x = 0
    column_y = 1
    
    print("#### Anscombe's first set with Python ####")
    
    data = np.genfromtxt(input_file_name, delimiter = delimiter, skip_header = skip_header)
    x = data[:, column_x]           #x取所有行的column_x列
    y = data[:, column_y]           #y取所有行的column_y列
    
    slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
    print("Slope: {:f}".format(slope))
    print("Intercept: {:f}".format(intercept))
    print("Correlation coefficient: {:f}".format(r_value))
    
    fit_x = np.linspace(x.min() - 1, x.max() + 1, 100)  #随机生成100个线性数据
    fit_y = slope * fit_x + intercept
    
    fig_width = 7 #inch
    fig_height = fig_width / 16 * 9 #inch
    fig_dpi = 100
    fig = plt.figure(figsize = (fig_width, fig_height), dpi = fig_dpi)
    
    ax = fig.add_subplot(111)
    ax.plot(fit_x, fit_y, label = "Fit", linestyle = '-')
    ax.plot(x, y, label = "Data", marker = '.', linestyle = '')
    ax.legend()
    ax.set_xlim(min(x) - 1, max(x) + 1)
    ax.set_ylim(min(y) - 1, max(y) + 1)
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    
    plt.show()

  • 相关阅读:
    面向对象-类
    模块04
    总结
    昨天的新的解决方法
    感冒了~ vs中py和vb实现一个小算法
    vs2015社区版不支持installshield
    网站被黑了
    2018/11/18(python)
    2018/11/14
    2018/11/12(python)
  • 原文地址:https://www.cnblogs.com/Irvingcode/p/12383000.html
Copyright © 2020-2023  润新知