본문 바로가기
데이터&AI/데이터분석

reddit의 wallstreets로 보는 2024 미국대선!!

by 일등박사 2024. 11. 6.
728x90

최근 포스팅에서 reddit의 데이터 수집을 알아보았는데요~!

 

2024.10.31 - [데이터&AI/LLM] - reddit의 서브레딧(wallstreetbets) 데이터 모으고 분석하기!! (with python + GPT vision/text)

 

reddit의 서브레딧(wallstreetbets) 데이터 모으고 분석하기!! (with python + GPT vision/text)

지난 포스팅에서 미국의 게시판 reddit의 best글을 가져오는 작업을 해보았습니다!! 2024.09.12 - [데이터&AI/데이터분석] - Reddit 데이터 수집하기 using API (PYTHON) Reddit 데이터 수집하기 using API (PYTHON)안

drfirst.tistory.com

 

이 내용을 바탕으로 이번 2024 대선에 대하여

레딧사용자는 어떻게 생각하는지 알아보겠습니다~!~


1. 코드!

- 데이터가 필요하곘지요!?

지난 코드들을 통하여 header의  인증정보는 준비가되었다는 가정하에!!

아래와 같이 최근의 wallstreetbets 개시물을 가져옵니다!!

import pandas as pd
import os
import numpy as np
import openai
import json 

API_KEY = os.getenv('OPENAI_API_KEY')
client = openai.OpenAI(api_key = API_KEY)

content_type = 'new'
# new면 최신!!
# hot 이면 인기 게시물(많은 사람들이 본) 
# top이면 최상위 게시물(특정 기간 동안 가장 많은 업보트를 받은 게시물 목록)
url = f'https://oauth.reddit.com/r/wallstreetbets/{content_type}'
df_final = pd.DataFrame()
after_unit = ''
for i in range(3):

    # GET 요청 보내기
    # 최신 글을 10개 가져오기
    params = {'limit': 30}  # 원하는 글의 수를 지정
# 최신 글을 10개 가져오기
    params = {'limit': 30
             ,'after' : after_unit}  # 원하는 글의 수를 지정

    response = requests.get(url, headers=headers, params=params)
    best_json = response.json()
    best_json
    after_unit = best_json['data']['after']
    df_ = pd.DataFrame(best_json['data']['children'])
    df_final = pd.concat([df_final,df_],axis=0)

 

2.GPT와함께! 데이터 정제!!

-  GPT로 이미지도 분석하고, 내용을 정리해서! 우리가 필요한 형태로 만들어보아요!

title_l = []
content_l = []
imageurl_l = []
url_l = []
imgAnal_l = []
contentAnal_l = []

for idx, row in df_final.iterrows():
    content_title = row['data']['title']
    content = row['data']['selftext']
    print(idx, content_title)
    print("CONTENT : ", content)
    url = 'https://www.reddit.com' + row['data']['permalink'] 
    print(url)
    thumb_nail = row['data']['thumbnail']
    if  'preview' in row['data']:
        img_url = row['data']['preview']['images'][0]['source']['url'].replace('&','&')
        my_prompt = 'reddit 의 wallstreetbets에 나온 투자 관련 이미지야. 이 관점에서 이미지가 어떤 내용일지 해석해줘'

        response = client.chat.completions.create(
          model="gpt-4o-mini",
          messages=[
            {
              "role": "user",
              "content": [
                {"type": "text", "text": my_prompt},
                {
                  "type": "image_url",
                  "image_url": {
                    "url": img_url,
                  },
                },
              ],
            }
          ],
          max_tokens=300,
        )

        img_analy = response.choices[0].message.content
        print(img_url)
        print(img_analy)
    else:
        img_url = ''
        img_analy = '이미지 없음'
        
    # 메시지 설정
    system_message = {
        "role": "system",
        "content": """
                    reddit 의 wallstreetbets에 나온 투자 관련글이야 
                    제목 / 본문 / 이미지를 조합해서 해당 글이 어떤 내용인지 한국어로 요약해줘
                    결과물은 아래와 같은 json 양식으로 써줘. 
                    미국 대통령선거 관련 내용도 있다면 포함해줘
                    {
                    "구분" : "투자정보 / 투자후기 등"
                    "내용요약" : "~~ 가 좋은 종목이다 / ~~를 투자해서 돈을 벌었다 등"
                    "재미요소" : "작성자가 큰 금액을 날린것을 희화화함 or 작성자가 언어유희 (주커버그를 zuker balls로 함)"
                    "관련종목" : "META (해당 종목의 티커 산출)"
                    "대선관련" : "Y 혹은 N "
                    "대선관련_당선자예측":"N일경우 공백, Y일경우 트럼프 or 해리스 or 중립"
                    
                    }
                  """
    }
    user_message = {
        "role": "user",
        "content": f"컨텐츠 제목 : {content_title} / 컨텐츠 본문 : {content} / 이미지 : {img_analy}"
    }

    # ChatCompletion 호출
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[system_message, user_message],
        temperature=0
    )

    # 응답 결과
    res = response.choices[0].message.content
    res_json = json.loads(response.choices[0].message.content.replace('```json','').replace('```',''))
    res
    print("******** 글 최종분석")
    print(res_json)
    print('-'*60)
    
    title_l         .append(content_title)
    content_l         .append(content)
    imageurl_l         .append(img_url)
    url_l         .append(url)
    imgAnal_l         .append(img_analy)
    contentAnal_l         .append(res_json)
    
    df_ttl = pd.DataFrame()
df_ttl['title'] = title_l
df_ttl['content'] = content_l
df_ttl['imageurl'] = imageurl_l
df_ttl['url'] = url_l
df_ttl['imgAnal'] = imgAnal_l
df_ttl['contentAnal'] =  pd.Series(contentAnal_l).apply(lambda x : json.dumps(x, ensure_ascii=False))

def convert_to_dict(value):
    if value[:1]=='[':
        if len(json.loads(value)) >=1:
            if len(json.loads(value)[0])>= 1:     
                return json.loads(value)[0]

            return json.loads(value)[0]
    else:
        return json.loads(value)
    
df_analy    = pd.json_normalize(df_ttl['contentAnal'].apply(convert_to_dict)     ) 
df_ttl = pd.concat([df_ttl, df_analy], axis=1) # pd.json_normalize(df_10['cashflow'].apply(convert_to_dict))],axis=1)
df_ttl

for c in ['title','content','imgAnal','contentAnal']:
    df_ttl[c] = df_ttl[c].str.replace('\n',' ').replace('\t',' ').replace('^',' ')
df_ttl.to_csv('wallstreet_president2024.csv',sep='^',encoding='utf-16')
df_ttl

 

짜잔~~

그래서 나온 데이터는!!

간단하게 아래와 같습니다!!

raw데이터도 참부합니다!

wallstreet_president2024.csv
0.24MB

3. 그래서!?!

- 그래서 결론!! 대통령은??

위의 글을을통해 파악해본다면

 

2024년 미국 대선에서!! 도널드 트럼프(DJT)가 대통령이 될 것이라는 예측이 더 많은 것으로 보입니다.

트럼프에 대한 긍정적인 언급이 여러 글에서 나타나고 있으며, 특히 경제 정책과 관련하여 트럼프의 당선 시 주식 시장과 USD의 강세를 기대하는 의견이 많습니다.

 

결국 코인.주식투자하는 사람들은 트럼프일까요!!!

 

최종 결과가 얼마 안남은지금 ㅎㅎ간단하게 데이터로 분석해보았습니다!^^

 

728x90

댓글