zoukankan      html  css  js  c++  java
  • numpy模块,matplotlib模块,pandas模块。

    1.numpy模块:

    一.numpy模块作用:用来做数据分析,对numpy数组(既有行又有列) --》 矩阵进行科学运算

    二. 为什么用numpy

    list1 = [1,2,3]
    list2 = [4,5,6]
    lt = []
    for i in range(len(list1))
    	lt.append(list1[i]*list2[i])
    print(lt)  #[ 4 10 18]
    
    
    import numpy as np 
    arr1 = np.array([1, 2, 3])
    arr2 = np.array([4, 5, 6])
    print(arr1 * arr2) #[ 4 10 18]
    

    如果我们想让list1 * list2得到一个结果为lis_res = [4, 10, 18],非常复杂。

    三. 创建numpy数据

    numpy数组即numpy的ndarray对象,创建numpy数组就是把一个列表传入np.array()方法。

    import numpy as np  #约定俗成的
    

    创建一维的ndarray对象

    arr = np.array([1, 2, 4])
    print(type(arr), arr)  #<class 'numpy.ndarray'> [1 2 4]
    

    创建二维的ndarray对象 (**)

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

    创建三维的ndarray对象

    print(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
          
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    

    四 . numpy数组的常用属性

    4.1T 数组的转置(对高维数组而言) --> 行列互换,转置

    import numpy as np
    arr = np.array([
        [1, 2, 3],
        [4, 5, 6]
    ])
    
    # T	数组的转置(对高维数组而言) --> 行列互换,转置
    print(arr, '
    ', arr.T)
    
    [[1 2 3]
     [4 5 6]] 
     [[1 4]
     [2 5]
     [3 6]]
    
    解释:列表中的值,行和列值相乘在相加,以整型形式输出
    # dtype	数组元素的数据类型,numpy数组是属于python解释器的;int32/float64属于numpy的
    import numpy as np
    arr = np.array([
        [1, 2, 3],
        [4, 5, 6]
    ])
    
    # dtype	数组元素的数据类型,numpy数组是属于python解释器的;int32/float64属于numpy的
    print(arr.dtype)  #int32
    
    #判断数据中数组的是几维数
    import numpy as np
    arr = np.array([
        [1, 2, 3],
        [4, 5, 6]
    ])
    arr3 = np.array([
        [[1, 2, 3],
         [4, 5, 6]],
        [[1, 2, 3],
         [4, 5, 6]],
    ])
    print(arr.ndim)
    print(arr3.ndim)
    
    
    # shape	数组的维度大小(以元组形式)
    print(arr.shape[0])
    print(arr.shape[1])
    
    
    # astype	类型转换
    arr = arr.astype(np.float64)
    print(arr)
    
    

    由于numpy数组是多维的,对于二维的数组而言,numpy数组就是既有行又有列。

    注意:对于numpy我们一般多讨论二维的数组。

    arr = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr)
    [[1 2 3]
     [4 5 6]]
    # 获取numpy数组的行和列构成的数组
    print(arr.shape)
    (2, 3)
    # 获取numpy数组的行
    print(arr.shape[0])
    2
    # 获取numpy数组的列
    print(arr.shape[1])
    3
    
    
    4.1切割numpy
    切分numpy数组类似于列表的切割,但是与列表的切割不同的是,numpy数组的切割涉及到行和列的切割,但是两者切割的方式都是从索引0开始,并且取头不取尾。
    
    arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
    print(arr)
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]]
    # 取所有元素
    print(arr[:, :])
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]]
    # 取第一行的所有元素
    print(arr[:1, :])
    [[1 2 3 4]]
    # 取第一行的所有元素
    print(arr[0, [0, 1, 2, 3]])
    [1 2 3 4]
    # 取第一列的所有元素
    print(arr[:, :1])
    [[1]
     [5]
     [9]]
    # 取第一列的所有元素
    print(arr[(0, 1, 2), 0])
    [1 5 9]
    # 取第一行第一列的元素
    print(arr[(0, 1, 2), 0])
    [1 5 9]
    # 取第一行第一列的元素
    print(arr[0, 0])
    1
    # 取大于5的元素,返回一个数组
    print(arr[arr > 5])
    [ 6  7  8  9 10 11 12]
    # numpy数组按运算符取元素的原理,即通过arr > 5生成一个布尔numpy数组
    print(arr > 5)
    [[False False False False]
     [False  True  True  True]
     [ True  True  True  True]]
    
    
    # 数组的合并
    
    arr1 = np.array([
        [1, 2, 3],
        [4, 5, 6]
    ])
    
    arr2 = np.array([
        [7, 8, 9],
        ['a', 'b', 'c']
    ])
    
    print(np.hstack((arr1, arr2)))  # 只能放元组
    
    print(np.vstack((arr1, arr2)))
    
    print(np.concatenate((arr1, arr2), axis=1))  # 默认以列合并 # 0表示列,1表示行
    
    # 通过函数创建numpy数组
    
    print(np.ones((2, 3)))
    
    print(np.zeros((2, 3)))
    
    print(np.eye(3, 3))
    
    print(np.linspace(1, 100, 10))
    
    print(np.arange(2, 10))
    
    arr1 = np.zeros((1, 12))
    print(arr1.reshape((3, 4)))  # 重构形状
    
    # numpy数组运算
    
    # +-*'
    arr1 = np.ones((3, 4)) * 4
    print(arr1)
    
    # numpy数组运算函数
    
    print(np.sin(arr1))
    
    # 矩阵运算--点乘
    
    arr1 = np.array([
        [1, 2, 3],
        [4, 5, 6]
    ])
    
    arr2 = np.array([
        [1, 2],
        [4, 5],
        [6, 7]
    ])
    # 2* 3 3*2
    print(np.dot(arr1, arr2))
    
    # 求逆
    arr = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]])
    print(np.linalg.inv(arr))
    
    # numpy数组数学和统计方法
    print(np.sum(arr[0, :]))
    
    # numpy.random生成随机数(******)
    print(np.random.rand(3, 4))
    
    print(np.random.random((3, 4)))
    
    # np.random.seed(1)
    print(np.random.random((3, 4)))
    
    s = np.random.RandomState(1)
    print(s.random((3, 4)))
    
    arr = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]])
    np.random.shuffle(arr)
    print(arr)
    
    # 针对一维
    print(np.random.choice([1, 2, 3], 1))
    
    # 针对某一个范围
    print(np.random.randint(1, 100, (3, 4)))
    
    # 以上只是基础中的基础,入门都还没达到  《利用python进行数据分析》
    
    
    # sklearn会对numpy封装
    
    
    

    2.matplotlib

    # matplotlib模块:画图
    
    # 条形图
    # from matplotlib import pyplot as plt  # 约定俗成
    # from matplotlib.font_manager import FontProperties  # 修改字体
    #
    # font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    #
    # plt.style.use('ggplot')  # 设置背景
    #
    # clas = ['3班', '4班', '5班', '6班']
    # students = [50, 55, 45, 60]
    # clas_index = range(len(clas))
    #
    # # [0,1,2,3] [50,55,45,60]
    # plt.bar(clas_index,students,color='darkblue')
    #
    # plt.xlabel('学生',fontproperties=font)
    # plt.ylabel('学生人数',fontproperties=font)
    # plt.title('班级-学生人数',fontproperties=font,fontsize=20,fontweight=25)
    # plt.xticks(clas_index,clas,fontproperties=font)
    #
    # plt.show()
    
    
    # # 直方图
    # import numpy as np
    # from matplotlib import pyplot as plt  # 约定俗成
    # from matplotlib.font_manager import FontProperties  # 修改字体
    #
    # font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    #
    # plt.style.use('ggplot')
    #
    # x1 = np.random.randn(10000)
    #
    # x2 = np.random.randn(10000)
    #
    # fig = plt.figure()  # 生成一张画布
    # ax1 = fig.add_subplot(1, 2, 1)  # 1行2列取第一个
    # ax2 = fig.add_subplot(1, 2, 2)
    #
    # ax1.hist(x1, bins=50,color='darkblue')
    # ax2.hist(x2, bins=50,color='y')
    #
    # fig.suptitle('两个正太分布',fontproperties=font,fontsize=20)
    # ax1.set_title('x1的正太分布',fontproperties=font)  # 加子标题
    # ax2.set_title('x2的正太分布',fontproperties=font)
    # plt.show()
    
    
    # 折线图
    #
    # import numpy as np
    # from matplotlib import pyplot as plt  # 约定俗成
    # from matplotlib.font_manager import FontProperties  # 修改字体
    #
    # font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    #
    # plt.style.use('ggplot')
    #
    # np.random.seed(10)
    # x1 = np.random.randn(40).cumsum()
    # x2 = np.random.randn(40).cumsum()
    # x3 = np.random.randn(40).cumsum()
    # x4 = np.random.randn(40).cumsum()
    #
    # plt.plot(x1, c='r', linestyle='-', marker='o', label='红圆线')
    # plt.plot(x2, color='y', linestyle='--', marker='*', label='黄虚线')
    # plt.plot(x3, color='b', linestyle='-.', marker='s', label='蓝方线')
    # plt.plot(x4, color='black', linestyle=':', marker='s', label='黑方线')
    # plt.legend(loc='best', prop=font)  # 显示label
    # plt.show()
    
    
    # 散点图+直线图
    import numpy as np
    from matplotlib import pyplot as plt  # 约定俗成
    from matplotlib.font_manager import FontProperties  # 修改字体
    
    font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    
    plt.style.use('ggplot')
    
    fig = plt.figure()
    ax1 = fig.add_subplot(1, 2, 1)
    ax2 = fig.add_subplot(1, 2, 2)
    
    x = np.arange(20)
    y = x ** 2
    
    x2 = np.arange(20)
    y2 = x2
    
    ax1.scatter(x, y, c='r', label='红')
    ax1.scatter(x2, y2, c='b', label='蓝')
    
    ax2.plot(x, y)
    ax2.plot(x2, y2)
    
    fig.suptitle('两张图', fontproperties=font, fontsize=15)
    ax1.set_title('散点图', fontproperties=font)
    ax2.set_title('折线图', fontproperties=font)
    ax1.legend(prop=font)
    plt.show()
    
    # 以上只是基础中的基础
    
    
    

    3.pandas模块

    pandas模块:操作excel/json/sql/ini/csv(配置文件)/

    # pandas模块:操作excel/json/sql/ini/csv(配置文件)/
    
    
    # import pandas as pd
    #
    # df = pd.read_csv('test.csv',header=None)
    # df.to_excel('test.xls')
    
    
    # pd从excel中读取 DataFrame数据类型
    import numpy as np
    import pandas as pd
    
    np.random.seed(10)
    
    index = pd.date_range('2019-01-01', periods=6, freq='M')
    print(index)
    columns = ['c1', 'c2', 'c3', 'c4']
    print(columns)
    val = np.random.randn(6, 4)
    print(val)
    
    df = pd.DataFrame(index=index, columns=columns, data=val)
    print(df)
    
    # 保存文件,读出成文件
    df.to_excel('date_c.xlsx')
    
    # 读出文件
    df = pd.read_excel('date_c.xlsx', index_col=[0])
    print(df)
    
    print(df.index)
    print(df.columns)
    print(df.values)
    
    print(df[['c1', 'c2']])
    
    # 按照index取值
    # print(df['2019-01-31'])
    print(df.loc['2019-01-31'])
    print(df.loc['2019-01-31':'2019-05-31'])
    
    # 按照values取值
    print(df)
    print(df.iloc[0, 0])
    
    df.iloc[0, :] = 0
    print(df)
    
    
    
  • 相关阅读:
    Atitit.Java exe bat  作为windows系统服务程序运行
    Atitit. Object-c语言 的新的特性  attilax总结
    Atitit. Object-c语言 的新的特性  attilax总结
    Atitit。Time base gc 垃圾 资源 收集的原理与设计
    Atitit。Time base gc 垃圾 资源 收集的原理与设计
    Atitit.go语言golang语言的新的特性  attilax总结
    Atitit.go语言golang语言的新的特性  attilax总结
    Atitit.pdf 预览 转换html attilax总结
    Atitit.pdf 预览 转换html attilax总结
    Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结
  • 原文地址:https://www.cnblogs.com/WQ577098649/p/11615391.html
Copyright © 2011-2022 走看看