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
相关文章
|
1天前
|
供应链 数据挖掘 Python
后劲真大,我愿称之为学习python的“圣经”
很多小伙伴都在学习Python,但是爱看书的找不到适合自己的,这本书可以完美的解决你的问题,还能帮助到很多需要处理数据,做Excel自动方面的。
|
4天前
|
SQL 小程序 数据库连接
【Python学习】Python基础必背的内容
【Python学习】Python基础必背的内容
15 1
|
4天前
|
数据可视化 数据挖掘 知识图谱
精选:15款顶尖Python知识图谱(关系网络)绘制工具,数据分析的强力助手
这里有15款免费工具推荐:NetworkX(Python基础),Graph-tool(C++速度),Graphviz(可视化库),ipycytoscape(Jupyter集成),ipydagred3,ipySigma(NetworkX + Web),Netwulf(交互式),nxviz(Matplotlib绑定),Py3plex(复杂网络分析),Py4cytoscape(Python+Cytoscape),pydot(Graphviz接口),PyGraphistry(GPU加速),python-igraph,pyvis(交互式图形),SNAP(大规模网络分析)。绘制和理解网络图从未如此简单!
13 0
|
5天前
|
机器学习/深度学习 自然语言处理 数据挖掘
使用Python和大模型进行数据分析和文本生成
Python语言以其简洁和强大的特性,成为了数据科学、机器学习和人工智能开发的首选语言之一。随着大模型(Large Language Models, LLMs)如GPT-4的崛起,我们能够利用这些模型实现诸多复杂任务,从文本生成到智能对话、数据分析等等。在这篇文章中,我将介绍如何用Python连接和使用大模型,并通过示例展示如何在实际项目中应用这些技术。
|
8天前
|
数据采集 机器学习/深度学习 数据可视化
利用Python和Pandas库构建高效的数据分析流程
在数据驱动的时代,数据分析已成为企业决策的关键环节。本文介绍如何利用Python编程语言及其强大的数据分析库Pandas,构建一套高效且可扩展的数据分析流程。与常规的数据分析流程不同,本文不仅涵盖数据加载、清洗、转换等基础步骤,还强调数据可视化、模型探索与评估等高级分析技巧,并通过实际案例展示如何在Python中实现这些步骤,为数据分析师提供一套完整的数据分析解决方案。
|
9天前
|
机器学习/深度学习 数据采集 数据可视化
使用Python进行数据分析涉及数据收集
【6月更文挑战第21天】使用Python进行数据分析涉及数据收集(如数据库、文件、API),数据清洗(处理缺失值、异常值和重复项),数据探索(统计摘要、可视化和相关性分析),特征工程(创建新特征和编码),模型构建(选择算法、训练与调整),模型评估(计算指标、可视化效果),结果解释(报告和可视化),以及部署与维护。此过程因项目需求而异,可能需迭代。常用库有`pandas`、`requests`、`BeautifulSoup`、`Matplotlib`等。
18 1
|
2天前
|
数据挖掘 Python
python数据分析常用图大集合
python数据分析常用图大集合
|
4天前
|
调度 Python
Python多线程学习优质方法分享
Python多线程学习优质方法分享
|
6天前
|
Python
Python深入学习教程
Python深入学习教程
|
6天前
|
JavaScript PHP 网络架构
Python学习技巧及方法总结
Python学习技巧及方法总结