TIL

240404목_TIL

30303 2024. 4. 4. 20:58
728x90

애니메이션 데이터 셋

으로 추천 알고리즘 공부

 

https://www.kaggle.com/datasets/dbdmobile/myanimelist-dataset/data

 

Anime Dataset 2023

A Comprehensive Collection of Anime Information

www.kaggle.com

장르 추출

genre_tag_dict={}
genre_list=[]

for s in raw_data_anime.Genres.str.split(','):
    if type(s)==type(0.1):
        continue

    for g in s:
        genre_tag_dict[g]=0

for key, val in genre_tag_dict.items():
    genre_list.append(key)

tag_list=tag_list.tolist()
tag_list+=genre_list
genre_list

 

해당 장르가 포함될 경우 1/ 아닌 경우 0

for g in genre_list:
    raw_data_anime[g]=np.where(raw_data_anime.Genres.str.find(g)!=-1,1,0)

data_ani=raw_data_anime.drop(columns=["Genres"])
data_ani=data_ani.set_index("anime_id")
data_ani

 

 

각 행간의 유사도 계산

-자카드 유사도

def jaccard_similarity(row1, row2):
    intersection = sum((row1 != 0) & (row2 != 0))  # 교집합의 크기를 계산합니다.
    union = sum((row1 != 0) | (row2 != 0))  # 합집합의 크기를 계산합니다.
    return intersection / union if union != 0 else 0  # 자카드 유사도를 계산하고 반환합니다.
# 모든 애니메이션 간의 자카드 유사도를 계산합니다.
jaccard_similarity_matrix = data_ani.apply(lambda row1: data_ani.apply(lambda row2: jaccard_similarity(row1, row2), axis=1), axis=1)

 

def find_similar_anime(anime_id, similarity_matrix, top_n=5):
    """
    주어진 애니메이션과 비슷한 유형의 애니메이션을 찾는 함수

    :param anime_id: 비교하고자 하는 애니메이션의 ID
    :param similarity_matrix: 애니메이션 간의 유사도 행렬
    :param top_n: 반환할 유사한 애니메이션의 수 (기본값: 5)
    :return: 유사한 애니메이션의 ID 및 유사도
    """
    # 주어진 애니메이션과의 유사도 행렬에서 해당 애니메이션의 행을 가져옴
    similarity_row = jaccard_similarity_matrix.loc[anime_id]

    # 유사도를 기준으로 내림차순으로 정렬하여 상위 top_n개를 선택
    similar_anime = similarity_row.sort_values(ascending=False)[1:top_n+1]

    return similar_anime


# 예시: 애니메이션 ID가 1인 애니메이션과 유사한 상위 5개 애니메이션 찾기
similar_anime = find_similar_anime(anime_id=1, similarity_matrix=jaccard_similarity_matrix, top_n=5)
print("애니메이션 ID가 1인 애니메이션과 유사한 상위 5개 애니메이션:")
print(similar_anime)

 

애니메이션 ID가 1인 애니메이션과 유사한 상위 5개 애니메이션:
anime_id
6     0.714286
92    0.571429
95    0.555556
97    0.500000
86    0.500000
Name: 1, dtype: float64

 

 

코사인 유사도, svd 알고리즘도 내일 탐색해보기

자카드 유사도 1000개 이상 행 넘어갈때 계산이 너무 오래 걸리는 문제. 

 

 

 

 

AttributeError: 'DataFrame' object has no attribute 'iteritems'

I am using pandas to read csv on my machine then I create a pyspark dataframe from pandas dataframe. df = spark.createDataFrame(pandas_df) I updated my pandas from version 1.3.0 to 2.0 Now, I am

stackoverflow.com

 

Truncated SVD

Truncated SVD 를 이용한 행렬 분해 Truncated SVD는 Sigma 행렬에 있는 대각원소 ,즉 특이값 중 상위 일부 데이터만 추출해 분해하는 방식이다. 이렇게 분해하면 인위적으로 더 작은 차원의 U,∑, V^T를 분

ariz1623.tistory.com

 

iteritems ==>판다스 2.0 이전 버전에서만 사용가능

 

 

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. daal4py 2021.5.0 requi...

stackoverflow.com

자카드 유사도

 

 

[NLP] 문서 유사도 분석: (3) 자카드 유사도(Jaccard Similarity)

📚 목차 1. 자카드 유사도 개념 2. 자카드 유사고 실습 1. 자카드 유사도 개념 자카드 유사도(Jaccard Similarity)는 \(2\)개의 집합 \(A\), \(B\)가 있을 때 두 집합의 합집합 중 교집합의 비율입니다. 즉,

heytech.tistory.com

모든 행 출력

 

[Pandas] 5. 데이터프래임(DataFrame) 모든 행, 모든 열 출력하기

안녕하세요. 꽁냥이에요~ 크기가 큰 데이터를 Pandas 데이터프래임(DataFrame)에 넣으면 아래의 빨간색으로 표시한 것처럼 중간 부분은 잘려서 나오게 됩니다. 하지만 상황에 따라서 중간에 잘린 데

zephyrus1111.tistory.com

 

 

 

내일 전처리 부분. job description의 hard skill 추출// 

유사도 계산 방식 탐색. 

//open api 사용법 공부