• 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)
    
    
    
  • 相关阅读:
    AHOI2012 信号塔 | 最小圆覆盖模板
    BZOJ1337 最小圆覆盖
    HAOI2014 走出金字塔
    HAOI2012 外星人
    HAOI2014 遥感监测
    HAOI2012 道路
    NOI2007 社交网络
    HAOI2012 高速公路
    HAOI2012 容易题
    HAOI2011 Problem c
  • 原文地址:https://www.cnblogs.com/WQ577098649/p/11615391.html
Copyright © 2020-2023  润新知