zoukankan      html  css  js  c++  java
  • day 18 numpy、pandas、matplotlib模块

      numpy

    numpy: 专门数组(矩阵)的运算

    lis1 = [1, 2, 3] # 向量
    lis2 = [4, 5, 6] # 向量

    import numpy as np

    arr1 = np.array([1,2,3])
    arr2 = np.array([4,5,6])
    print(arr1*arr2) #[ 4 10 18]


    import numpy as np

    numpy数组
    arr = np.array([1, 2, 3])
    print(arr) # 一维的numpy数组


    arr2 = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr2) # 二维的numpy数组(一般就是二维)

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

    三维的不使用numpy模块,使用tensorflow/pytorch模块


    属性(可以记)
    '''
    T 数组的转置(对高维数组而言)
    dtype 数组元素的数据类型
    size 数组元素的个数
    ndim 数组的维数
    shape 数组的维度大小(以元组形式)
    astype 类型转换
    '''

    arr2 = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr2) # 二维的numpy数组(一般就是二维)
    print(arr2.T) # 行与列互换
    print(arr2.dtype) # python中的数据类型,
    print(arr2.astype(np.float64).dtype)
    print(arr2.size)
    print(arr2.shape)
    print(arr2.ndim)


    切片
    lis = [1,2,3]
    print(lis[:])
    arr2 = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr2) # 二维的numpy数组(一般就是二维)
    print(arr2[:, :])
    print(arr2[0:1, :])
    print(arr2[0:1, 0:1])
    print(arr2[0, :])
    print(arr2[0, 0],type(arr2[0, 0]))
    print(arr2[0, [0,2]])
    print(arr2[0, 0] + 1)


    修改值
    lis = [1,2,3]
    lis[0] = 2
    print(lis)

    arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 可变数据类型
    print(arr2) # 二维的numpy数组(一般就是二维)
    arr2[0, :] = 0
    print(arr2)
    arr2[1, 1] = 1
    print(arr2)
    arr2[arr2 < 3] = 3 # 布尔取值
    print(arr2)


    合并

    arr1 = np.array([[1, 2, 3], [4, 5, 6]]) # 可变数据类型
    print(arr1)
    arr2 = np.array([[7, 8, 9], [10, 11, 12]]) # 可变数据类型
    print(arr2)

    print(np.hstack((arr1,arr2))) # 行合并
    print(np.vstack((arr1,arr2))) # 列合并

    print(np.concatenate((arr1, arr2))) # 默认列合并
    print(np.concatenate((arr1, arr2),axis=1)) # 1表示行;0表示列


    通过函数创建numpy数组
    print(np.zeros((5, 5)))
    print(np.ones((5, 5)) * 100)
    print(np.eye(5))

    print(np.arange(1,10,2)) # 生成一维的
    print(np.linspace(0,20,10)) # 平均分成10份 # 构造x坐标轴的值


    arr = np.zeros((5, 5))
    print(arr.reshape((1,25))) #重新排列数组,size要一样



    数组运算
    +-*/ // % **
    print(arr1*arr2)
    print(arr1+arr2)


    运算函数
    print(np.sin(arr1))
    print(np.cos(arr1))

    print(np.sqrt(arr1))
    print(np.exp(arr1))



    额外补充(了解)
    arr1 = np.array([[1, 2, 3], [4, 5, 6]]) # 可变数据类型
    print(arr1)
    arr2 = np.array([[7, 8, 9], [10, 11, 12]]) # 可变数据类型
    print(arr2)

    print(arr1.T)
    print(arr1.transpose())

    m*n × n*m = m*m
    print(np.dot(arr1,arr2.T))

    求逆
    arr1 = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]])
    print(np.linalg.inv(arr1))


    numpy的数学方法(了解)
    print(arr1.var())
    print(arr1.std())
    print(arr1.mean())
    print(arr1.cumsum()) # 累加和


    numpy随机数(了解)

    print(np.random.rand(3,4))
    print(np.random.randint(1,10,(3,4))) # 最小值1,最大值10,3*4
    print(np.random.choice([1,2,3,4,5],3))

    print(arr1)
    np.random.shuffle(arr1)
    print(arr1)

    随机数种子 # 所有的随机数是按照随机数中子生成的
    import time
    重点
    np.random.seed(int(time.time()))
    np.random.seed(1)
    arr1 = np.random.rand(3,4) # 可变数据类型
    print(arr1)

    rs = np.random.RandomState(1)
    print(rs.rand(3,4))


    以上只是numpy中基础中的基础,如果想细学,https://docs.scipy.org/doc/numpy/reference/?v=20190307135750
    <利用Python进行数据分析> pandas作者写的


    pandas
    pandas更多的是excel/csv文件处理,excel文件, 对numpy+xlrd模块做了一层封装


    pandas的数据类型

    import pandas as pd
    import numpy as np

    # Series(现在一般不使用(一维))
    df = pd.Series(np.array([1,2,3,4]))
    print(df)


    # DataFrame(多维)

    dates = pd.date_range('20190101', periods=6, freq='M')
    print(dates)

    values = np.random.rand(6, 4) * 10
    print(values)

    columns = ['c1','c2','c3','c3']

    df = pd.DataFrame(values,index=dates,columns=columns)
    print(df)

    '''
    dtype 查看数据类型
    index 查看行序列或者索引
    columns 查看各列的标签
    values 查看数据框内的数据,也即不含表头索引的数据
    describe 查看数据每一列的极值,均值,中位数,只可用于数值型数据
    transpose 转置,也可用T来操作
    sort_index 排序,可按行或列index排序输出
    sort_values 按数据值来排序
    '''

    print(df.dtypes)
    print(df.index)
    print(df.columns)
    print(df.describe())
    print(df.T)




    import pandas as pd
    import numpy as np

    dates = pd.date_range('20190101', periods=6, freq='M')
    print(dates)

    values = np.random.rand(6, 4) * 10
    print(values)

    columns = ['c4','c2','c3','c1']

    df = pd.DataFrame(values,index=dates,columns=columns)

    df.T
    df = df.sort_index(axis=1) # 0列,1是行
    df
    df.sort_values('c3') #按列C3的值排序


    #取值

    df['c1']
    df[['c1','c3']]
    df.loc['2019-01-31':'2019-02-28']
    df.values[1,1]
    df.iloc[:,:]
    df[df['c1']>3]


    #值替换
    df.iloc[1,1] = 1



    #pandas操作表格

    from io import StringIO
    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,
    ,,,
    '''
    print(test_data)
    test_data = StringIO(test_data) # 把test_data读入内存,相当于变成文件
    print(test_data)

    #把数据读入内存,变成csv文件

    df = pd.read_csv('test.csv', header=None) #读取文件 # header没有columns
    df.columns =['c1','c2','c3','c4']
    df


    #缺失值处理

    df = df.dropna(axis=0) # 1列,0行
    df = df.dropna(thresh=3) # 必须得有4个值

    #合并处理

    df1 = pd.DataFrame(np.zeros((2,3)))
    df2 = pd.DataFrame(np.ones((2,3)))

    pd.concat((df1,df2),axis=1) # 默认按列0,1行

    df1.append(df2)


    #导入数据
    df = pd.read_csv('test.csv', header=None) #读取文件 # header没有columns
    df.columns =['c1','c2','c3','c4']
    df = df.dropna(thresh=4)
    df.index = ['nick','jason','tank'] #加列标题
    df.to_csv('test1.csv') # 导出csv文件
    df.to_excel('')

    pandas基础中的基础,一定要学会, <奥卡姆剃刀>




    matplotlib
    matplotlib模块:画图
    #条形图
    import matplotlib.pyplot as plt # 默认支持英文,不支持中文
    from matplotlib.font_manager import FontProperties
    font = FontProperties(fname='D:msyh.ttc')

    classes = ['3班','4班','5班','6班']
    students = [50,60,55,67]
    ind = range(len(classes))
    plt.bar(ind,students,color='r')
    plt.xticks(ind,classes,fontproperties= font)
    plt.show()
    plt.style.use('ggplot')
    plt.bar(ind,students,color='darkblue')
    plt.xticks(ind,classes,fontproperties= font)
    plt.xlabel('班级',fontproperties=font,fontsize=15)
    plt.ylabel('人数',fontproperties= font,fontsize=15)
    plt.title('班级-人数',fontproperties=font,fontsize=20)
    plt.show()

     #直方图

    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.font_manager import FontProperties
    # %matplotlib inline # 如果没有这个,不会显示图片,有这个会显示图片(只针对jupyter)
    font = FontProperties(fname='D:msyh.ttc')
    mu1,mu2,sigma = 50,100,10
    x1 = mu1+sigma*np.random.randn(100000) # 符合正太分布的随机数据
    x2 = mu2+sigma*np.random.randn(100000)
    plt.hist(x1,bins=50)  # 每50个数据一根柱子
    plt.show()

    # 对比图
    fig = plt.figure()

    ax1 = fig.add_subplot(1,2,1) # 一行2列 第一个
    ax1.hist(x1,bins=50,color='yellow')
    ax1.set_title('黄色的',fontproperties=font)

    ax2 = fig.add_subplot(1,2,2) # 一行2列 第二个
    ax2.hist(x2,bins=100,color='green')
    ax2.set_title('绿色的',fontproperties=font)

    fig.suptitle('大标题',fontproperties=font,fontsize=20)

    plt.show()

    #折线图

    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.font_manager import FontProperties
    # %matplotlib inline # 如果没有这个,不会显示图片,有这个会显示图片(只针对jupyter)
    font = FontProperties(fname='D:msyh.ttc')

    x1 = np.random.randn(1,40).cumsum()
    x2 = np.random.randn(1,40).cumsum()
    x3 = np.random.randn(1,40).cumsum()
    x4 = np.random.randn(1,40).cumsum()
    plt.plot(x1,marker='o',color='r',label='红线',linestyle='--')
    plt.plot(x2,marker='*',color='y',label='黄线',linestyle='-.')
    plt.plot(x3,marker='s',color='green',label='绿色',linestyle=':')
    plt.plot(x4,marker='x',color='b',label='蓝色',linestyle='-')

    plt.legend(prop=font)  # label的字体的需要在这里换
    plt.show()

    #散点图+直线图
    mport matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.font_manager import FontProperties
    # %matplotlib inline # 如果没有这个,不会显示图片,有这个会显示图片(只针对jupyter)
    font = FontProperties(fname='D:msyh.ttc')

    x1 = np.arange(1,20,2)
    y = x1**2
    plt.scatter(x1,y,s=100)
    plt.show()



    python基础-->(函数/面向对象/网络编程(scoket套接字)/并发编程(mutiprocessing))<br>
    运维+web开发-->页面展示(django/flask/mysql/postgresql/熟悉redis/熟悉mongodb/了解爬虫)**最保险**<br>
    爬虫-->获取数据丢入excel表格;(一天爬一个小网站,经验)(通过爬网站学习知识点-->requests/scrapy/redis数据库/mongodb数据库/scrapy-redis,了解web)<br>
    数据分析-->通过对excel表进行数据的展示(画张图);(基础的excel操作/精通numpy/精通pandas/精通matplotlib必会,了解web)<br>
    数据挖掘-->通过机器学习算法得到决策函数;(了解numpy/了解pandas/了解maplotlib/sklearn/java(scala)/hadoop/hbase/hive,了解web))<br>


    **除了机器学习(人工智能),以上都可以通过努力找到工作,你只能去上网找英文文档(论文/视频)**<br>
    机器学习-->构造机器学习算法(了解numpy/了解pandas/了解maplotlib/sklearn/tensorflow(多维张量操作)/pytorch/数学(高数必会,传统机器学习-->概率论;深度学习-->线性代数,强化学习,进阶<博弈论><离散数学><凸优化>))<br>



    自动化运维--> 运维经验<br>
    自动化测试--> 测试经验<br>
    python办公自动化--> 办公经验<br>
    少儿编程 --> 女孩子,线上视频<br>


     


     
  • 相关阅读:
    java中的设计模式
    stack
    最大堆排序
    Starship Troopers
    Tick and Tick
    Last non-zero Digit in N!
    G
    C
    B
    A
  • 原文地址:https://www.cnblogs.com/wwei4332/p/11377856.html
Copyright © 2011-2022 走看看