机器学习 三剑客 之 pandas + numpy
机器学习
什么是机器学习?
机器学习是从数据中自动分析获得规律(模型),并利用规律对未知数据进行预测
机器学习存在的目的和价值领域?
领域:
医疗、航空、教育、物流、电商 等。。。
目的:
让机器学习程序替换手动的步骤,减少企业的成本也提高企业的效率
jupyter lab
语法使用
jupyter lab安装
命令:pip install jupyterlab
接下来了解下机器学习三剑客的前两位 numpy + pandas 的使用
一、区别
Numpy:是数值计算的扩展包,它能高效处理N维数组,复杂函数,线性代数.
Panadas:是做数据处理。市python的一个数据分析包,
二、简介
1)NumPy:N维数组容器
Numpy专门针对ndarray的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显。Numpy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。据说NumPy将Python相当于变成一种免费的更强大的MatLab系统。
1.ndarray的优势
NumPy提供了一个N维数组类型ndarray,它描述了相同类型的“items”的集合。
一、内存块风格:
这是因为ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生lis就t只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。
二、ndarray支持并行化运算(向量化运算)
三、Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。
2.Pandas:表格容器
pansdas是基于Numpy的一种工具,该工具是为了解决数据分析任务而创建的,。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量快速便捷地处理数据的函数和方法。使Python成为强大而高效的数据分析环境的重要因素之一。
---------------------
作者:愤怒的马农
来源:CSDN
原文:https://blog.csdn.net/weixin_43407092/article/details/89575559
版权声明:本文为博主原创文章,转载请附上博文链接!
numpy
模块导包
import numpy as np
导入
numpy
起别名为np
列举表格数据
pandas : 读取工具
numpy
:释放了GIL锁真正实现了多线程
一些库运行的比较快或计算能力强,一部分原因就是因为
numpy
GIL锁历史遗留问题
cpython
加了GIL锁jpython
没有GIL锁,(常用)所以不存在遗留问题
数据类型 -----> numpy.ndarray
维度数据
np.arange(1000)
# 遍历 与for循环range相同作用 生成1-999
数据np.array([1,2,3])
# 一维数据np.array([[1,2,3],[11,22,33]])
# 二维数据np.array([[[1,2,3],[11,22,33]]])
# 三维数据
维度
维度相当于,多层内包含列表(数组)的数据
超过一维单独存在数据,默认为一维
父级每多一层,维度加一
单个子级每多一层,单个维度层级加一
查看维度详情
语法:----->
结果变量.shape
如结果 array([1, 2, 3])
表示一维3个,二维2个,三维1个数据
查看数据维度是几维
语法:----->
结果变量.ndim
结果 是管与结果是几维的 维度数字
改变维度
语法:----->
结果.reshape(数值1,数值2)
结果 变为二维 结果为:一个大列表,数值1个数的子列表,子列表内数值2个数的数据
小总结:可根据需求维度设置多个参数,() 内参数总个数是维度,每个参数依次是每个维度的数据个数
生成数据
生成正太分布数据
语法:----->
np.linspace(起始值,结束值,生成几个数值)
在区间内(括号内前两个参数)生成几个数,间隔区间大小相同,并且都是float64(浮点)类型
把
均值为0
方差为1
的数据分布称为标准正态分布例
np.random.normal(loc=0,scale=1,size=(2000,3000))
正太分布数据
np.random.randn(10)
生成指定维度,数据随机
语法:----->
np.random.rangint(0,15,size=(5,3))
区间0~14,维度详情指定二维,二维数据5组,一维3组
手写指定维度
语法:----->
np.array([[1,2,3],[11,22,33],[1,2,3],[11,22,33],[1,2,3]])
二维 5*3 数据
遍历改变维度,生成指定维度
语法:----->
np.arange(12).reshape(4,3)
遍历数值,然后改变维度 二维 4*3数据
随机种子,固定随机值
np.random.seed(10)
# 固定的随机值必须是随机数区间内的数值,不然无效a = np.random.randint(10,20,size=(5,3))
# 每个 一维数据内 能生成一个固定随机值
输出展示详情,分析变化
print('维度:{}'.format(a.ndim))
print('大小:{}'.format(a.size))
print('尺寸:{}'.format(a.shape))
求值
平均值
语法:----->
np.mean(结果变量)
绝对值
语法:----->
np.abs(结果变量)
数量值
语法:----->
count()
索引值
计算能获取到最大值和最小值的索引(整数)
语法:----->
argmax
和argmin
计算能获取到最大值和最小值的索引
语法:----->
idmax
和idmin
求和
语法:----->
np.sum(结果变量)
最大值
语法:----->
np.max(结果变量)
最小值
语法:----->
np.min(结果变量)
返回累乘积值
语法:----->
np.cumprod()
返回累加值
语法:----->
np.cumsum()
标准差
什么是标准差?
在概率统计中最常使用作为统计分布程度上的测量。标准差定义是总体各单位标准值与其平均数离差平方的算术平均数的平方根。它反映组内个体间的离散程度。
简单来说,标准差是一组数据平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值。
求标准差
语法:----->
np.stb(结果变量)
方差
什么是方差?
方差用来计算每一个变量(观察值)与总体均数之间的差异。
为避免出现离均差总和为零,离均差平方和受样本含量的影响,统计学采用平均离均差平方和来描述变量的变异程度。是标准差的平方。
求方差
语法:----->
np.val(结果变量)
切片、索引
指定数据
根据索引操作,按照普通列表去下标
切片
语法 ---->
结果变量[取哪条][起始位置:结束位置:间隔步数]
语法 ---->
结果变量[起始位置:结束位置,:数值]
数值 在:之前去除数值列展示,之后再:之后只展示数值列
pandas
模块导包
import pandas as pd
导入
pandas
起别名为pd
Series
存放一维度数据
通过list构建Series
data = pd.Series([1,2,3,4,5,6,7])
通过range函数,构建Series
data = pd.Series(range(10,20))
DataFrame
存放二维度数据
随机种子,固定随机值为10
np.random.seed(10)
随机生成一组5*3 二维数据
data = np.random.randint(10,20,size=(5,3))
DataFrame
存放二维数据df_data = pd.DataFrame(data)
columns=[列数相同的值]
给每列起别名df_data .columns=['A','B','C']
删除
直接删除整行
data.drop(索引)
data.drop(索引,inplace=True)
inplace=True
修改原数据
直接删除多行
data.drop([索引,索引。。。])
合并
小例子:
data1 = np.array([[1,2,3],[11,22,33],[1,2,3],[11,22,33],[1,2,3]]) # 5*3
data2 = np.arange(12).reshape(4,3) # 4*3
data3 = np.random.randint(10,20,size=(4,3)) # 生成制定5*3维度,随机生成数字
data4 = np.random.randint(10,20,size=(4,5)) # 4*5
# r_ 列合并 c_ 行合并 不符合 会报错
data5 = np.r_[data1,data2] # r_ 合并 列个数相同 才能合并 5*3 <---> 4*3 否则报错
data6 = np.c_[data3,data4] # c_ 合并 行个数相同 才能合并 4*3 <---> 4*5 否则报错
小总结:
r_ 列合并 列个数相同 才能合并
c_ 行合并 行个数相同 才能合并
否则报错
展示
存放后展示
展示前几行
语法:----->
data.head()
展示后几行
语法:----->
data.tail()
展示前几行
语法:----->
data.head(数值)
展示后几行
语法:----->
data.tail(数值)
arrary
和 asarrary
区别:
array
和asarray
都可以将结构数据转化为ndarray
,但是主要区别就是当数据源是ndarray
时,array
仍然会copy
出一个副本,占用新的内存,但asarray
不会
info()
DataFrame
数据的简明摘要
CSV
读取csv和改写csv编码格式
读取文件时,因为python3的原因,默认
utf-8
,其他格式指定解码encoding=
data = pd.read_csv('51job.csv',encoding='ANSI')
读文件 默认data=pd.read_csv('51job.csv',encoding='utf-8')
读文件
每次想保存修改数据或修改编码格式,执行以下类型格式代码:
要在
参数括号内
加入inplace=True
确认修改原数据的参数值data.to_csv('51job.csv',encoding='ANSI')
写入编码格式data.to_csv('51job.csv',encoding='utf-8')
改入写编码格式改写后, 只能以修改后编码格式读取,除非重新改动写入新的编码格式
read_html('网址')
爬取网站数据
lst = pd.read_html('http://quote.stockstar.com/stock/sha_3_1_1.html')
写入csv
lst[2].to_csv('gushihangqing.csv',mode='a',header=None,index=False,encoding='utf-8')
缺失值处理 (空值)
删除 dropna()
data.dropna(inplace=True)
删除带有Nan的整行数据inplace=True
修改原数据
填充替换 fillna()
直接替换掉 该字段所有空值
data['某字段'].fillna('要更新的值')
用平均值替换掉 该字段所有空值 (其他值同理,如:最大值。最小值)
data['某字段'].fillna(data['某字段'].mean())
判断 isnull()
data.isnull()
判断是否为空,返回 True 和 False
排序 sort
ascending 表示升
descending 表示降
注意在使用
sort_index
对DataFrame
进行排序的时候,不能直接对index
和columns
都含有的字段进行排序,会报错。直接以索引排序
data.sort_index(axis=0,ascending=True)
参数axis只有两个值,分别是0和1,
而
df
中只有两个index 分别是表最左一列的时间 (左侧标头)
表最上一行的ABCDE (头部标头)
axis=0 对应的是对左边一列的index进行排序
以某个字段的values值排序 即:按照‘列名’排序(多列可用 ['a','b'.... ]),默认升序
data.sort_values(by='某字段',ascending=False)
by 参数的作用是针对某一(些)列进行排序(不能对行使用 by 参数)
loc
和 iloc
loc
通过行标签索引行数据
data.loc[3]
data.loc[:3]
data.loc[::2]
iloc
通过行号索引行数据
data.iloc[2]
data.iloc[:2]
data.iloc[::2]
loc
和 iloc
区别
区别:
不变动的情况,感觉没啥区别
但给标签改索引
data.index = range(10,26) # 给数据标签加索引
然后 就可以和感受到,差别
比较
条件就是运用比较运算符比较
单个条件
data[data['salary']>1002]
多个条件
data[data['salary']>1002][data['salary']<1008]
data[(data['salary']>1002)&(data['salary']<1008)&(data['date']=='4月2日')]
替换
单个值替换单个值
data.replace(要替换的值,更新的值)
多个值替换单个值
data.replace([要替换的值,要替换的值...],更新的值)
多个值替换多个值
data.replace([要替换的值,要替换的值...],[更新的值,更新的值...])
数据
数据集
特征
标签
机器学习 三剑客 之 pandas + numpy的更多相关文章
- 机器学习三剑客之Pandas中DataFrame基本操作
Pandas 是基于Numpy 的一种工具,是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.Pandas提供了大量能使我们快速便捷 ...
- 机器学习三剑客之Pandas
pandas Pandas是基于Numpy开发出的,专门用于数据分析的开源Python库 Pandas的两大核心数据结构 Series(一维数据) Series 创建Series的方法 ...
- Python:机器学习三剑客之 NumPy
一.numpy简介 Numpy是高性能科学计算和数据分析的基础包,机器学习三剑客之一.Numpy库中最核心的部分是ndarray 对象,它封装了同构数据类型的n维数组.部分功能如下: ndarray, ...
- pandas numpy处理缺失值,none与nan比较
原文链接:https://junjiecai.github.io/posts/2016/Oct/20/none_vs_nan/ 建议从这里下载这篇文章对应的.ipynb文件和相关资源.这样你就能在Ju ...
- python及pandas,numpy等知识点技巧点学习笔记
python和java,.net,php web平台交互最好使用web通信方式,不要使用Jypython,IronPython,这样的好处是能够保持程序模块化,解耦性好 python允许使用'''.. ...
- 机器学习三剑客之Numpy库基本操作
NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Numpy内部解除了Python的PIL(全局解释器锁),运算效率极好,是大量机 ...
- Numpy 机器学习三剑客之Numpy
NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Numpy内部解除了Python的PIL(全局解释器锁),运算效率极好,是大量机 ...
- 机器学习三剑客之Numpy
Numpy NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Numpy内部解除了Python的PIL(全局解释器锁),运算效 ...
- python pandas/numpy
import pandas as pdpd.merge(dataframe1,dataframe2,on='common_field',how='outer') replace NaN datafra ...
随机推荐
- 创建.Net Core For WPF项目并且添加VS Code编译运行支持
1.下载最新的Visual Studio 2019或者Preview版本,新建项目,找到"WPF App(.Net Core)"模板. 2.输入项目名称"NetCore- ...
- 【VS开发】【数据库开发】libevent入门
花了两天的时间在libevent上,想总结下,就以写简单tutorial的方式吧,貌似没有一篇简单的说明,让人马上就能上手用的.首先给出官方文档吧: http://libevent.org ,首页有个 ...
- MacOS这idea快捷键
Control + Space 基本的代码补全(补全任何类.方法.变量) Control + Shift + Space 智能代码补全(过滤器方法列表和变量的预期类型) Command + Shift ...
- rewrite定义浏览器请求
搞过前端的估计都碰到最头疼的问题就是浏览器兼容性问题了,特别是针对IE浏览器.往往前端为了省事就搞一个页面提示用户升级浏览器或者显示简单的静态页面.那接下来就需要运维来配置nginx rewrite规 ...
- 机器学习第二节_pandas_数据操作
今天打个卡, 还不错,学到20课了, 简单的把pandas的操作过一遍, 这没有numpy学的好 1. 读取csv文件 import pandasfood_info = pandas.read_csv ...
- mac 10.14.5 [vue create的时候 mkdir没有权限]
1.vue create的时候 mkdir没有权限 2.第一步.先检查系统是否开启了安全模式 csrutil status 3.如果是disabled.进去步骤5,直接查看文件夹权限.如果是enabl ...
- 系统获取 IP 工具类
系统获取 IP 工具类 import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterf ...
- Linux由于物理节点故障导致的异常重启-Case1
问题描述:Linux VM异常重启,需要排查问题原因 排查结果: 查询Messages日志获取到的信息 虚拟机内核版本: Jun :: test01 kernel: Linux version -.e ...
- Spring IoC 和 DI 简介(二)
Spring IoC 和 DI 简介 IoC:Inverse of Control(控制反转) 读作“反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由 ...
- 认识 Spring 框架(一)
认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP( ...