• numpy/pandas/matplotlib模块


    numpy模块

    numpy模块导入时,注意需要设置别名为 np

    一维数组

    只有一行,相当于一条线

    # 生成一个一维数组
    import numpy as np
    
    lis = [x for x in range(10)]
    arr1 = np.array(lis)
    print(arr1,type(arr1)) #打印结果 [0 1 2 3 4 5 6 7 8 9] <class 'numpy.ndarray'>
    

    二维数组

    有行有列,是numpy模块处理最多的数据类型.

    三维数组就是在一个大中括号中有多个二位数组

    一个列表里面装了多个一维数组.

    # 生成一个二维数组
    import numpy as np
    
    lis1 = [1,2,3]
    lis2 = [4,5,6]
    arr1 = np.array([lis1,lis2])
    print(arr1) # 打印出了一个二维数组
    #[[1 2 3]
     [4 5 6]]
    

    np.array() 括号内需传入一个类似数组的排序对象

    列表list和numpy的区别

    列表就是对一维数组进行操作,而numpy是对多维数组进行操作

    获取多维数组的行和列

    import numpy as np
    
    arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr.shape) # 返回的是一个元组(2, 3),表示这个二维数组的行数和列数
    print(arr.shape[0])# 行
    print(arr.shape[1])# 列
    
    

    多维数组的索引

    • 中括号加锁定,中间用逗号隔开
    import numpy as np
    
    arr = np.array([[1,2,3],[4,5,6]])
    
    # 比如说我想取arr中的第1行第2列
    print(arr[0,1])
    
    # 我想取 第一行所有的数
    print(arr[0,:])
    
    # 我想取 第一列所有的数
    print(arr[:,0])
    
    # 我想取 第一行,第二列的第2个和第3个元素
    print(arr[0,[1,2]])
    
    

    高级功能

    筛选数据

    给定一个多维数组,我想取其中年龄大于60的数

    import numpy as np
    import random
    
    arr = np.array([[random.randint(30, 80) for x in range(5)], [random.randint(30, 80) for x in range(5)], 
                    [random.randint(30, 80) for x in range(5)]])
    
    print(arr > 60) 
    print(arr[arr > 60])
    
    #[[False False False  True  True]
     [ True False False  True False]
     [ True False False False False]]
    
    #[65 66 75 64 61]
    

    多维数组元素的替换

    例如将上面的大于60岁的年龄全部替换成0岁

    import numpy as np
    import random
    
    arr = np.array([[random.randint(30, 80) for x in range(5)], [random.randint(30, 80) for x in range(5)], 
                    [random.randint(30, 80) for x in range(5)]])
    
    print(arr > 60) 
    print(arr[arr > 60])
    
    arr[arr>60]=0
    print(arr)
    
    #[[False False  True False False]
      [False  True  True False False]
      [False  True False  True False]]
    
    # [66 72 72 61 64]
    
    [[58 52  0 51 60]
     [32  0  0 60 56]
     [37  0 60  0 40]]
    

    或者将指定行指定列的元素进行替换

    import numpy as np
    
    arr = np.array([[1,2,3],[4,5,6]])
    arr[1,2] = 10
    print(arr)
    
    #[[ 1  2  3]
      [ 4  5 10]] # 6被替换成10
    

    多维数组的合并

    既然是合并,至少需要两个多维数组

    import numpy as np
    
    arr1 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
    arr2 = np.array([[9, 10, 11, 12], [13, 14, 15, 16]])
    print(f'arr1:{arr1}')
    print(f'arr2:{arr2}')
    
    # 垂直合并
    print(np.vstack((arr1, arr2)))
    
    # 水平合并
    print(np.hstack((arr1, arr2)))
    
    # 默认垂直合并axis=0,
    # axis=1 水平合并
    print(np.concatenate((arr1,arr2),axis=0))
    print(np.concatenate((arr1,arr2),axis=1))
    
    # 打印结果
    arr1:[[1 2 3 4]
     [5 6 7 8]]
        
    arr2:[[ 9 10 11 12]
     [13 14 15 16]]
        
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]
     [13 14 15 16]]
    
    [[ 1  2  3  4  9 10 11 12]
     [ 5  6  7  8 13 14 15 16]]
    
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]
     [13 14 15 16]]
    
    [[ 1  2  3  4  9 10 11 12]
     [ 5  6  7  8 13 14 15 16]]
    

    在numpy中为了统一做处理,只要有axis=0的就是列,axis=1的就是行

    通过函数方法创建多维数组

    import numpy as np
    
    # arange 创建一维数组
    print(np.arange(10)) #1-10,不含10
    print(np.arange(1,10,2)) # 开始,结束,步长
    # 打印结果
    [0 1 2 3 4 5 6 7 8 9]
    
    [1 3 5 7 9]
    
    # ones 打印出的都是1
    print(np.ones((3,4))) # 需要传一个元组,设置行和列
    # 打印结果
    [[1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]]
    
    # zeros 打印出的都是0
    print(np.zeros((3,4))) # 需要传一个元祖,设置行和列
    # 打印结果
    [[0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]]
    
    # eye 
    print(np.eye(5,5))
    # 打印结果
    [[1. 0. 0. 0. 0.]
     [0. 1. 0. 0. 0.]
     [0. 0. 1. 0. 0.]
     [0. 0. 0. 1. 0.]
     [0. 0. 0. 0. 1.]]
    

    矩阵的运算

    # 多维数组之间可以进行运算
    # + - * / % **
    import numpy as np
    
    arr1 = np.arange(1,10)
    arr2 = np.arange(11,20)
    
    print(arr1) # 矩阵arr1
    # [1 2 3 4 5 6 7 8 9]
    
    print(arr2) # 矩阵arr2
    # [11 12 13 14 15 16 17 18 19]
    
    print(arr1+arr2) # 两个矩阵对应位置的元素相加
    # [12 14 16 18 20 22 24 26 28]
    
    print(arr1-arr2) # 两个矩阵对应位置的元素相减
    # [-10 -10 -10 -10 -10 -10 -10 -10 -10]
    
    print(arr1*arr2) # 两个矩阵对应位置的元素相乘
    # [ 11  24  39  56  75  96 119 144 171]
    
    print( arr2/arr1) # 两个矩阵对应位置的元素相除
    # [11.          6.          4.33333333  3.5         3.          2.66666667
    #   2.42857143  2.25        2.11111111]
    
    print(arr2%arr1) # 对应位置取余
    # [0 0 1 2 0 4 3 2 1]
    
    print(arr1**2) # 单个矩阵每个元素都取2次方
    # [ 1  4  9 16 25 36 49 64 81]
    

    求最大值最小值

    import numpy as np
    
    # 求最大值
    arr = np.array([[1, 4, 6, 7], [9, 5, 7, 8]])
    print(arr.max())
    
    # 求最小值
    print(arr.min())
    
    

    numpy生成随机数

    import numpy as np
    # 生成3行4列0到1之间的随机小数
    print(np.random.rand(3,4))
    
    import numpy as np
    
    np.random.seed(1)# 永不随机,固定的数
    print(np.random.rand(3,4))
    
    
    rs = np.random.RandomState(1)  # 永不随机,固定的数
    rs.rand(3, 4)
    

    pandas模块

    pandas模块有什么用

    支持文件存取操作

    Series(了解)

    类似于一维数组,只能放一维数组

    import pandas as pd
    import numpy as np
    
    print(pd.Series(np.arange(10)))
    # 打印结果
    0    0
    1    1
    2    2
    3    3
    4    4
    5    5
    6    6
    7    7
    8    8
    9    9
    dtype: int64
    

    二维以上的数组使用DataFrame

    DataFrame(掌握)

    import pandas as pd
    import numpy as np
    
    print(pd.DataFrame(np.array([[1, 2, 3, 4], [1, 2, 3, 4]])))
    # 打印结果
       0  1  2  3
    0  1  2  3  4
    1  1  2  3  4	
    
    # 时间范围 
    dates = pd.date_range('2019-02',periods=7) # 默认从1月1日开始,
    print(dates)
    # 打印结果
    DatetimeIndex(['2019-02-01', '2019-02-02', '2019-02-03', '2019-02-04',
                   '2019-02-05', '2019-02-06', '2019-02-07'],
                  dtype='datetime64[ns]', freq='D')
    
    import pandas as pd
    import numpy as np
    
    dates = pd.date_range('2018-02', periods=7) # 日期
    # print(dates)
    goods_list = ['tesla', 'transformer', 'chognqiwawa', 'masaladi'] # 商品列表
    price = np.random.rand(7, 4) # 随机商品价格,7行4列
    # print(price)
    
    df = pd.DataFrame(price, index=dates, columns=goods_list) # 约定俗成,习惯用 df
    print(df)
    
    #              tesla  transformer  chognqiwawa  masaladi
    2018-02-01  0.993845     0.124944     0.534339  0.436508
    2018-02-02  0.948098     0.921375     0.931371  0.288497
    2018-02-03  0.965210     0.074648     0.108268  0.198268
    2018-02-04  0.709131     0.207583     0.414028  0.520331
    2018-02-05  0.146407     0.025101     0.399028  0.916314
    2018-02-06  0.884905     0.319202     0.448119  0.721902
    2018-02-07  0.549198     0.324437     0.872872  0.311014
    

    df的相关方法及属性

    # dtype    查看数据类型
    # index    查看行序列或者索引
    # columns  查看各列的标签
    # values   查看数据框内的数据,也即不含表头索引的数据
    # describe 查看数据每一列的极值,均值,中位数,只可用于数值型数据
    # transpose    转置,也可用T来操作
    # sort_index   排序,可按行或列index排序输出
    # sort_values     按值排序,可以具体选择某一个标签
    
    print(df.dtype) # 打印每一行的数据类型
    print(df.index) # 打印所有的行的索引
    print(df.columns) # 打印所有的列的标签
    print(df.values) # 打印数据框内的数据,不含表头和索引的数据
    print(df.sort_values(by=['tesla'], ascending=False)) # 按照标签'tesla'进行排序,可以控制升序或者降序
    

    处理缺失值

    test_data = '''
    5.1,,1.4,0.2
    4.9,3.0,1.4,0.2
    4.7,3.2,,0.2
    7.0,3.2,4.7,1.4
    6.4,3.2,4.5,1.5
    6.9,3.1,4.9,
    ,,,
    '''
    这个矩阵中缺失了一部分数据
    
    import pandas as pd
    from io import StringIO
    
    
    test_data = StringIO(test_data) # 把test_data读入内存
    df = pd.read_csv(test_data) # 从csv中读取test_data数据
    print(df)
    
    df2 = df.dropna(thresh=4, axis=1) # 0是行,1是列  thresh 表示存在正常数据的个数
    print(df2)
    df3 = df.dropna(thresh=1, axis=0) # 0是行,1是列
    print(df3)
    # df4 = df.dropna(subset['c2']) #
    # print(df4)
    df5 = df.fillna(value=33)      # 缺失的值会被value值替换填充
    print(df5)
    

    合并数据

    import pandas as pd
    import numpy as np
    
    df2 = pd.DataFrame(np.zeros((3, 4)))
    df3 = pd.DataFrame(np.ones((3, 4)))
    df4 = pd.concat((df2,df3),axis=0) # 默认是垂直合并
    df5 = pd.concat((df2,df3),axis=1) # 改为1后是水平合并
    print(df4,df5)
    

    matplotlib模块

    matplotlib模块有什么用?

    图形可视化,主要用来画图

    import matplotlib.pyplot as plt
    # 只识别英语,所以通过以下两行增加中文字体
    from matplotlib.font_manager import FontProperties
    
    # %matplotlib inline  # jupyter默认不显示图片,通过这一行告诉他显示图片
    font = FontProperties(fname='D:msyh.ttc')
    
    classes = ['1班', '2班', '3班', '4班']
    student_amounts = [30, 20, 30, 40]
    
    classes_index = range(len(classes))  # [0,1,2,3]
    #      [0,1,2,3]      [30,20,30,40]
    plt.bar(classes_index, student_amounts)
    plt.xticks(classes_index, classes, FontProperties=font)
    plt.text(0, 32, '30')
    
    plt.xlabel('班级', FontProperties=font)
    plt.ylabel('学生人数', FontProperties=font)
    plt.title('班级-学生人数', FontProperties=font)
    plt.style.use('ggplot')
    plt.plot()
    plt.show()
    
  • 相关阅读:
    【转】你刚才在淘宝上买了一件东西【技术普及贴】
    Hibernate使用自定义脚本替换注解或者xml文件中的自动生成表结构
    北京地铁和广州地铁之感想
    使用eclipse开发工具与hibernate开发者为开源一起做贡献
    hdu 1159 Common Subsequence(最长公共子序列LCS)
    题解报告:hdu 2059 龟兔赛跑
    循环顺序队列模拟病人看病程序
    题解报告:hdu 1060 Leftmost Digit
    ACM_求N^N的最高位数
    ACM_Encoding
  • 原文地址:https://www.cnblogs.com/chenych/p/11082572.html
Copyright © 2020-2023  润新知