灰太狼的数据世界(一)
大家好,从今天开始,小编讲带着大家一起进入数据的世界。
数据的世界是新奇的,美妙的。但是如果你对它不感兴趣,那它就是一个枯燥无趣的东西了。
------灰太狼(我被狗咬了)
那小编今天将要带着大家一起进入一个有趣的数据世界。
我们在数据世界里一般分为以下几个部分:
数据的获取(别人给定的,爬虫获取的)
数据的处理(数据的清洗,集成等)
数据的挖掘(创建模型,优化调整模型)
数据的可视化(展示数据的状态及分布)
在我们了解数据之前我们需要有一定的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的用法以及注意事项吧!
"灰太狼的数据课"
灰太狼的数据世界(一)相关推荐
- 灰太狼的数据世界(四)
Scipy是 一个专门用于科学计算的库 它与Numpy有着密切的关系 Numpy是Scipy的基础 Scipy通过Numpy数据来进行科学计算 包含 统计 优化 整合 以及线性代数模块 傅里叶变换 信 ...
- 灰太狼的数据世界(二)
上一篇数据文章中,我们介绍了Numpy里面的一些结构,那么这次我们来介绍一些更好玩的东西----Pandas.Pandas这个东西在数据的世界里用的还是很频繁的,主要是用起来会比较方便.相对Numpy ...
- 灰太狼的数据世界(三)
上一期我们了解了Pandas里面Series数据结构,了解了如何创建修改,清理Series,也了解了一些统计函数,例如方差,标准差,峰度这些数学概念.那么今天我们就来了解Pandas里面的另一个数据结 ...
- 信息时代把数据当成了信息,互联网让数据真正发挥出价值,让人们相信人眼看不见的数据世界。...
信息时代把数据当成了信息,互联网让数据真正发挥出价值,让人们相信人眼看不见的数据世界. 转载于:https://www.cnblogs.com/beingonline/p/7484113.html
- WordPress中缠结的自定义数据世界
by Kamil Grzegorczyk 通过卡米尔(Kamil Grzegorczyk) WordPress中缠结的自定义数据世界 (The Tangled World of Custom Data ...
- 大数据世界要熟悉的5门语言
大数据世界要熟悉的5门语言课程 Python OpenStack Java Hadoop Scala Spark Shell Linux SQL ...
- 第二届大数据世界论坛 聚焦行业需求
本文讲的是第二届大数据世界论坛 聚焦行业需求,随着现代技术的发展,企业产生的业务数据和客户数据早已汗牛充栋.如何有效的组织管理数据,提供商业解决方案,已经不是单纯的IT技术问题,而是与企业未来发展前途 ...
- 大数据世界中的新技术
大数据世界正在以前所未有的方式发生着变化,特别是企业将数据整合到一起并将其应用到业务的情况下.而企业都面临的挑战是能够发现.识别并带来构建产品.提供服务和了解客户所需的数据.数据集成本身几十年来一直是 ...
- 十张图看懂未来大数据世界
作者:薄云借智 来源:钱塘江大数据 随着互联网云时代的来临,大数据与云计算就像一个硬币的正反两面,势必会影响到社会生活的方方面面,改变我们现有的规则和秩序.伴随着大数据与云计算产业的不断发展,未来到底 ...
最新文章
- Bruck:一个Web界面布局原型设计框架\n
- STM32 资料整理贴(更新到10年1月)[转]
- .Toolkit 增补
- android功能网格布局,Visual Studio 开发安卓之布局-网格布局(GridLayout)
- 各种 Java Thread State 第一分析法则
- java access dbq 参数_Java怎么连接access数据库,要求讲解详细一些
- 4001.基于双向链表的双向冒泡排序法
- SVG 教程 (四)多边形,曲线,路径
- 实现同步请求_图解 Promise 实现原理(二)—— Promise 链式调用
- linux mysql 6.0.4 启动_CentOS 6.0之MySQL+FreeRadiu实现帐号统一认证
- SQL注入学习part06:(结合sqli-libs学习:51-61关)
- vs2013代码模板设置
- 面试遇到“一问三不知”的,真替他老东家捏把汗
- 浅析那些带着“主角光环“的泰坦尼克号幸存者
- php无限级回复页面如何嵌套,php无限级评论嵌套实现代码
- Paxos算法(一)—Basic Paxos
- Prompt for Extraction? PAIE:Prompting Arguement Interaction for Event Argument Extraction
- 计算机查找是什么意思,计算机的字长是什么意思?怎么查找一台计算机上的字长啊?...
- shor 量子算法,合数分解
- Linux 字符设备
热门文章
- 被反垄断遗忘的行业:出行巨头正在加速扩张
- 惯性导航系统学习笔记——第一讲
- 微信小程序云开发Collection.watch如何关闭
- MYSQL免登录改密码
- 计算机公开课课前互动小游戏,课前三分钟小游戏 公开课课前精彩互动
- python echarts 多图联动,创建echart多个联动的示例代码
- 一步一步教你将任何普通的路由器变为WiFi广告路由器
- 12月2日-3日 | 数字化安全技术大会暨Ansys medini analyze 2021用户大会
- 松下PLC控制松下伺服电机(上位机发送控制命令)
- xm-select 二级联动 layui