灰太狼的数据世界(一)

简介: 灰太狼的数据世界(一)

大家好,从今天开始,小编讲带着大家一起进入数据的世界。


数据的世界是新奇的,美妙的。但是如果你对它不感兴趣,那它就是一个枯燥无趣的东西了。


------灰太狼(我被狗咬了)



那小编今天将要带着大家一起进入一个有趣的数据世界。


我们在数据世界里一般分为以下几个部分:


数据的获取(别人给定的,获取的)

数据的处理(数据的清洗,集成等)

数据的挖掘(创建模型,优化调整模型)

数据的可视化(展示数据的状态及分布)



在我们了解数据之前我们需要有一定的python基础,知道如何使用python,如果你对python还不是很熟悉,那么你也不用担心,小编在公众号里面已经为你准备好了所有python基础的课程,公众号最左边的菜单栏里面,会有小编总结的比较全面的python的基础教程,后续将会制作视频教程,欢迎大家前来学习和指点哦!



在python的世界里,目前已经存在的比较全面的数据结构有列表,字典,元组,序列,字符串等结构,但是,对于需要处理复杂数据的我们来说是远远不够的。这时候我们需要一些更专业的数据结构来为我们解决这一烦恼。


python里面提供了numpy和pandas这些十分有用的第三方库。

为什么要用NumPy数组结构而不是Python本身的列表list?

这是因为列表list的元素在系统内存中是分散存储的,而NumPy数组存储在一个均匀连续的内存块中。这样数组计算遍历所有的元素,不像列表list还需要对内存地址进行查找,从而节省了计算资源。


那说了这么多,我们就来看看numpy里面有什么是需要我们来学习的吧。


在numpy里面是有一个叫ndarray这样一个神奇的东西的,这个东西的本质其实就是一个矩阵(其实就是一个嵌套列表),如果你上过高中,那么对矩阵就会有一定的了解,一般我们高中学的就是2*2的矩阵。(python里面的简单的list对我们来说就是1*n阶矩阵啦)

640.png


如上图,这样一个东西就是一个2*2的矩阵(横着两个,竖着两个),那这样的一个东西我们使用ndarray如何表示呢?

创建一个 ndarray 只需调用 NumPy 的 array 函数即可:

np.array(object,
         dtype=None,
         copy=True,
         order=None,
         subok=False,
         ndmin=0)


快速创建一个2*2的矩阵可以直接传入一个嵌套列表即可:

import numpy as np
a = np.array([[1, 2], [2, 4]])
print(a)

640.png

这样的结构我们和上面的对比一下是不是感觉很像?这个就是使用ndarray来表示二维数组,当然我们也可以造一个3*3的数组:

b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(b)


对于矩阵里面的数值我们如何去获取或者是修改呢?


回顾一下python的list:

我们在取值的时候使用的是索引取值的办法,索引是从零开始的。那在ndarray里面也是同样的一个道理,使用索引进行取值:

比如说我们现在想去取第一个值,横着数他是第一个,那么索引为0,竖着数也是第一个,索引还是0,所以【0,0】就可以获取第一个值:

import numpy as np
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(b[0, 0])

640.png

除此之外,我们还可以指定快速创建连续的矩阵:

np.arange(1,11,2)

这个就和python里面的range函数有点相似了。给定初始值,结束值和步长来此创建一维矩阵(一维数组),

当然除此之外我们还有相似的函数,linspace,也和arange是一样类似的。


下面我们再来看看ndarray的数据类型有哪些吧?

ndarray作为一个存放数据的仓库,那么存放的数据也有很多种类型的,我们通常使用到的类型如下:

名称 描述
bool_ 布尔型数据类型(True 或者 False)
int_ 默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc 与 C 的 int 类型一样,一般是 int32 或 int 64
intp 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8 字节(-128 to 127)
int16 整数(-32768 to 32767)
int32 整数(-2147483648 to 2147483647)
int64 整数(-9223372036854775808 to 9223372036854775807)
uint8 无符号整数(0 to 255)
uint16 无符号整数(0 to 65535)
uint32 无符号整数(0 to 4294967295)
uint64 无符号整数(0 to 18446744073709551615)
float_ float64 类型的简写
float16 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_ complex128 类型的简写,即 128 位复数
complex64 复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128 复数,表示双 64 位浮点数(实数部分和虚数部分)


我们通常使用dtype去构建数据类型对象。


import numpy as np
# 使用标量类型
dt = np.dtype(np.int32)
print(dt)

640.png

值得一说的是,int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替:

import numpy as np
dt = np.dtype('i4')
print(dt)

640.png


那现在我们可以使用dtype创建字段以及对应的类型了

import numpy as np
dt = np.dtype([('age', np.int32)])
print(dt)

640.png

这就相当于创建数据库创建表的时候需要提供字段名,以及该字段所对应的数据类型:

640.png


下面就可以为这些字段添加值了:

import numpy as np
dt = np.dtype([('age', np.int32)])
# print(dt)
a = np.array([(10,),(20,),(30,)], dtype=dt)
print(a)

640.png


类比数据库的添加数据:

640.png


我们可以使用age这个索引来取出age里面的所有值。

print(a['age'])


下面我们来创建一个数据结构:

学生名字,年龄,语文分数,数学分数,英语分数

import numpy as np
persontype = np.dtype({
    'names': ['name', 'age', 'C', 'M', 'E'],
    'formats': ['S32', 'i', 'i', 'i', 'f']})
students = np.array([("AMY", 22, 88, 77, 66),
                    ("TONY", 24, 85, 96, 88.5),
                    ("JOHN", 25, 85, 100, 96.5),
                    ("FRANK", 26, 65, 85, 100)],
                   dtype=persontype)

这边创建name数据类型的时候S32代表字符串,i是整型数据,f是浮点型数据。

下面附一张表做参考:

字符 对应类型
b 布尔型
i (有符号) 整型
u 无符号整型 integer
f 浮点型
c 复数浮点型
m timedelta(时间间隔)
M datetime(日期时间)
O (Python) 对象
S, a (byte-)字符串
U Unicode
V 原始数据 (void)


我们可以获取所有的语文分数,或者是所有的数学分数:

chineses = students[:]['chinese']
maths = students[:]['math']

640.png


关于数据的运算,我们有强大的ufunc函数:


ufunc  函数

   全称通用函数(universal function),是一种能够对数组中所有元素进行操作的函数。以 Numpy 数组作为输出,因此不需要对数组每个元素都操作,比 math 库中的函数操作效率更高。

A、四则运算:

加(+)、减(-)、乘(*)、除(/)、幂(**)。数组间的四则运算表示对每个数组中的元素分别进行四则运算,所以形状必须相同。

import numpy as np
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
print(x + y)
# 结果: [5 7 9]
print(x - y)
# 结果: [-3 -3 -3]
print(x * y)
# 结果: [4 10 18]
print(x / y)
# 结果: [0.25  0.4   0.5 ]
print(x ** y)
# 结果: [1  32 729


numpy还提供了自带的算术运算:

x = np.array([1, 5, 7])
y = np.array([4, 5, 6])
s = np.add(x, y)
# 求和 [ 5 10 13]
s2 = np.subtract(x, y)
# 求差 [-3  0  1]
s3 = np.multiply(x, y)
# 求积 [ 4 25 42]
s4 = np.divide(x, y)
# 求商 [0.25       1.         1.16666667]


B、比较运算:

>、<、==、>=、<=、!=。比较运算返回的结果是一个布尔数组,每个元素为每个数组对应元素的比较结果。

import numpy as np
x = np.array([1, 5, 7])
y = np.array([4, 5, 6])
print(x < y)
# 结果: [True False False]
print(x > y)
# 结果: [False False  True]
print(x == y)
# 结果: [False  True False]
print(x <= y)
# 结果: [True  True False]
print(x >= y)
# 结果: [False  True  True]
print(x != y)
# 结果: [True False  True]


C、逻辑运算:

np.any 函数表示逻辑“or”,np.all 函数表示逻辑“and”。运算结果返回布尔值。

import numpy as np
x = np.array([1, 5, 7])
y = np.array([4, 5, 6])
print('逻辑and运算: ', np.all(x == y))  # 存在一假为假 1!=4,7!=6
# 结果: False
print('逻辑or运算: ', np.any(x == y))  # 存在一真为真 5==5
# 结果: True


统计函数

我们使用numpy最多的不过于统计函数了,这将是我们在numpy里面最常用的函数:

axis说明:axis=0沿着x轴(横着),axis沿着y轴(竖着)


np.mean(x [, axis]): 

所有元素的平均值,参数是 number 或 ndarray


np.sum(x [, axis]): 

所有元素的和,参数是 number 或 ndarray


np.max(x [, axis]):

所有元素的最大值,参数是 number 或 ndarray


np.min(x [, axis]): 

所有元素的最小值,参数是 number 或 ndarray


np.std(x [, axis]): 

所有元素的标准差,参数是 number 或 ndarray


np.var(x [, axis]): 

所有元素的方差,参数是 number 或 ndarray


np.argmax(x [, axis]): 

最大值的下标索引值,参数是 number 或 ndarray


np.argmin(x [, axis]): 

最小值的下标索引值,参数是 number 或 ndarray


np.cumsum(x [, axis]): 

返回一个同纬度数组,每个元素都是之前所有元素的 累加和,参数是 number 或 ndarray


np.cumprod(x [, axis]): 

返回一个同纬度数组,每个元素都是之前所有元素的 累乘积,参数是 number 或 ndarray



numpy排序

排序是算法中使用频率最高的一种,在我们进行数据分析的时候经常会使用,在numpy里面就是简单的一句话:


x = np.array([1, 8, 3, 5, 7])
SORT = np.sort(x)
print(SORT)

640.png

在排序的时候,我们可以指定不同的排序方法:

def sort(a, axis=-1, kind='quicksort', order=None):


640.png

默认是快速排序,当然你也可以指定合并排序和堆排序。


我们使用numpy一些主要的方法以及跟你以上基本都覆盖到了,其实本质也就是对列表的一些操作,只不过在numpy里面的列表可能更加的多维度。

如果说本节课有什么难点的话,那应该是统计函数那一块了,如何理解方差,标准差,中位数等这些数学属性,还是需要翻开数学课本好好理解一下的,毕竟,数据分析的基础其实就是数学啊!


那关于numpy的内容就到这里了,下次我们来介绍另一种数据结构pandas的用法以及注意事项吧!


相关文章
|
3天前
|
人工智能 自然语言处理 Shell
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
仅用3分钟,百炼调用满血版Deepseek-r1 API,享受百万免费Token。阿里云提供零门槛、快速部署的解决方案,支持云控制台和Cloud Shell两种方式,操作简便。Deepseek-r1满血版在推理能力上表现出色,尤其擅长数学、代码和自然语言处理任务,使用过程中无卡顿,体验丝滑。结合Chatbox工具,用户可轻松掌控模型,提升工作效率。阿里云大模型服务平台百炼不仅速度快,还确保数据安全,值得信赖。
157353 24
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
|
5天前
|
人工智能 API 网络安全
用DeepSeek,就在阿里云!四种方式助您快速使用 DeepSeek-R1 满血版!更有内部实战指导!
DeepSeek自发布以来,凭借卓越的技术性能和开源策略迅速吸引了全球关注。DeepSeek-R1作为系列中的佼佼者,在多个基准测试中超越现有顶尖模型,展现了强大的推理能力。然而,由于其爆火及受到黑客攻击,官网使用受限,影响用户体验。为解决这一问题,阿里云提供了多种解决方案。
16984 37
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
5天前
|
并行计算 PyTorch 算法框架/工具
本地部署DeepSeek模型
要在本地部署DeepSeek模型,需准备Linux(推荐Ubuntu 20.04+)或兼容的Windows/macOS环境,配备NVIDIA GPU(建议RTX 3060+)。安装Python 3.8+、PyTorch/TensorFlow等依赖,并通过官方渠道下载模型文件。配置模型后,编写推理脚本进行测试,可选使用FastAPI服务化部署或Docker容器化。注意资源监控和许可协议。
1310 8
|
13天前
|
人工智能 搜索推荐 Docker
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
DeepSeek R1 + LobeChat + Ollama:快速本地部署模型,创建个性化 AI 助手
3416 117
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
|
8天前
|
人工智能 自然语言处理 API
DeepSeek全尺寸模型上线阿里云百炼!
阿里云百炼平台近日上线了DeepSeek-V3、DeepSeek-R1及其蒸馏版本等六款全尺寸AI模型,参数量达671B,提供高达100万免费tokens。这些模型在数学、代码、自然语言推理等任务上表现出色,支持灵活调用和经济高效的解决方案,助力开发者和企业加速创新与数字化转型。示例代码展示了如何通过API使用DeepSeek-R1模型进行推理,用户可轻松获取思考过程和最终答案。
|
5天前
|
人工智能 自然语言处理 程序员
如何在通义灵码里用上DeepSeek-V3 和 DeepSeek-R1 满血版671B模型?
除了 AI 程序员的重磅上线外,近期通义灵码能力再升级全新上线模型选择功能,目前已经支持 Qwen2.5、DeepSeek-V3 和 R1系列模型,用户可以在 VSCode 和 JetBrains 里搜索并下载最新通义灵码插件,在输入框里选择模型,即可轻松切换模型。
934 14
|
12天前
|
API 开发工具 Python
阿里云PAI部署DeepSeek及调用
本文介绍如何在阿里云PAI EAS上部署DeepSeek模型,涵盖7B模型的部署、SDK和API调用。7B模型只需一张A10显卡,部署时间约10分钟。文章详细展示了模型信息查看、在线调试及通过OpenAI SDK和Python Requests进行调用的步骤,并附有测试结果和参考文档链接。
1938 9
阿里云PAI部署DeepSeek及调用
|
9天前
|
人工智能 数据可视化 Linux
【保姆级教程】3步搞定DeepSeek本地部署
DeepSeek在2025年春节期间突然爆火出圈。在目前DeepSeek的网站中,极不稳定,总是服务器繁忙,这时候本地部署就可以有效规避问题。本文以最浅显易懂的方式带读者一起完成DeepSeek-r1大模型的本地部署。
|
12天前
|
缓存 自然语言处理 安全
快速调用 Deepseek API!【超详细教程】
Deepseek 强大的功能,在本教程中,将指导您如何获取 DeepSeek API 密钥,并演示如何使用该密钥调用 DeepSeek API 以进行调试。

热门文章

最新文章