文章目录
数据分析
一、Numpy
https://blog.csdn.net/daidadeguaiguai/article/details/105922947
1.什么是Numpy?
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
**总之,NumPy 是一个运行速度非常快的数学库,主要用于数组计算,**主要包含:
一个强大的N维数组对象 ndarray
广播功能函数
整合 C/C++/Fortran 代码的工具
线性代数、傅里叶变换、随机数生成等功能
2.Numpy的优势
numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算。
Numpy底层使用C语言编写,数组中直接存储对象,而不是存储对象指针,所以其运算效率远高于纯Python代码。
了解更多关于Numpy的 内容:https://www.runoob.com/numpy/numpy-tutorial.html
3.Numpy安装
pip install -i https://pypi.douban.com/simple numpy
4.Numpy创建数组
# 导入numppy库, 对numpy重命名为np。
import numpy as np
# 1). 创建数组: a, b, c创建的数组相同, 任选一种;
# 方法一: 直接将数组/列表传入array方法中, 将数据类型转换为ndarray.
a = np.array([1, 2, 3, 4, 5])
# array方法传入的值可以是range对象
# 方法二: 将range对象传入array方法中, dtype:数据类型dtype=np.float 将元素转换为float
b = np.array(range(1, 6))
print(b)
li = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11.8, 12]
]
# 转换数据类型时可以通过dtype对数组的所有对象转换类型. eg: dtype=np.int将元素转成int
li_ndarray = np.array(li, dtype=np.int)
print(li_ndarray)
# 方法三: 直接生成指定的数值
c = np.arange(1, 6)
# arange和range的基本语法和参数一致。 arange的优点: 可以生成小数区间.
d = np.arange(2.2, 13.3, 0.2)
print(a, b, c)
# # # 2). 查看numpy创建的数组类型
print(type(a))
print(type(b))
print(type(c))
# 3). 查看数组存储的数据类型, 常见的数据类型还有哪些?
print(a.dtype) # 为什么是int64? 因为硬件架构是64位;
# # 4). 制定创建的数组的数据类型
d = np.array([1.9, 0, 1.3, 0], dtype=np.float)
print(d, d.dtype)
# 5). 修改数组的数据类型
e = d.astype('int64') # 里面可以是数据类型, 也可以是数据代码;int64---i1
print(e, e.dtype)
# 6). 修改浮点数的小数点位数
# 随机创建一个三行四列的数组;
f = np.random.random((3, 4))
print(f)
# 修改浮点值的小数位数为3位
g = np.round(f, 3)
print(g)
5.Numpy的索引和片
注意:只有一个参数时,默认获取的是行,有两个参数时,第一个参数代表行,第二个参数代表列。行和列的索引是从0开始的。
import numpy as np
#1)生成测试数据
a = np.arange(12).reshape((3, 4))
print(a)
# *****************取单行或者单列*********************
# 取第2行;
print(a[1])
# 取第3列;
print(a[:, 2])
# 获取第2行3列的数据
print(a[1, 2])
# *****************取连续行或者列*********************
# 取第2行和第3行;
print(a[1:3])
# 取第3列和第4列
print(a[:, 2:4])
# 行: 1和2 列: 2
print(a[0:2, 1:2])
# *****************取不连续的行或者列*********************
# 行: 1和3 列: all 获取第一行和第三行的所有元素
print(a[[0, 2], :])
# 行: all 列: 1, 4
print(a[:, [0, 3]])
# 行: 1 , 3 列: 1 4 获取第一行第一列的元素, 和第三行第4列的元素
print("*"*10)
print(a[[0, 2], [0, 3]])
6.案例一(Numpy学生身高体重统计分析)
需求1:
获取所有男生的身高, 求平均值;获取所有女生的身高, 求平均值;并绘制柱状图显示
1). 读取文件中的Sex和Height
2). 根据布尔索引判断姓名, 获取男性的身高或者女性的身高 data['gender'] == 'M'
3). 求平均值mean函数
需求2:
获取所有男生的体重, 求平均值;获取所有女生的体重, 求平均值;并绘制柱状图显示
import numpy as np
def get_avg_height():
fname = "doc/eg6-a-student-data.txt"
# 定义读取列的数据类型
dtype = np.dtype([('gender', '|S1'), ('height', 'f2')])
# 读取文件的第2列和第3列, 前9行忽略;
data = np.loadtxt(fname=fname, dtype=dtype, skiprows=9,
usecols=(1, 3))
print(data)
print