[PYTHON] Je souhaite acquérir et répertorier les données boursières japonaises sans grattage

Je veux gérer des données volumineuses!

L'analyse des cours des actions semble intéressante!

Quand je l'ai recherché, j'ai trouvé que les stocks d'outre-mer peuvent être facilement obtenus sous forme de données avec DataReader de Pandas. (Par exemple, Google finance et FRED) Les cours des actions japonaises ne peuvent pas être trouvés comme des données inattendues.

Il vous suffit de le retirer de Yahoo! Finance! Il existe de nombreux articles, Yahoo! Finance [Interdit le grattage](https://www.yahoo-help.jp/app/answers/detail/p/546/a_id/93575/~/yahoo%21%E3%83%95%E3% 82% A1% E3% 82% A4% E3% 83% 8A% E3% 83% B3% E3% 82% B9% E6% 8E% B2% E8% BC% 89% E6% 83% 85% E5% A0% B1% E3% 81% AE% E8% 87% AA% E5% 8B% 95% E5% 8F% 96% E5% BE% 97% EF% BC% 88% E3% 82% B9% E3% 82% AF% E3% 83% AC% E3% 82% A4% E3% 83% 94% E3% 83% B3% E3% 82% B0% EF% BC% 89% E3% 81% AF% E7% A6% 81% E6% AD% A2% E3% 81% 97% E3% 81% A6% E3% 81% 84% E3% 81% BE% E3% 81% 99), donc je ne peux pas le retirer d'ici.

Vous pourriez argumenter que vous pouvez utiliser le module jsm, mais celui-ci utilise également le scraping.

Le but de cet article est de ** récupérer des données sans grattage et d'en faire une seule liste **.

strock.png

Code pour les personnes impatientes

Veuillez me dire seulement la conclusion! Je garderai le code (j'ai fait de mon mieux) pour les gens. Veuillez corriger vous-même les détails.

Code 1


import os
import pandas as pd
import matplotlib.pyplot as plt

os.chdir("C:\\Users\\Kuma_T\\stock") #Spécifiez l'emplacement du fichier et placez les données en premier

plt.rcParams['figure.figsize'] = [10, 5]
plt.rcParams['xtick.direction'] = 'in'#ligne d'échelle de l'axe des x orientée vers l'intérieur('in')Ou vers l'extérieur('out')Ou bidirectionnel('inout')
plt.rcParams['ytick.direction'] = 'in'#La ligne d'échelle de l'axe y est tournée vers l'intérieur('in')Ou vers l'extérieur('out')Ou bidirectionnel('inout')
plt.rcParams['xtick.major.width'] = 1.0 #Largeur de ligne de la ligne d'échelle principale de l'axe x
plt.rcParams['ytick.major.width'] = 1.0 #Largeur de ligne de la ligne d'échelle principale de l'axe y
plt.rcParams['font.size'] = 12 #Taille de police
plt.rcParams['axes.linewidth'] = 1.0 #Largeur de ligne de bord de largeur de ligne de l'axe. Épaisseur du boîtier
plt.rcParams['font.family'] =  'Times New Roman' #Nom de police à utiliser

Code 2


code = 3672 #Orthoplus
start = 2015
end = 2017

x = []
y = []

for n in range (start, end+1):
    file_name = 'stocks_'+str(code)+'-T_1d_%d.csv' %n #Spécifiez le nom du fichier
    data =  pd.read_csv(file_name, header=0, encoding='cp932') #Je ne peux pas lire le japonais, alors spécifiez l'encodage
    a =list(pd.to_datetime(data.iloc[:,0], format='%Y-%m-%d')) #Si vous le lisez tel quel, la date ne peut pas être reconnue, utilisez donc datetime
    x += a[::-1] #Pour inverser l'ordre dans la liste[::-1]Et ajouter à la liste de x
    b = list(data.iloc[:,4])
    y += b[::-1]
    
z = pd.DataFrame(y)#Convertir en DataFrame
sma75 = pd.DataFrame.rolling(z, window=75,center=False).mean()
sma25 = pd.DataFrame.rolling(z, window=25,center=False).mean()

plt.plot(x, y, color="blue", linewidth=1, linestyle="-")
plt.plot(x, sma25, color="g", linewidth=1, linestyle="-", label="SMA25")
plt.plot(x, sma75, color="r", linewidth=1, linestyle="-", label="SMA75")

plt.title("Alt Plus ("+str(code)+")", fontsize=16,  fontname='Times New Roman')
plt.xlabel("Year-Month", fontsize=14, fontname='Times New Roman') #titre de l'axe des x
plt.ylabel("Stock price", fontsize=14, fontname='Times New Roman') #titre de l'axe y

plt.legend(loc="best")

plt.show()

Préparation des données

Données sur le cours de l'action individuelle http://k-db.com/stocks/

Si vous accédez ici, vous pouvez obtenir les données des actions japonaises sous forme de fichier CSV.

Si vous jetez un œil à Ortho Plus (3672) à titre d'essai,

Kabuka.png

Le fichier CSV est ici, alors téléchargez-le dans un dossier spécifique. À propos, ces données ont une nouvelle date sur la face supérieure. Cette fois, j'ai téléchargé les données de 2015-2017.

Lire les données

Tout d'abord, spécifiez le dossier téléchargé.

Code 1


import os
import pandas as pd
import matplotlib.pyplot as plt

os.chdir("C:\\Users\\Kuma_T\\stock") #Spécifiez l'emplacement du fichier et placez les données en premier

Ensuite, chargez le fichier CSV enregistré.

files.png

stocks_3672-T_1d_2015 stocks_3672-T_1d_2016 stocks_3672-T_1d_2017 Parce que nous avons préparé un fichier appelé Code de marque 3672 Commencer le chargement en 2015 La fin de la lecture est 2017.

Ensuite, faites une liste vide.

Code 2


code = 3672 #Orthoplus
start = 2015
end = 2017

x = []
y = []

J'écrirai dans la fonction de boucle.

Spécifiez le nom du fichier à lire et à lire avec Pandas read_csv (l'encodage est spécifié car une erreur se produit en japonais). Lisez les données de date dans la première colonne de données en tant que date avec iloc [:, 0] et pd.to_datetime et répertoriez-les. Comme mentionné ci-dessus, le fichier CSV a une date plus récente en haut, alors ajoutez-le à la liste vide dans l'ordre inverse avec la date la plus ancienne en haut.

De même, ajoutez le cours de clôture dans la 4ème colonne à la liste vide.

Code 2


for n in range (start, end+1):
    file_name = 'stocks_'+str(code)+'-T_1d_%d.csv' %n #Spécifiez le nom du fichier
    data =  pd.read_csv(file_name, header=0, encoding='cp932') #Je ne peux pas lire le japonais, alors spécifiez l'encodage
    a =list(pd.to_datetime(data.iloc[:,0], format='%Y-%m-%d')) #Si vous le lisez tel quel, la date ne peut pas être reconnue, utilisez donc datetime
    x += a[::-1] #Pour inverser l'ordre dans la liste[::-1]Et ajouter à la liste de x
    b = list(data.iloc[:,4])
    y += b[::-1]

Avec cela, nous avons pu obtenir les données de prix de l'action cible dans un type de liste.

Vérifier par graphique

Lorsque vous atteignez ce point, faites un graphique et vérifiez-le.

Code 2


plt.plot(x, y, color="blue", linewidth=1, linestyle="-")
plt.show()

Stock_3672.png

Le graphique est créé avec succès.

En guise de mise en garde, si vous ne lisez pas dans l'ordre inverse, ce sera comme suit.

Stock_3672_2.png

Ajouter une moyenne mobile

Ajoutons une moyenne mobile en bonus.

La moyenne mobile peut être facilement calculée en utilisant DataFrame.rolling de Pandas. Comme son nom l'indique, DataFrame.rolling est utilisé au format DataFrame, donc List est converti.

Code 2


z = pd.DataFrame(y)#Convertir en DataFrame
sma75 = pd.DataFrame.rolling(z, window=75,center=False).mean()
sma25 = pd.DataFrame.rolling(z, window=25,center=False).mean()

plt.plot(x, y, color="blue", linewidth=1, linestyle="-")
plt.plot(x, sma25, color="g", linewidth=1, linestyle="-", label="SMA25")
plt.plot(x, sma75, color="r", linewidth=1, linestyle="-", label="SMA75")

Cette fois, nous avons ajouté une moyenne mobile de 25 jours et une moyenne mobile de 75 jours.

strock.png

finalement

** J'ai pu obtenir une liste des actions japonaises ** sans grattage. Cette fois, j'ai essayé d'utiliser Ortho Plus (3672), mais essayez-le avec des marques individuelles. La prochaine fois, j'aimerais analyser en utilisant ces données.

Last but not least, je suis toujours un débutant en actions et en programmation. Veuillez commenter si vous en avez.

Présentation des articles, etc. mentionnés ci-dessous

Écrire du code pour la prévision du cours des actions à l'aide de l'apprentissage automatique en Python http://www.stockdog.work/entry/2017/02/09/211119

[Python / jsm] Obtenez des données sur le cours des actions des sociétés japonaises pour chaque émission https://algorithm.joho.info/programming/python/jsm-get-japan-stock/

Obtenez des données de séries chronologiques sur le cours de l'action (série originale) avec le module jsm de Python, attachez le graphique en lignes de pliage de sortie à Gmail et envoyez-le par courrier http://qiita.com/HirofumiYashima/items/471a2126595d705e58b8

Obtenez des informations sur les actions japonaises et dessinez des graphiques de bougies avec des pandas Python http://sinhrks.hatenablog.com/entry/2015/02/04/002258

Prédire les cours des actions par une analyse Big Data à partir des données passées http://qiita.com/ynakayama/items/420ebe206e34f9941e51

1er grattage des cours des actions avec des pandas ~ Essayez de dessiner un graphique de style S ◯ I ~ http://www.stockdog.work/entry/2016/08/26/170152


Bien que ce ne soit pas une action individuelle, j'ai écrit un nouvel article sur l'investissement en actions.

"Il existe une méthode gagnante pour ce jeu (investissement financé) -Jeu d'association d'actionnariat-" https://qiita.com/Kuma_T/items/667e1b0178a889cc42f7

Recommended Posts

Je souhaite acquérir et répertorier les données boursières japonaises sans grattage
Je veux utiliser VS Code et Spyder sans anaconda! !! !!
Gratter et manger des bûches - je veux trouver un bon restaurant! ~ (Travail)
Quoi qu'il en soit, je veux vérifier facilement les données JSON
Je veux frapper 100 sciences des données avec Colaboratory
Je souhaite stocker les informations de la base de données dans la liste
Je veux obtenir les données de League of Legends ③
Je veux obtenir les données de League of Legends ②
Je souhaite vendre les produits que j'ai listés par python scraping Mercari
Je veux obtenir les données de League of Legends ①
Je veux donner un group_id à une trame de données pandas
Je veux gérer l'optimisation avec python et cplex
[Python] Je veux faire d'une liste imbriquée un taple
Je veux dire qu'il y a un prétraitement des données ~
Je veux pouvoir analyser des données avec Python (partie 3)
Je veux utiliser la dernière version de gcc même si je n'ai pas les privilèges sudo! !!
Je veux pouvoir analyser des données avec Python (partie 1)
Je veux changer le drapeau japonais en drapeau des Palaos avec Numpy
Je veux pouvoir analyser des données avec Python (partie 4)
Je veux pouvoir analyser des données avec Python (partie 2)
Je veux connaître la nature de Python et pip
Je veux rendre le type de dictionnaire dans la liste unique
Je veux compter des valeurs uniques dans un tableau ou un tuple
Je souhaite mapper le code EDINET et le numéro de valeur
Je veux que Sphinx soit pratique et utilisé par tout le monde
Je veux résoudre SUDOKU
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
Je veux créer un fichier pip et le refléter dans le menu fixe
Je souhaite créer une liste de paramètres à partir du code CloudFormation (yaml)
Je souhaite créer un service d'apprentissage automatique sans programmation! API Web
Je veux pirater Robomaster S1 ① Vérification de l'enracinement et de la configuration des fichiers
Je souhaite convertir des données détenues verticalement (type long) en données détenues horizontalement (type large)
J'ai essayé de créer un environnement capable d'acquérir, de stocker et d'analyser les données de tweet en WSL (bash)
Je veux utiliser uniquement la commande SMTP MAIL FROM et la commande RCPT TO sans envoyer de courrier avec le smtplib de Python
Scraping, prétraitement et écriture dans postgreSQL
Je veux comprendre à peu près systemd
Je veux gratter des images et les former
Je veux faire ○○ avec les Pandas
Je veux copier l'annotation de yolo
Je veux déboguer avec Python
Je souhaite séparer le traitement entre le temps de test et l'environnement de production
J'ai analysé les données Airbnb pour ceux qui veulent rester à Amsterdam
Je souhaite trier une liste dans l'ordre des autres listes
J'ai essayé de faire la reconnaissance de caractères manuscrits de Kana Partie 2/3 Création et apprentissage de données
Je veux analyser les sentiments des gens qui veulent se rencontrer et trembler
Je veux formater et vérifier le code Python à mon goût sur VS Code
Je souhaite créer un service d'apprentissage automatique sans programmation!
Je souhaite créer une application Web en utilisant React et Python flask