Pandas의 이전 요소 간의 관계로 동일한 열에서 행렬을 만드는 방법은 무엇입니까?

E. 제이 틴치

이와 같은 데이터 프레임이 있습니다.

>>> import pandas as pd
>>> data = {
    'user_id': [1, 1, 1, 2, 2, 3, 3, 4, 4, 4],
    'movie_id': [0, 1, 2, 0, 1, 2, 3, 2, 3, 4]
}
>>> df = pd.DataFrame(data)
>>> df
   user_id  movie_id
0        1         0
1        1         1
2        1         2
3        2         0
4        2         1
5        3         2
6        3         3
7        4         2
8        4         3
9        4         4

첫 번째 영화를 좋아 한 후 두 번째 영화를 좋아하는 사람이 얼마나 될까요? 또는 두 번째 영화를 좋아 한 후 세 번째 영화를 좋아했습니다. Etc. 여기 내 예상 출력이 있습니다.

[[0., 2., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 2., 0.],
[0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0.]]

예를 들어, movie_id=1그들이 좋아 후 2 번을 좋아 movie_id=0하므로, matrix[0][1]=2하고 matrix[1][0]=2. 좋아, 어떻게이 결과를 찾았습니까? user_id=1좋아 movie_id=0, movie_id=1그리고 movie_id=2각각에 의해. 또한, user_id=2좋아 movie_id=0하고 movie_id=1각각에 의해. 그래서,matrix[0][1]=2

나는 잘못된 출력을 반환하고 빅 데이터 프레임에서 매우 느리게 작동하는 이것을 시도했습니다.

import numpy as np

item = dict()

def cross(a):
    for i in a:
        for j in a:
            if i == j:
                continue
            if (i, j) in item.keys():
                item[(i, j)] += 1
            else:
                item[(i, j)] = 1

_ = df.groupby('user_id')['movie_id'].apply(cross)

length = df['movie_id'].nunique()
res = np.zeros([length, length])

for k, v in item.items():
    res[k] = v

어떤 생각? 미리 감사드립니다.

스테판

다음을 수행 할 수 있습니다.

# add row_numbers as a column
df.reset_index(inplace=True) 

# merge df on itself
df2 = df.merge(df, how='inner', on='user_id')

# remove some entries, keep only pairs where movie_id_x was liked before movie_id_y
df2 = df2[df2['index_x']<df2['index_y']].drop(['index_x','index_y'], axis=1)

# use pivot table to make matrix
df3 = df2.pivot_table(index='movie_id_x',columns='movie_id_y', values='user_id', aggfunc='count')

# UPD: add empty rows for movies which were removed
ids = df['movie_id'].unique()
df3 = df3.reindex(ids)
df3 = df3.reindex(ids, axis=1)
df3 = df3.fillna(0)

# convert result from dataframe to array if necessary
res = np.array(df3)

결과:

print(res)
[[0 2 1 0 0]
 [0 0 1 0 0]
 [0 0 0 2 1]
 [0 0 0 0 1]
 [0 0 0 0 0]]

더 빠른 버전 (희소 행렬 사용)

아이디어는 행렬이 실제로 희소하고 밀도가 높은 형태로 저장하는 데 많은 메모리가 필요하다는 것입니다 (특히 pandas 데이터 프레임의 형태). 따라서 희소 행렬처럼 저장하는 것이 합리적입니다. 여기에서 접근을 찾았 습니다 .

# add row_numbers as a column
df.reset_index(inplace=True) 

# merge df on itself
df2 = df.merge(df, how='inner', on='user_id')

# remove some entries, keep only pairs where movie_id_x was liked before movie_id_y
df2 = df2[df2['index_x']<df2['index_y']].drop(['index_x','index_y'], axis=1)

# use groupby to count movie pairs
df2 = df2.groupby(['movie_id_x','movie_id_y'])['user_id'].count().reset_index()

# create pivot as sparse matrix
movies_t = CategoricalDtype(sorted(df['movie_id'].unique()), ordered=True)
row = df2['movie_id_x'].astype(movies_t).cat.codes
col = df2['movie_id_y'].astype(movies_t).cat.codes
sparse_matrix = csr_matrix((df2["user_id"], (row, col)), \
                       shape=(movies_t.categories.size, movies_t.categories.size))

# convert sparse to dense if needed
res = sparse_matrix.todense()

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

행 이름으로 행렬을 결합하고 R의 일치하지 않는 요소에 빈 공간을 삽입하는 방법은 무엇입니까?

분류에서Dev

정렬 된 요인의 수준을 높이거나 낮추는 방법은 무엇입니까? (다음 단계와 동일한 요소를 만드십시오)

분류에서Dev

정렬 된 요인의 수준을 높이거나 낮추는 방법은 무엇입니까? (다음 단계와 동일한 요소를 만드십시오)

분류에서Dev

셀형 배열의 행렬 열에서 동일한 요소 수를 계산하는 방법은 무엇입니까?

분류에서Dev

Pandas에서 데이터 프레임의 특정 열에 각 고유 구성 요소에 대한 새 열을 만드는 방법은 무엇입니까?

분류에서Dev

R 데이터 프레임의 다른 열에 대한 이전 5 개의 관찰 결과와 동일한 열을 만드는 방법은 무엇입니까?

분류에서Dev

R에서 이진 변수 간의 상관 행렬을 계산하는 방법은 무엇입니까?

분류에서Dev

Python에서 1 년의 요일과 시간으로 pandas 데이터 프레임을 만드는 방법은 무엇입니까?

분류에서Dev

Pandas DataFrame의 이전 열 간의 관계를 기반으로 열을 만드는 방법이 있습니까?

분류에서Dev

Boostrap 3 : 레이아웃 열의 내용을 동일한 높이로 만드는 방법은 무엇입니까?

분류에서Dev

첫 번째 입력의 크기에 관계없이 2 개의 출력을 일정한 거리의 아파트로 만드는 방법은 무엇입니까?

분류에서Dev

첫 번째 입력의 크기에 관계없이 2 개의 출력을 일정한 거리의 아파트로 만드는 방법은 무엇입니까?

분류에서Dev

Bootstrap에서 동일한 여백으로 세 개의 열을 만드는 방법은 무엇입니까?

분류에서Dev

CDE 테이블 구성 요소에서 열 셀의 URL을 만드는 방법은 무엇입니까?

분류에서Dev

Pandas의 다른 열을 기반으로 상관 관계를 만드는 방법은 무엇입니까?

분류에서Dev

Django : 페이지의 각 요소에 대한 양식을 만드는 방법은 무엇입니까?

분류에서Dev

mysql (2)의 데이터로 PHP에서 행렬을 만드는 방법은 무엇입니까?

분류에서Dev

mysql의 데이터로 PHP에서 행렬을 만드는 방법은 무엇입니까?

분류에서Dev

노드 또는 관계의 배열에서 단일 요소의 속성을 반환하는 방법은 무엇입니까?

분류에서Dev

UIStackView에서 요소 사이의 동적 간격을 설정하는 방법은 무엇입니까?

분류에서Dev

mongodb에서 배열 요소 간의 상관 관계를 유지하는 방법은 무엇입니까?

분류에서Dev

Pandas DataFrame에서 XML의 다른 태그 요소를 한 줄로 전달하는 방법은 무엇입니까?

분류에서Dev

테이블의 단일 요소에 전체 배열을 저장하는 방법은 무엇입니까?

분류에서Dev

행렬의 열을 1로 만드는 방법은 무엇입니까?

분류에서Dev

C #을 사용하여 하나의 열에서 동일한 요소 또는 특정 기준을 계산하는 방법은 무엇입니까?

분류에서Dev

Javascript에서 배열 간의 마스터 / 슬레이브 관계를 만드는 방법은 무엇입니까?

분류에서Dev

PostgreSQL에서 동일한 참조로 다른 열의 이름을 지정하는 방법은 무엇입니까?

분류에서Dev

행 순서에 관계없이 df의 각 열을 내림차순으로 정렬하는 방법은 무엇입니까?

분류에서Dev

R의 동일한 플롯에서 행렬의 여러 열을 그리는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    행 이름으로 행렬을 결합하고 R의 일치하지 않는 요소에 빈 공간을 삽입하는 방법은 무엇입니까?

  2. 2

    정렬 된 요인의 수준을 높이거나 낮추는 방법은 무엇입니까? (다음 단계와 동일한 요소를 만드십시오)

  3. 3

    정렬 된 요인의 수준을 높이거나 낮추는 방법은 무엇입니까? (다음 단계와 동일한 요소를 만드십시오)

  4. 4

    셀형 배열의 행렬 열에서 동일한 요소 수를 계산하는 방법은 무엇입니까?

  5. 5

    Pandas에서 데이터 프레임의 특정 열에 각 고유 구성 요소에 대한 새 열을 만드는 방법은 무엇입니까?

  6. 6

    R 데이터 프레임의 다른 열에 대한 이전 5 개의 관찰 결과와 동일한 열을 만드는 방법은 무엇입니까?

  7. 7

    R에서 이진 변수 간의 상관 행렬을 계산하는 방법은 무엇입니까?

  8. 8

    Python에서 1 년의 요일과 시간으로 pandas 데이터 프레임을 만드는 방법은 무엇입니까?

  9. 9

    Pandas DataFrame의 이전 열 간의 관계를 기반으로 열을 만드는 방법이 있습니까?

  10. 10

    Boostrap 3 : 레이아웃 열의 내용을 동일한 높이로 만드는 방법은 무엇입니까?

  11. 11

    첫 번째 입력의 크기에 관계없이 2 개의 출력을 일정한 거리의 아파트로 만드는 방법은 무엇입니까?

  12. 12

    첫 번째 입력의 크기에 관계없이 2 개의 출력을 일정한 거리의 아파트로 만드는 방법은 무엇입니까?

  13. 13

    Bootstrap에서 동일한 여백으로 세 개의 열을 만드는 방법은 무엇입니까?

  14. 14

    CDE 테이블 구성 요소에서 열 셀의 URL을 만드는 방법은 무엇입니까?

  15. 15

    Pandas의 다른 열을 기반으로 상관 관계를 만드는 방법은 무엇입니까?

  16. 16

    Django : 페이지의 각 요소에 대한 양식을 만드는 방법은 무엇입니까?

  17. 17

    mysql (2)의 데이터로 PHP에서 행렬을 만드는 방법은 무엇입니까?

  18. 18

    mysql의 데이터로 PHP에서 행렬을 만드는 방법은 무엇입니까?

  19. 19

    노드 또는 관계의 배열에서 단일 요소의 속성을 반환하는 방법은 무엇입니까?

  20. 20

    UIStackView에서 요소 사이의 동적 간격을 설정하는 방법은 무엇입니까?

  21. 21

    mongodb에서 배열 요소 간의 상관 관계를 유지하는 방법은 무엇입니까?

  22. 22

    Pandas DataFrame에서 XML의 다른 태그 요소를 한 줄로 전달하는 방법은 무엇입니까?

  23. 23

    테이블의 단일 요소에 전체 배열을 저장하는 방법은 무엇입니까?

  24. 24

    행렬의 열을 1로 만드는 방법은 무엇입니까?

  25. 25

    C #을 사용하여 하나의 열에서 동일한 요소 또는 특정 기준을 계산하는 방법은 무엇입니까?

  26. 26

    Javascript에서 배열 간의 마스터 / 슬레이브 관계를 만드는 방법은 무엇입니까?

  27. 27

    PostgreSQL에서 동일한 참조로 다른 열의 이름을 지정하는 방법은 무엇입니까?

  28. 28

    행 순서에 관계없이 df의 각 열을 내림차순으로 정렬하는 방법은 무엇입니까?

  29. 29

    R의 동일한 플롯에서 행렬의 여러 열을 그리는 방법은 무엇입니까?

뜨겁다태그

보관