亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!