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 이 데 이 터 를 추출 하고 내용 을 분석 하 는 것 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.