为了账号安全,请及时绑定邮箱和手机立即绑定

Python数据分析-基础技术篇

难度初级
时长 2小时42分
学习人数
综合评分8.40
77人评价 查看评价
9.0 内容实用
8.1 简洁易懂
8.1 逻辑清晰
  • 111
    查看全部
    0 采集 收起 来源:numpy常用Array

    2019-06-10

  • # 常用图标:散点图 scatter
    fig = plt.figure()
    ax = fig.add_subplot(3, 3, 1) # 3行3列第1个子图,创建一个子图
    n = 128
    X = np.random.normal(0, 1, n)
    Y = np.random.normal(0, 1, n)
    T = np.arctan2(Y, X) # 用来上色,arctan的平方(Y/X)
    # plt.axes([0.05, 0.05, 0.9, 0.9]) # 指定显示范围
    ax.scatter(X, Y, s=25, c=T, alpha=.5) # s:size
    plt.xlim(-1.5*1.1, 1.5*1.1), plt.xticks() # xlim设置横轴的上下限, xticks设置横轴记号
    plt.ylim(-1.5*1.1, 1.5*1.1), plt.yticks()
    plt.axis()
    plt.title("scatter")
    plt.xlabel("x")
    plt.ylabel("y")
    
    # bar
    ax = fig.add_subplot(332) # 3行3列第2个
    n = 5
    X = np.arange(n)
    Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
    Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
    
    ax.bar(X, +Y1, facecolor='#9999ff', edgecolor='purple')
    ax.bar(X, -Y2, facecolor='#ff9999', edgecolor='green')
    
    for x, y in zip(X, Y1):
        plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')
    for x, y in zip(X, Y2):
        plt.text(x + 0.4, -y - 0.05, '%.2f' % y, ha='center', va='top')
    
    # Pie
    fig.add_subplot(333)
    n = 20
    Z = np.ones(n)
    Z[-1] *= 2 # 最后一个设为2
    # explode 每个扇形离中心的距离,labels 将颜色值显示出来
    plt.pie(Z, explode=Z * .05, colors=['%f' % (i / float(n)) for i in range(n)],
            labels=['%.2f' % (i / float(n)) for i in range(n)])
    # plt.gca().set_aspect('equal') # 正圆
    plt.xticks([]), plt.yticks([])
    
    # 极坐标图 polar
    fig.add_subplot(334, polar=True) # polar!= True为折线图
    n = 20
    theta = np.arange(0.0, 2 * np.pi, 2 * np.pi / n)
    radii = 10 * np.random.rand(n)
    plt.polar(theta, radii) # 两种方法都可以
    # plt.plot(theta, radii)
    
    # heatmap 热图
    fig.add_subplot(335)
    from matplotlib import cm
    data = np.random.rand(3, 3)
    cmap = cm.Blues # 蓝色系
    # interpolation 插值:用离它最近的值做插值,coloarmap, aspect 缩放,vmin 白色,vmax 这里为蓝色
    map = plt.imshow(data, interpolation='nearest', cmap=cmap, aspect='auto', vmin=0, vmax=1)
    
    # 3D
    from mpl_toolkits.mplot3d import Axes3D
    ax = fig.add_subplot(336, projection="3d")
    ax.scatter(1, 1, 3, s=100)
    
    # hot map 热力图
    fig.add_subplot(313)
    def f(x, y):
        return (1 - x / 2 + x **5 + y ** 3) * np.exp(-x ** 2 - y **2)
    n = 256
    x = np.linspace(-3, 3, n)
    y = np.linspace(-3, 3, n)
    X, Y = np.meshgrid(x, y)
    plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot) # cmap 指定热力图颜色
    
    plt.savefig("./data/fig.png", dpi=72) # 以分辨率 72 来保存图片
    plt.show()


    查看全部
  • #encoding=utf-8
    import numpy as np
    
    def main():
        # line
        import matplotlib.pyplot as plt
        x = np.linspace(-np.pi, np.pi, 256, endpoint=True) # -pi和pi之间取256个点,并包含最后一个点
        c, s = np.cos(x), np.sin(x)
        plt.figure(1) # 绘制第一个图
        plt.plot(x, c, color="blue", linewidth=1.0, linestyle='-', label="COS", alpha=0.5)
        plt.plot(x, s, "r*", label="SIN") # r:red, *: 线型
        plt.title("Cos & Sin")
    
        # 现在显示四周都有边框,如何只显示两条坐标轴呢,需要除去两边边框
        ax = plt.gca() # 轴的编辑器 #spines表示四周的线
        ax.spines["right"].set_color("none") # 去掉右外框
        ax.spines["top"].set_color("none")  # 去掉上外框
        ax.spines["left"].set_position(("data", 0)) # 设置左边线位置
        ax.spines["bottom"].set_position(("data", 0))
        ax.xaxis.set_ticks_position("bottom") # 编辑轴上数字,坐标轴的数字显示在横轴下面和纵轴左面
        ax.yaxis.set_ticks_position("left") # 编辑轴上数字
        # 设置横轴,两个数组,第一个指定横轴标识的位置,第二个为内容
        plt.xticks([-np.pi, -np.pi / 2.0, np.pi / 2.0, np.pi],
                   [r'$-\pi$', r'$-\pi/2$', r'$+\pi/2$', r'$+\pi$'])
        plt.yticks(np.linspace(-1, 1, 5, endpoint=True)) # 直接给y轴标数字即可
        for label in ax.get_xticklabels() + ax.get_yticklabels(): # 设置坐标轴数字显示大小和颜色
            label.set_fontsize(16)
            # 设置label的小方块及其背景 face: 背景色,edge: 边缘,alpha:透明度
            label.set_bbox(dict(facecolor="purple", edgecolor="None", alpha=0.2))
        plt.legend(loc="upper left") # 图例说明,loc指定位置
        plt.grid() # 网格线
        # plt.axis([-1, 1, -0.5, 1]) # [-1, 1] 横轴显示范围,[-0.5,1] 纵轴显示范围
        plt.fill_between(x, np.abs(x)<0.5, c, c>0.5, color="green", alpha=0.25) # 填充两条线间的颜色
        t = 1
        plt.plot([t, t], [0, np.cos(t)], 'y', linewidth=3, linestyle='--') # 加注释
        plt.annotate("cos(1)", xy=(t, np.cos(1)), xycoords="data", xytext=(+10, +30),
            textcoords="offset points",
            arrowprops=dict(arrow, connection))
        # xy为加的点的位置, xytext加偏移量,textcoords指定是一个相对位置,connectionstyle指定弧度为0.2
        plt.show()
    
    '''
    plt.fill_between(x, y1, y2=0, where=None,
        interpolate=False, step=None, hold=None, data=None, **kwargs)
    x - array( length N) 定义曲线的 x 坐标
    y1 - array( length N ) or scalar 定义第一条曲线的 y 坐标
    y2 - array( length N )  or scalar 定义第二条曲线的 y 坐标
    where - array of bool (length N), optional, default: None 
                 排除一些(垂直)区域被填充。
                 注:我理解的垂直区域,但帮助文档上写的是 horizontal regions
    '''
    # 我的理解:从y1到y2的水平区域
    if __name__ == "__main__":
        main()


    查看全部
    2 采集 收起 来源:基本线图绘制

    2019-05-15

  • # 4. liner
    from numpy.linalg import *
    print np.eye(3) # 单位矩阵
    lst = np.array([[1, 2],
                    [3, 4]])
    print "Inv:"
    print inv(lst) # 矩阵的逆
    print "T"
    print lst.transpose() # 转置矩阵
    print "Det:"
    print det(lst) # 行列式
    print eig(lst) # 特征值和特征向量,一个元组,两个array
    y = np.array([[5], [7]])
    print "Solve"
    print solve(lst, y) # 解方程组 x+2y=5; 3x+4y=7


    查看全部
  • # encoding=utf-8
    import numpy as np
    
    def main():
        lst = [[1, 3, 5], [2, 4, 6]]
        print(type(lst))
        # 1. ndArray
        np_lst = np.array(lst)
        print(type(np_lst))
        np_lst=np.array(lst, dtype=np.float)
        #bool,int,int8,int16,int32, int64, int128, uint8/16/32/64/128, float, float16/32/64, complex64/128
        
        print(np_lst.shape) # 2行,3列
        print(np_lst.ndim) # 两行,维度
        print(np_lst.dtype) # float64,数据类型
        print(np_lst.itemsize) # 8,每个元素的大小,数据类型是64,64位占8个字节,itemsize就是8
        print(np_lst.size) # 6,6个元素,这个nparray占6*8=48个字节


    查看全部
    0 采集 收起 来源:ndarray

    2019-05-14

  • # 2. Some 常用 Arrays
    print np.zeros([2, 4])
    print np.ones([3, 5])
    print "Rand:"
    print np.random.rand(2, 4) # 2行4列随机数数组
    print np.random.rand() # 产生一个随机数
    print "RandInt:"
    print np.random.randint(1, 10, 3) # 参数为随机整数的范围[1,10], 3个
    print "Randn:" # 标准动态分布的随机数
    print np.random.randn(2, 4) # 2行4列
    print np.random.choice([10, 20, 30]) # 列表中随机一个产生
    print "Distribute:" # 分布
    print np.random.beta(1, 10, 100) # beta分布,还可二项分布等


    查看全部
    1 采集 收起 来源:numpy常用Array

    2019-05-14

  • # 3. Some Array Opers
    lst = np.arange(1, 11).reshape([2, 5]) # 5可以缺省为-1, 产生一个1-11(不含11)的等差数列
    print lst
    print "Exp"
    print np.exp(lst)
    print "Exp2"
    print np.exp2(lst)
    print "Sqrt"
    print np.sqrt(lst)
    print "sin"
    print np.sin(lst)
    print "log"
    print np.log(lst)
    
    lst = np.arange(1,25).reshape([3, 2, 4]) # 等差数列
    # 即如下数组
    lst = np.array([[[1, 2, 3, 4],
                     [5, 6, 7, 8]],
                    [[9, 10, 11, 12],
                     [13, 14, 15, 16]],
                    [[17, 18, 19, 20],
                     [21, 22, 23, 24]]])
    print lst
    print lst.sum()
    # x为维度,x越大,深入程度越大。0:最外层,1:再往里深入一层,对各个元素操作
    print lst.sum(axis=0) # 最外层共3个元素,第一个元素:[[1, 2, 3, 4], [5, 6, 7, 8]]
    print lst.sum(axis=1) # 再深入一层,第一个元素:[1, 2, 3, 4],第二个:[5, 6, 7, 8]
    print lst.sum(axis=2) # 再深入一层,遍历[1, 2, 3, 4]求和得第一个元素。
    print lst.max(), lst.min()
    print lst.max(axis=2)
    print lst.max(axis=1)
    print lst.max(axis=0)
    
    # 对两个数组操作
    lst1 = np.array([10, 20, 30, 40])
    lst2 = np.array([4, 3, 2, 1])
    print "Add"
    print lst1+lst2
    print "Sub"
    print lst1-lst2
    print "Mul"
    print lst1*lst2
    print "Div"
    print lst1/lst2
    print "Square"
    print lst1**2
    print "Dot" # 点乘
    print np.dot(lst1.reshape([2, 2]), lst2.reshape([2, 2]))
    
    # numpy 中 array 追加 Concatenate
    print "Concatenate"
    print np.concatenate((lst1, lst2), axis=0) # 追加,更简单的追加如下
    print np.vstack((lst1, lst2)) # 上下接起来,2行,垂直接起来
    print np.hstack((lst1, lst2)) # 水平接起来
    print np.split(lst1, 2) # 分割为两个数组
    print np.copy(lst1) # 拷贝
    查看全部
    3 采集 收起 来源:numpy常用操作

    2019-05-14

  • 问:代码没有问题,无法得到运行结果,怎么办?
    答:只定义了函数,但没有执行的语句,加上
    if __name__ == '__main__': 
        main()
    查看全部
    0 采集 收起 来源:ndarray

    2019-05-13

  • python数据分析包

    python数据分析重要的几个库:numpy、scipy、matplotlib、pandas、-scikit-learn、Keras。

    开发工具:Anaconda

    查看全部
    0 采集 收起 来源:概述

    2019-05-13

  • from scipy.interpolate import interpld

    x=np.linspace(0,1,10)

    y=np.sin(2*np.pi*x)

    li=interpld(x,y,kind="cubic")

    x_new=np.linspace(0,1,50)

    li_res=li(x_new)

    figure()

    plot(x,y,"r")

    plot(x_new,y_new,"k")

    show()

    print(y_new)

    查看全部
    1 采集 收起 来源:scipy插值

    2019-05-08

  • 1.Numpy 数据结构基础
    2.scipy 强大的科学计算方法
    3.matplotlib 丰富的可视化套件
    4.pandas 基础数据分析套件
    5.scilit-learn 数据分析建模库
    6.keras 人工神经网络


    查看全部
    0 采集 收起 来源:概述

    2019-05-08

  • **2. 优化(scipy.optimize)**


    scipy.optimize模块提供了函数最值、曲线拟合和求根的算法。


    该模块包括:

    ——多元标量函数的无约束和约束极小化(minimize)。使用多种算法(例如BFGS、Nder-Mead单纯形、Newton共轭梯度、COBYLA或SLSQP)

    ——全局(蛮力)优化例程。basinhopping, differential_evolution)

    ——最小二乘极小化(least_squares)和曲线拟合(curve_fit)算法

    ——标量单变量函数极小化(minimize_scalar)和根查找器(root_scalar)

    ——多元方程组求解器(root)使用多种算法(例如,混合鲍威尔、Levenberg-MarQuardt或大规模方法,如Newton-Krylov)


    **无约束函数最值(以最小值为例):**

    导入模块:

    ```

    from scipy.optimize import minimize

    import numpy as np

    ```

    在数学最优化中,Rosenbrock函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock在1960年提出。也称为Rosenbrock山谷或Rosenbrock香蕉函数,也简称为香蕉函数。

    函数表达式(N是x的维数):

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190428205545454.png)


    定义一个目标函数(Rosenbrock函数——香蕉函数):

    ```

    def rosen(x):

        """The Rosenbrock function"""

        return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0+(1-x[:-1])**2.0)

    x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])

    ```

    求解:

    ```

    res = minimize(rosen, x0, method='nelder-mead', options={'xtol': 1e-8, 'disp': True})

     print(res.x)     #res.x是优化结果,返回一个ndarry

    ```


    minimize(fun, x0[, args, method, jac, hess, …])   

    fun——一个或多个变量的标量函数的最小化

    x0——初始猜测值,相当于指定了N

    method就是优化算法

    Xtol是精度

    disp指是否显示过程(True则显示)


    过程与结果:

    ```

    Optimization terminated successfully.

             Current function value: 0.000000

             Iterations: 339

             Function evaluations: 571

    [1. 1. 1. 1. 1.]

    ```

    **有约束函数最值(最小值为例):**

    导入模块:

    ```

    from scipy.optimize import minimize

    import numpy as np

    ```

    定义函数:

    f(x) = 2xy+2x-x^2^-2y^2^ 

    偏导数:

    2y+2-2x

    2x-4y

    ```

    def fun(x):

        return (2*x[0]*x[1]+2*x[0]-x[0]**2-2*x[1]**2)

    def func_deriv(x):

        dfdx0 = (-2*x[0]+2*x[1]+2)

        dfdx1 = (2*x[0]-4*x[1])

        return np.ndarry([dfdx0,dfdx1])

    ```

    约束条件(等于转化为=0和不等于转化为>=0):


    3x^2^-y = 0

    y-1>=0

    ```

    cons = ({"type":"eq","fun":lambda x;np.ndarray([x[0]**3-x[1]]),"jac":lamda x;np.ndarray([3*(x[0]**2),-1])}

             ,{"type":"ineq","fun":lambda x;np.ndarray([x[1]-1]),"jac":lamda x;np.ndarray(0,1])})         

    ```

    雅可比矩阵是函数的一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。

    求解:

    ```

    x0 = np.array([-1.0, 1.0])

    >>> res = minimize(func, x0, method='SLSQP', jac=func_deriv,constraints=cons, options={'disp': True})       #顺序最小二乘规划(SLSQP)算法(method='SLSQP')

    print(res.x)

    ```

    结果:

    ```

    x:array([1.0000009,1])

    ```

    **优化器求根:**

    导入模块:

    ```

    from scipy.optimize import root

    import numpy as np

    ```

    定义函数:

    x+2cos(x) = 0

    ```

    def func(x):

        return x + 2 * np.cos(x)

    ```

    求解和结果:

    ```

    sol = root(func, 0.1)   #root(fun,x0),fun为函数,x0是Initial guess.(初始猜测值)

    print(sol.x) #优化(根)结果

    >>array([-1.02986653])

    print(sol.fun)     #目标函数的值

    >>array([ -6.66133815e-16])

    ```


    查看全部
    4 采集 收起 来源:scipy优化器

    2019-04-29

  • import numpy as np
    from scipy.integrate import quad,dblquad,nquad
    
    def main():
       print(quad(lambda x: np.exp(-x), 0, np.inf))
       print(dblquad(lambda t, x: np.exp(-x * t) / t ** 3, 0, np.inf, lambda x: 1, lambda x: np.inf))
    
       def f(x,y):
           return x*y
       def bound_y():
           return [0,0.5]
       def bound_x(y):
           return [0,1-2*y]
       print(nquad(f,[bound_x,bound_y]))
    
    
    if __name__ == "__main__":
        main()


    查看全部
    0 采集 收起 来源:scipy积分

    2019-04-19

  • import numpy as np
    import matplotlib.pyplot as plt
    
    def main():
        x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
        print(x)
        c, s = np.cos(x), np.sin(x)
        plt.figure(1)
        plt.plot(x, c, color="blue", linewidth=1.0, line, label="COS", alpha=0.5)
        plt.plot(x, s, "r*", label="SIN")  # 红色*
        plt.title("COS $ SIN")
        ax = plt.gca()  # 轴的编辑器
        ax.spines["right"].set_color("none")  # 隐藏上、右两个外框
        ax.spines["top"].set_color("none")
        ax.spines["left"].set_position(("data", 0))  # 将下、左两个外框设置到数据域的0位置
        ax.spines["bottom"].set_position(("data", 0))
        ax.xaxis.set_ticks_position("bottom")  # 坐标轴的数字显示在横轴下面和纵轴左面
        ax.yaxis.set_ticks_position("left")
        #设置坐标轴[标识的位置], [标识的内容]
        plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi], [r'$-\pi$', r'-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
        plt.yticks(np.linspace(-1, 1, 5, endpoint=True))
        for label in ax.get_xticklabels() + ax.get_yticklabels():
            label.set_fontsize(16)
        label.set_bbox(dict(facecolor="white", edgecolor="None", alpha=0.2)) # facecolor背景颜色,edgecolor边缘颜色,alpha透明度
        plt.legend(loc="upper left")
        plt.grid()
        plt.axis([-1, 1, -0.5, 1])  # 设置显示范围
        plt.fill_between(x, np.abs(x) < 0.5, c, c > 0.5, color="green", alpha=0.25)  # 填充功能
        # c>0.5时才填充,且填充的范围是|x|<0.5与c之间。|x|<0.5时-->1,填充c到1之间;|x|>=0.5时-->0,填充0到c之间
        t = 1
        plt.plot([t, t], [0, np.cos(t)], "y", linewidth=3, line)  # 添加注释(y代表黄色)
        plt.annotate("cos(1)", xy=(t, np.cos(1)), xycoords="data", xytxt=(+10, +30), textcoords="offset points",
                    arrowprops=dict(arrow, connection))  #
        #plt.show()
    
        # matplotlib绘制散点图
        fig = plt.figure()
        ax = fig.add_subplot(3, 3, 1)
        n = 128
        X = np.random.normal(0, 1, n)
        Y = np.random.normal(0, 1, n)
        T = np.arctan2(Y, X)
        # plt.axes([0.025, 0.025, 0.95, 0.95])
        ax.scatter(X, Y, s=75, c=T, alpha=0.5) # s:size,c:color
        plt.xlim(-1.5, 1.5), plt.xticks([])
        plt.ylim(-1.5, 1.5), plt.yticks([])
        plt.axis()
        plt.title("scatter")
        plt.xlabel("x")
        plt.ylabel("y")
        plt.show()
    
    if __name__ == "__main__":
        main()


    查看全部
    1 采集 收起 来源:基本线图绘制

    2019-04-19

  • matploatibl这几节听的我一脚懵逼啊,建议关于这个的几节跳过自己差文档学习吧
    查看全部

举报

0/150
提交
取消
课程须知
需要对python语法和基本数据结构有所了解,对数据分析感兴趣!
老师告诉你能学到什么?
1、数据分析的一般步骤 2、numpy简介与基本使用 3、matplotlib简介与基本使用 4、scipy简介与基本使用 5、pandas简介与基本使用 6、机器学习的一般概念 7、scikit-learn的简介、使用示例与学习方法 8、keras的简介与一般用法

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!