机器学习 三剑客 之 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()

索引值

  • 计算能获取到最大值和最小值的索引(整数)

    • 语法:-----> argmaxargmin

  • 计算能获取到最大值和最小值的索引

    • 语法:-----> idmaxidmin

求和

  • 语法:-----> 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(数值)

     

arraryasarrary

  • 区别:

    • arrayasarray都可以将结构数据转化为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_indexDataFrame进行排序的时候,不能直接对indexcolumns都含有的字段进行排序,会报错。

  • 直接以索引排序

    • data.sort_index(axis=0,ascending=True)

    • 参数axis只有两个值,分别是01

      • df中只有两个index 分别是

        • 表最左一列的时间 (左侧标头)

        • 表最上一行的ABCDE (头部标头)

        • axis=0 对应的是对左边一列的index进行排序

  • 以某个字段的values值排序 即:按照‘列名’排序(多列可用 ['a','b'.... ]),默认升序

    • data.sort_values(by='某字段',ascending=False)

    • by 参数的作用是针对某一(些)列进行排序(不能对行使用 by 参数)

 

lociloc

loc 通过行标签索引行数据

  • data.loc[3]

  • data.loc[:3]

  • data.loc[::2]

iloc 通过行号索引行数据

  • data.iloc[2]

  • data.iloc[:2]

  • data.iloc[::2]

lociloc区别

  • 区别:

    • 不变动的情况,感觉没啥区别

    • 但给标签改索引

    • 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([要替换的值,要替换的值...],[更新的值,更新的值...])

 

数据

  • 数据集

    • 特征

    • 标签

 

posted @ 2019-07-02 10:14  老凯—RGZN  阅读(324)  评论(0编辑  收藏  举报