python数据分析-NumPy学习(上)

简介: python数据分析-NumPy学习

一、 数据分析环境搭建


1. anaconda环境搭建


Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。Conda 是为 Python 程序创建的,适用于 Linux,OS X 和Windows,也可以打包和分发其他软件 。最流行的 Python 环境管理工具。


conda官网上下载安装,安装过程不停下一步就行。打开conda,调用里面的jupyter功能。

可以实现在线编写python,并进行可视化分析。

1670741238102.jpg

1670741246368.jpg


2.pycharm中调用anaconda中的库


安装好conda之后,之前使用PYcharm 去 pip install matpllotlip的包时候,始终出现错误,方法的根本出发点在于,Pycharm本身缺少numpy和matplotlib这些库,而另一个Python的开发环境Anaconda则自带了300多种常见的库。所以想在pycharm中使用Anaconda自带的库。实现这一“借用”的则是Pycharm中对 “Project Interpreter”的设置,该设置是设定Pychar使用哪一个python编译器。那么只要将该interpreter设置为Anaconda下的python.exe,就可以将Anaconda下众多的库导入到Pycharm中。(这是一种借用conda的方法,但让pycharm自己去调用库的问题始终没有解决)

1670741267252.jpg

用pycharm调用conda的库并使用


3.建议的学习顺序


NumPy是使用Python进行科学计算的基础包,常用于数据分析。NumPy通常与SciPy和Matplotlib一起使用,广泛用于替代matlab,有助于我们学习数据科学或机器学习。

Matplotlib是用于数据可视化的最流行的Python包之一,它是一个跨平台库,用于根据数组中的数据制作2D和简单3D图。

Pandas是一款开放源码的BSD许可的Python库,为Python编程语言提供了高性能,易于使用的数据结构和数据分析工具。Pandas用于广泛的领域,包括金融,经济,统计,分析等学术和商业领域。

1670741285547.jpg


二、NumPy学习


Numpy的核心:多维数组


代码简洁:减少Python代码中的循环。

底层实现:厚内核©+薄接口(Python),保证性能。

学习numpy,参考视频是numpy学习视频

1670741308000.jpg

1.学习预备概念


a.相对路径和绝对路径

1670741328957.jpg

怎么理解补充一下

附上一个链接


b.空值(nan )和无穷(inf)

1670741337206.jpg

1670741346524.jpg

c.Numpy副本和视图


## 列表
list01 =[1,2,3,4,5,6]
list02 =list01#两个地址是一样的,都是指向同一个内存地址
print(list01,list02)
print(id(list01))
print(id(list02))
# copy()函数,浅复制
list02=list01.copy()
print(id(list01))
print(id(list02))
## 深复制
#导入模块
import copy
list03 = [1,2,3,[4,5,6]]
print(list03)
list03
list04=copy.deepcopy(list03)
list04
#修改list01第三个元素中的第0个数值
list03[3][0]=100
list03
list04

1670741376822.jpg

1670741385014.jpg

2.Numpy的数据类型


a.数据类型


numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型。下表列举了常用 NumPy 基本类型。

名称 描述 字符码
np.bool 用一个字节存储的布尔类型(True或False) ‘b’
np.int8 一个字节大小,-128 至 127 (一个字节) ‘i’
np.int16 整数,-32768 至 32767 (2个字节) 'i2‘
np.int32 整数,(4个字节) ‘i4’
np.int64 整数,(8个字节) ‘i8’
np.uint8 无符号整数,0 至 255 ‘u’
np.uint16 无符号整数,0 至 65535 ‘u2’
np.uint32 无符号整数 ‘u4’
np.uint64 无符号整数 ‘u8’
np.float16 半精度浮点数:16位,正负号1位,指数5位,精度10位 ‘f2’
np.float32 单精度浮点数:32位,正负号1位,指数8位,精度23位 ‘f4’
np.float64 双精度浮点数:64位,正负号1位,指数11位,精度52位 ‘f8’
np.complex64 复数,分别用两个32位浮点数表示实部和虚部 ‘c8’
np.complex128 复数,分别用两个64位浮点数表示实部和虚部 ‘c16’
np.object_ python对象 ‘O’
np.string_ 字符串 ‘S’
np.unicode_ unicode类型 ‘U’


3.数组的定义和创建


a. ndarray数组定义

1670741505153.jpg

用np.ndarray类的对象表示n维数组

import numpy as np
ary = np.array([1, 2, 3, 4, 5, 6])
print(type(ary),ary)
#<class 'numpy.ndarray'> [1 2 3 4 5 6]


b. ndarray数组创建


1670741522479.jpg

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
名称 描述
object 数组或嵌套的数列
dtype 数组元素的数据类型,可选
copy 对象是否需要复制,可选
order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度


import numpy as np # 用np代替numpy,让代码更简洁
a = [1,2,3,4] # 创建列表a
b = np.array([1,2,3,4]) # 从列表a创建数组b,array就是数组的意思
print(a)
print(type(a)) # 打印a的类型
print(b)
print(type(b)) # 打印b的类型
#观察输出值的区别,列表和数组的区别是什么?
#[1, 2, 3, 4]
#<class 'list'>
#[1 2 3 4]
#<class 'numpy.ndarray'>


创建数组的几种方式:


创建一维数组和二维数组

# 创建一维数组
   c = np.array([5,6,7,8])
   print(c)
   # 创建二维数组
   d = np.array([[1,2],[3,4],[5,6]])
   print(d)
   print(type(d))
   #[5 6 7 8]
#[[1 2]
# [3 4]
 #[5 6]]


np.arange

np.arange(起始值(0),终止值,步长(1))

numpy.arange(start, stop, step, dtype)
   # 1个参数:参数值为终止值,起始值取默认值0,步长为1,左闭右开
   x = np.arange(5)
   print(x)
   # 2个参数:参数值为起始值,终止值,步长默认为1 ,左闭右开
   y = np.arange(5,10)
   print(y)
   # 3个参数:参数值为起始值,终止值,步长为2 ,左闭右开
   z = np.arange(10,20,2)
   print(z)
#[0 1 2 3 4]
#[5 6 7 8 9]
#[10 12 14 16 18]


np.zeros

np.zeros(数组元素个数, dtype=‘类型’)

numpy.zeros(shape, dtype = float, order = 'C')
   e = np.zeros(10)
   print(e)
#[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]


np.ones

np.ones(数组元素个数, dtype=‘类型’)

numpy.ones(shape, dtype = None, order = 'C')
   f = np.ones(10)
   print(f)
#[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

np.random

np.random中的函数来创建随机一维数组

np.random.randn()
创建一个一维数组,其中包含服从标准正态分布(均值为0、标准差为1的分布)的n个随机数
np.random.rand()
生成的一维数组中包含的就是0~1之间的n个随机数
   # 创建一个包含5个随机数的正态分布一维数组
   g = np.random.randn(5)
   print(g)
   # 创建一个范围在0~1之间的含有5个随机数的一维数组
   h = np.random.rand(5)
   print(h)
#[ 0.68384377  0.278969    0.31402352 -0.19564941 -0.07348227]
#[0.59140982 0.77833598 0.33633508 0.46787355 0.34251799]


  # 其他函数

zeros_like, ones_like, empty, empty_like, linspace, numpy.random.Generator.rand, numpy.random.Generator.randn, fromfunction, fromfile,set_printoptions


numpy.empty

numpy.empty方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组

numpy.empty(shape, dtype = float, order = 'C')
   import numpy as np 
   x = np.empty((3,2), dtype = int) 
   print (x)
#[[ 869667760        589]
# [ 253155624 -618297307]
# [ 869667824        589]]


numpy.linspace

numpy.linspace函数用于创建一个一维数组,数组是一个等差数列构成的

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数 描述
start 序列的起始值
stop 序列的终止值,如果endpointtrue,该值包含于数列中
num 要生成的等步长的样本数量,默认为50
endpoint 该值为 true 时,数列中包含stop值,反之不包含,默认是True。
retstep 如果为 True 时,生成的数组中会显示间距,反之不显示。
dtype ndarray 的数据类型
import numpy as np
   a = np.linspace(1,10,10)
   print(a)
# [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]


创建二维数组

创建一维数组的np.arange()函数和reshape()函数来创建二维数组

# 创建一个3行4列的二维数组
      i = np.arange(12).reshape(3,4)
      print(i)
#[[ 0  1  2  3]
# [ 4  5  6  7]
 #[ 8  9 10 11]]


np.random.randint()函数用于创建随机整数数组

j = np.random.randint(0,10,(4,4))
      print(j)
      # 括号里第1个参数0为起始数,第2个参数10为终止数,第3个参数(4,4)则表示创建一个4行4列的二维数组。
 #[[6 5 7 2]
 #[9 3 8 7]
 #[1 1 4 3]
 #[5 6 6 7]]


从已有的数组创建数组

numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个

numpy.asarray(a, dtype = None, order = None)
参数 描述
a 任意形式的输入参数,可以是列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组
dtype 数据类型,可选
order 可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
import numpy as np 
   x =  [1,2,3] 
   a = np.asarray(x)  
print (a)
#[1 2 3]


4.数组的属性


ndarray.shape - 维度,数组的尺寸。这是一个整数元组,指示每个维度中数组的大小。对于具有n行和m列的矩阵(n,m)

ndarray.dtype - 描述数组中元素类型的对象。

ndarray.size - 数组元素的总数。等于shape的乘积。

ndarray.ndim - 数组的轴数(尺寸)。len(shape)(长度)。

ndarray.itemsize - 数组中每个元素的大小(以字节为单位)。

ndarray.nbytes - 总字节数 = size x itemsize。

ndarray.real - 复数数组的实部数组。

ndarray.imag - 复数数组的虚部数组。

ndarray.T - 数组对象的转置视图。

ndarray.flat - 扁平迭代器。


5.数组的维数


数组的轴数(尺寸)


a.什么是轴?


在numpy中可以理解为方向,使用0,1,2数字表示


对于1维数组,只有一个0轴;


对于2维数组(shape(2,2))有0轴和1轴;


对于3维数组(shape(2,2,3))有0,1,2轴;


b.为什么要学习轴?


有了轴的概念后,我们计算会更加方便,比如计算一个2维数组的平均值,必须指定是计算哪个方向上面的数字的平均值。

1670741800209.jpg

1670741807203.jpg

import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(np.sum(a, axis=0))
print(np.sum(a, axis=1))
print(np.sum(a))  # 计算所有的值的和
# 三维的数据
a = np.arange(27).reshape((3, 3, 3))
print(a)
b = np.sum(a, axis=0)
print(b)
c = np.sum(a, axis=2)
print(c)
’‘’’‘’‘’’‘’‘’‘’’‘编译结果如下:
[5 7 9]
[ 6 15]
21
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]
 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]
 [[18 19 20]
  [21 22 23]
  [24 25 26]]]
[[27 30 33]
 [36 39 42]
 [45 48 51]]
[[ 3 12 21]
 [30 39 48]
 [57 66 75]]


总结: 在计算的时候可以想象成是每一个坐标轴,分别计算这个轴上面的每一个刻度上的值,或者在二维数组中记住0表示行1表示行列。

import numpy as np
ary = np.array([
    [1,2,3,4],
    [5,6,7,8]
])
print(ary.ndim)
#2


c.数组维度有关的属性


ndarray.shape

数组的维度。这是一个整数元组,指示每个维度中数组的大小。对于具有n行和m列的矩阵,shape将为(n,m)。shape因此,元组的长度 是轴数ndim。

import numpy as np
ary = np.array([1, 2, 3, 4, 5, 6])
print(type(ary), ary, ary.shape,ary.dtype)
#二维数组
ary = np.array([
    [1,2,3,4],
    [5,6,7,8]
])
print(type(ary), ary, ary.shape)
#<class 'numpy.ndarray'> [1 2 3 4 5 6] (6,) int32
#<class 'numpy.ndarray'> [[1 2 3 4],[5 6 7 8]] (2, 4)


ndarray.size

数组元素的个数。这等于的shape的乘积。

import numpy as np
ary = np.array([
    [1,2,3,4],
    [5,6,7,8]
])
# 观察shape,size,len的区别
print(ary.shape, ary.size, len(ary))
(2, 4) 8 2
相关文章
|
11天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
2天前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
13天前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
17天前
|
存储 程序员 Python
Python学习的自我理解和想法(2)
今日学习Python第二天,重点掌握字符串操作。内容涵盖字符串介绍、切片、长度统计、子串计数、大小写转换及查找位置等。通过B站黑马程序员课程跟随老师实践,非原创代码,旨在巩固基础知识与技能。
|
16天前
|
程序员 Python
Python学习的自我理解和想法(3)
这是学习Python第三天的内容总结,主要围绕字符串操作展开,包括字符串的提取、分割、合并、替换、判断、编码及格式化输出等,通过B站黑马程序员课程跟随老师实践,非原创代码。
|
13天前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。
|
11天前
|
存储 安全 索引
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
|
13天前
|
存储 索引 Python
Python学习的自我理解和想法(4)
今天是学习Python的第四天,主要学习了列表。列表是一种可变序列类型,可以存储任意类型的元素,支持索引和切片操作,并且有丰富的内置方法。主要内容包括列表的入门、关键要点、遍历、合并、判断元素是否存在、切片、添加和删除元素等。通过这些知识点,可以更好地理解和应用列表这一强大的数据结构。
|
13天前
|
索引 Python
Python学习的自我理解和想法(5)
这是我在B站千锋教育学习Python的第五天笔记,主要内容包括列表的操作,如排序(`sort()`、``sorted()``)、翻转(`reverse()`)、获取长度(`len()`)、最大最小值(`max()`、``min()``)、索引(`index()`)、嵌套列表和列表生成(`range`、列表生成式)。通过这些操作,可以更高效地处理数据。希望对大家有所帮助!
|
19天前
|
安全 程序员 Python
Python学习的自我理解和想法(1)
本篇博客记录了作者跟随B站“黑马程序员”课程学习Python的第一天心得,涵盖了`print()`、`input()`、`if...else`语句、三目运算符以及`for`和`while`循环的基础知识。通过实际编写代码,作者逐步理解并掌握了这些基本概念,为后续深入学习打下了良好基础。文中还特别强调了循环语句的重要性及其应用技巧。