Python 은 사용자 의 영화 관람 데 이 터 를 추출 하고 사용자 와 영화 간 의 숨겨 진 정 보 를 분석 합 니 다!

머리말

2.관람 데이터

https://movie.douban.com/

'콩잎'플랫폼 에서 사용자 의 그림자 데 이 터 를 추출 합 니 다.
사용자 목록
웹 분석

사용 자 를 얻 기 위해 저 는 그 중의 한 편의 영화 평론 을 선 택 했 습 니 다.그러면 평론 을 하 는 사용자 에 따라 사용자 의 이름 을 얻 을 수 있 습 니 다.(뒤에서 사용자 의 영화 관람 기록 을 얻 으 려 면'사용자 이름'만 필요 합 니 다)

https://movie.douban.com/subject/24733428/reviews?start=0
url 에서 start 인 자 는 페이지 수(page*20,페이지 당 20 개의 데이터)이기 때문에 start=0,20,40...즉 20 의 배수 입 니 다.start 매개 변수 값 을 바 꾸 면 4614 개의 사용자 이름 을 얻 을 수 있 습 니 다.

웹 페이지 의 탭 을 보면'사용자 이름'값 에 대응 하 는 탭 속성 을 찾 을 수 있 습 니 다.
프로 그래 밍 실현

i=0
url = "https://movie.douban.com/subject/24733428/reviews?start=" + str(i * 20)
r = requests.get(url, headers=headers)
r.encoding = 'utf8'
s = (r.content)
selector = etree.HTML(s)
 
 
for item in selector.xpath('//*[@class="review-list  "]/div'):
    userid = (item.xpath('.//*[@class="main-hd"]/a[2]/@href'))[0].replace("https://www.douban.com/people/","").replace("/", "")
    username = (item.xpath('.//*[@class="main-hd"]/a[2]/text()'))[0]
    print(userid)
    print(username)
    print("-----")

사용자 의 영화 관람 기록 을 탈취 하 다.
이전 단계 에서"사용자 이름"을 찾 았 고,이어서 사용자 의 그림자 기록 을 얻 으 려 면"사용자 이름"을 사용 해 야 합 니 다.
웹 분석


#https://movie.douban.com/people/{    }/collect?start=15&sort=time&rating=all&filter=all&mode=grid
https://movie.douban.com/people/mumudancing/collect?start=15&sort=time&rating=all&filter=all&mode=grid
'사용자 이름'을 바 꾸 면 서로 다른 사용자 의 관람 기록 을 얻 을 수 있 습 니 다.
url 에서 start 인 자 는 페이지 수(page*15,페이지 당 15 개의 데이터)이기 때문에 start=0,15,30...,즉 15 의 배수 입 니 다.start 매개 변수 값 을 바 꾸 면 이 1768 개의 관 영 기록 을 얻 을 수 있 습 니 다.

웹 페이지 의 탭 을 보면'영화 이름'값 에 해당 하 는 탭 속성 을 찾 을 수 있 습 니 다.
프로 그래 밍 실현

url = "https://movie.douban.com/people/mumudancing/collect?start=15&sort=time&rating=all&filter=all&mode=grid"
r = requests.get(url, headers=headers)
r.encoding = 'utf8'
s = (r.content)
selector = etree.HTML(s)
for item in selector.xpath('//*[@class="grid-view"]/div[@class="item"]'):
    text1 = item.xpath('.//*[@class="title"]/a/em/text()')
    text2 = item.xpath('.//*[@class="title"]/a/text()')
    text1 = (text1[0]).replace(" ", "")
    text2 = (text2[1]).replace(" ", "").replace("
", "") print(text1+text1) print("-----")

엑셀 에 저장
정의 헤더

#    execl 
def initexcel(filename):
    #     workbook     
    workbook = xlwt.Workbook(encoding='utf-8')
    #     worksheet
    worksheet = workbook.add_sheet('sheet1')
    workbook.save(str(filename)+'.xls')
    ##    
    value1 = [["  ", "  "]]
    book_name_xls = str(filename)+'.xls'
    write_excel_xls_append(book_name_xls, value1)
excel 표 에는 두 개의 제목(사용자,영화 평론)이 있다.
엑셀 기록

#   execl
def write_excel_xls_append(path, value):
    index = len(value)  #            
    workbook = xlrd.open_workbook(path)  #      
    sheets = workbook.sheet_names()  #            
    worksheet = workbook.sheet_by_name(sheets[0])  #                   
    rows_old = worksheet.nrows  #               
    new_workbook = copy(workbook)  #  xlrd       xlwt  
    new_worksheet = new_workbook.get_sheet(0)  #                
    for i in range(0, index):
        for j in range(0, len(value[i])):
            new_worksheet.write(i+rows_old, j, value[i][j])  #       ,    i+rows_old     
    new_workbook.save(path)  #      
엑셀 함 수 를 정의 합 니 다.이렇게 모든 페이지 의 데 이 터 를 올 라 갈 때 기록 함 수 를 호출 하여 데 이 터 를 엑셀 에 저장 합 니 다.

마지막 으로 44130 개의 데 이 터 를 수집 했다.그러나 분석 과정 을 보 여주 기 위해 한 사용자 당 30 개의 관람 기록 만 을 얻 었 다(30 개가 최신 이기 때문이다).
마지막 으로 이 44130 개의 데 이 터 는 아래 에서 공유 해 드 리 겠 습 니 다.
3.데이터 분석 발굴
읽 기 데이터 세트

def read_excel():
    #   workbook
    data = xlrd.open_workbook('  .xls')
    #   sheet 
    table = data.sheet_by_name('sheet1')
    #           
    nrows = table.nrows
    datalist=[]
    for row in range(nrows):
        temp_list = table.row_values(row)
        if temp_list[0] != "  " and temp_list[1] != "  ":
            data = []
            data.append([str(temp_list[0]), str(temp_list[1])])
            datalist.append(data)
    return datalist

콩잎.xls 에서 모든 데 이 터 를 읽 어 datalist 집합 에 넣 습 니 다.
분석 1:영화 관람 횟수 순위

###  1:        
def analysis1():
    dict ={}
    ### excel    
    movie_data = read_excel()
    for i in range(0, len(movie_data)):
        key = str(movie_data[i][0][1])
        try:
            dict[key] = dict[key] +1
        except:
            dict[key]=1
    ###      
    dict = sorted(dict.items(), key=lambda kv: (kv[1], kv[0]))
    name=[]
    num=[]
    for i in range(len(dict)-1,len(dict)-16,-1):
        print(dict[i])
        name.append(((dict[i][0]).split("/"))[0])
        num.append(dict[i][1])
    plt.figure(figsize=(16, 9))
    plt.title('        ( -> )')
    plt.bar(name, num, facecolor='lightskyblue', edgecolor='white')
    plt.savefig('        .png')

분석 은 사용자 정보 가'마음의 기이 한 여행'평론 에서 기원 되 었 기 때문에 사용자 의 관람 량 이 가장 크다.최근 인기 영화 중 2 위 는'작은 붉 은 꽃 한 송 이 를 드 립 니 다'로 신조 와 폭탄 해체 전문가 2 도 뒤 를 이 었 다.
분석 2:사용자 초상화(사용자 관 영 동 률 이 가장 높다)

###  2:    (         )
def analysis2():
    dict = {}
    ### excel    
    movie_data = read_excel()
 
 
    userlist=[]
    for i in range(0, len(movie_data)):
        user = str(movie_data[i][0][0])
        moive = (str(movie_data[i][0][1]).split("/"))[0]
        #print(user)
        #print(moive)
 
 
        try:
            dict[user] = dict[user]+","+str(moive)
        except:
            dict[user] =str(moive)
            userlist.append(user)
 
 
    num_dict={}
    #      (    )
    flag_user=userlist[0]
    movies = (dict[flag_user]).split(",")
    for i in range(0,len(userlist)):
        #          
        if flag_user != userlist[i]:
            num_dict[userlist[i]]=0
            #          
            for j in range(0,len(movies)):
                #                  
                if movies[j] in dict[userlist[i]]:
                    #    1
                    num_dict[userlist[i]] = num_dict[userlist[i]]+1
    ###      
    num_dict = sorted(num_dict.items(), key=lambda kv: (kv[1], kv[0]))
    #    
    username = []
    #        
    num = []
    for i in range(len(num_dict) - 1, len(num_dict) - 9, -1):
        username.append(num_dict[i][0])
        num.append(num_dict[i][1])
 
 
    plt.figure(figsize=(25, 9))
    plt.title('    (         )')
    plt.scatter(username, num, color='r')
    plt.plot(username, num)
    plt.savefig('    (         ).png')

분석 하 다.
사용자 의"mumudancing"을 예 로 들 어 사용자 초상 화 를 그립 니 다.
1.그림 에서 보 듯 이 사용자 의'mumudancing'과 동 률 이 가장 높 은 것 은'프라하 로 데려 다 주세요'이 고 그 다음은'이교 위'이다.
2.사용자:'절명 카드','어 리 석 은 아이','사 향사','온 형','심 당','수 좌',관 영 동 률***동일.
분석 3:사용자 간 영화 추천

###  3:          (           )
def analysis3():
    dict = {}
    ### excel    
    movie_data = read_excel()
 
 
    userlist=[]
    for i in range(0, len(movie_data)):
        user = str(movie_data[i][0][0])
        moive = (str(movie_data[i][0][1]).split("/"))[0]
        #print(user)
        #print(moive)
 
 
        try:
            dict[user] = dict[user]+","+str(moive)
        except:
            dict[user] =str(moive)
            userlist.append(user)
 
 
    num_dict={}
    #      (  2 )
    flag_user=userlist[0]
    print(flag_user)
    movies = (dict[flag_user]).split(",")
    for i in range(0,len(userlist)):
        #          
        if flag_user != userlist[i]:
            num_dict[userlist[i]]=0
            #          
            for j in range(0,len(movies)):
                #                  
                if movies[j] in dict[userlist[i]]:
                    #    1
                    num_dict[userlist[i]] = num_dict[userlist[i]]+1
    ###      
    num_dict = sorted(num_dict.items(), key=lambda kv: (kv[1], kv[0]))
 
 
    #   (                      )
    user_movies = dict[flag_user]
    new_movies = dict[num_dict[len(num_dict)-1][0]].split(",")
    for i in range(0,len(new_movies)):
        if new_movies[i] not in user_movies:
            print("   ("+str(flag_user)+")    :"+str(new_movies[i]))

분석 하 다.
사용자'mumudancing'의 경우 사용자 간 에 영화 추천 을 합 니 다.
1.사용자 의'mumumudancing'관 영 률 이 가장 높 은 사용자(A)와 연 결 된 다음 에 사용자(A)의 모든 관 영 기록 을 가 져 옵 니 다.
2.사용자(A)의 영화 관람 기록 을 사용자 에 게 추천 합 니 다.
분석 4:영화 간 영화 추천

###  4:          (           )
def analysis4():
    dict = {}
    ### excel    
    movie_data = read_excel()
 
 
    userlist=[]
    for i in range(0, len(movie_data)):
        user = str(movie_data[i][0][0])
        moive = (str(movie_data[i][0][1]).split("/"))[0]
        try:
            dict[user] = dict[user]+","+str(moive)
        except:
            dict[user] =str(moive)
            userlist.append(user)
 
 
    movie_list=[]
    #         
    flag_movie = "       "
    for i in range(0,len(userlist)):
        if flag_movie in dict[userlist[i]]:
             moives = dict[userlist[i]].split(",")
             for j in range(0,len(moives)):
                 if moives[j] != flag_movie:
                     movie_list.append(moives[j])
 
 
    data_dict = {}
    for key in movie_list:
        data_dict[key] = data_dict.get(key, 0) + 1
 
 
    ###      
    data_dict = sorted(data_dict.items(), key=lambda kv: (kv[1], kv[0]))
    for i in range(len(data_dict) - 1, len(data_dict) -16, -1):
            print("    "+str(flag_movie)+"]  :"+str(data_dict[i][0]))

분석 하 다.
영화'작은 붉 은 꽃 한 송 이 를 드 립 니 다'를 예 로 들 어 영화 사이 에 영화 추천 을 합 니 다.
1.'작은 빨 간 꽃 한 송 이 를 드 립 니 다'를 본 모든 사용 자 를 가 져 온 다음 에 이 사용자 들 의 각자 의 관람 기록 을 가 져 옵 니 다.
2.이러한 영화 관람 기록 을 집계('작은 붉 은 꽃 한 송 이 를 드 립 니 다'제외)한 다음 에 높 은 것 부터 낮은 것 까지 순 위 를 매 긴 다음 에 영화'작은 붉 은 꽃 한 송 이 를 드 립 니 다'와 관련 도가 가장 높 은 순 위 를 가 진 집합 을 얻 을 수 있 습 니 다.
3.연관 성 이 가장 높 은 15 편의 영 화 를 사용자 에 게 추천 합 니 다.
총화
1.콩짜개 플랫폼 의 데이터 사고방식 을 분석 하고 프로 그래 밍 하여 실현 한다.
2.기어 오 른 데 이 터 를 분석한다(영화 관람 횟수 순위,사용자 초상화,사용자 간 영화 추천,영화 간 영화 추천)
이 파 이 썬 은 사용자 의 영화 관람 데 이 터 를 추출 하고 사용자 와 영화 간 의 숨겨 진 정 보 를 분석 합 니 다!의 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 Python 이 데 이 터 를 추출 하고 내용 을 분석 하 는 것 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기