python爬虫---数据分析三剑客之: Numpy

数据分析三剑客之: Numpy

一丶Numpy的使用

? numpy 是Python语言的一个扩展程序库,支持大维度的数组和矩阵运算.也支持针对数组运算提供大量的数学函数库

创建ndarray

# 1.使用np.array() 创建一维或多维数据
import numpy as np
arr = np.array([1,2,3,4,5]) # 一维
arr = np.array([[1,2,3],[4,5,6]])# 二维

### 注意元素类型:
    # 1. numpy默认ndarray的所有元素的类型是相同的
    # 2. 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
# 2. 使用 matplotlib.pyplot() 获取一个numpy数组,数据源是一张图片
import matplotlib.pyplot as plt
img_arr = plt.imread('./cat.jpg') # 得到 一个三维数据源

  # 数据源再转换成图片
plt.imshow(img_arr)
  # 可以对数据源进行计算
plt.imshow(img_arr - 100)

使用np的routines函数创建

# 1.创建等差数列  np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
#  参数说明: start-stop是创建数据的范围,num指定个数据,
np.linspace(0,100,num=10) # array([  0.        ,  11.11111111,

# 2. 创建等差数列 np.arange([start, ]stop, [step, ]dtype=None)
np.arange(0,100,2) # array([ 0,  2,  4,  6,  

# 3. 随机数 np.random.randint(low, high=None, size=None, dtype='l')
    # 时间种子(随机因子):无时无刻都在变化的值
    # 固定随机因子就可以固定随机函数的随机性

np.random.seed(90) #固定随机因子
np.random.randint(0,100,size=(3,5))  # 随机数  

# 4. 生成 0-1的随机数,左闭右开  np.random.random(size=None)
np.random.random(size=(3,4))

nadarray的属性

# 四个必须参数: 1.ndim:维度  :   arr.ndim
              2.shape:形状(各个维度的长度)  :   arr.shape
              3.size:总长度     :  arr.size
              4.dypte:元素类型   :   arr.dtype 

二丶ndarray的基本操作

索引

? 维与列表完全一致 多维时同理,索引默认从0开始

# 根据索引修改数据
arr[0] # 获取行元素

arr[[0,1]] # 获取多行元素

arr[1,3] # 获取1行3列的那个元素

arr[1,[2,3,4]]  # 一行多列的值

切片

? 一维与列表完全一致 多维时同理

### arr[行,列]

# 获取二维数组前两行
arr[0:2]

# 获取二维数组前两列
arr[:,0:2]

# 获取二维数组前两行和前两列数据
arr[0:2,0:2]

# 将数组的 '行' 倒序
arr[::-1,:] 

# 列倒序
arr[:,::-1]

# 全部倒序
arr[::-1,::-1]

# 将图片进行全倒置操作
img_arr.shape # 图片的形状
plt.imshow(img_arr[:,::-1,:]) # 倒序之后的图片

# 对图片进行裁剪
plt.imshow(img_arr[100:360:,150:580,:]) # 行 , 列 进行切片

变形

? 使用arr.reshape()函数,参数是一个tuple

# 1.将一维数组变形成多维数组
arr_1.reshape((10,4)) # 转换成10行 4列的数组

arr_1.reshape((5,-1)) # -1 , 自动转换

# 2.将多维数组变形车一维数组
arr_1 = arr.reshape((40,))

级联

? np.concatenate((arr,arr),axis=1)

? 参数:(数据源1,数据源2) , axis是方向:1是行,0是列

# 1. 一维,二维,多维数组的级联,实际操作中级联多为二维数组
np.concatenate((arr,arr),axis=1) # array([[45, 33, 77, 76

# 2. 合并两张照片
    # 横向合并3张照片
arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1)
     #
arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0)
plt.imshow(arr_9)

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

三丶ndarray聚合操作

求和 np.sum

# arr.sum(axis=1) #  axis 1 行相加 ,0 列
arr.sum(axis=1)

最大值和最小值

# np.max/np.min

平均值

# np.mean() 平均值

其他操作

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() 和 ndarray.sort() 都可以,但是有区别:
     # np.sort() 不改变输入
     # ndarray.sort() 本地出里,不占用空间,但改变输入

###
np.sort(arr,axis=0) # 列排序, 不改变源数据
arr.sort(axis=1)  # 行排序 , 改变源数据

五丶Panda的数据结构

Series

# 概述:
###  Series是一种类似于一维数组的对象
     # values: 一组数据(ndarray类型)
      # index: 相关的数据索引标签
# 1. 创建Series
  # 方式一: 由列表或numpy数组创建. 默认索引0到 N-1 整数索引
      # 使用列表创建Series
        Series(data=[1,2,3])

      # 使用数组生成一个Series
        s2  = pd.Series(np.arange(7))

      # 还可以通过设置index参数指定索引
         s = Series(data=[1,2,3],index=['a','b','c'])

      # 使用一个字典生成Series,其中字典的键,就是索引
         s3 = pd.Series({'1':1, '2':2, '3':3})
# 2. Series的索引和切片
   # 可以使用中括号取 单个 索引(此时返回的是元素类型),或者中括号里 '一个列表'取多个索引(此时返回的是一个Series类型)

 # 1.显示索引
    - 使用index中的元素作为索引值
    - 使用 s.loc(推荐),获取元素的值.  loc中括号中放置的一定是显示索引
    - 此时是闭区间 

 # 2.隐式索引
    - 下标索引 ,使用s.iloc[下标]

# 3. Series的基本概念
   # 可以使用s.head() 和 tail() 分别查看前n个 和后n个值

        s.head(2) # 查看前2个,默认是5个
        s.tail(2) # 查看后2个

   # 对Series元素进行去重
        s.unique()

   ### 注意:
       当索引没有对应的值时,可能出现数据缺失显示NaN(not a number)的清空

    # 使两个Series进行相加
        s1 = Series([1,2,3],index=['a','b','c'])
        s2 = Series([1,2,3],index=['a','d','c'])
         s = s1 + s2     # s 中存在空值NaN

    # 使用 pd.isnull(),pd.notnull(),或s.isnull(),notnull()函数检测缺失数据
        # 和 any() 搭配
        s.isnull()   # 找到控制 ,得到布尔类型的数据, 可作为列索引进行过滤

         # 和 all() 搭配
        s.notnull()   # 对空值进行过滤 , 可作为列索引进行过滤

# 3. Series之间的运算
    - 在运算中自动对齐不同索引的数据
    - 如果索引不对应,则补NaN

六丶DateFrame

概述

# DataFrame是一个表格型的数据结构. DataFrame由按照一定顺序排列的多列数据组成.设计初衷是将Series的使用场景从一维拓展到多维.DataFrame既有行索引,也有列索引.
    # - 行索引:index
    # - 列索引:columns
    # - 值: values

创建DataFrame

# 1. DataFrame的创建
    # - 最常用的方法传递一个字典来创建.DataFrame以字典的键作为每一[列]的名称,以字典的值(一个数组)作为每一列
    # - DataFrame会自动加上每一行的索引
    # - 使用字典创建的DataFrame后,则columns参数将不可被使用
    # - 同Series一行,若传入的列与字典的键不匹配. 则相应的值为NaN
### 使用ndarray 创建DataFrame
    # 参数说明:  # index 是行索引,columns是列索引
df=DataFrame(data=np.random.randint(0,100,size=(3,4)),index=['a','b','c'],columns=['A','B','C','D'])

### DataFrame属性: values,columns,index,shape
    df.values # 获得所有值
    df.columns  # 获取所有列索引
    df.index    # 获取所有行索引
    df.shape    # 获得形状
### 使用ndarray  和 DataFrame: 创建一个表格用于展示张三,李四
dic = {
    'zhangsan':[99,99,99,99],
    'lisi':[0,0,0,0]
}
df = DataFrame(data=dic,index=['语文','数学','英语','理综'])
df

DataFrame的索引

1 . ### 对列 进行索引
    # 通过类似字典的方式 df['q']
    # 通过属性的方式 df.q

# DataFrame的获取列取为一个Series. 返回的Series拥有的DataFrame相同的索引,
        # 且name属性也已经设置好了,就是相应的列明

df['lisi'] # 取出  列索引
df[['zhangsan','lisi']] # 取出多列索引
2. ###  对行进行索引
    - 使用 .loc[] 加 index参数的值,来进行, 行索引
    - 使用.ilock[] 加 索引整数 来进行, 行索引

   # 同样返回一个Series,index为原来的columns

df.loc['语文'] # 行索引
df.iloc[[0,1]] #  行索引
df.iloc[0]   # 行索引
3. ###  对元素索引的方法
    - 使用列索引
    - 使用行索引(ilock[3,1]  或者 loc['C','q']) 行索引在前,列索引在后

### 行索引在前,列索引在后
    df.iloc[2,1]
    df.loc['英语','zhangsan']
    df.iloc[[1,2],[1]]

切片

【注意】 直接用中括号时:

    - 索引表示的是列索引
    - 切片表示的是行切片
# 行切片
df[0:2]  #行切片

# 在loc和iloc中使用切片(切列)
df.loc['B':'C','丙':'丁']
# 索引和切片总结:
索引
    df['col']:列索引,取出指定的列
    df[[col1,col2]]:取出多列
    df.iloc[1]:取指定的1行 , 下标为1
    df.loc['语文']:取指定的行
    df.iloc[hang,lie]:取元素 , [行,列]
切片:
    df[行切片]:切行
    df.iloc[hang,lie]:切列

DataFrame的运算

# 概述
(1) DataFrame之间的运算 , 同Series一样:
        - 在运算中自动对齐不同索引的数据
        - 如果索引不对应,则补NaN
#### 练习题:
1 .假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
# 运算, 期中期末,
qz=df  # 期中
qm=df  # 期末
qz+qm  # 列值相加
mean_scroe=(qz+qm)/2 # 求平均值

2. 假设张三期中考试数学被发现作弊,要记为0分,如何实现?
# 找到具体的元素位置,更改值
qz.iloc[1,1]=0

3. 李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
# 对 李四的所有科目+100分
qz['lisi']+=100 

4. 后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
# 对所有人的成绩都加10分
qz+=10

七丶处理丢失数据

###  有两种丢失数据:
    None
    np.nan(NaN)

None

# None 是 python 自带的,其类型为python object .因此 None不能参与到任何计算中

np.nan(NaN)

# np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN。
#查看np.nan的数据类型
type(np.nan)

pandas中的None与NaN

### 1.  在  pandas中None与np.nan都视作np.nan
    # 做 数据 级联 或者 聚合  都会出现none

### 2. pandas处理空值

# 判断函数
    # - isnull()
    # - notnull()

    #  axis 的值为1,表示横向, 找出为空的行
    df.isnull().any(axis=1) 

    # 找出不含空值的行
    df.notnull().all(axis=1)

    #  ~:取反, 表示取出 不包含空值的行
    df.loc[~df.isnull().any(axis=1)]

        ## 固定搭配使用
            isnull()->any
            notnull()->all

    # df.dropna() 可以选择过滤的是行还是列(默认为行):axis中0表示行,1表示的列
    df.dropna(axis=0)    

# 填充函数  Series/DataFrame, 把数据集中的空值数给填充
    # fillna()  value 和 method参数
    # 参数解释:
            # axis=1
            # bfill :  向左填充
             # ffill :  向右填充

             # axis=0
            # bfill : 向上填充
            # ffill :  向下填充
df_test=df.fillna(method='bfill',axis=1).fillna(method='ffill',axis=1)

原文地址:https://www.cnblogs.com/dengl/p/11756666.html

时间: 2024-08-02 15:57:45

python爬虫---数据分析三剑客之: Numpy的相关文章

利用Python进行数据分析:【NumPy】

一.NumPy:数组计算1.NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础.2.NumPy的主要功能: # ndarray,一个多维数组结构,高效且节省空间 # 无需循环对整组数据进行快速运算的数学函数 # *读写磁盘数据的工具以及用于操作内存映射文件的工具 # *线性代数.随机数生成和傅里叶变换功能 # *用于集成C.C++等代码的工具 3.安装方法:pip install numpy 二.NumPy:ndarray-多维数组对象1.创建ndarray:np

数据分析三剑客之一numpy

NumPy系统是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵. 可以用python实现的科学计算包括: 1.一个强大的N维数组对象Array: 2.比较成熟的(广播)函数库: 3.用于整合C/C++和Fortran代码的工具包: 4.实用的线性代数.傅里叶变换和随机数生成函数. 使用的简单概述: 导入包 import numpy 通常会给取别名,便于应用 import numpy as  np      #(推荐使用) 查看版本 np.__version__ 常用函数:

数据分析三剑客之numpy

import numpy as np 一.创建ndarray 两种方式: 1.使用np.array() 2.使用np的routines函数创建 1 np.ones(shape,dtype=None,order='C') # 0 填充 2 np.zeros(shape,dtype=None,order='C') # 1 填充 3 np.full(shape,fill_value,dtype=None,order='C') #fill_value 填充 4 5 np.linsapce(start,s

利用python进行数据分析1【numpy】

1.高维向量转置 Q: A: 2.其他函数 3.np.where(cond,xarr,yarr) cond是条件,xarr,yarr可以是数组,也可以是标量值 1~ 2~ 4.   axis=1,水平方向,0~垂直方向 5.sort()排序 arr.sort() , sorted() 5. 6.线性代数部分函数 7.随机数 8.随机漫步...[待补充]

下载大数据实战课程第一季Python基础和网络爬虫数据分析

python语言近年来越来越被程序相关人员喜欢和使用,因为其不仅简单容易学习和掌握,而且还有丰富的第三方程序库和相应完善的管理工具:从命令行脚本程序到gui程序,从B/S到C/S,从图形技术到科学计算,软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有python的身影:python已经深入到程序开发的各个领域,并且会越来越多的人学习和使用. 大数据实战课程第一季Python基础和网络爬虫数据分析,刚刚入手,转一注册文件,视频的确不错,可以先下载看看:链接:http://pan.baidu

利用 Python 进行数据分析(五)NumPy 基础:ndarray 索引和切片

概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为array[index1:index2],意思是从index1索引位置开始,到index2索引(不包括index2)位置结束的一段数组.例如: 当把一个值赋值为一个切片时,该值会作用于此数组片段里每一个元素,例如: 二维数组 二维数组的索引 当以一维数组的索引方式访问一个二维数组的时候,获取的元素不在

利用 Python 进行数据分析(四)NumPy 基础:ndarray 简单介绍

一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 二.ndarray 是什么 ndarray 是一个多维的数组对象,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点. ndarray 的一个特点是同构:即其中所有元素的类型必须相同. 三.ndarray 的创建 array() 函数 最简单的方法, 使用 NumPy 提供的

网络爬虫-Python和数据分析(高清版)PDF

网络爬虫-Python和数据分析(高清版)PDF百度网盘链接:https://pan.baidu.com/s/1AP6aYNcwTNR_mXs_M4lfYg 提取码:dpu4 复制这段内容后打开百度网盘手机App,操作更方便哦 原文地址:http://blog.51cto.com/12650227/2331450

Numpy学习:《Python数据分析基础教程NumPy学习指南第2版》中文PDF+英文PDF+代码

NumPy是一个优秀的科学计算库,提供了很多实用的数学函数.强大的多维数组对象和优异的计算性能,不仅可以取代Matlab和Mathematica的许多功能,而且业已成为Python科学计算生态系统的重要组成部分.但与这些商业产品不同,它是免费的开源软件. 推荐学习<Python数据分析基础教程NumPy学习指南第2版>,通过书中丰富的示例,学会Matplotlib绘图,并结合使用其他Python科学计算库(如SciPy和Scikits),让工作更有成效,让代码更加简洁而高效. 学习参考: &l