データ分析(三)--numpy,KNNアルゴリズム
50115 ワード
一、numpy
(一)行列
1.行列の作成
(1)mat()
書式1:文字列
フォーマット2:リスト
(2)matrix()
同mat()
(3)bmat()
ブロックマトリクスによるbigマトリクスの作成
2.マトリックス演算
(1)行列と数の乗算–数の乗算
(2)マトリックス加減法
(3)行列乗算
(4)マトリクス対応位置要素乗算
(5)行列の共通データ転置–T 共役転置行列–H 逆行列–I は、自身のデータのビューを返します.A (二)numpyによるデータ分析–ファイル読み出し
1.保存
(1)save()
保存されているのはバイナリファイルで、ファイルの拡張子:.npy.
(2)savetxt()
保存されているのはテキストファイルです.
バイナリファイルはテキストファイルよりも処理速度が速く、効率が高い.
(3)savez()
複数のデータを1つの圧縮ファイルに保存できます.
2.読み取り
注意:保存時に拡張子は省略できますが、読み取り時には省略できません.
(1)load()
(2)loadtxt()
テキストファイルの読み込み(txt/csv)
(3)genfromtxt()
構造化データを保存します.
(三)並べ替え問題
1.直接並べ替え
sort()
元のデータを直接変更します.
sort()は最も一般的なソート方法でありarr.sort()である.
sort()はaxisパラメータを指定して、sort()が指定された軸に沿ってデータセットをソートできるようにすることもできます.
axis=1は行軸に沿ってソートされます.axis=0は、縦軸に沿って並べ替えられます.
2.間接ソート
間接ソートでは、元のデータの物理構造は変更されません.
(1)argsort()
戻り値は配列で、ソート後の要素の下付き記号が格納されます.
(2)lexsort()
()の最後の配列に従って並べ替え、他の配列の対応する位置を同じように比較し、結果もインデックスを返します.
(四)重量除去と繰り返し
1.重量除去
2.繰り返し
(1)tile()
全体を重複オブジェクトと見なします.
また、行列の繰り返し回数を指定することもできます.
(2)repeat()
要素を重複オブジェクトと見なします.
軸はaxisパラメータで指定できます.
axis=1は列で繰り返し、axis=0は行で繰り返します.
違い:tile関数は配列全体を繰り返し、repeatは配列内の各要素を繰り返します.
練習するは3*3の配列を生成し、データ要素は10以内の整数(ランダム生成) である.配列を行ごとに繰り返す、繰り返し回数は2 である.
(五)統計関数
練習する irisデータセットのガク長データ(csv形式で保存) を読み出すを並べ替え、重量を除去する .加算、積算和、平均値、標準差、分散、最小値、最大値
二、KNNアルゴリズム–近隣アルゴリズム
思想:1つのサンプルはデータセットのk個のサンプルと最も似ており、このk個のサンプルの多くが1つのカテゴリに属する場合、そのサンプルもこのカテゴリに属する.
類似度の計算–ヨーロッパ距離
例:サンプルセットに基づいて、x映画のタイプを判断する
反復とループ
反復はループではありません!!
反復は1つ1つの取りであり、ループとは異なり、逆さまに取ってはいけない.
(一)行列
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)行列の共通データ
print(C.T)
print(C.H)
print(C.I)
print(type(C)) #
print(type(C.A)) #
print(C.A)
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は配列内の各要素を繰り返します.
練習する
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())
練習する
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つの取りであり、ループとは異なり、逆さまに取ってはいけない.