Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 파이썬
- GIT
- Heap
- Seq2Seq
- Regression
- Stack
- PANDAS
- OS
- Python
- SQL
- kmu
- machine learning
- 국민대
- 회귀
- 정렬
- gan
- 데이터베이스
- programmers
- instaloader
- db
- googleapiclient
- 재귀
- 프로그래머스
- 머신 러닝
- 스택
- 운영체제
- LSTM
- 국민대학교
- C++
- python3
Archives
- Today
- Total
정리 노트
GFRIEND & OH MY GIRL 데이터 얻기 본문
728x90
이번 포스트에서는 인스타그램, 유튜브 데이터 수집 결과를 공유하기 위한 포스트입니다.
인스타그램 데이터 수집
import instaloader
import pandas as pd
from tqdm import tqdm
loader = instaloader.Instaloader()
loader.login(user='사용자이름', passwd='사용자비밀번호')
user_name = gfriendofficial
# user_name = "wm_ohmygirl"
posts = instaloader.Profile.from_username(loader.context, user_name).get_posts()
data_dict = {"date": [], "media_count": [], "like_count": [], "comment_count": [], "communication_stats": []}
for post in tqdm(posts):
data_dict["date"].append(post.date)
data_dict["media_count"].append(post.mediacount)
data_dict["like_count"].append(post.likes)
data_dict["comment_count"].append(post.comments)
stats = post.mediacount * 0.35 + post.likes * 0.25 + post.comments * 0.4
data_dict["communication_stats"].append(stats)
idol_df = pd.DataFrame(data_dict)
idol_df["date"] = pd.to_datetime(idol_df["date"])
idol_df.to_excel("OhMyGirl_Instagram.xlsx")
print("작업 완료")
위 코드를 통해 두 아이돌 그룹(여자친구, 오마이걸)에 대한 인스타그램 데이터를 수집할 수 있었습니다. 수집 결과는 아래와 같습니다.
유튜브 데이터 수집
from googleapiclient.discovery import build
import pandas as pd
from secret import API_KEY
from tqdm import tqdm
def get_playlist_items(service, pl_id, page_token=None):
response = service.playlistItems().list(
playlistId=pl_id,
part='snippet',
pageToken=page_token,
maxResults=50
).execute()
videos = response['items']
while 'nextPageToken' in response:
page_token = response['nextPageToken']
next_response = service.playlistItems().list(
playlistId=pl_id,
part='snippet',
pageToken=page_token,
maxResults=50
).execute()
response = next_response
videos.extend(response['items'])
return videos
youtube_api_service_name = "youtube"
youtube_api_version = "v3"
youtube = build(youtube_api_service_name, youtube_api_version, developerKey=API_KEY)
# 채널 찾기
searched = youtube.search().list(
q="GFRIEND",
part="snippet",
maxResults=10
).execute()
# 플레이리스트 목록 얻기
channel_id = searched['items'][0]['snippet']['channelId']
playlists = youtube.playlists().list(
part="snippet",
channelId=channel_id,
maxResults=100
).execute()
data_dict = {"date": [], "view_count": [], "like_count": [], "comment_count": [], "communication_stats": []}
# 플레이리스트의 동영상 목록 얻기
for item in tqdm(playlists['items']):
playlist_id = item['id']
playlist_videos = get_playlist_items(youtube, playlist_id)
for video in playlist_videos:
video_id = video['snippet']['resourceId']['videoId']
video_info = youtube.videos().list(
part='snippet,contentDetails,statistics',
id=video_id
).execute()
if video_info['pageInfo']['totalResults'] == 0:
continue
print(video_info['items'][0]['snippet']['title'])
published_date = video_info['items'][0]['snippet']['publishedAt']
view_count = int(video_info['items'][0]['statistics']['viewCount'])
like_count = int(video_info['items'][0]['statistics']['likeCount'])
data_dict['date'].append(published_date)
data_dict['view_count'].append(view_count)
data_dict['like_count'].append(like_count)
try:
# 유튜브 동영상 중 댓글 사용 중지된 영상들이 존재
# 이럴 때는 KeyError가 나기 때문에 해당 값을 0으로 삽입
comment_count = int(video_info['items'][0]['statistics']['commentCount'])
stats = view_count * 0.35 + like_count * 0.3 + comment_count * 0.35
data_dict['comment_count'].append(comment_count)
data_dict['communication_stats'].append(stats)
except KeyError as ke:
data_dict['comment_count'].append(0)
data_dict['communication_stats'].append(view_count * 0.35 + like_count * 0.3)
idol_df = pd.DataFrame(data_dict)
idol_df["date"] = pd.to_datetime(idol_df["date"], format="ISO8601")
print(idol_df.head())
idol_df.to_csv("result.csv")
# timezone 지우기 위한 방법으로 현재 csv 로 저장했다 불러서 사용하는 방법 사용 중
# 분명 더 간단한 방법이 있을 터!
idol_df = pd.read_csv('result.csv').drop("Unnamed: 0", axis=1)
idol_df["date"] = pd.to_datetime(idol_df["date"])
idol_df["date"] = idol_df["date"].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S'))
idol_df.to_excel("GFRIEND_YouTube.xlsx")
print("작업 완료")
위 코드를 통해 아이돌 그룹(여자친구)에 대한 유튜브 데이터를 수집할 수 있었습니다. 수집 결과는 아래와 같습니다.
오마이걸 그룹의 유튜브 데이터도 수집을 시도했으나 해당 채널에서 좋아요 수를 공개하지 않았습니다. 이로 인해 동영상의 좋아요 수를 수집할 수 없었습니다.
따라서 기존에 2개의 SNS에 대해 분석하려 했던 것을 인스타그램에 대해서만 분석하는 것으로 축소했습니다.
다음으로 진행할 일(계획)
- 소통 지수 식 수정(media_count와 다른 열들과의 크기 차이가 너무 큼)
- 수집한 데이터에 대한 탐색적 데이터 분석 및 시각화 진행
728x90
'K-POP 아이돌 SNS 분석' 카테고리의 다른 글
GFRIEND & OH MY GIRL 데이터 시각화 (0) | 2024.02.27 |
---|---|
구체화 과정 (2) | 2024.02.17 |
Python googleapiclient로 Youtube 데이터 가져오기 (2) | 2024.02.15 |
사전 과정 - python tweepy 살펴보기 (0) | 2024.02.10 |
사전 과정 - python instaloader 둘러보기 (0) | 2024.02.10 |