一什么是数据分析?
数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。
二使用python做数据分析的常用库
-
numpy 基础数值算法
-
scipy 科学计算
-
matplotlib 数据可视化
-
pandas 序列高级函数
三numpy概述
-
Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力。
-
Numpy是其它数据分析及机器学习库的底层库。
-
Numpy完全标准C语言实现,运行效率充分优化。
-
Numpy开源免费。
(一)numpy历史
-
1995年,Numeric,Python语言数值计算扩充。
-
2001年,Scipy->Numarray,多维数组运算。
-
2005年,Numeric+Numarray->Numpy。
-
2006年,Numpy脱离Scipy成为独立的项目。
(二)numpy的核心:多维数组
-
代码简洁:减少Python代码中的循环。
-
底层实现:厚内核(C)+薄接口(Python),保证性能。
四numpy基础
(一)ndarray数组
用np.ndarray类的对象表示n维数组
?
#numpy演示
import numpy as np
ary = np.array([1,2,3,4,5,6])
print(ary,type(ary))
print(ary + 10)
print(ary * 3)
print(ary + ary)
"""
[1 2 3 4 5 6] <class ‘numpy.ndarray‘>
[11 12 13 14 15 16]
[ 3 6 9 12 15 18]
[ 2 4 6 8 10 12]
"""
?
1.内存中的ndarray对象
元数据(metadata)
存储对目标数组的描述信息,如:dim count、dimensions、dtype、data等。
实际数据
完整的数组数据
将实际数据与元数据分开存放,一方面提高了内存空间的使用效率,另一方面减少对实际数据的访问频率,提高性能。
2.ndarray数组对象的特点
?
- Numpy数组是同质数组,即所有元素的数据类型必须相同
- Numpy数组的下标从0开始,最后一个元素的下标为数组长度减1
?
3.ndarray数组对象的创建
np.array(任何可被解释为Numpy数组的逻辑结构)
import numpy as np
a = np.array([1,6])
print(a)
# [1 2 3 4 5 6]
np.arange(起始值(0),终止值,步长(1))
import numpy as np
a = np.arange(0,1)
print(a)
# [0 1 2 3 4]
b = np.arange(0,10,2)
print(b)
# [0 2 4 6 8]
np.zeros(数组元素个数,dtype=‘类型‘)
import numpy as np
a = np.zeros(10)
print(a)
# [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
b = np.zeros(10,dtype=‘float32‘)
print(b)
# [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
np.ones(数组元素个数,dtype=‘类型‘)
import numpy as np
a = np.ones(10)
print(a)
# [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
b = np.ones((3,4),dtype=‘int32‘)#三页 三行 四列
print(b)
"""
[[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]]
"""
# 创建一个结构像b的数组 元素都为0
e = np.zeros_like(b)
print(e)
#创建5个五分之一的数组
print(np.ones(5)/5)
# [0.2 0.2 0.2 0.2 0.2]
?
?
ndarray对象属性的基本操作
数组的维度:np.ndarray.shape
import numpy as np
ary = np.array([1,6])
print(type(ary),ary,ary.shape)
# <class ‘numpy.ndarray‘> [1 2 3 4 5 6] (6,)
#二维数组
ary = np.array([
[1,4],[5,6,7,8]
])
print(type(ary),ary.shape)
#<class ‘numpy.ndarray‘>
[[1 2 3 4]
[5 6 7 8]] (2,4)
?
元素的类型:np.ndarray.dtype
import numpy as np
ary = np.array([1,ary.dtype)
#<class ‘numpy.ndarray‘> [1 2 3 4 5 6] int64
#转换ary元素的类型
b = ary.astype(float)
print(type(b),b,b.dtype)
#<class ‘numpy.ndarray‘> [1. 2. 3. 4. 5. 6.] float64
#转换ary元素的类型
c = ary.astype(‘str‘)
print(type(c),c,c.dtype)
#<class ‘numpy.ndarray‘> [‘1‘ ‘2‘ ‘3‘ ‘4‘ ‘5‘ ‘6‘] <U21
?
import numpy as np
# 维度
ary = np.arange(1,7)
print(ary,ary.shape)
#[1 2 3 4 5 6] (6,)
ary.shape = (2,3)
print(ary,ary.shape)
"""
[[1 2 3]
[4 5 6]] (2,3)
"""
# 元素的数据类型
print(ary,ary.dtype)
"""
[[1 2 3]
[4 5 6]] int64
"""
# ary.dtype = ‘int64‘
# print(ary,ary.dtype)
ary = ary.astype(‘float64‘)
print(ary,ary.dtype)
"""
[[1. 2. 3.]
[4. 5. 6.]] float64
"""
?
数组元素的个数:np.ndarray.size
import numpy as np
ary = np.array([
[1,8]
])
#观察维度,size,len的区别
print(ary.shape,ary.size,len(ary))
# (2,4) 8 2
数组元素索引(下标)
数组对象[...,页号,行号,列号]
下标从0开始,到数组len-1结束。
import numpy as np
a = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(a,a.shape)
"""
[[[1 2]
[3 4]]
[[5 6]
[7 8]]] (2,2) 两页 两行 两列
"""
print(a[0])
"""
[[1 2]
[3 4]]
"""
print(a[0][0])
#[1 2]
print(a[0][0][0])
#1
print(a[0,0])
#1
for i in range(a.shape[0]): #循环页
for j in range(a.shape[1]): #循环行
for k in range(a.shape[2]): #循环列
print(a[i,j,k])
"""
1
2
3
4
5
6
7
8
"""