Python: Aktienkursprognose Teil 1

Holen Sie sich Tweets

Überblick

Es gibt zwei Methoden, um Anlageentscheidungen bei Aktienanlagen zu treffen: technische Analyse und Fundamentalanalyse. Dieses Mal werden wir uns mit der technischen Analyse befassen.

Prognostizieren Sie den durchschnittlichen Aktienkurs von Nikkei mithilfe von Twitter. Zunächst werde ich den allgemeinen Ablauf erläutern.

1, Holen Sie sich vergangene Tweets eines Kontos von Twitter mit der Twitter-API. 2, Analysieren Sie tägliche Tweets mit einem Polarwörterbuch. 3, Holen Sie sich Zeitreihendaten des durchschnittlichen Aktienkurses von Nikkei. 4, Prognostizieren Sie die Höhen und Tiefen des Aktienkurses am nächsten Tag anhand der täglichen Stimmung mithilfe von maschinellem Lernen.

Zugangstoken

Sie benötigen ein Zugriffstoken, um Tweets von Twitte abzurufen. Dies entspricht der ID und dem PASS im Benutzerkonto

Es bezieht sich auf zwei Arten von Zeichenketten, "Access Token Key" und "Access Token Secret".
Hier erhalten Sie Tweets, die ein bestimmtes Wort enthalten.
import time
from requests_oauthlib import OAuth1Session
import json
import datetime, time, sys

CK = ''         #Verbraucherschlüssel''Geben Sie ein
CS = ''         #Verbrauchergeheimnis''Geben Sie ein
AT = ''         #Zugangstoken''Geben Sie ein
AS = ''         #Zugriff auf Token Secret''Geben Sie ein

session = OAuth1Session(CK, CS, AT, AS)

url = 'https://api.twitter.com/1.1/search/tweets.json'
res = session.get(url, params = {'q':u'python', 'count':100})
res_text = json.loads(res.text)
for tweet in res_text['statuses']:
    print ('-----')
    print (tweet['created_at'])
    print (tweet['text'])

Klicken Sie hier, um Tweets einschließlich künstlicher Intelligenz zu erhalten

import time
from requests_oauthlib import OAuth1Session
import json
import datetime, time, sys
 
CK = ''         #Verbraucherschlüssel''Geben Sie ein
CS = ''         #Verbrauchergeheimnis''Geben Sie ein
AT = ''         #Zugangstoken''Geben Sie ein
AS = ''         #Zugriff auf Token Secret''Geben Sie ein
 
session = OAuth1Session(CK, CS, AT, AS)
 
url = 'https://api.twitter.com/1.1/search/tweets.json'
res = session.get(url, params = {'q':u'Künstliche Intelligenz', 'count':100})
res_text = json.loads(res.text)
for tweet in res_text['statuses']:
    print ('-----')
    print (tweet['created_at'])
    print (tweet['text'])

Holen Sie sich Konto-Tweets

Ich werde versuchen, die Tweets von Nikkei Sangyo Shimbun zu bekommen.

import tweepy
import csv


consumer_key =      "" #„Verbraucher erhalten hier mit einem persönlichen Konto_Schlüssel""Bitte geben Sie in "
consumer_secret  =  "" #„Verbraucher erhalten hier mit einem persönlichen Konto_Geheimnis""Bitte geben Sie in "
access_key =        "" #„Zugang erhalten Sie hier mit einem persönlichen Konto_Schlüssel""Bitte geben Sie in "
access_secret =     "" #„Zugang erhalten Sie hier mit einem persönlichen Konto_secret""Bitte geben Sie in "

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)

#Holen Sie sich Tweets
tweet_data = []

tweets = tweepy.Cursor(api.user_timeline,screen_name = "@nikkei_bizdaily",exclude_replies = True)
for tweet in tweets.items():
    tweet_data.append([tweet.id,tweet.created_at,tweet.text.replace('\n',''),tweet.favorite_count,tweet.retweet_count])
tweet_data

Als CSV-Daten speichern

#  tweets.Im Datenordner als CSV gespeichert
with open('./6050_stock_price_prediction_data/tweets.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f, lineterminator='\n')
    writer.writerow(["id", "text", "created_at", "fav", "RT"])
    writer.writerows(tweet_data)

Emotionsanalyse

Emotionsanalyse Teil 1 (morphologische Analyse)

Was ist Emotionsanalyse? Text hat eine positive Bedeutung bei der Verarbeitung natürlicher Sprache. Oder es ist eine Technik, um zu beurteilen, ob es eine negative Bedeutung hat.

Durch emotionale Analyse von Produktbewertungen Es wird häufig für Marketing und Kundenbetreuung verwendet.

Der Hauptmechanismus der Emotionsanalyse sind die Wörter, die im Satz erscheinen Beurteilen Sie, ob es eine positive, negative oder neutrale Bedeutung hat.

Es gibt ein Polaritätswörterbuch als Kriterium für die Beurteilung Es wird in einem Wörterbuch definiert, in dem die positive oder negative Morphologie im Voraus definiert wird.

Die Emotionsanalyse wird unter Bezugnahme auf das Polaritätswörterbuch für jedes Wort im Dokument durchgeführt. Lassen Sie uns zunächst die Morphologie mit MeCab analysieren.

import MeCab
import re
#Erstellen Sie eine MeCab-Instanz. Wenn kein Argument angegeben wird, wird es zu einem IPA-Wörterbuch.
m = MeCab.Tagger('')

#Eine Funktion, die Text morphologisch analysiert und eine Liste von Wörterbüchern zurückgibt
def get_diclist(text):
    parsed = m.parse(text)      #Ergebnis der morphologischen Analyse (erhalten als Zeichenkette einschließlich Zeilenumbrüche)
    lines = parsed.split('\n')  #Listen Sie die Analyseergebnisse für jede Zeile separat auf (1 Wort)
    lines = lines[0:-2]         #Die letzten beiden Zeilen sind nicht erforderlich. Löschen Sie sie daher
    diclist = []
    for word in lines:
        l = re.split('\t|,',word)  #Weil jede Zeile durch einen Tabulator und ein Komma getrennt ist
        d = {'Surface':l[0], 'POS1':l[1], 'POS2':l[2], 'BaseForm':l[7]}
        diclist.append(d)
    return(diclist)

Morgen wird es sonnig werden. Klicken Sie hier, wenn Sie das Argument festlegen

import MeCab
import re
#Erstellen Sie eine MeCab-Instanz. Wenn kein Argument angegeben wird, wird es zu einem IPA-Wörterbuch.
m = MeCab.Tagger('')

#Eine Funktion, die Text morphologisch analysiert und eine Liste von Wörterbüchern zurückgibt
def get_diclist(text):
    parsed = m.parse(text)      #Ergebnis der morphologischen Analyse (erhalten als Zeichenkette einschließlich Zeilenumbrüche)
    lines = parsed.split('\n')  #Listen Sie die Analyseergebnisse für jede Zeile separat auf (1 Wort)
    lines = lines[0:-2]         #Die letzten beiden Zeilen sind nicht erforderlich. Löschen Sie sie daher
    diclist = []
    for word in lines:
        l = re.split('\t|,',word)  #Weil jede Zeile durch einen Tabulator und ein Komma getrennt ist
        d = {'Surface':l[0], 'POS1':l[1], 'POS2':l[2], 'BaseForm':l[7]}
        diclist.append(d)
    return(diclist)

get_diclist("Morgen wird es sonnig werden.")

image.png

Emotionsanalyse Teil 2 (Polaritätswörterbuch)

Dieses Mal werden wir das Wort Emotionspolaritätskorrespondenztabelle als Polaritätswörterbuch verwenden.

Dies weist reelle Zahlen von -1 bis +1 unter Bezugnahme auf das "Iwanami Japanese Dictionary (Iwanami Shoten)" zu.

Je näher es an -1 liegt, desto negativer Je näher es an +1 liegt, desto positiver ist es.

Lesen Sie dann das Polaritätswörterbuch Erstellen Sie Listen und Wörterbücher.

#word_list, pn_Speichern Sie Word und PN im Listentyp.
import pandas as pd
pn_df = pd.read_csv('./6050_stock_price_prediction_data/pn_ja.csv', encoding='utf-8', names=('Word','Reading','POS', 'PN'))
word_list=list(pn_df['Word'])
pn_list=list(pn_df['PN'])

#pn_Wort als Diktat_list, pn_Erstellen Sie ein Wörterbuch, in dem die Liste gespeichert ist.
pn_dict = dict(zip(word_list,pn_list))

Emotionsanalyse Teil 3 (PN-Wert)

Die Implementierung besteht darin, auf das Polaritätswörterbuch zu verweisen und den PN-Wert zurückzugeben.

Ebenfalls Übergeben Sie get_diclist ("Es wird morgen gut") an die Funktion add_pnvalue, um zu sehen, wie es funktioniert Wir übergeben es auch an die Funktion get_mean, um den Durchschnitt der PN-Werte zu ermitteln.

import numpy as np


def add_pnvalue(diclist_old, pn_dict):
    diclist_new = []
    for word in diclist_old:
        base = word['BaseForm']        #Holen Sie sich die Grundform aus einzelnen Wörterbüchern
        if base in pn_dict:
            pn = float(pn_dict[base]) 
        else:
            pn = 'notfound'            #Wenn das Wort nicht in der PN-Tabelle enthalten ist
        word['PN'] = pn
        diclist_new.append(word)
    return(diclist_new)

#Berechnen Sie den PN-Durchschnittswert jedes Tweets
def get_mean(dictlist):
    pn_list = []
    for word in dictlist:
        pn = word['PN']
        if pn!='notfound':
            pn_list.append(pn)
    if len(pn_list)>0:
        pnmean = np.mean(pn_list)
    else:
        pnmean=0
    return pnmean


dl_old = get_diclist("Morgen wird es sonnig werden.")
# get_diclist("Morgen wird es sonnig werden.")Die Funktion hinzufügen_Übergeben Sie es an pnvalue, um zu sehen, wie es funktioniert.
dl_new = add_pnvalue(dl_old, pn_dict)
print(dl_new)

#Machen Sie es auch zu einer Funktion bekommen_Übergeben Sie es, um den Durchschnitt der PN-Werte zu ermitteln.
pnmean = get_mean(dl_new)
print(pnmean)

image.png

Emotionsanalyse Teil 4 (grafische Darstellung)

Die Änderung des PN-Werts wird in einem Diagramm angezeigt.

import matplotlib.pyplot as plt
%matplotlib inline
df_tweets = pd.read_csv('./6050_stock_price_prediction_data/tweets.csv', names=['id', 'date', 'text', 'fav', 'RT'], index_col='date')
df_tweets = df_tweets.drop('text', axis=0)
df_tweets.index = pd.to_datetime(df_tweets.index)
df_tweets = df_tweets[['text']].sort_index(ascending=True)

# means_Erstellen Sie eine leere Liste mit dem Namen list und ermitteln Sie den Durchschnittswert für jeden Tweet.
means_list = []
for tweet in df_tweets['text']:
    dl_old = get_diclist(tweet)
    dl_new = add_pnvalue(dl_old, pn_dict)
    pnmean = get_mean(dl_new)
    means_list.append(pnmean)
df_tweets['pn'] = means_list
df_tweets =  df_tweets.resample('D', how='mean')

#Zeichnen Sie das Datum auf der x-Achse und den PN-Wert auf der y-Achse.
x = df_tweets.index
y = df_tweets.pn
plt.plot(x,y)
plt.grid(True)

# df_tweets.df mit dem Namen csv_Bitte geben Sie die Tweets erneut aus.
df_tweets.to_csv('./6050_stock_price_prediction_data/df_tweets.csv')

image.png

Emotionsanalyse Teil 5 (Standardisierung)

Betrachtet man die Ergebnisse des Diagramms, so scheint es insgesamt viele negative Werte zu geben.

Dies liegt daran, dass das Polarwörterbuch viel Vokabular mit negativen Auswirkungen enthält. Standardisieren, um dieses Ergebnis anzupassen.

Standardisieren Sie den PN-Wert Ändern Sie außerdem die PN auf den Durchschnitt für jedes Datum und zeichnen Sie sie auf.

# means_Standardisierte Liste, x_Ausgabe als Standard
df_tweets['pn'] = (df_tweets['pn'] - df_tweets['pn'].mean()) / df_tweets['pn'].std()

#Ändern Sie außerdem die PN auf den Durchschnitt für jedes Datum und zeichnen Sie sie auf.
df_tweets =  df_tweets.resample('D', how='mean')
x = df_tweets.index
y = df_tweets.pn
plt.plot(x,y)
plt.grid(True)

image.png

Recommended Posts

Python: Aktienkursprognose Teil 2
Python: Aktienkursprognose Teil 1
[Python] Meine Aktienkursprognose [HFT]
Aktienprognose mit TensorFlow (LSTM) ~ Aktienprognose Teil 1 ~
Aktienkursprognose 2 Kapitel 2
Aktienkursprognose 1 Kapitel 1
Aktienkursprognose mit Deep Learning (TensorFlow) -Teil 2-
Python & Machine Learning Study Memo ⑦: Aktienkursprognose
Aktienkursprognose mit Tensorflow
Holen Sie sich Lager mit Python
Aktienkursprognose mit TensorFlow (mehrschichtiges Perceptron: MLP) ~ Aktienprognose 2 ~
QGIS + Python Teil 2
QGIS + Python Teil 1
Aktienkursprognose mit Deep Learning (TensorFlow)
Laden Sie japanische Aktienkursdaten mit Python herunter
[Python] Erstellen eines Aktien-Drawdown-Diagramms
Python: Scraping Teil 1
Aktienkursprognose mit maschinellem Lernen (Return Edition)
Lösung Wenn Sie Python 3.6 oder höher verwenden, benötigen Sie die enum34-Bibliothek ebenfalls nicht. Deinstallieren Sie sie daher und verwenden Sie das Standard-Enum-Modul. Enum34 deinstallieren Führen Sie nach der Deinstallation von enum34 erneut `pip install optuna` aus und Sie haben Optuna erfolgreich installiert! Python, pip, Python3, enum, OptunaPython3 Beginn Teil 1
Python: Scraping Teil 2
Holen Sie sich Aktienkursdaten mit Quandl API [Python]
Web Scraping mit Python (Aktienkurs)
Aktienkursprognose mit Deep Learning [Datenerfassung]
Python Basic Memorandum Teil 2
Python-Grundnotiz - Teil 2
Preisschwankungsprognose für virtuelle Währungen
Kaggle ~ Home Preisprognose ② ~
Python-Grundnotiz - Teil 1
Kaggle ~ Home Preisprognose ~
[Zeitreihen mit Handlung] Dynamische Visualisierung mit Handlung [Python, Aktienkurs]
Bildverarbeitung mit Python (Teil 2)
Angrenzende Bilder mit Python Teil 1
Python-Anwendung: Pandas Teil 1: Basic
Python-Anwendung: Pandas Teil 2: Serie
Schaben mit Selen + Python Teil 1
Python: Schiffsüberlebensvorhersage Teil 2
Programmierhistorie 1 Monat NY Dow-Bestand mit Python extrahieren!
Python: Überwachtes Lernen: Hyperparameter Teil 1
[Einführung in Systre] Aktienkursprognose; schwach am Montag m (__) m
Python-Grammatik-Grundnotiz (1)
Python: Schiffsüberlebensvorhersage Teil 1
Python studieren mit freeCodeCamp part2
Bildverarbeitung mit Python (Teil 1)
Nampre mit Python lösen (Teil 2)
Zeitreihenanalyse Teil 3 Prognose
Bildverarbeitung mit Python (3)
Python: Schiffsüberlebensvorhersage Teil 3
UI-Automatisierung Teil 2 in Python
Kratzwettervorhersage mit Python
Python: Überwachtes Lernen: Hyperparameter Teil 2
Aktienkursprognose mit LSTM_1
Tipps zur Erfassung von Aktienkursdaten
Python x GIS-Grundlagen (1)
Aktienkursprognose durch maschinelles Lernen Beginnen wir mit Numerai
Aktienkurs Prognose durch maschinelles Lernen ist so wahr, Numerai Signale
Verschieben von CSV-Dateien mit Python Teil 1
Python x GIS-Grundlagen (3)
Spielen Sie handschriftliche Zahlen mit Python Part 1
Perl-Objekt und Python-Klasse Teil 2.