Python: prévision du cours de l'action partie 1

Recevez des tweets

Aperçu

Il existe deux méthodes pour prendre des décisions d'investissement dans l'investissement boursier: l'analyse technique et l'analyse des fondamentaux. Cette fois, nous traiterons de l'analyse technique.

Prédisez le cours moyen de l'action Nikkei en utilisant Twitter. Tout d'abord, je vais vous expliquer le flux général.

1, récupérez les tweets d'un compte Twitter en utilisant l'API Twitter. 2, Analysez les tweets quotidiens à l'aide d'un dictionnaire polaire. 3, obtenez des données de séries chronologiques du cours moyen de l'action Nikkei. 4, prédisez les hauts et les bas du cours de l'action le lendemain à partir du sentiment quotidien en utilisant l'apprentissage automatique.

Jeton d'accès

Vous aurez besoin d'un jeton d'accès pour récupérer les tweets de Twitte. C'est comme l'ID et le PASS dans le compte utilisateur

Il fait référence à deux types de chaînes de caractères, "Access Token Key" et "Access Token Secret".
Ici, vous obtiendrez des tweets contenant un certain mot.
import time
from requests_oauthlib import OAuth1Session
import json
import datetime, time, sys

CK = ''         #La clé du consommateur''Entrer à l'intérieur
CS = ''         #Secret du consommateur''Entrer à l'intérieur
AT = ''         #Jeton d'accès''Entrer à l'intérieur
AS = ''         #Access Token Secret''Entrer à l'intérieur

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'])

Cliquez ici pour obtenir des tweets incluant l'intelligence artificielle

import time
from requests_oauthlib import OAuth1Session
import json
import datetime, time, sys
 
CK = ''         #La clé du consommateur''Entrer à l'intérieur
CS = ''         #Secret du consommateur''Entrer à l'intérieur
AT = ''         #Jeton d'accès''Entrer à l'intérieur
AS = ''         #Access Token Secret''Entrer à l'intérieur
 
session = OAuth1Session(CK, CS, AT, AS)
 
url = 'https://api.twitter.com/1.1/search/tweets.json'
res = session.get(url, params = {'q':u'Intelligence artificielle', 'count':100})
res_text = json.loads(res.text)
for tweet in res_text['statuses']:
    print ('-----')
    print (tweet['created_at'])
    print (tweet['text'])

Recevoir des tweets de compte

Je vais essayer d'obtenir les tweets de Nikkei Sangyo Shimbun.

import tweepy
import csv


consumer_key =      "" #"Consommateur obtenu avec un compte personnel ici_clé""Veuillez entrer "
consumer_secret  =  "" #"Consommateur obtenu avec un compte personnel ici_secret""Veuillez entrer "
access_key =        "" #"Accès obtenu ici avec un compte personnel_clé""Veuillez entrer "
access_secret =     "" #"Accès obtenu ici avec un compte personnel_secret""Veuillez entrer "

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

#Recevez des 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

Enregistrer en tant que données csv

#  tweets.Enregistré dans le dossier de données en tant que csv
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)

Analyse des émotions

Analyse des émotions partie 1 (analyse morphologique)

Qu'est-ce que l'analyse des émotions? Le texte a une signification positive en utilisant le traitement du langage naturel. Ou c'est une technique pour juger si elle a une signification négative.

En analysant émotionnellement les avis sur les produits Il est largement utilisé pour le marketing et le support client.

Le principal mécanisme d'analyse des émotions est constitué des mots qui apparaissent dans la phrase Jugez s'il a une signification positive, négative ou neutre.

Il existe un dictionnaire de polarité comme critère de jugement Elle est définie dans un dictionnaire dans lequel la morphologie positive ou négative est définie à l'avance.

L'analyse des émotions est effectuée en se référant au dictionnaire de polarité pour chaque mot du document. Analysons d'abord la morphologie à l'aide de MeCab.

import MeCab
import re
#Créez une instance MeCab. Si aucun argument n'est spécifié, il devient un dictionnaire IPA.
m = MeCab.Tagger('')

#Une fonction qui analyse morphologiquement le texte et renvoie une liste de dictionnaires
def get_diclist(text):
    parsed = m.parse(text)      #Résultat de l'analyse morphologique (obtenu sous forme de chaîne de caractères avec sauts de ligne)
    lines = parsed.split('\n')  #Lister les résultats de l'analyse séparément pour chaque ligne (1 mot)
    lines = lines[0:-2]         #Les deux dernières lignes sont inutiles, supprimez-les
    diclist = []
    for word in lines:
        l = re.split('\t|,',word)  #Parce que chaque ligne est séparée par une tabulation et une virgule
        d = {'Surface':l[0], 'POS1':l[1], 'POS2':l[2], 'BaseForm':l[7]}
        diclist.append(d)
    return(diclist)

Il fera beau, demain. Cliquez ici lorsque défini dans l'argument

import MeCab
import re
#Créez une instance MeCab. Si aucun argument n'est spécifié, il devient un dictionnaire IPA.
m = MeCab.Tagger('')

#Une fonction qui analyse morphologiquement le texte et renvoie une liste de dictionnaires
def get_diclist(text):
    parsed = m.parse(text)      #Résultat de l'analyse morphologique (obtenu sous forme de chaîne de caractères avec sauts de ligne)
    lines = parsed.split('\n')  #Lister les résultats de l'analyse séparément pour chaque ligne (1 mot)
    lines = lines[0:-2]         #Les deux dernières lignes sont inutiles, supprimez-les
    diclist = []
    for word in lines:
        l = re.split('\t|,',word)  #Parce que chaque ligne est séparée par une tabulation et une virgule
        d = {'Surface':l[0], 'POS1':l[1], 'POS2':l[2], 'BaseForm':l[7]}
        diclist.append(d)
    return(diclist)

get_diclist("Il fera beau, demain.")

image.png

Analyse des émotions, partie 2 (dictionnaire de polarité)

Cette fois, nous utiliserons le mot table de correspondance de polarité d'émotion comme dictionnaire de polarité.

Ceci attribue des nombres réels de -1 à +1 en référence au "Dictionnaire japonais Iwanami (Iwanami Shoten)".

Plus il est proche de -1, plus il est négatif Plus il est proche de +1, plus il est positif.

Ensuite, lisez le dictionnaire de polarité Créez des listes et des dictionnaires.

#word_list, pn_Stockez respectivement Word et PN dans le type de liste.
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_mot comme dict_list, pn_Créez un dictionnaire qui stocke la liste.
pn_dict = dict(zip(word_list,pn_list))

Analyse des émotions, partie 3 (valeur PN)

L'implémentation consiste à se référer au dictionnaire de polarité et à renvoyer la valeur PN.

Aussi Passez get_diclist ("Ça ira bien demain") à la fonction add_pnvalue pour voir comment cela fonctionne Nous le passons également à la fonction get_mean pour connaître la moyenne des valeurs PN.

import numpy as np


def add_pnvalue(diclist_old, pn_dict):
    diclist_new = []
    for word in diclist_old:
        base = word['BaseForm']        #Obtenez le formulaire de base à partir de dictionnaires individuels
        if base in pn_dict:
            pn = float(pn_dict[base]) 
        else:
            pn = 'notfound'            #Si le mot ne figure pas dans la table PN
        word['PN'] = pn
        diclist_new.append(word)
    return(diclist_new)

#Calculez la valeur moyenne PN de chaque tweet
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("Il fera beau, demain.")
# get_diclist("Il fera beau, demain.")La fonction ajouter_Passez-le à pnvalue pour voir comment cela fonctionne.
dl_new = add_pnvalue(dl_old, pn_dict)
print(dl_new)

#Faites-en également une fonction get_Transmettez-le à un moyen de connaître la moyenne des valeurs PN.
pnmean = get_mean(dl_new)
print(pnmean)

image.png

Analyse des émotions, partie 4 (représentation graphique)

Le changement de la valeur PN est affiché dans un graphique.

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_Créez une liste vide appelée liste et trouvez la valeur moyenne de chaque 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')

#Tracez la date sur l'axe des x et la valeur PN sur l'axe des y.
x = df_tweets.index
y = df_tweets.pn
plt.plot(x,y)
plt.grid(True)

# df_tweets.df avec le nom csv_Veuillez renvoyer les tweets.
df_tweets.to_csv('./6050_stock_price_prediction_data/df_tweets.csv')

image.png

Analyse des émotions partie 5 (normalisation)

En regardant les résultats du graphique, il semble qu'il y ait de nombreuses valeurs négatives dans l'ensemble.

C'est parce que le dictionnaire polaire contient beaucoup de vocabulaire avec des implications négatives. Standardisez pour ajuster ce résultat.

Standardiser la valeur PN En outre, modifiez le PN à la moyenne pour chaque date et tracez-le.

# means_Liste standardisée, x_Sortie comme std
df_tweets['pn'] = (df_tweets['pn'] - df_tweets['pn'].mean()) / df_tweets['pn'].std()

#En outre, modifiez le PN à la moyenne pour chaque date et tracez-le.
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: prévision du cours de l'action, partie 2
Python: prévision du cours de l'action partie 1
[Python] Mes prévisions de cours de bourse [HFT]
Prévision de stock avec TensorFlow (LSTM) ~ Prévision de stock Partie 1 ~
Prévision du cours de l'action 2 Chapitre 2
Prévision du cours de l'action 1 Chapitre 1
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow) - Partie 2
Mémo d'étude Python & Machine Learning ⑦: Prévision du cours de l'action
Prévision du cours de l'action avec tensorflow
Obtenez des stocks avec Python
Prévision de stock avec TensorFlow (perceptron multicouche: MLP) ~ Prévision de stock 2 ~
QGIS + Python Partie 2
QGIS + Python Partie 1
Prévision du cours des actions à l'aide du Deep Learning (TensorFlow)
Téléchargez les données de cours des actions japonaises avec Python
[Python] Création d'un graphique de tirage des actions
Python: grattage partie 1
Prévision du cours des actions à l'aide de l'apprentissage automatique (édition de retour)
Python3 commence la partie 1
Python: grattage, partie 2
Obtenez des données sur le cours de l'action avec l'API Quandl [Python]
Web scraping avec Python (cours de l'action)
Prévision du cours de l'action à l'aide du Deep Learning [acquisition de données]
Mémorandum de base Python partie 2
Mémo de base Python - Partie 2
Prévision de la fluctuation des prix de la monnaie virtuelle
Kaggle ~ Prévision de prix de l'immobilier ② ~
Mémo de base Python - Partie 1
Kaggle ~ Prévision de prix à domicile ~
[Série chronologique avec plotly] Visualisation dynamique avec plotly [python, cours boursier]
Traitement d'image avec Python (partie 2)
Images en bordure avec python Partie 1
Application Python: Pandas Partie 1: Basique
Application Python: Pandas Partie 2: Série
Grattage avec Selenium + Python Partie 1
Python: prévision de survie de navire, partie 2
Historique de programmation 1 mois Extraire le stock NY Dow avec Python!
Python: Apprentissage supervisé: Hyper Paramètres Partie 1
[Introduction à Systre] Prévision du cours de l'action; faible lundi m (__) m
Mémo de grammaire de base Python (1)
Python: prévision de survie des navires, partie 1
Etudier Python avec freeCodeCamp part2
Traitement d'image avec Python (partie 1)
Résolution de Nampre avec Python (partie 2)
Analyse de séries chronologiques Partie 3 Prévisions
Traitement d'image avec Python (3)
Python: prévision de survie des navires, partie 3
UI Automation Partie 2 en Python
Scraping prévisions météorologiques avec python
Python: apprentissage supervisé: Hyper Paramètre partie 2
Prévision du cours de l'action avec LSTM_1
Conseils d'acquisition de données de cours de bourse
Principes de base de Python x SIG (1)
Prévisions du cours des actions par apprentissage automatique Commençons Numerai
Les prévisions du cours des actions par apprentissage automatique sont si vraies Signaux Numerai
Translocation de fichiers CSV avec Python Partie 1
Principes de base de Python x SIG (3)
Jouez des nombres manuscrits avec Python Partie 1
objet perl et classe python partie 2.