일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Stack
- OS
- gan
- LSTM
- Regression
- 재귀
- Seq2Seq
- 프로그래머스
- 데이터베이스
- db
- C++
- 국민대
- machine learning
- 회귀
- instaloader
- 파이썬
- kmu
- PANDAS
- 정렬
- 머신 러닝
- 운영체제
- Python
- googleapiclient
- 스택
- Heap
- SQL
- GIT
- 국민대학교
- programmers
- python3
Archives
- Today
- Total
정리 노트
데이터 얻기 본문
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 분석' 카테고리의 다른 글
데이터 시각화 (0) | 2024.02.27 |
---|---|
구체화 과정 (2) | 2024.02.17 |
googleapiclient로 Youtube 데이터 가져오기 (2) | 2024.02.15 |
사전 과정 - tweepy 살펴보기 (0) | 2024.02.10 |
사전 과정 - instaloader 둘러보기 (0) | 2024.02.10 |