2024.02.05.월, 02.06 .화 학습내용
0. 준비 - 데이터 로딩
# 데이터 로딩
import pickle
with open("./data/movie_review.pkl", "rb") as f:
movie_data = pickle.load(f)
movie_data
1. 분석 - 전체 리뷰 개수 파악: len() 함수 →리스트 요소 개수 함수
# 1. 전체 리뷰 갯수 파악
len(movie_data) #5000
2. 5000개 리뷰들의 평균 길이 (방법1)
# 2. 5000개 리뷰들의 평균 길이
# step -> 모든 리뷰들의 길이를 측정, step2 -> 측정된 값의 평균
sum_len = 0 # 모든 리뷰 길이의 총합
for review, _ in movie_data:
sum_len = sum_len + len(review) # 리뷰길이 누적
print("리뷰의 평균 길이 : " + str(sum_len/len(movie_data))) #출력:리뷰의 평균 길이 : 35.4866
movie_data에 있는 긍정/부정 점수 사용 x →변수 대신 언더바(_) 사용
2-1. 반복문과 리스트를 결합한 코드(한 줄) (방법2)
# 반복문과 리스트를 결합한 코드(한 줄)
len_list = [len(review[0]) for review in movie_data]
sum(len_list)/len(movie_data) #출력:35.4866
⇒실행문 len(review[0]) 이 앞으로! →리스트 안에 넣어서 값들을 리스트로 만든다!
3. 긍정리뷰(1), 부정리뷰(0)이 각각 몇 개인지 확인 - (방법 1) for each문 스타일
#3. 긍정리뷰(1), 부정리뷰(0)이 각각 몇 개인지 확인하자
# 풀이1
p_score = 0 #긍정리뷰 수
n_score = 0 #부정리뷰 수
for _, score in movie_data: #자 : 텍스트 리뷰는 사용x ->_로 받음
if score == 1 :
p_score = p_score +1
elif score == 0 :
n_score = n_score + 1
print("긍정리뷰 수 : ", p_score) #출력:긍정리뷰 수 : 2499
print("부정리뷰 수 : ", n_score) #출력:부정리뷰 수 : 2501
3. 긍정리뷰(1), 부정리뷰(0)이 각각 몇 개인지 확인 - (방법 1) - 반복문(for문) 과 리스트
#풀이2
score_list = [data[1] for data in movie_data]
print("긍정리뷰 수 : " , sum(score_list)) #출력:긍정리뷰 수 : 2499
print("부정리뷰 수 : ", len(movie_data) - sum(score_list))#출력 : 부정리뷰 수 : 2501
5000개의 리뷰정보가 있는 movie_data 에서 변수 data에 [텍스트리뷰, 긍정부정점수]로 구성된 리스트를 담음.
data 리스트의 1번 인덱스, 즉 긍정 부정 점수만 추출하여 리스트로 만듦
→score_list 변수에 담음
score_list 리스트 변수에는 0또는 1의 값이 들어 있음
이 중에서 값이 1인 것들의 합은 긍정리뷰의 개수임 ⇒sum(score_list)
→총 리뷰의 개수인 len(movie_data) 에서 긍정리뷰개수인 sum(score_list)을 빼면 부정리뷰 개수가 나옴
4. 리뷰 길이의 최대 값을 알아보고 해당 리뷰 출력
#4. 리뷰 길이의 최대 값을 알아보고 해당 리뷰를 출력해보자
max_len = len(movie_data[0][0]) #최대길이가 담길 변수
max_index = 0 #최대 길이를 가진 리뷰의 인덱스
for i, (text, _) in enumerate(movie_data) :
if len(text) > max_len:
max_len = len(text)
max_index = i
print("가장 긴 리뷰의 길이 : ",max_len)
print("가장 긴 리뷰의 내용 : ", movie_data[max_index][0])
최대 길이를 담을 변수 max_len 생성
최대 길이를 가진 리뷰의 인덱스 변수 max_index 생성
for문
인덱스 번호를 i라는 변수에 담음
리뷰 내용과 점수는 묶여있으므로 소괄호()를 이용하여 튜플로 묶음(점수는 사용하지 x →언더바( _ )로 표시)
enumerate() 함수를 이용하여 movie_data의 각각 요소들 뿐만 아니라 인덱스 정보도 불러옴
(text와 score(_)는 묶여 있음 ⇒튜플 형태로 표현!)
5.특정 키워드를 입력받아 해당 키워드가 포함된 리뷰를 출력
#5.특정 키워드를 입력받아 해당 키워드가 포함된 리뷰를 출력해보자.
keyword = input("검색 키워드 입력 : ")
for text, _ in movie_data:
if keyword in text: #각 리뷰에 검색단어가 들어있다면
print(text)
print('-----------------------------------------')
keyword 라는 변수에 사용자로부터 문자를 입력받음
리뷰 정보가 담긴 movie_data 의 처음부터 끝까지 돌면서 리뷰 내용 text와 점수 ‘_’를 가져옴
만약 movie_data에서 가져온 text(리뷰내용)에 사용자가 입력한 keyword가 존재하면 해당 리뷰 text를 출력함
구분자 ‘——’를 출력함
'PYTHON' 카테고리의 다른 글
[python]사용자 정의 함수 (0) | 2024.02.13 |
---|---|
[python]딕셔너리(dictionary), 집합(set) (1) | 2024.02.07 |
[python]조건문(if, elif, else) (0) | 2024.02.04 |
[python]연산자(산술,지수,관계(비교), 대입(복합), 논리, 멤버, 삼항 연산자) (0) | 2024.02.02 |
[Python]파이썬 문자열 슬라이싱(slicing), 문자열 포매팅(Formating),문자열함수 (0) | 2024.02.01 |