Анализ настроений живого твита (3 серии деталей)
Это последняя статья серии Живой твит Анализ настроений Анкет В предыдущей статье мы увидели, как создать API, чтобы служить нашим прогнозам. Эта статья будет посвящена тому, как построить фронт.
Обычно фронтаризации написаны в ReactJS или VueJS (это единственные, которые я знаю). Но я большой поклонник Python, и я хотел бы построить фронт с помощью Python. Streamlit Помогает быстро построить интерфейс для обслуживания ваших приложений для машинного обучения.
Несмотря на то, что бэкэнд здесь не нужен (также можно было бы справиться с частью прогнозирования), важно перенести задачу тяжелой работы на бэкэнд, который может породить нескольких работников ( стреляющий
вместо Uvicorn
) и реализовать лучшие методы работы и асинхронные методы.
Строительство фронта
Убедитесь, что вы находитесь в каталоге Frontend
Потоковая передача хэштегов
# tweets.py import tweepy as tw auth = tw.OAuthHandler(config.consumer_key, config.consumer_secret) auth.set_access_token(config.access_token, config.access_token_secret) api = tw.API(auth, wait_on_rate_limit=True) tweets = tw.Cursor(api.search, q=hashtag, lang="en", since=date).items()
твиты
Object будет держать поток твитов, извлеченных из Twitter с даты.
Построение пользовательского интерфейса
# tweets.py import streamlit as st st.title("Twitter Live Sentiment Visualizer (beta)") # design the sibar elements st.sidebar.title("Enter a hashtag") hashtag = st.sidebar.text_input("hashtag", "trump") date = st.sidebar.date_input("Analyse tweets from", datetime.date(2020, 8, 1)) # if "Live analysis" is clicked if st.sidebar.button("Live analysis", key="analyse"): pos_count = 0 neg_count = 0 tweets_count = 0 st.subheader(f"Analysing #{hashtag} from {date}") d = {"Positive": [pos_count], "Negative": [neg_count]} df = pd.DataFrame(data=d) hashtag = f"#{hashtag}" # get the tweets with st.spinner("Getting tweets..."): tweets = tw.Cursor(api.search, q=hashtag, lang="en", since=date).items() total_tweets = st.empty() pos_tweets = st.empty() neg_tweets = st.empty() sentiments = ["Positive", "Negative"] chart = st.line_chart(df) # iterate through all the tweets for idx, tweet in enumerate(tweets): tweets_count += 1 output = requests.post("http://backend:8000/api", json={"tweet": tweet.text}) output = output.content.decode("utf8") output = json.loads(output).get("sentiment") # count the number of each sentiment if output == "Negative": neg_count += 1 elif output == "Positive": pos_count += 1 total_tweets.text("Tweets Analysed: %d" % tweets_count) pos_tweets.text("Positive tweets: %d" % pos_count) neg_tweets.text("Negative tweets: %d" % neg_count) # update the DataFrame df2 = pd.DataFrame({"Positive": [pos_count], "Negative": [neg_count]}) df.update(df2) # draw the cumulative chart chart.add_rows(df) if neg_count == 0 and pos_count == 0: st.warning(f"No Tweets Found on {hashtag}") else: st.success("Tweets classified")
По сути, это получает твиты из API Twitter, отправьте его на бэкэнд для вывода и настаивайте на совокупности каждого чувства. Вы могли бы даже изменить это на Семь твитов скользящих средней
😉. Одна важная вещь, которую нужно заметить, это то, что
output = requests.post("http://backend:8000/api", json={"tweet": tweet.text})
Мы использовали Бэкэнд: 8000
вместо Localhost: 8000
. Это потому, что сервис, который мы создаем для бэкэнда, будет называться Бэкэнд
и хозяин будет Бэкэнд
вместо Localhost
Зайдите на фронт
FROM python:3.8-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt EXPOSE 8501 COPY . . CMD ["streamlit", "run", "tweets.py"] # nothing fancy here
Теперь давайте свяжем все, чтобы построить наше приложение
CD ..
Чтобы вернуться к корневому каталогу. Структура вашего проекта должна выглядеть так.
❯ tree . . ├── LICENSE ├── README.md ├── backend │ ├── Dockerfile │ ├── classify.py │ ├── models │ │ └── sentiment_model.pickle │ ├── requirements.txt │ ├── server.py │ └── utils.py ├── docker-compose.yml └── frontend ├── Dockerfile ├── config.py ├── requirements.txt └── tweets.py
Докер-состав
Создать Docker-compose.yml
в корневом каталоге
version: "3" services: frontend: build: frontend ports: - "8501:8501" depends_on: - backend backend: build: backend ports: - "8000:8000"
- Версия: Составьте файл версии 3
- Услуги: Здесь мы определяем услуги (Frontend и Backend)
- Зависит_он: Поскольку фронтэнд зависит от бэкэнда
❯ docker-compose build ❯ docker-compose up -d Starting sentwitter_backend_1 ... done Starting sentwitter_frontend_1 ... done # -d for detach mode (it'll run in background)
Перейдите к Localhost: 8501
И вы должны увидеть, как ваше приложение работает. Давайте быстро забежать #2Articles1week
Анкет
Это много красных флагов прямо для модели. Никто не будет писать негативно о 2Articles1week
Анкет Это просто модель такая плохая.
Ссылка
- Обложка статьи по Патрик Томассо
Анализ настроений живого твита (3 серии деталей)
Оригинал: “https://dev.to/amal/building-the-frontend-part-iii-live-tweet-sentiment-analysis-315b”