Jusqu'à ce que vous obteniez des données quotidiennes pour plusieurs années de stock japonais et que vous les sauvegardiez dans un seul CSV (Python)

introduction

Cet article est l'article du 22ème jour du Calendrier de l'Avent SFC 2019. Je me demandais sur quoi écrire, mais cette fois j'ai décidé de réécrire le code que j'ai écrit récemment et d'en faire un article.

Contexte

Ces dernières années, avec le développement de divers logiciels et bibliothèques, les données sur le cours des actions sont devenues utilisées par les particuliers. Cependant, les données de cours des actions japonaises sont difficiles à gérer en raison de problèmes de droit d'auteur (voir ici pour plus de détails), de sorte qu'une grande quantité de données sur les cours des actions est actuellement disponible. Il n'y a aucun service qui vous permet de tout télécharger gratuitement en même temps.

Cependant, certains services vous permettent de télécharger des données quotidiennes pour chaque marque pendant un an. Par exemple, Stock Investment Memo et Buffett Code.

Ces services sont très utiles lorsque vous souhaitez analyser les cours boursiers pendant un an, mais ils sont un peu gênants car vous devez traiter un grand nombre de fichiers lorsque vous souhaitez analyser les cours boursiers sur plusieurs années.

Par conséquent, cette fois, rendons possible l'utilisation des données de cours de bourse pendant plusieurs années en créant un code qui combine plusieurs CSV téléchargés à partir de Stock Investment Memo. Faisons le. De plus, en utilisant le DataFrame of Pandas, qui est une bibliothèque Python, il est conçu pour être facile à utiliser lors de l'analyse avec Python tel quel.

À propos du téléchargement de données

Si vous lisez ce qui précède, vous vous demandez peut-être: "Y a-t-il un code pour la partie téléchargement?" À cet égard, bien sûr, il est possible d'automatiser, mais comme on ne sait pas si le grattage et l'automatisation sont autorisés sur le site de la note d'investissement en actions, je ne présenterai pas le code dans cet article.

Au lieu de cela, Désir de freelance est introduit ce code Vous pouvez entièrement automatiser le téléchargement en utilisant.

De plus, deux points doivent être modifiés à ce moment-là, ils sont donc décrits ci-dessous.

  1. À propos de l'emplacement de stockage des fichiers

Il est recommandé de remplacer download_dir = 'C: \\ Python \\' par download_dir = '. / Csv'. En faisant cela, vous pouvez placer le fichier téléchargé dans le dossier directement sous le répertoire actuel.

  1. À propos du traitement itératif

Si vous souhaitez obtenir les données jusqu'en 2019 où elles se trouvent pour i dans la plage (année, 2019):, obtenez les données jusqu'à pour i dans la plage (année, 2020):, 2020 Si vous le souhaitez, vous devez l'augmenter d'un an comme «for i in range (year, 2021):».

Préparation des données

Tout d'abord, téléchargez et enregistrez les données de cours d'une action spécifique pendant plusieurs années à partir de Stock Investment Memo en utilisant la méthode décrite ci-dessus.

point important

-Assurez-vous de prendre le temps de télécharger __data et de ne pas mettre de charge sur le serveur. __ ・ S'il y a une fuite dans __ données, une erreur se produit, alors assurez-vous de télécharger toutes les données pour le nombre d'années requis. __ -Ne modifiez pas le nom file. __ - Rassemblez tous les fichiers dans un dossier et ne mettez pas les données de plusieurs marques dans le même dossier. __

Lire des données à partir de CSV

Créez du code pour charger le csv téléchargé.

code

import pandas as pd
import codecs

def read_csv(file_name: str) -> pd.core.frame.DataFrame:
    '''
    kabuoji3.Nom de fichier du csv téléchargé depuis com[file_name]Spécifier et lire, formater et DataFrame[df]Renvoie comme.
    '''
    with codecs.open(file_name, 'r', 'Shift_JIS', 'ignore') as f:
        df = pd.read_csv(f)
    df.columns = df.iloc[0]
    df.drop(df.index[[0,1]],inplace=True)
    df.index = pd.to_datetime(df.index, format='%Y-%m-%d')
    df.index.name = "Date"
    return df

Commentaire

Le code de caractère CSV qui peut être téléchargé dans le mémo d'investissement boursier est Shift_JIS, donc si vous lisez le CSV de la manière habituelle, des caractères déformés peuvent apparaître. Pour éviter cela, ici, codecs est utilisé pour spécifier le code de caractère pour ouvrir le fichier, et la fonctionread_csv ()de pandas est utilisée pour lire le CSV comme DataFrame. De plus, le fichier CSV téléchargé dans la note d'investissement en stock contient des informations sur la marque dans la partie d'en-tête, et les «colonnes» et «index» ne sont pas reconnus correctement, il inclut donc le processus de suppression de l'en-tête après les avoir directement spécifiés. Je vais. De plus, en effectuant le traitement to_datetime sur la colonne date de ʻindex, la date de ʻindex peut être traitée telle quelle en tant que type datetime. Le résultat final est le «DataFrame» de «pandas», qui contient les données sur le cours de l'action pour un an.

Lire la liste des fichiers

Créez une liste de noms de fichiers CSV dans un dossier, puis reconnaissez et récupérez le nombre d'années de données de stock que chaque fichier contient.

code

from glob import glob

def get_price_data_by_year(year: int) -> pd.core.frame.DataFrame:
    '''
Liste des fichiers dans le dossier[FILES_DICT]Année désignée à partir de[year]Se référer au nom de fichier du cours de l'action csv de, read et DataFrame[df]Renvoie comme.
    '''
    file_name = FILES_DICT[str(year)]
    df = read_csv(file_name)
    return df

if __name__ == "__main__":
    
    #Spécifiez le répertoire du dossier contenant le CSV téléchargé (le chemin relatif ou le chemin absolu est acceptable, après le nom du dossier/*N'oubliez pas)
    CSV_FOLDER_DIRECTORY = './csv/*'

    #CSV ci-dessus_FOLDER_Dictionnaire de fichier CSV FICHIERS basés sur RÉPERTOIRE_Pièce qui crée automatiquement DICT (aucune modification requise)
    FILES_DICT = {}
    files = glob(CSV_FOLDER_DIRECTORY)
    files.sort()
    for file_name in files:
        FILES_DICT[file_name[-8:-4]] = file_name

Commentaire

La partie CSV_FOLDER_DIRECTORY = '. / Csv / *' spécifie le dossier dans lequel CSV est organisé. Vous pouvez spécifier un chemin relatif ou un chemin absolu, mais veillez à ajouter / * après le nom du dossier. Dans le reste du processus, vous allez créer un dictionnaire de fichiers CSV FILES_DICT. Il doit être défini comme une variable globale afin de pouvoir être référencé dans la fonction. Le CSV qui peut être téléchargé dans le mémo d'investissement en stock est enregistré sous un nom tel que «7203_2012.csv». En extrayant la partie "2012" (années) de celle-ci, en créant un "Dictionnaire" avec la "clé" et la valeur du nom de fichier ", un fichier CSV contenant des données de cours boursier pour une année spécifique Vous pourrez facilement vous référer au nom.

Combinaison de données (année spécifiée)

Les données de cours boursier pour plusieurs années de l'année spécifiée à l'année spécifiée sont lues dans l'ordre, combinées et sorties comme une seule donnée.

code

def create_historical_data(open: int,last: int) -> pd.core.frame.DataFrame:
    '''
Année désignée[open]Année désignée à partir de[last]Lire les données boursières, les combiner et les combiner en un seul DataFrame[df]Renvoie comme.
    '''
    df = get_price_data_by_year(open)
    for i in range(int(open) + 1,int(last) + 1):
        df = pd.concat([df, get_price_data_by_year(i)])
    return df

Commentaire

Les données sur le cours de l'action de l'année spécifiée «ouverte» à l'année spécifiée «dernière» sont lues dans l'ordre, et le «DataFrame» obtenu est combiné en utilisant «pd.concat ()». Enfin, un DataFrame avec toutes les données combinées est sorti. Si le fichier de l'année spécifiée n'existe pas, une erreur se produit. Veuillez vous assurer que vous avez téléchargé les données pendant le nombre d'années spécifié à l'avance avant de les exécuter.

Combiner les données (préciser les années)

Crée des données sur le cours de l'action pour le nombre d'années spécifié rétroactivement à partir de la date d'exécution et les génère sous forme de données uniques. Il s'agit d'une sortie en unités de dates, mais si la date qui correspond exactement au nombre d'années spécifié rétroactivement n'est pas le jour ouvrable de l'échange, le DataFrame contenant les données sur le cours de l'action du jour ouvrable immédiatement après cela au présent est sorti. Sera fait. De même, si la date d'exécution n'est pas le jour ouvrable de l'échange, un DataFrame contenant les données jusqu'au jour ouvrable précédent sera sorti.

code

import datetime as dt
from dateutil import relativedelta

def create_historical_data_by_date(years: int) -> pd.core.frame.DataFrame:
    '''
Juste le nombre d'années spécifié à compter de la date d'exécution[years]Créez des données sur le cours de l'action et un DataFrame[df]Renvoie comme.
    '''
    this_year = int(dt.datetime.now().year)
    df = create_historical_data(this_year - years,this_year)
    open = dt.datetime.now() - relativedelta.relativedelta(years=years)
    df = df[df.index >= open]
    return df

Commentaire

D'abord, utilisez datetime pour obtenir l'année en cours, puis utilisez create_historical_data () ʻ above pour obtenir les données de stock pour le nombre d'années spécifié ans. Ensuite, en utilisant relativedelta, nous obtenons la date qui est exactement le nombre d'années spécifié à partir du type présent dans datetime. Puisque l '«index» du «DataFrame» obtenu à l'étape précédente a déjà été converti en type «datetime», vous pouvez facilement filtrer le «DataFrame» en utilisant l'opérateur de comparaison «> =». Vous pouvez récupérer des données pour le nombre d'années spécifié. Le résultat final est un DataFrame` qui contient des données de stock pour le nombre d'années spécifié.

Exporter au format CSV (Enregistrer)

J'ai pu sortir les données que je voulais utiliser dans la section ci-dessus, mais pour gérer ces données en externe, je dois les enregistrer dans un fichier. Ici, à titre d'exemple, nous allons présenter comment enregistrer au format CSV.

code

if __name__ == "__main__":

    #Lorsque vous souhaitez enregistrer les données de cours des actions de l'année spécifiée vers l'année spécifiée
    df = create_historical_data(2015,2019)
    df.to_csv("2015-2019.csv")

    #Lorsque vous souhaitez enregistrer les données de stock pour le nombre d'années spécifié rétroactivement à partir de la date d'exécution
    df = create_historical_data_by_date(5)
    df.to_csv("5years_price.csv")

Commentaire

Tout d'abord, utilisez les fonctions telles que create_historical_data () et create_historical_data_by_date () créées dans la section ci-dessus, et enregistrez le résultat obtenu dans la variable df. Ce df peut être facilement exporté au format CSV en utilisant to_csv (), qui est une fonction de pandas. De plus, il est nécessaire de spécifier le nom du fichier à sauvegarder à ce moment, et de passer la chaîne de caractères entre «» »« comme argument de «to_csv ()». Assurez-vous d'inclure «.csv» à la fin de ceci. Le code de caractère du fichier sauvegardé à ce moment est ʻUTF-8, et le délimiteur est ,. Lors de l'importation avec Excel, sélectionnez Données> Fichier texte` et spécifiez le code de caractère et le délimiteur.

Code (résumé)

Le code utilisé cette fois est publié sur GitHub. Si vous êtes intéressé, veuillez vérifier depuis ici.

finalement

Jusqu'à la fin Merci d'avoir lu. Nous espérons que votre analyse des stocks et Noël seront enrichis.

Recommended Posts

Jusqu'à ce que vous obteniez des données quotidiennes pour plusieurs années de stock japonais et que vous les sauvegardiez dans un seul CSV (Python)
Jusqu'à ce que vous obteniez un instantané du service Amazon Elasticsearch et que vous le restauriez
Traitement pleine largeur et demi-largeur des données CSV en Python
Jusqu'à ce que vous insériez des données dans une feuille de calcul en Python
Créer et tester un environnement CI pour plusieurs versions de Python
Un débutant en Python a d'abord essayé une analyse rapide et facile des données météorologiques des 10 dernières années.
Obtenez la clé pour la migration de la deuxième couche de données JSON avec python
Obtenez un jeton pour conoha avec python
Comment enregistrer les informations de point caractéristique de l'image dans un fichier et l'utiliser pour la mise en correspondance
J'ai créé un programme en Python qui lit les données FX CSV et crée un grand nombre d'images de graphiques
[Python] Comment nommer les données de table et les sortir avec csv (méthode to_csv)
Obtenez des données via l'API Salesforce (API en masse) en Python et chargez-les dans BigQuery
Obtenez le cours de l'action d'une entreprise japonaise avec Python et faites un graphique
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Récupérer l'appelant d'une fonction en Python
Touchons une partie de l'apprentissage automatique avec Python
Environnement enregistré pour l'analyse des données avec Python
Prise en compte du moment où vous pouvez faire du bon travail en 10 ans avec Python3 et Scala3.
Obtenez une grande quantité de données Twitter de Starba avec python et essayez l'analyse de données Partie 1
Le résultat de la création d'un album de cartes de jeunes mariés italiens en Python et de son partage
Consolider un grand nombre de fichiers CSV dans des dossiers avec python (données sans en-tête)
Programme qui résume les données csv de l’historique des transactions de l’action SBI Securities [Python3]
Jusqu'à ce que vous puissiez installer Blender et l'exécuter avec python pour le moment
Jusqu'à ce que vous créiez un environnement d'apprentissage automatique avec Python sur Windows 7 et que vous l'exécutiez
Liste des bibliothèques Python pour les data scientists et les data ingénieurs
[python] Calcul des mois et des années de différence de date / heure
BigQuery - Si vous obtenez une erreur Reason: responseTooLarge en Python
Python: obtenir une liste de méthodes pour un objet
[Python] Création d'un outil GUI qui traite automatiquement le CSV des données d'élévation de température dans Excel
Python> Obtenir une liste de fichiers dans plusieurs répertoires> Utiliser glob | Trier par heure de modification
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
Recherche d'un moyen unifié d'attendre et d'obtenir les changements d'état de Selenium pour les éléments Python
[Python / Ruby] Comprendre le code Comment obtenir des données en ligne et les écrire au format CSV
Obtenez une liste des métriques CloudWatch et une table de correspondance des unités unitaires avec Python boto
Script Python qui stocke 15 ans de données de jeu MLB dans MySQL en 10 minutes (Baseball Hack!)
L'utilisation du japonais pour les noms de dossier et les noms de bloc-notes dans Databricks peut poser problème
Programme Python qui recueille quotidiennement des tweets contenant des mots-clés spécifiques et les enregistre en csv
Obtenez le nombre d'éléments spécifiques dans la liste python
Un moyen simple d'éviter plusieurs boucles for en Python
Obtenez la page Web Python, encodez et affichez les caractères
Comment définir plusieurs variables dans une instruction Python for
Débarrassez-vous des données sales avec Python et les expressions régulières
Comment obtenir une liste d'exceptions intégrées pour python
Voici quelques grammaires que vous pourriez obtenir un slapstick si vous connaissez en Python
[Python] Le rôle de l'astérisque devant la variable. Divisez la valeur d'entrée et affectez-la à une variable
L'histoire du retour au front pour la première fois en 5 ans et de la refactorisation de Python Django