数据分析
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 中以相同方式显示