数据分析

Posted zn-225

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据分析相关的知识,希望对你有一定的参考价值。

数据分析

概念

  把隐藏在一些看似杂论无章的数据背后的信息提炼出来,总结出所研究对象的内在规律。

  数据分析三剑客:Numpy、Pandas、Matplotlib

  Numpy(Numerical Python)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

创建ndarray

import numpy as np

使用np.array()创建

一维数据创建

np.array([1, 2, 3, 4, 5])

# 输出:
    array([1, 2, 3, 4, 5])

二维数据创建

np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 输出:
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])

  注意:

    Numpy默认ndarray的所有元素的类型是相同的;

    如果传进来的列表中包含不同的类型,则统一位同一类型,优先级:str > float > int;

np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 输出:
    array([[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]], dtype=<U11)

 

  使用matplotlib.pyplot获取一个numpy数组,数据源于一张图片

import matplotlib.pyplot as plt

img_arr = plt.imread(./lmy.jpg)
plt.imshow(img_arr)

# 输出:
    <matplotlib.image.AxesImage at 0x25b81a877b8>

技术分享图片

  对数组进行算术运算

plt.imshow(img_arr-25)

# 输出:
    <matplotlib.image.AxesImage at 0x25b88d19080>

 技术分享图片

  数组的形状

img_arr.shap

# 输出:
    (1440, 1080, 3)

  操作该numpy数据,该操作会同步到图片中

 使用np的routines函数创建

  包含一下常见创建方法:

  1) np.ones(shape, dtype=None, order=‘C‘)  # 创建以1填充的指定大小的数组

np.ones(shape=(20, 30))

# 输出:
array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
        1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])

  2) np.zeros(shape, stype=None, order=‘C‘)  # 创建以1填充的指定大小的数组

np.zeros(shape=(20, 30))

# 输出:
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

 

   3) np.full(shape, fill_value, dtype=None, order=‘C‘)  # 自定义数组的大小、自定义填充的内容

np.full(shape=(5, 6), fill_value=9527)

# 输出:
array([[9527, 9527, 9527, 9527, 9527, 9527],
       [9527, 9527, 9527, 9527, 9527, 9527],
       [9527, 9527, 9527, 9527, 9527, 9527],
       [9527, 9527, 9527, 9527, 9527, 9527],
       [9527, 9527, 9527, 9527, 9527, 9527]])

 

   4)np.linspace(start, stop, num=50, endpoint=True, restep=False, dtype=None)  # 构造等差数组

np.linspace(1, 100, num=20)

# 输出:
array([  1.        ,   6.21052632,  11.42105263,  16.63157895,
        21.84210526,  27.05263158,  32.26315789,  37.47368421,
        42.68421053,  47.89473684,  53.10526316,  58.31578947,
        63.52631579,  68.73684211,  73.94736842,  79.15789474,
        84.36842105,  89.57894737,  94.78947368, 100.        ])

  5)np.arange([start, ]stop, [step,]dtype-None)  # 循环生成数组

np.arange(0, 100, step=2)

# 输出:
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,
       34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66,
       68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98])

  6)np.random.randint(low, high=None, size=None, dtype=‘l‘)  # 随机产生指定大小的数组

np.random.randint(0, 100, size=(5, 7))

# 输出
array([[49, 10, 15, 24, 84, 64, 22],
       [39, 30, 60, 76, 53, 79,  2],
       [64, 29,  8, 89, 68,  7, 95],
       [59, 56, 86, 94, 47,  2, 18],
       [62, 72, 51, 70, 62, 34, 85]])

 

   上边这样产生数组,每次都是不一样的,因为里边的元素都是随机产生的。

np.random.seed(5)  # 固定时间种子,产生的随机数就固定下来了
np.random.randint(0, 100, size=(5, 7))

# 输出
array([[99, 78, 61, 16, 73,  8, 62],
       [27, 30, 80,  7, 76, 15, 53],
       [80, 27, 44, 77, 75, 65, 47],
       [30, 84, 86, 18,  9, 41, 62],
       [ 1, 82, 16, 78,  5, 58,  0]])

 

   7)np.random.randn(d0, d1, ..., dn)  # 标准正太分布的数组

arr = np.random.randn(4, 5)

 

  8) np.random.random(size=None)  # 生成0到1的随机数,左闭右开

np.random.seed(3)
np.random.random(size=(3,4))

# 输出
array([[0.5507979 , 0.70814782, 0.29090474, 0.51082761],
       [0.89294695, 0.89629309, 0.12558531, 0.20724288],
       [0.0514672 , 0.44080984, 0.02987621, 0.45683322]])

 

 ndarray的属性

  4个必记参数:

    ndim:维度

arr = np.random.randn(4, 5)
arr.ndim

# 输出
2

 

    shape:形状(各维度的长度)

arr = np.random.randn(4, 5)
arr.shape

# 输出
(4, 5)

 

    size: 总长度

arr = np.random.randn(4, 5)
arr.size

# 输出
20

 

    dtype:元素类型

arr = np.random.randn(4, 5)
arr.dtype

# 输出
dtype(float64)

 

  type(arr)

arr = np.random.randn(4, 5)
type(arr)

# 输出
numpy.ndarray

 

ndarray的基本操作

索引

  一维与列表完全一致  多维时同理

arr[1][2]

# 输出
0.48624932610831123

 

   根据索引修改数据

arr[1][2] = 1
arr

# 输出
array([[-0.51664792, -0.18907167, -0.41619802,  0.72465766, -0.68996068],
       [ 0.48641448,  0.85151895,  1.        , -0.83423985,  1.34499246],
       [-0.67821268,  0.42643507, -0.75333479, -1.74411025,  0.22575027],
       [ 0.28703516, -0.07744096,  0.2760685 , -0.64841089, -0.73746484]])

?

 

切片

  一维与列表完全一致  多维时同理

  arr[0: 2]  # 横着切,切列;获取二维数组的前两行

arr = np.random.randint(60, 120, size=(6, 4))
arr
# arr结构
array([[ 82, 105,  96, 100],
       [ 86, 112,  69,  79],
       [100,  65, 114,  72],
       [ 86,  95,  84, 112],
       [ 94, 103, 115,  83],
       [110,  78,  60,  67]])

arr[0: 2]

# 输出
array([[ 82, 105,  96, 100],
       [ 86, 112,  69,  79]])

 

  arr[:, 0:2]  # 竖着切,切前两行;其中,左边是行,右边是列。获取二维数组的前两列。

arr[:, 0:2]

# 输出
array([[ 82, 105],
       [ 86, 112],
       [100,  65],
       [ 86,  95],
       [ 94, 103],
       [110,  78]])

  获取二维数组前两行和前两列数据

arr[0: 2, 0: 2]

# 输出
array([[ 82, 105],
       [ 86, 112]])

  将数据反转,例如[1, 2, 3] ---> [3, 2, 1]

  ::  进行切片

  将数组的行进行倒序

arr = np.random.randint(65, 130, size=(6, 4))
arr
# arr
array([[127,  91,  65, 101],
       [119, 102, 101,  88],
       [ 83, 109,  96,  76],
       [ 89,  91,  69, 121],
       [ 65,  85, 120,  75],
       [ 70, 124,  74, 119]])
arr[::
-1] # 输出 array([[ 70, 124, 74, 119], [ 65, 85, 120, 75], [ 89, 91, 69, 121], [ 83, 109, 96, 76], [119, 102, 101, 88], [127, 91, 65, 101]] )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

以上是关于数据分析的主要内容,如果未能解决你的问题,请参考以下文章

将代码片段插入数据库并在 textarea 中以相同方式显示

如何从 Firebase 获取数据到 Recyclerview 中的片段?

实用代码片段将json数据绑定到html元素 (转)

比较有用的php代码片段

片段中的Firebase数据不是持久的,会重新下载

将数据从底部工作表对话框片段传递到片段