import csv
import math
import time
import pandas
import pyarrow as pa
import pyarrow.parquet as pq
import pyarrow.csv as pc
from numpy import genfromtxt
start = time.time()
data = genfromtxt('sim.csv', delimiter=',', encoding='UTF-8')
end = time.time()
def rec(idx, vect=data):
sim_scores = list(enumerate(vect[idx]))
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
sim_scores = sim_scores[0:10]
recomend = [idx[0] for idx in sim_scores]
print(sim_scores)
print(recomend)
rec(1)
print(f"{end - start:.5f} sec")
이렇게 실행하면 늦고
대략 17 초
import csv
import math
import time
import pandas
import pyarrow as pa
import pyarrow.parquet as pq
import pyarrow.csv as pc
from numpy import genfromtxt
start = time.time()
py_table = pc.read_csv('sim.csv',read_options = pc.ReadOptions(skip_rows=None))
data = py_table
end = time.time()
def rec(idx, vect=data):
sim_scores = list(enumerate(vect[idx].to_pylist()))
print(len(sim_scores))
print(sim_scores)
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
sim_scores = sim_scores[0:10]
recomend = [idx[0]+1 for idx in sim_scores]# 여기서 +1해준 이유는 정확하게는 모르겠으나 csv를 읽을 때 맨앞에 열은 날라가서 인덱스를 맞춰 줘야하기 때문에 붙힌 것이다.
print(sim_scores)
print(recomend)
rec(1)
print(f"{end - start:.5f} sec")
이렇게 실행하면 빠르다.
대략 1초
여기서 주의해야할 부분은 to_pylist() 부분이다.
이 부분은 chunkedarray를 파이썬의 list 로 변환해주는 기능을 수행한다.
이렇게 변환 해주어한다.
pyarrow에서 사용하는 table은 표시되는 수가 원래 행렬 표시와는 반대이다. 이점 주의
행과 열이 반되이다.