praw и проведения анализа настроений (Sentiment Analysis) с использованием лексикона nltk.sentiment.vader. Полученные данные агрегируются в pandas.DataFrame для дальнейшего использования в торговых стратегиях.Исходный код
Для реализации парсера нам понадобятся библиотеки praw, pandas и nltk. Скрипт авторизуется в Reddit API, скачивает последние посты из целевого сабреддита, анализирует текст заголовков и комментариев, а затем рассчитывает метрику Compound Sentiment. Полученные результаты можно использовать для построения альтернативных индикаторов, аналогично тому, как строится тепловая карта корреляции альткоинов на Python: seaborn и pandas или индикаторы технического анализа через интеграцию Ta-Lib в Python: Быстрый расчет 100+ индикаторов на DataFrame.
import praw
import pandas as pd
from nltk.sentiment.vader import SentimentIntensityAnalyzer
import nltk
# Загрузка лексикона VADER (требуется один раз)
nltk.download('vader_lexicon', quiet=True)
# Настройки подключения к Reddit API
reddit = praw.Reddit(
client_id='YOUR_CLIENT_ID',
client_secret='YOUR_CLIENT_SECRET',
user_agent='SentimentAnalyzer v1.0 by /u/YOUR_USERNAME'
)
def analyze_subreddit_sentiment(subreddit_name, limit=50):
sia = SentimentIntensityAnalyzer()
data = []
subreddit = reddit.subreddit(subreddit_name)
for submission in subreddit.hot(limit=limit):
# Пропускаем закрепленные посты
if submission.stickied:
continue
text_to_analyze = f"{submission.title} {submission.selftext}"
sentiment_scores = sia.polarity_scores(text_to_analyze)
data.append({
'title': submission.title,
'score': submission.score,
'num_comments': submission.num_comments,
'created_utc': pd.to_datetime(submission.created_utc, unit='s'),
'compound': sentiment_scores['compound'],
'pos': sentiment_scores['pos'],
'neu': sentiment_scores['neu'],
'neg': sentiment_scores['neg']
})
df = pd.DataFrame(data)
return df
if __name__ == '__main__':
df_sentiment = analyze_subreddit_sentiment('CryptoCurrency', limit=30)
print(df_sentiment.head())
Разбор параметров
client_id: Уникальный идентификатор вашего приложения, полученный на портале разработчиков Reddit.client_secret: Секретный ключ приложения для авторизации запросов.user_agent: Строка-идентификатор вашего парсера (Reddit требует уникальные юзер-агенты для предотвращения блокировок).SentimentIntensityAnalyzer: Класс из библиотекиnltk, использующий алгоритм VADER, оптимизированный под анализ коротких текстов и сленга из соцсетей.compound: Интегральный показатель тональности в диапазоне от -1 (абсолютно негативный) до +1 (абсолютно позитивный).
Как запустить
Шаг 1. Зарегистрируйте приложение на Reddit Apps как ‘script’ и получите client_id и client_secret.
Шаг 2. Установите необходимые библиотеки: pip install praw pandas nltk.
Шаг 3. Вставьте ваши учетные данные в скрипт и запустите его. Полученный датафрейм можно использовать для фильтрации сигналов совместно с техническими индикаторами, например, настроив векторизованный расчет SuperTrend на Python без медленных циклов.




