[PYTHON] Lecture et écriture de fichiers à partir de blocs-notes sur Watson Studio vers IBM Cloud Object Storage (ICOS) -à l'aide de project-lib-

Lors de l'écriture de code dans Notebook, il est très courant de charger des données via un fichier. Si vous exécutez un notebook jupyter sur votre PC local, vous pouvez lire et écrire de la manière habituelle en python, mais sur le notebook de Watson Studio, si vous voulez lire et écrire des fichiers de manière permanente, c'est généralement Lit et écrit des fichiers sur IBM Cloud Object Storage (ICOS) associé à Project.

Il existe plusieurs manières. Étant donné qu'ICOS est un stockage d'objets compatible AWS S3, vous pouvez utiliser la même méthode qu'AWS S3. Vous pouvez également générer du code à partir de l'interface graphique Notebook de Watson Studio en utilisant ʻInsert pandas Data Frames ou ʻInsert Streaming Body object. Le reste est exclusivement pour Watson Studio Notebook, mais il existe un moyen d'utiliser project-lib, qui est relativement facile à écrire.

Ici, nous allons expliquer l'une de ces méthodes, la méthode utilisant project-lib. D'autres méthodes sont assez bien publiées dans Qiita, donc je pense que vous pouvez facilement les trouver.

Une autre option sans utiliser ICOS consiste à exécuter des commandes Linux directement à partir de votre ordinateur portable. Vous pouvez également obtenir un wget d'un autre serveur ou fichier et enregistrer le fichier sur un autre serveur avec wput. Cela suppose que vous avez un serveur qui peut wget / wput des fichiers, donc je ne l'expliquerai pas ici.

Les informations écrites ici sont le document Watson Studio "[Utilisation de project-lib pour Python](https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/project-lib-python. Il est basé sur les informations de "html)".

0. La condition préalable est que le projet Watson Studio ait déjà été créé.

Le principe est que vous avez déjà créé un projet Watson Studio. Si vous ne l'avez pas encore créé et que vous ne savez pas comment le faire

Créez d'abord un projet en vous référant à, puis démarrez ce qui suit.

1. Ouvrez le projet

Ouvrez le projet créé.

Si tu ne sais pas comment [Comment afficher le projet créé après la connexion] (https://qiita.com/nishikyon/items/ba698b638300848b746e#4-%E3%81%8A%E3%81%BE%E3%81%91%E3%83%AD%E3%82%B0%E3% 82% A4% E3% 83% B3% E5% BE% 8C% E4% BD% 9C% E6% 88% 90% E6% B8% 88projet% E3% 81% AE% E8% A1% A8% E7% A4% Veuillez vous référer à BA% E6% 96% B9% E6% B3% 95) pour l'ouvrir.

2. Préparation ʻCréer un jeton d'accès`

Pour utiliser project-lib, vous devez d'abord créer un ʻAccess token` qui peut accéder à l'environnement de votre projet, y compris l'ICOS associé. Cela ne doit être créé qu'une seule fois pour le projet.

2-1: Cliquez sur "Paramètres" dans le menu supérieur. image.png

2-2: Faites défiler vers le bas pour voir "Jetons d'accès". "Nouveau jeton affiché sur le côté droit "Cliquez sur. image.png

2-3: La fenêtre "New Token" s'affiche. Définissez "Name" et "Access role for project" et cliquez sur "Create".

--Name: un nom raisonnablement facile à comprendre (en demi-largeur)

Puisque cet article explique comment lire et écrire, j'ai mis "Editor" à l'état défini. image.png image.png

Confirmez que le jeton défini dans «Jetons d'accès» est affiché. image.png

Vous êtes maintenant prêt à utiliser project-lib en dehors de votre notebook.

3: Ouvrez le cahier

Si vous avez déjà un bloc-notes dans lequel vous souhaitez lire et écrire des fichiers, ouvrez-le. Vous pouvez en créer un nouveau. Si tu ne sais pas comment faire [Utilisez Jupyter Notebook dans Watson Studio! -3. Create Notebook-](https://qiita.com/nishikyon/items/6c5bc873e2ac7f1e5fb7#3-notebook%E3%81%AE%E4%BD%9C%E6 Veuillez vous référer à% 88% 90) pour le créer.

4: Téléchargez le fichier que vous souhaitez lire sur ICOS

Comme je l'ai expliqué au début, `` Lors de la lecture et de l'écriture de fichiers de manière permanente sur Watson Studio Notebook, généralement, lors de la lecture et de l'écriture de fichiers sur IBM Cloud Object Storage (ci-après dénommé ICOS) associés à Project, lisez et écrivez des fichiers. Je vais. `Par conséquent, s'il y a un fichier dans l'environnement local (PC), téléchargez d'abord le fichier sur ICOS.

Si vous avez déjà téléchargé, passez à 5.

4-1: Cliquez sur l'icône [0100](Fichier et ajouter des données) en haut à droite.

Notez que cette icône ne peut être cliquée que sur Notebook sauf si elle est en mode édition. Si vous n'êtes pas en mode édition, vous verrez une icône «Enbitsu», alors cliquez dessus pour entrer en mode édition.

image.png

4-2: Faites glisser et déposez le fichier que vous souhaitez télécharger dans la zone carrée où «Déposer les fichiers ici ou rechercher les fichiers à télécharger». Vous pouvez également cliquer sur "parcourir" pour afficher la boîte de dialogue du fichier et sélectionner à partir de là. image.png

Après un certain temps, le fichier sera chargé et le nom du fichier chargé sera affiché ci-dessous. image.png

5: Insertion du jeton de projet

5-1: <img src = 'https: //qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/13d16779-01c5-d79d-615f-4f3a2475f0a3.png' dans le menu supérieur Cliquez sur height = '30px'> (vertical ...) et cliquez sur "Insert Project Token".

Si vous n'avez pas créé de jeton d'accès dans [# 2. Préparation ʻ Jeton d'accès](# 2), ce menu ne sera pas affiché. S'il ne s'affiche pas, [# 2. Préparation ʻ Jeton d'accès] Assurez-vous que vous avez exécuté [Créer](# 2).

image.png

La bibliothèque pour utiliser project-lib comme hidden_cell est chargée dans la ** cellule supérieure **, et la cellule avec le code requis est insérée en utilisant le jeton de projet défini.

Même si vous travaillez en bas du bloc-notes, il sera toujours inséré dans la cellule du haut, donc si vous ne le trouvez pas, faites défiler jusqu'à la cellule du haut.

image.png

5-2: Cliquez sur la cellule et exécutez l'une des méthodes suivantes.

-Entrez [ctrl] + [Entrée] -Entrez [Shift] + [Entrée] --Depuis le menu ci-dessus <img src = 'https: //qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/c8b82daa-5e2e-0577-ecfc-630e33e06989.png' height = Cliquez sur le bouton '30px'>

Lorsque l'exécution est terminée, les numéros seront inscrits dans les parties suivantes. image.png

Le cahier est maintenant prêt. Ce travail est requis une fois pour chaque cahier.

6: Comment lire et écrire des fichiers

Maintenant, lisons et écrivons le fichier du projet via ICOS sur le notebook. La cellule insérée dans # 5 est supposée avoir été exécutée.

6.1: Cahier ICOS <-> Copie de fichiers entre VM

L'exemple de code qui se trouve souvent dans les livres qui gère les fichiers est destiné à la lecture et à l'écriture directement dans le stockage local. Dans le cas du notebook, la VM démarre à chaque fois que le notebook est modifié, donc si vous copiez le fichier dans cette zone, il est identique à celui du stockage local, vous pouvez donc utiliser l'exemple de code tel quel. Au contraire, si vous l'enregistrez avec l'exemple de code, il sera copié dans la zone VM, donc si vous le copiez dans ICOS avant de fermer le bloc-notes, le fichier sera enregistré même si vous fermez le bloc-notes et vous pouvez le télécharger.

Copier d'IQOS vers VM

#Copy a file in project ICOS to VM
csv_file_name = 'train.csv'
csv_file = project.get_file(csv_file_name)
csv_file.seek(0)
with open(csv_file_name,'wb') as out:                   
    out.write(csv_file.read())   

Vous pouvez vérifier si la copie a réussi en exécutant la commande suivante dans la cellule. Vous pouvez exécuter des commandes VM OS (commandes Linux) en les préfixant avec !.

!ls -la

Exemple d'exécution: image.png

Copier de la VM vers ICOS

Copiez le fichier copié sur la VM ci-dessus dans ICOS. Le nom du fichier copié est copy_train.csv.

#Copy a file in VM to project ICOS
with open('train.csv','rb') as f:
    project.save_data('copy_train.csv', f, overwrite=True)

La confirmation se fait en fermant une fois le notebook. Cliquez sur "1. Enregistrer" et "2. Cliquez sur le nom du projet" pour fermer le notebook. L'écran Projet s'ouvre. image.png

Vous pouvez trouver le fichier copié sous «Actifs de données» sur l'onglet Actifs: image.png

Voici d'autres méthodes de lecture et d'écriture directes.

Charger depuis ICOS dans DataFrame des pandas

csv_file_name = 'train.csv'
csv_file = project.get_file(csv_file_name)
csv_file.seek(0)

import pandas as pd
df_csv= pd.read_csv(csv_file)
df_csv

Exemple d'exécution: image.png

Enregistrer le CSV de pandas DataFrame vers ICOS

Enregistrez le DataFrame et le df_csv lus ci-dessus dans ICOS sous le nom copy_train.csv.

project.save_data("copy_train.csv", df_csv.to_csv(index=False), overwrite=True)

La méthode de confirmation est [Copier de la VM vers ICOS](# vm% E3% 81% 8B% E3% 82% 89icos% E3% 81% B8% E3% 81% AE% E3% 82% B3% E3% 83% 94 Identique à% E3% 83% BC).

Passé comme paramètre de l'API VisualRecognition

Voici un exemple de téléchargement d'un fichier image sur ICOS et de sa transmission en tant que fichier de reconnaissance pour la reconnaissance visuelle de Watson. Supposons que le fichier sushi.jpg ait été téléchargé sur ICOS du projet.

Les deux suivants sont des préparatifs pour l'utilisation de sdk de reconnaissance visuelle.

!pip install --upgrade "ibm-watson>=4.0.1,< 5.0"

Entrez la CLÉ API de reconnaissance visuelle à utiliser dans XXXXXXXXXXXXXX.

#Visual Recognition
API_KEY='XXXXXXXXXXXXXX' #replace XXXXXXXXXXXXXX to your APIKEY

from ibm_watson import VisualRecognitionV3
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

authenticator = IAMAuthenticator(API_KEY)
visual_recognition = VisualRecognitionV3(
    version='2018-03-19',
    authenticator=authenticator
)

Voici un exemple de code utilisant project-lib:

import json
image_file = project.get_file("sushi.jpg ")
image_file.seek(0)
classes = visual_recognition.classify(
        images_file=image_file,
        images_filename='sushi.jpg',    
        threshold='0.6',
       accept_language='ja').get_result()

#Vérifiez le résultat
print(json.dumps(classes, indent=2, ensure_ascii=False))

Affichage d'image IQOS

Supposons qu'un fichier image appelé sushi.jpg soit téléchargé sur l'ICOS du projet. Vous pouvez l'afficher sur votre ordinateur portable avec le code suivant.

#Image
image_file = project.get_file("sushi.jpg ")
image_file.seek(0)
from IPython.display import Image
Image(data=image_file.read()) 

c'est tout.

7: Résumé

Vous devez d'abord le définir, mais je pense que vous pouvez facilement écrire le code autrement qu'en le définissant une fois. Puisque project.get_file () renvoie io.BytesIO, je pense que je peux écrire diverses choses, donc le document Watson Studio "[Utilisation de project-lib pour Python](https://dataplatform.cloud.ibm.com/docs/" Veuillez vous référer aux informations dans "content / wsj / analyser-data / project-lib-python.html)" et essayer diverses autres choses.

Recommended Posts

Lecture et écriture de fichiers à partir de blocs-notes sur Watson Studio vers IBM Cloud Object Storage (ICOS) -à l'aide de project-lib-
Étude à partir de Python Lecture et écriture de fichiers Hour9
Lire et écrire des fichiers csv
Télécharger des fichiers sur Aspera fournis avec IBM Cloud Object Storage (ICOS) à l'aide du SDK (version Python)
Installez Anaconda sur votre Mac et téléchargez votre notebook Jupyter (IPython) sur Anaconda Cloud
Comment réparer la merde lors de la lecture d'images Google Cloud Storage de Django déployées sur GAE
Paramètres de lecture de fichiers S3 avec des pandas depuis Jupyter Notebook sur AWS
Lire et écrire des fichiers JSON avec Python
Exploitez le stockage d'objets cloud de Sakura à partir de Python
[IBM Cloud] J'ai essayé d'accéder à la table Db2 on Cloud à partir de Cloud Funtions (python)
Comment installer Fast.ai sur le GPU Alibaba Cloud et l'exécuter sur un ordinateur portable Jupyter
Convertir l'API cURL en script Python (à l'aide du stockage d'objets IBM Cloud)