データ分析(三)--numpy,KNNアルゴリズム

50115 ワード

一、numpy
(一)行列
1.行列の作成
(1)mat()
書式1:文字列
A = np.mat('1 0 0 0;0 1 0 0;-1 2 1 0;1 1 0 1')
print(A)

フォーマット2:リスト
B = np.mat([[1,0,0,0],[0,1,0,0],[-1,2,1,0],[1,1,0,1]])
print(B)

(2)matrix()
同mat()
#   1:   
C = np.matrix('1 0 0 0;0 1 0 0;-1 2 1 0;1 1 0 1')
print(C)
#   2:  
D = np.matrix([[1,0,0,0],[0,1,0,0],[-1,2,1,0],[1,1,0,1]])
print(D)

(3)bmat()
ブロックマトリクスによるbigマトリクスの作成
Big_Mat = np.bmat('A B;C D')
print(Big_Mat)
Big_Mat = np.bmat([[A,B],[C,D]])
print(Big_Mat)

2.マトリックス演算
(1)行列と数の乗算–数の乗算
A = np.mat([[1,1],[1,1]])
print(A*3)

(2)マトリックス加減法
B = np.mat([[1,2],[3,4]])
print(A+B)

(3)行列乗算
print(A*B)

(4)マトリクス対応位置要素乗算
C = np.multiply(A,B)
print(C)

(5)行列の共通データ
  • 転置–T
    print(C.T)
    
  • 共役転置行列–H
    print(C.H)
    
  • 逆行列–I
    print(C.I)
    
  • は、自身のデータのビューを返します.A
    print(type(C))    # 
    print(type(C.A))    # 
    print(C.A)
    
  • (二)numpyによるデータ分析–ファイル読み出し
    import numpy as np
    
    x = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])
    y = np.array([1,2,3,4]).reshape((4,1))
    

    1.保存
    (1)save()
    保存されているのはバイナリファイルで、ファイルの拡張子:.npy.
    np.save('x',x)
    

    (2)savetxt()
    保存されているのはテキストファイルです.
    np.savetxt('x_txt',x)
    

    バイナリファイルはテキストファイルよりも処理速度が速く、効率が高い.
    (3)savez()
    複数のデータを1つの圧縮ファイルに保存できます.
    a = np.array([[1,2,3],[4,5,6]])
    b = np.arange(0,1,0.1)
    np.savez('a_b',a,b)
    

    2.読み取り
    注意:保存時に拡張子は省略できますが、読み取り時には省略できません.
    (1)load()
    result = np.load('x.npy')
    print(type(result),'
    '
    ,result)

    (2)loadtxt()
    テキストファイルの読み込み(txt/csv)
    result = np.loadtxt('x_txt',dtype=np.int32)
    print(result)
    
    

    (3)genfromtxt()
    構造化データを保存します.
    # 1.    
    df = np.dtype([('name',np.str_,128),('nums',np.int32),('local',np.str_,16)])
    # 2.       
    jobs = np.genfromtxt('tecent_jobs.txt',dtype=df,delimiter=',')
    print(jobs['name'])
    print(jobs['nums'],type(jobs['nums']))
    print(jobs['local'])
    
    

    (三)並べ替え問題
    1.直接並べ替え
    sort()
    元のデータを直接変更します.
    sort()は最も一般的なソート方法でありarr.sort()である.
    sort()はaxisパラメータを指定して、sort()が指定された軸に沿ってデータセットをソートできるようにすることもできます.
    axis=1は行軸に沿ってソートされます.axis=0は、縦軸に沿って並べ替えられます.
    arr = np.array([[4,3,2],[2,1,4]])
    arr.sort(axis=1)
    print(arr)
    arr.sort(axis=0)
    print(arr)
    
    

    2.間接ソート
    間接ソートでは、元のデータの物理構造は変更されません.
    (1)argsort()
    戻り値は配列で、ソート後の要素の下付き記号が格納されます.
    arr = np.array([2,1,0,5,3])
    new_arr = arr.argsort()
    
    

    (2)lexsort()
    ()の最後の配列に従って並べ替え、他の配列の対応する位置を同じように比較し、結果もインデックスを返します.
    a = np.array([3,2,6,4,5])
    b = np.array([50,40,30,20,10])
    c = np.array([400,300,600,100,200])
    result = np.lexsort((a,b,c))
    print(result)
    
    

    (四)重量除去と繰り返し
    1.重量除去
    arr = np.array([1,2,1,2,3,3])
    print(np.unique(arr))
    
    

    2.繰り返し
    (1)tile()
    全体を重複オブジェクトと見なします.
    result = np.tile(arr,3)
    print(result)    # [1 2 3 4 1 2 3 4 1 2 3 4]
    
    

    また、行列の繰り返し回数を指定することもできます.
    result = np.tile(arr,(3,1))
    print(result)
    # [[1 2 3 4]
    #  [1 2 3 4]
    #  [1 2 3 4]]
    result = np.tile(arr,(3,2))
    print(result)
    # [[1 2 3 4 1 2 3 4]
    #  [1 2 3 4 1 2 3 4]
    #  [1 2 3 4 1 2 3 4]]
    
    

    (2)repeat()
    要素を重複オブジェクトと見なします.
    result = np.repeat(arr,3)
    print(result)    # [1 1 1 2 2 2 3 3 3 4 4 4]
    
    

    軸はaxisパラメータで指定できます.
    axis=1は列で繰り返し、axis=0は行で繰り返します.
    arr = np.array([[1,2],[3,4]])
    result = np.repeat(arr,2)
    print(result)    # [1 1 2 2 3 3 4 4]
    result = np.repeat(arr,2,axis=0)
    print(result)
    # [[1 2]
    #  [1 2]
    #  [3 4]
    #  [3 4]]
    result = np.repeat(arr,2,axis=1)
    print(result)
    # [[1 1 2 2]
    #  [3 3 4 4]]
    
    

    違い:tile関数は配列全体を繰り返し、repeatは配列内の各要素を繰り返します.
    練習する
  • は3*3の配列を生成し、データ要素は10以内の整数(ランダム生成)
  • である.
  • 配列を行ごとに繰り返す、繰り返し回数は2
  • である.
    arr = np.random.randint(0,10,size=(3,3))
    result = np.repeat(arr,2,axis=0)
    print('arr:
    '
    ,arr) print('result:
    '
    ,result)

    (五)統計関数
    import numpy as np
    
    arr = np.arange(20).reshape((4,5))
    
    #   1
    # np.   (   )
    #   2
    #    .   ()
    
    #   
    print(np.sum(arr))
    print(arr.sum())
    
    #    
    print(arr.mean())
    
    #    /  
    print(arr.std(),arr.var())
    
    #    
    print(arr.cumsum())
    
    #    
    print(arr.cumprod())
    
    

    練習する
  • irisデータセットのガク長データ(csv形式で保存)
  • を読み出す
  • を並べ替え、重量を除去する
  • .
  • 加算、積算和、平均値、標準差、分散、最小値、最大値
  • import numpy as np
    #     
    iris = np.loadtxt('iris_sepal_length.csv')
    print('      :
    '
    ,iris) # iris.sort() print(' :
    '
    ,iris) # unique_iris = np.unique(iris) print(' :
    '
    ,unique_iris) # print(' :
    '
    ,np.sum(unique_iris)) # print(' :
    '
    ,np.cumsum(unique_iris)) # print(' :
    '
    ,np.mean(unique_iris)) # print(' :
    '
    ,np.std(unique_iris)) # print(' :
    '
    ,np.var(unique_iris)) # print(' :
    '
    ,np.min(unique_iris)) # print(' :
    '
    ,np.max(unique_iris))

    二、KNNアルゴリズム–近隣アルゴリズム
    思想:1つのサンプルはデータセットのk個のサンプルと最も似ており、このk個のサンプルの多くが1つのカテゴリに属する場合、そのサンプルもこのカテゴリに属する.
    類似度の計算–ヨーロッパ距離
    例:サンプルセットに基づいて、x映画のタイプを判断する
    import math
    
    # 1.  python       
    movie_data = {
        "    ": [45, 2, 9, "   "],
        "   ": [21, 17, 5, "   "],
        "    3": [54, 9, 11, "   "],
        "    3": [39, 0, 31, "   "],
        "    ": [5, 2, 57, "   "],
        "  3": [3, 2, 65, "   "],
        "    ": [2, 3, 55, "   "],
        "      ": [6, 4, 21, "   "],
        "  ": [7, 46, 4, "   "],
        "   ": [9, 39, 8, "   "],
        "    ": [9, 38, 2, "   "],
        "     ": [8, 34, 17, "   "]
    }
    
    # 2.    
    x = [23,3,17]
    KNN = []
    for k,v in movie_data.items():
        d = math.sqrt((v[0]-x[0])**2+(v[1]-x[1])**2+(v[2]-x[2])**2)
        KNN.append([k,round(d,2)])    # round(d,2), d      ,    
    # print(KNN)
    
    # 3. k        
    KNN.sort(key=lambda data:data[1])
    
    KNN = KNN[:5]
    
    choice = {}
    for one in KNN:
        movie_name = one[0]
        type = movie_data[movie_name][3]
        choice[type] = choice.get(type,0) + 1
    choice = sorted(choice.items(),key=lambda c:c[1],reverse=True)    # items()    
    # print(choice)    #        
    print('x    :',choice[0][0])
    
    

    反復とループ
    反復はループではありません!!
    反復は1つ1つの取りであり、ループとは異なり、逆さまに取ってはいけない.