关于数据分析的组件之一:numpy

ndarray的属性     4个必记参数:
ndim:维度
shape:形状(各维度的长度)
size:总长度
dtype:元素类型

  一:np.array()产生n维数组
一维:方法一:arr1 = np.array([1,2,3])
     方法二:arr6 = np.full((6),fill_value=666)
     方法二结果:array([666, 666, 666, 666, 666, 666])
     (一行六列)
    
二维:方法一:arr2 = np.array([[1,2,3],[4,5,6]])
     方法二:arr7 = np.full((6, 7), fill_value="5")
     (6行7列的二维数组,所有的值全是"5")
    
三维:方法一:arr3 = np.array([[[1,2,3],[4,5,6]]])
    方法二:arr7 = np.full((5, 6, 3), fill_value="ggg")
        (5行二维数组,每个二维数组里面是6行3列的1维数组)
关键点:[]的层数即是维度数

 
 二.数据类型优先级:tr > float > int
numpy默认ndarray的所有元素的类型是相同的
•   特列:其中一个数组包含优先级高的数据类型时,所有的数据将会全部转化成优先级高的数据类型。

•   列如:arr4 = np.array([[1, 2, 3], [4, 5, "five"]])
•   打印结果是:array([['1', '2', '3'],['4', '5', 'five']], dtype='<U11')

 三.matplotlib模块
import matplotlib.pyplot as plt

1.使用imread将图片变成多维数组,使用imshow展示图片
图片的数组是三维的分别为:高,宽,灰度值(纵向,横向,灰度值)
img_arr = plt.imread('./cat.jpg')
plt.imshow(img_arr)

2.将数组进行加减来改变灰度值:plt.imshow(img_arr - 20)

3.查看数组维度:img_arr.ndim

4.查看数组横向宽度,纵向高度,维度三个参数:img_arr.shape

四.产生等差一维数组

######  np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 等差数列

1. np.linspace(1, 100, num=10)结果是:1开头,100结尾,将1到100分成十个数,array([ 1., 12., 23., 34., 45., 56., 67., 78., 89., 100.]))
2. np.arange([start, ]stop, [step, ]dtype=None)
np.arange(1, 100, 8)结果:此方法结尾数未被限定(array([ 1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97])
 

五.产生等差n维数组

np.random.randint(0,100,size=(5,6))   产生5行6列的二维数组

结果:array([[23, 88, 34, 82, 17, 26],
      [74, 19, 56, 26, 70, 87],
      [25, 60, 10, 91, 49, 14],
      [84, 63, 37, 83, 26, 42],
      [94, 87, 54, 72, 19, 26]])

六.生成的一维数组里是随机数(size决定元素的数量)

生成0到1的随机数,左闭右开:np.random.random(size=5)
结果是 :array([0.68491561, 0.84337526, 0.61612483, 0.56318751, 0.36816219])

七.nadarray(多为数组)的基本操作

1.索引  (与列表索引操作一致)

arr = np.array([[1, 2, 3], [4, 5, 6]])

取值   :arr[0]得到 array([1, 2,3], dtype='<U21')

改值   :改一个数组arr[0] = [4,5,6],改某一个具体的值arr[0][1]=2

  arr1 + arr2 两数组相加,对应索引位置的值相加
  arr1 = np.array([[1, 2, 3], [4, 5, 6]])
  arr2 = np.array([[1, 2, 3], [4, 5, 6]])
  arr1 + arr2
结果array([[ 2, 4, 6],[ 8, 10, 12]])
2.切片
1.获取二维数组前两行:arr[0:2]
2.获取二维数组前两列:arr[:, 0:2]
3.获取二维数组前两行和前两列数据:arr[0:2, 0:2]
4将数据反转arr[::-1,::-1]
1.将数组的行倒序
  arr[::-1]#
  2.列倒序
  arr[:, ::-1]

八.数组的行列数组个数的转化

使用:arr3.reshape(行,列),
注意点:arr3.reshape(4, -1) # -1这个值表示自动计算行数,自动匹配,
• arr3.reshape(-1, 4) # -1这个值表示自动计算行数,自动匹配, 是一个万能的参数
总结就是:(前提条件是: 列数 x行数 = 总元素数)
• 行为-1,则列先满足(先形成四列再得出行),行数 = 总元素个数/列数。
•   列为-1,则行先满足(先形成四行再得出列),列数 = 总元素个数/行数。

九.级联(多维数组的拼接)

进行级联, axis参数0表示列(纵向)拼接, 1表示行(橫向)拼接

np.concatenate((a1, a2),axis=0)

级联需要注意的点:
- 级联的参数是列表:一定要加中括号或小括号
- 维度必须相同
- 形状相符:在维度保持一致的前提下,如果进行横向(axis=1)级联, 必须保证进行级联的数组行数保持一致。如果进行纵向(axis=0)级联, 必须保证进行级联的数组列数保持一致。
- 可通过axis参数改变级联的方向

十.切分(与级联相反)

np.split(a1, [1, 1, 3], axis=0)  把a1看作整体,把第一行下面为界限切成两个数组,再把这两个堪称一个整体,在第一行下面切一下,进行分割,因为第一行下面是空隙,所以会切出来一个空,再看成整体(空数组不算一行)从第三行的下面切割,形成行数为: 1, 空, 2, 2,   的数组
axis=0横向切,唯为1纵向切。
样式 :[array([[97, 56, 62, 57, 90, 22]]),
  array([], shape=(0, 6), dtype=int32),
  array([[97, 84, 26, 15, 14, 85],
      [44, 7, 78, 57, 60, 16]]),
  array([[25, 10, 67, 72, 54, 70],
      [37, 22, 41, 78, 92, 50]])]
切图片:直接取高,宽的范围,切片img_arr[60:390, 110:600]

十一.多维数组的聚合(加减乘除,平方,求最大,和值,最小等)

a1.sum()
最大最小值:np.max/ np.min
### 3. 其他聚合操作
Function Name NaN-safe Version Description
np.sum np.nansum Compute sum of elements
np.prod np.nanprod Compute product of elements
np.mean np.nanmean Compute mean of elements
np.std np.nanstd Compute standard deviation
np.var np.nanvar Compute variance
np.min np.nanmin Find minimum value
np.max np.nanmax Find maximum value
np.argmin np.nanargmin Find index of minimum value
np.argmax np.nanargmax Find index of maximum value
np.median np.nanmedian Compute median of elements
np.percentile np.nanpercentile Compute rank-based statistics of elements
np.any N/A Evaluate whether any elements are true
np.all N/A Evaluate whether all elements are true
np.power 幂运算
十二.ndarray(多维数组)的排序
np.sort(a1, axis=0),最小的行往上移
np.sort(a1, axis=1),最小的列往左移

np.sort()与ndarray.sort()都可以,但有区别:
np.sort(a1,axis=0)不改变输入
a1.sort()本地处理,不占用空间,但改变输入

二.数据分析组件之pandas(Series和DataFrame)

import pandas as pd

from pandas import Series,DataFrame

1.使用列表创建Series 隐式索引     取值s1[0]     name为表名
s1 = Series(data=[1,2,3,4,5],name='888')  
使用列表创建Series 显式索引 取值s2['a']
s2 = Series(data=[1,2,3,4,5], index= ['a','b','c','d','e'],name='888')
2. 由字典创建:不能在使用index.但是依然存在默认索引
dic = {
  "English": 100,
  "Math": 30
}
s4 = Series(data=dic)
3.Series的索引和切片
可以使用中括号取单个索引(此时返回的是元素类型),或者中括号里一个列表取多个索引(此时返回的是一个Series类型),隐式和显式一样。
取值方式一:
如:s2["数学"]渠取到具体分数
而:s2[["语文", "英语"]] 取到类似表格的:
语文150
英语   150
dtype: int64
取值方式二:
s2.loc["数学"] # 使用loc方法通过显式索引取值
s2.iloc[1] # 使用iloc方法通过隐式索引取值
s2.iloc[[1,3]]当有此时是取一和三
以上两种取值方式都将可以
取值方式三:
s2.iloc[0:3] 右端取不到
s2.loc["语文":"理综"]
4.增加值:
可以把Series看成一个定长的有序字典向Series增加一行:相当于给字典增加一组键值对:s2["aaa"] =1000 可以通过 shape,size,index, values等得到series的属性
s2.shape 可以使用s.head(),s.tail()分别查看前n个和后n个值
使用unique()对Series元素进行去重
series对象间可以相加(相同索引的值相加)
可以使用相关的数据清洗方法: pd.isnull(),pd.notnull(),或s.isnull(),notnull()函数检测缺失数据
2、DataFrame
DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。

1)DataFrame的创建
DataFrame是由多个Series组成的

最常用的方法是传递一个字典来创建。DataFrame以字典的键作为每一【列】的名称,以字典的值(一个数组)作为每一列。

此外,DataFrame会自动加上每一行的索引。

使用字典创建的DataFrame后,则columns参数将不可被使用。

同Series一样,若传入的列与字典的键不匹配,则相应的值为NaN。

取值:
# 获取前两列df[0:2],
(1) 对 列 进行索引
  - 通过类似字典的方式 df['q']
  - 通过属性的方式     df.q
修改列索引:
# 修改列索引
df.columns = ["zhangsan", "lisi"]
(2) 对行进行索引
- 使用.loc[]加index来进行行索引
- 使用.iloc[]加整数来进行行索引

方法一:df.loc["数学"]["zhangsan"]取到具体某一行的某一列
方法一:df.loc["数学", "zhangsan"]取到具体某一行的某一列

python数据分析三个重要方法之:numpy和pandas的更多相关文章

  1. 《Python数据分析常用手册》一、NumPy和Pandas篇

    一.常用链接: 1.Python官网:https://www.python.org/ 2.各种库的whl离线安装包:http://www.lfd.uci.edu/~gohlke/pythonlibs/ ...

  2. Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包

    联网情况下在命令终端CMD中输入“pip install numpy”即可自动安装,pandas和matplotlib同理一样方法进行自动安装. 工作的电脑不能上外网,所以不能通过直接输入pip命令来 ...

  3. Python 数据分析(一) 本实验将学习 pandas 基础,数据加载、存储与文件格式,数据规整化,绘图和可视化的知识

    第1节 pandas 回顾 第2节 读写文本格式的数据 第3节 使用 HTML 和 Web API 第4节 使用数据库 第5节 合并数据集 第6节 重塑和轴向旋转 第7节 数据转换 第8节 字符串操作 ...

  4. Python数据分析教程(一):Numpy

    原文链接:https://blog.onefly.top/posts/13140.html 数据的纬度 一维数据:列表和集合类型 二维数据:列表类型 多维数据:列表类型 高维数据:字典类型或数据表示格 ...

  5. Python selenium 三种等待方法

    1. 强制等待 sleep(xx) 是最简单粗暴的一种办法,不管你浏览器是否加载完了,程序都得等待3秒,3秒一到,继续执行下面的代码,作为调试很有用,不建议总用这种等待方式,严重影响程序执行速度. 代 ...

  6. [读书笔记] Python 数据分析 (十二)高级NumPy

    da array: 一个快速而灵活的同构多维大数据集容器,可以利用这种数组对整块的数据进行一些数学运算 数据指针,系统内存的一部分 数据类型 data type/dtype 指示数据大小的元组 str ...

  7. Python数据分析(二): Numpy技巧 (1/4)

    In [1]: import numpy numpy.__version__ Out[1]: '1.13.1' In [2]: import numpy as np  

  8. Python数据分析(二): Numpy技巧 (3/4)

    numpy.pandas.matplotlib(+seaborn)是python数据分析/机器学习的基本工具. numpy的内容特别丰富,我这里只能介绍一下比较常见的方法和属性.   昨天晚上发了第一 ...

  9. Python数据分析(二): Numpy技巧 (4/4)

    numpy.pandas.matplotlib(+seaborn)是python数据分析/机器学习的基本工具. numpy的内容特别丰富,我这里只能介绍一下比较常见的方法和属性.   第一部分: ht ...

随机推荐

  1. 面向对象之---this的用法

    在绝大多数情况下,函数的调用方式决定了this的值 全局环境 无论是否在严格模式下,在全局执行环境中,this都指向全局对象· 在全局作用域中调用一个函数时,this总是指向Global对象(在浏览器 ...

  2. 图数据库PageRank算法

    目录: 定义 计算原理 定义: 假设对象A具有指向它的对象T1 ... Tn.参数d是阻尼系数,取值范围在0和1之间,通常将d设置为0.85.C(A)被定义为从对象A出去的连接数. 对象A的PageR ...

  3. 随机数产生器:Random.Next

    Random类是一个产生伪随机数字的类,它的构造函数有两种,一个是直接New Random(),另外一个是New Random(Int32),前者是根据触发那刻的系统时间做为种子,来产生一个随机数字, ...

  4. 通俗地说逻辑回归【Logistic regression】算法(一)

    在说逻辑回归前,还是得提一提他的兄弟,线性回归.在某些地方,逻辑回归算法和线性回归算法是类似的.但它和线性回归最大的不同在于,逻辑回归是作用是分类的. 还记得之前说的吗,线性回归其实就是求出一条拟合空 ...

  5. Web for pentester_writeup之LDAP attacks篇

    Web for pentester_writeup之LDAP attacks篇 LDAP attacks(LDAP 攻击) LDAP是轻量目录访问协议,英文全称是Lightweight Directo ...

  6. Mysql数据一般问题

    数据插入中文全部变为???问题: 1.停止Mysql服务: 2.修改C:\Program Files (x86)\MySQL\MySQL Server 5.5\My.ini default-chara ...

  7. 【PyTorch教程】P2. Python编辑器的选择、安装及配置

    温馨提示:为了更好的教程体验,提供视频.阅读地址 Youtube: https://www.youtube.com/playlist?list=PLgAyVnrNJ96CqYdjZ8v9YjQvCBc ...

  8. NOIP模拟 11

    差点迟到没赶上开题 开题后看了T1,好像一道原题,没分析复杂度直接敲了个NC线段树,敲了个暴力,敲了个对拍,就1h了.. 对拍还对出错了,发现标记下传有点问题,改了以后对拍通过,就把T1扔掉看T2 觉 ...

  9. js基础总结01 --操作DOM

    1.选择对象 通过id来选择绑定一个dom节点 :document.getElementById('p1'): 通过类名来绑定一个类数组的对象集合,:document.getElementsByCla ...

  10. 去除word文档页眉处的横杠

    ​ 如何去除上图word文档页眉处的横杠 wps软件使用者 第一步双击页眉,到页眉页脚: ​ 第一步点击上图页眉横线,点击无线型或者删除横线即可: ​ ​ ​ Microsoft Office 专业增 ...