所以要先学会处理数据什么的叭 QAQ

  • 开始一个新的 IPython 或 Jupyter 会话
  • 使用 Numpy, sklearn, Matplotlib 处理数据
  • 才知道 ipython 按 tab 可以自动填词

# Numpy 数组

简化 Python 数组运算而设计的数组。

In [1]: import numpy as np
In [2]: li = [i for i in range(10)]
In [3]: li
Out[3]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [4]: li *= 2 #一般列表乘 2 会复制一遍
In [5]: li
Out[5]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [6]: li = li[:10]
In [7]: li
Out[7]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [8]: int_li = np.array(li) #创建 numpy 数组
In [9]: int_li
Out[9]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [10]: int_li *= 2 #此处乘 2 即把所有元素 * 2,简化编写 (life is short...
In [11]: int_li
Out[11]: array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])
In [12]: int_li.ndim #维数
Out[12]: 1
In [13]: int_li.shape #每一维大小
Out[13]: (10,)
In [14]: int_li.size #元素总数
Out[14]: 10
In [15]: int_li.dtype #数据类型
Out[15]: dtype('int32')
    
In [16]: int_li[-2] #索引与切片不变
Out[16]: 16
In [17]: int_li[3:5]
Out[17]: array([6, 8])
    
In [2]: arr_2d = np.zeros((3, 5)) #创建二维数组,默认 float 类型
In [3]: arr_2d
Out[3]:
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
In [4]: arr_3d = np.ones((3, 2, 4)) #3 个颜色通道(0-1 的 32 位浮点数表示),2x4 像素的小图像
In [5]: arr_3d[0, :, :] #第一个通道的颜色信息
Out[5]:
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.]])
In [8]: arr_3d = np.ones((3, 2, 4), dtype = np.uint8) * 255 #同上 0-255 的 8 位整数表示 RGB
    
In [9]: arr_3d
Out[9]:
array([[[255, 255, 255, 255],
        [255, 255, 255, 255]],
       [[255, 255, 255, 255],
        [255, 255, 255, 255]],
       [[255, 255, 255, 255],
        [255, 255, 255, 255]]], dtype=uint8)

# sklearn 加载外部数据

实例是 (150 个样本,4 个特征) 的三类鸢尾花。

In [1]: from sklearn import datasets as ds #想起箱社关于少女前线的 iris 真是不错的作品 QAQ
In [2]: iris = ds.fetch_openml('iris', version = 1) #下载数据集 from:  http://openml.org
# 好像需要一点科学?
In [3]: iris_data = iris['data'] #数据
In [4]: iris_target = iris['target'] #标签
In [5]: iris_data.shape
Out[5]: (150, 4)
In [6]: iris_target.shape
Out[6]: (150,)
In [7]: import numpy as np
In [8]: np.unique(iris_target) #查看不同标签
Out[8]: array(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'], dtype=object)

# Matplotlib 可视化数据

Matplotlib 是建立在 Numpy 数组上的数据可视化库。

  • 绘制正弦函数图像:
In [1]: import matplotlib as mpl
In [2]: import matplotlib.pyplot as plt
In [3]: import numpy as np
In [4]: %matplotlib #ipython shell 中使用魔术命令,自动显示图形
Using matplotlib backend: Qt5Agg
    
In [5]: x = np.linspace(0, 10, 100) #创建 x 轴上线性空间,x 值范围 [0, 10],100 个样本点
In [6]: plt.plot(x, np.sin(x)) #计算每个正弦
Out[6]: [<matplotlib.lines.Line2D at 0x21626e6f940>] #图像会自动显示
#脚本使用 plt.show () 显示图像。
In [7]: plt.style.available #显示样式
In [8]: plt.style.use(Name) #应用样式
In [17]: plt.xkcd() #神奇的样式 owo
  • 可视化外部数据集的数据:

这里采用 sklearn 的 digits 数据集。

In [1]: import numpy as np
In [2]: from sklearn import datasets as ds
In [3]: import matplotlib.pyplot as plt
In [4]: %matplotlib
Using matplotlib backend: Qt5Agg
In [5]: digits = ds.load_digits() #加载 digits 数据集
In [6]: digits.data.shape
Out[6]: (1797, 64)
In [7]: digits.images.shape #data 与 images 的区别仅在像素的排列方式,一个大向量 / 一堆小向量
Out[7]: (1797, 8, 8)
In [8]: img = digits.images[0, :, :] #选取第一个数据,用 images 方便绘制。
    
In [11]: plt.imshow(img, cmap = 'gray') #绘图
    #cmap 参数指定一个彩图,默认 jet,对灰度图像使用 gray 更有意义。
Out[11]: <matplotlib.image.AxesImage at 0x18a6ff22518>

啊.. 好糊... 小一点就不糊了 hhh<img src="https://s3.ax1x.com/2021/02/08/yU5ePK.png" width="30px">

绘制一组样本:

In [18]: plt.figure(figsize=(14, 4)) #设置窗口大小
Out[18]: <Figure size 1400x400 with 0 Axes>
    
In [23]: plt.figure(figsize=(14, 4))
    ...: for index in range(0, 10):
    ...:     subplot_index = index + 1 #显示框从 1 开始编号的
    ...:     plt.subplot(2, 5, subplot_index) #两行五列第 index 位置
    ...:     plt.imshow(digits.images[index, :, :], cmap = 'gray')