Faisons une interface graphique avec python.

introduction

Merci. Je publierai un article pour la première fois depuis longtemps. C'est Wamaro. En raison de circonstances récentes, je cache le grattage. Dans l'ancien temps, quand j'entendais que ça grattait, "Quoi? Qu'Est-ce que c'est? Je réfléchissais, mais maintenant j'ai un fort sentiment que je dois gratter. J'ai vraiment l'impression que les idées des gens changent en fonction de leur position et de l'époque. Au fait, dans cet esprit, j'ai travaillé sur un programme dont je me suis complètement débarrassé. Même maintenant, j'écris sans être blâmé par personne pour l'encapsulation ou l'apprentissage du code. On dit que le programme est un outil. Il ne sert donc à rien d'écrire sans but. Vous n'avez même pas besoin d'apprendre. Par conséquent, le fou crée de force un but. C'est la raison. Donc, cette fois, j'aimerais créer une interface graphique en utilisant python. Plus précisément, après avoir entré le code de l'entreprise et la période spécifiée, je voudrais écrire le code de l'application qui affiche la transition du cours de l'action pendant cette période.

environnement

L'environnement est illustré ci-dessous. ・ Windows10 ・ Python3 (anaconda) Le développement a été principalement réalisé dans jupyter-lab.

Aperçu du contenu du code

Je vais expliquer brièvement le contenu du code. Si vous voulez juste les résultats, vous pouvez vous référer au "code final" final.

Bibliothèques requises

La bibliothèque utilisée cette fois est indiquée ci-dessous.


from pandas_datareader import data
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
import numpy as np
%matplotlib inline

Le sentiment principal est le suivant. ・ Pandas: pour le traitement des données -Matplotlib: pour l'affichage des graphiques (% matplotlib inline est utilisé lors de l'affichage des graphiques dans le système jupyter.) ・ Numpy: pour le calcul -Tkinter: Pour la création d'interface graphique. (Il existe de nombreux types, mais tkinter est inclus par défaut dans anaconda, il est donc facile à utiliser.)

J'utilise une bibliothèque orthodoxe comme celle-ci.

Définition des fonctions

J'ai défini quelques fonctions cette fois. Il y en a deux principaux. ・ Fonction pour acquérir des données sur le cours des actions -Une fonction qui calcule et affiche un graphique lorsqu'un bouton est enfoncé

Fonction pour obtenir des données sur le cours des actions

Après avoir obtenu les données sur le cours de l'action à partir du code de la société, j'ai défini une fonction qui calcule la moyenne de 5,25,50 jours, l'ajoute aux données et la renvoie. C'est un pakuri rond de kinocode.


def company_stock(start,end,company_code):
    df = data.DataReader(company_code,'stooq')
    df = df[(df.index <=end)&(df.index >=start)]

    date=df.index
    price=df['Close']

    span01 = 5
    span02 = 25
    span03 = 50

    df['sma01'] = price.rolling(window=span01).mean()
    df['sma02'] = price.rolling(window=span02).mean()
    df['sma03'] = price.rolling(window=span03).mean()
    
    return df

Une fonction qui calcule et affiche un graphique lorsqu'un bouton est enfoncé

L'événement lorsque le bouton est enfoncé est défini comme une fonction. Nous définissons une fonction qui obtient la valeur du texte, récupère les données sur le cours de l'action et l'affiche dans l'interface graphique avec l'ensemble de graphiques.


##événement de clic
def btn_click():
    company_code = txtBox.get()
    start = txtBox2.get()
    end = txtBox3.get()

    df = company_stock(start,end,company_code)
    date=df.index
    price=df['Close']
    
    #plt.figure(figsize=(20,10))
    
    fig = Figure(figsize=(6,6), dpi=100)
    plt = fig.add_subplot(2,1,1)
    plt.plot(date,price,label=company_code)
    plt.plot(date,df['sma01'],label='sma01')
    plt.plot(date,df['sma02'],label='sma02')
    plt.plot(date,df['sma03'],label='sma03')
    
    plt.set_title(company_code)
    plt.set_xlabel('date')
    plt.set_ylabel('price')
    #plt.title(company_code)
    #plt.xlabel('date')
    #plt.ylabel('price')
    plt.legend()

    plt = fig.add_subplot(2,1,2)
    plt.bar(date,df['Volume'],label='Volume',color='grey')
    plt.legend()


    canvas = FigureCanvasTkAgg(fig, master=root)  # Generate canvas instance, Embedding fig in root
    canvas.draw()
    canvas.get_tk_widget().place(x=10, y=120)

Paramètres de l'interface graphique

Code pour définir l'interface graphique. L'arrangement et les écrans sont créés par essais et erreurs. Les événements de bouton sont définis en associant "command = btn_click" à la fonction. (Je pensais que ce serait compréhensible si je l'écrivais un peu.)

# Figure instance
fig = plt.Figure(figsize=(6,6), dpi=100)

root = tk.Tk()
root.title("stock analsis")
root.geometry("620x740")

#Écrire du texte
label = tk.Label(root, text="Code de l'entreprise")
label.place(x=10, y=10)

label2 = tk.Label(root, text="date de début")
label2.place(x=120, y=10)

label3 = tk.Label(root, text="Date de fin")
label3.place(x=230, y=10)

#Ecrire un bouton
txtBox = tk.Entry()
txtBox.configure(state='normal', width=15)
txtBox.place(x=10, y=40)

txtBox2 = tk.Entry()
txtBox2.configure(state='normal', width=15)
txtBox2.place(x=120, y=40)

txtBox3 = tk.Entry()
txtBox3.configure(state='normal', width=15)
txtBox3.place(x=230, y=40)

#Installez le bouton
button = tk.Button(text='Affichage du cours de l'action', width=20, command=btn_click)
button.place(x=10, y=80)


#Ecrire un graphique
canvas = FigureCanvasTkAgg(fig, master=root)  # Generate canvas instance, Embedding fig in root
canvas.draw()
canvas.get_tk_widget().place(x=10, y=120)

root.mainloop()

Code final

Le résultat final est un code comme celui-ci: (Connectez simplement le cordon par le haut.) Pour le moment, si vous copiez ceci, cela fonctionnera probablement!

stock_analysis.py



from pandas_datareader import data
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
import numpy as np
%matplotlib inline

def company_stock(start,end,company_code):
    df = data.DataReader(company_code,'stooq')
    df = df[(df.index <=end)&(df.index >=start)]

    date=df.index
    price=df['Close']

    span01 = 5
    span02 = 25
    span03 = 50

    df['sma01'] = price.rolling(window=span01).mean()
    df['sma02'] = price.rolling(window=span02).mean()
    df['sma03'] = price.rolling(window=span03).mean()
    
    return df

#événement de clic
def btn_click():
    company_code = txtBox.get()
    start = txtBox2.get()
    end = txtBox3.get()

    df = company_stock(start,end,company_code)
    date=df.index
    price=df['Close']
    
    #plt.figure(figsize=(20,10))
    
    fig = Figure(figsize=(6,6), dpi=100)
    plt = fig.add_subplot(2,1,1)
    plt.plot(date,price,label=company_code)
    plt.plot(date,df['sma01'],label='sma01')
    plt.plot(date,df['sma02'],label='sma02')
    plt.plot(date,df['sma03'],label='sma03')
    
    plt.set_title(company_code)
    plt.set_xlabel('date')
    plt.set_ylabel('price')
    #plt.title(company_code)
    #plt.xlabel('date')
    #plt.ylabel('price')
    plt.legend()

    plt = fig.add_subplot(2,1,2)
    plt.bar(date,df['Volume'],label='Volume',color='grey')
    plt.legend()


    canvas = FigureCanvasTkAgg(fig, master=root)  # Generate canvas instance, Embedding fig in root
    canvas.draw()
    canvas.get_tk_widget().place(x=10, y=120)

# Figure instance
fig = plt.Figure(figsize=(6,6), dpi=100)

root = tk.Tk()
root.title("stock analsis")
root.geometry("620x740")

#Écrire du texte
label = tk.Label(root, text="Code de l'entreprise")
label.place(x=10, y=10)

label2 = tk.Label(root, text="date de début")
label2.place(x=120, y=10)

label3 = tk.Label(root, text="Date de fin")
label3.place(x=230, y=10)

#Ecrire un bouton
txtBox = tk.Entry()
txtBox.configure(state='normal', width=15)
txtBox.place(x=10, y=40)

txtBox2 = tk.Entry()
txtBox2.configure(state='normal', width=15)
txtBox2.place(x=120, y=40)

txtBox3 = tk.Entry()
txtBox3.configure(state='normal', width=15)
txtBox3.place(x=230, y=40)

#Installez le bouton
button = tk.Button(text='Affichage du cours de l'action', width=20, command=btn_click)
button.place(x=10, y=80)


#Ecrire un graphique
canvas = FigureCanvasTkAgg(fig, master=root)  # Generate canvas instance, Embedding fig in root
canvas.draw()
canvas.get_tk_widget().place(x=10, y=120)

root.mainloop()

Obtenez le code de la société sur le site de la bourse des valeurs comme indiqué dans la figure ci-dessous. image.png

Si vous remplissez les conditions en fonction de cela, vous pouvez obtenir les résultats suivants.

image.png

en conclusion

Pour le moment, je savais comment afficher le graphique sur l'interface graphique, donc j'ai pensé qu'il serait plus facile d'afficher le graphique et de le considérer. Je suis redevenu plus intelligent. Mais je veux m'en souvenir. (J'ai oublié comment utiliser SSH en dehors du LAN, avec lequel j'ai eu beaucoup de problèmes récemment, et j'ai ressenti la fragilité de la mémoire des gens.)

Recommended Posts

Faisons une interface graphique avec python.
Faisons un graphe avec python! !!
Faisons un jeu de shiritori avec Python
Faisons la voix lentement avec Python
Créez un framework Web avec Python! (1)
Faisons un bot Twitter avec Python!
Créez un framework Web avec Python! (2)
Faites une loterie avec Python
Remplaçons UWSC par Python (5) Faisons un robot
[Jouons avec Python] Créer un livre de comptes de ménage
Faisons une rupture de bloc avec wxPython
Essayez de créer un jeu simple avec Python 3 et iPhone
Créer un système de recommandation avec python
Faisons un spacon avec xCAT
[Super facile] Faisons un LINE BOT avec Python.
Créons un client de socket Web avec Python. (Authentification par jeton d'accès)
Créons un groupe gratuit avec Python
Faisons un langage simple avec PLY 1
[Python] Rendons matplotlib compatible avec le japonais
Faisons une IA à trois yeux avec Pylearn 2
Faisons un calcul de combinaison avec Python
Créez une application de bureau avec Python avec Electron
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
Créer un bot Twitter Trend avec heroku + Python
J'ai créé une application graphique avec Python + PyQt5
Je veux faire un jeu avec Python
Vous pouvez facilement créer une interface graphique même avec Python
Essayez de créer un code de "décryptage" en Python
Essayez de créer un groupe de dièdre avec Python
Faisons un module pour Python en utilisant SWIG
Ouvrir la boîte de dialogue de fichier avec l'interface graphique Python (tkinter.filedialog)
[Ev3dev] Faisons un programme de contrôle à distance par Python avec le protocole RPyC
Faisons un robot Discord.
Faisons Othello avec wxPython
Créez Puyopuyo AI avec Python
[GUI en Python] PyQt5-Layout management-
Créer un bookmarklet en Python
Écrivons python avec cinema4d.
Créer un répertoire avec python
Construisons git-cat avec Python
[GUI avec Python] PyQt5-Préparation-
Faire un feu avec kdeplot
[GUI avec Python] PyQt5 -Paint-
Combinez des chaînes répétitives en une seule avec des expressions régulières Python.
Faisons un outil de veille de commande avec python
[Pratique] Créez une application Watson avec Python! # 2 [Fonction de traduction]
[Pratique] Créez une application Watson avec Python! # 1 [Discrimination linguistique]
Créez un Slackbot simple avec un bouton interactif en python
Faire un point d'arrêt sur la couche c avec python
Facilitons un peu la gestion des dépendances avec pip
[Pour jouer] Essayez de faire de Yuma un robot LINE (Python)
Créer un outil de formatage CSV avec Python Pandas Py Installer
Créons une application Mac avec Tkinter et py2app
Essayez de créer une grille sphérique avec Rhinoceros / Grasshopper / GHPython
Qu'est-ce que Dieu? Créez un chatbot simple avec python
[Piyopiyokai # 1] Jouons avec Lambda: création d'un script Python