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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

这样的结构我们和上面的对比一下是不是感觉很像?这个就是使用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 npb = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])print(b[0, 0])

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

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)

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

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

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

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

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

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

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

类比数据库的添加数据:

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

print(a['age'])

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

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

import numpy as nppersontype = 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']

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

ufunc  函数

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

A、四则运算:

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

import numpy as npx = 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 npx = 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 npx = np.array([1, 5, 7])y = np.array([4, 5, 6])print('逻辑and运算: ', np.all(x == y))  # 存在一假为假 1!=4,7!=6# 结果: Falseprint('逻辑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)

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

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

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

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

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

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

"灰太狼的数据课"

灰太狼的数据世界(一)相关推荐

  1. 灰太狼的数据世界(四)

    Scipy是 一个专门用于科学计算的库 它与Numpy有着密切的关系 Numpy是Scipy的基础 Scipy通过Numpy数据来进行科学计算 包含 统计 优化 整合 以及线性代数模块 傅里叶变换 信 ...

  2. 灰太狼的数据世界(二)

    上一篇数据文章中,我们介绍了Numpy里面的一些结构,那么这次我们来介绍一些更好玩的东西----Pandas.Pandas这个东西在数据的世界里用的还是很频繁的,主要是用起来会比较方便.相对Numpy ...

  3. 灰太狼的数据世界(三)

    上一期我们了解了Pandas里面Series数据结构,了解了如何创建修改,清理Series,也了解了一些统计函数,例如方差,标准差,峰度这些数学概念.那么今天我们就来了解Pandas里面的另一个数据结 ...

  4. 信息时代把数据当成了信息,互联网让数据真正发挥出价值,让人们相信人眼看不见的数据世界。...

    信息时代把数据当成了信息,互联网让数据真正发挥出价值,让人们相信人眼看不见的数据世界. 转载于:https://www.cnblogs.com/beingonline/p/7484113.html

  5. WordPress中缠结的自定义数据世界

    by Kamil Grzegorczyk 通过卡米尔(Kamil Grzegorczyk) WordPress中缠结的自定义数据世界 (The Tangled World of Custom Data ...

  6. 大数据世界要熟悉的5门语言

    大数据世界要熟悉的5门语言课程 Python   OpenStack Java       Hadoop Scala      Spark Shell       Linux SQL         ...

  7. 第二届大数据世界论坛 聚焦行业需求

    本文讲的是第二届大数据世界论坛 聚焦行业需求,随着现代技术的发展,企业产生的业务数据和客户数据早已汗牛充栋.如何有效的组织管理数据,提供商业解决方案,已经不是单纯的IT技术问题,而是与企业未来发展前途 ...

  8. 大数据世界中的新技术

    大数据世界正在以前所未有的方式发生着变化,特别是企业将数据整合到一起并将其应用到业务的情况下.而企业都面临的挑战是能够发现.识别并带来构建产品.提供服务和了解客户所需的数据.数据集成本身几十年来一直是 ...

  9. 十张图看懂未来大数据世界

    作者:薄云借智 来源:钱塘江大数据 随着互联网云时代的来临,大数据与云计算就像一个硬币的正反两面,势必会影响到社会生活的方方面面,改变我们现有的规则和秩序.伴随着大数据与云计算产业的不断发展,未来到底 ...

最新文章

  1. Bruck:一个Web界面布局原型设计框架\n
  2. STM32 资料整理贴(更新到10年1月)[转]
  3. .Toolkit 增补
  4. android功能网格布局,Visual Studio 开发安卓之布局-网格布局(GridLayout)
  5. 各种 Java Thread State 第一分析法则
  6. java access dbq 参数_Java怎么连接access数据库,要求讲解详细一些
  7. 4001.基于双向链表的双向冒泡排序法
  8. SVG 教程 (四)多边形,曲线,路径
  9. 实现同步请求_图解 Promise 实现原理(二)—— Promise 链式调用
  10. linux mysql 6.0.4 启动_CentOS 6.0之MySQL+FreeRadiu实现帐号统一认证
  11. SQL注入学习part06:(结合sqli-libs学习:51-61关)
  12. vs2013代码模板设置
  13. 面试遇到“一问三不知”的,真替他老东家捏把汗
  14. 浅析那些带着“主角光环“的泰坦尼克号幸存者
  15. php无限级回复页面如何嵌套,php无限级评论嵌套实现代码
  16. Paxos算法(一)—Basic Paxos
  17. Prompt for Extraction? PAIE:Prompting Arguement Interaction for Event Argument Extraction
  18. 计算机查找是什么意思,计算机的字长是什么意思?怎么查找一台计算机上的字长啊?...
  19. shor 量子算法,合数分解
  20. Linux 字符设备

热门文章

  1. 被反垄断遗忘的行业:出行巨头正在加速扩张
  2. 惯性导航系统学习笔记——第一讲
  3. 微信小程序云开发Collection.watch如何关闭
  4. MYSQL免登录改密码
  5. 计算机公开课课前互动小游戏,课前三分钟小游戏 公开课课前精彩互动
  6. python echarts 多图联动,创建echart多个联动的示例代码
  7. 一步一步教你将任何普通的路由器变为WiFi广告路由器
  8. 12月2日-3日 | 数字化安全技术大会暨Ansys medini analyze 2021用户大会
  9. 松下PLC控制松下伺服电机(上位机发送控制命令)
  10. xm-select 二级联动 layui