DSX 개체 저장 장치에서 CSV 데이터를 읽는 파이썬 코드

18546 단어 DSXPython
왓슨 Data Plaatform의 핵심 서비스 중 하나Data Science Experience(이하 DSX)의 노트북에 있는 파이톤 코드에서 대상이 저장한 파일을 읽는 방법에 대한 메모입니다.
쓰기 코드는 DSX의 Notebooks의 Python 프로그램에서 Bluemix PaaS 대상이 저장한 데이터를 읽습니다
프로젝트 저장소는 Bluemix 인프라의 IBM Cloud Onject Storage가 아니라 Bluemix PaaS 서비스의 대상 저장소입니다. 실수하지 않도록 주의하십시오.서버와 IoT 기기 등에서 보낸 데이터를 블루믹스 PaaS의 대상 저장 장치에 임시로 저장하고, DSX의 파이썬 코드에서 읽어 과학적 계산 처리를 수행하는 이념으로 작성한 코드다.

그림 1 개념 데이터 Science Experience의 Notebook에서 동작하는 이 Pythn 코드

사용법 설명


메소드 로그인DSX을 사용하여 Project->Default Project(프로젝트 이름) ->Add Notebooks를 선택하여 수첩을 만듭니다.그리고 다음 코드를 복사하여 대상 저장 기기의 인증 정보를 자신의 인증 정보로 변경하고 준비를 완료합니다.인증 정보의 획득 방법은 뒤에 서술할 것이다.
다음 방법으로 대상 저장 장치에서 파일을 꺼내 Python 코드 변수에 기록합니다.인출된 데이터는 Num.py의 배열에 저장하면 매우 편리할 것이다.첫 번째 파라미터는 인증 정보로 용기마다 사용자 ID와 비밀번호가 바뀌므로 주의해야 한다.두 번째 매개변수는 개체(파일)의 이름입니다.용기 이름은 인증 정보에 설정되어 있기 때문에 여기에 명확하게 설정되지 않습니다.
result,status,Label,Data = Read_CSV_from_ObjectStorage(credentials_1, filename)
첫 번째 반환값 result는 성공과 트루입니다. 실패하면False가 돌아옵니다.
두 번째 반환값 stauts에는 HTTP 코드가 포함되어 있습니다.성공한 경우 200개를 설정했다.인증에 실패하면 400번 데스크톱의 오류 코드를 설정합니다.
세 번째 반환값 Label은 CSV 파일 머리글 행의 항목 이름 레이블 목록을 반환합니다.
네 번째 반환값 Data는 데이터의 내용입니다.데이터가 모두 Flat형으로 변환되어 그룹에 들어간 후 되돌아옵니다.
다음은 코드의 전체를 읽고 다음 코드를 DSX의 노트북에 복사해 필요한 부분을 변경해 사용한다.CSV 형식의 파일 열 수는 자동 대응 프로그램입니다.
python 읽기 코드

%matplotlib inline
from io import BytesIO  
import requests  
import numpy as np
import matplotlib.pyplot as plt
import json

# オブジェクトストレージの認証情報  <-- 後述の認証情報取得方法に習って置き換える
credentials_1 = {
  'auth_url':'https://identity.open.softlayer.com',
  'project':'object_storage_bc6cdc85_586e_4581_8a09_8f01f7bdf3ed',
  'project_id':'2a9de4c1d50944a49f1a46dd53394158',
  'region':'dallas',
  'user_id':'********************************',
  'domain_id':'fb119f3e1bc0469dad2b253b317ec7ea',
  'domain_name':'952993',
  'username':'***********************************************',
  'password':"********************",
  'container':'DefaultProjecttakarajpibmcom',
  'tenantId':'undefined',
  'filename':'testdata_for_dsx.csv'
}

# オブジェクトストレージからの読み込み
def Read_CSV_from_ObjectStorage(credentials, fileName):  
    """This functions returns a StringIO object containing
    the file content from Bluemix Object Storage V3."""

    url1 = ''.join(['https://identity.open.softlayer.com', '/v3/auth/tokens'])
    data = {'auth': {'identity': {'methods': ['password'],
            'password': {'user': {'name': credentials['username'],'domain': {'id': credentials['domain_id']},
            'password': credentials['password']}}}}}
    headers1 = {'Content-Type': 'application/json'}
    resp1 = requests.post(url=url1, data=json.dumps(data), headers=headers1)

    # 認証エラーが発生したら終了
    if resp1.status_code != 201:
        return False, resp1.status_code, None, None

    resp1_body = resp1.json()
    for e1 in resp1_body['token']['catalog']:
        if(e1['type']=='object-store'):
            for e2 in e1['endpoints']:
                if(e2['interface']=='public'and e2['region']=='dallas'):
                    #url2 = ''.join([e2['url'],'/', credentials['container'], '/', credentials['filename']])
                    url2 = ''.join([e2['url'],'/', credentials['container'], '/', fileName])
    s_subject_token = resp1.headers['x-subject-token']
    headers2 = {'X-Auth-Token': s_subject_token, 'accept': 'text/csv'}
    resp2 = requests.get(url=url2, headers=headers2)
    if resp2.status_code != 200:
        return False, resp2.status_code, None, None

    # 配列にセットする
    tempArray = resp2.text.split("\n")  # 行に分割
    csvLabel = []  # CSVの先頭行のラベル
    csvFloat = []  # CSVの2行目以降のデータ部
    lineNo = 0     # 行カウント

    for row in tempArray:
        if len(row) > 0:
            c = row.split(",")
            if lineNo == 0:
                csvLabel = c
            else:
                a = []
                for i in range(0,len(c)):
                    a.append(float(c[i]))
                csvFloat.append(a)                    
        lineNo = lineNo + 1
    return True, resp2.status_code,csvLabel,csvFloat


# サンプル メイン
filename = 'testDataSet.csv'  <-- 読み取りたいCSVファイルのオブジェクト名をセットする

result,status,Label,Data = Read_CSV_from_ObjectStorage(credentials_1, filename)
if result == True:
    a = np.array(Data) # numpy2次元配列 (CSVの列数に依存)

    # グラフ描画
    x = np.array(a[:,[0]]) # 1列目を取り出す
    y = np.array(a[:,[1]]) # 2列目を取り出す
    plt.plot(x,y)
    plt.show()

else:    
    print "ERROR ", status

객체에 저장된 인증 정보를 얻는 방법


CSV 파일 등록


먼저 DSX의 개체 스토리지 기기에 CSV 파일을 등록합니다.여기서 주의사항은 DSX의 항목과 대상이 저장한 용기가 일일이 대응하는 것이다.따라서 노트북에서 다른 항목의 컨테이너에 접근할 수 없다는 점에 주의해야 한다.
따라서 현재 사용 중인 항목과 연관된 컨테이너에 CSV 파일을 등록합니다.메뉴 표시줄의 Project-> 프로젝트 이름을 지정하여 Notebooks, Data Asseets 위험을 표시하는 화면을 엽니다.그런 다음 Data Assets의 +Add Data Assets를 클릭하면 오른쪽 끝에 다음 내용이 표시됩니다.Drop file here로 표시되는 점선 영역으로 파일을 드래그하면 파일이 업로드됩니다.그런 다음 파일 이름 앞의 확인란에 를 선택합니다.이렇게 하면 Data Assets에 표시됩니다.

인증 정보 얻기


그런 다음 Notebook을 만들거나 제작 중인 Notebook을 편집 모드로 엽니다.편집 모드에서 열려면 펜 태그의 아이콘을 선택합니다.그리고 의 아이콘을 누르면 다음 표시가 표시되고 아래로 삼각형을 누르면 메뉴가 나온다.

이 목록의 맨 아래에 있는 Insert Credentials를 클릭하면 Notebook에 인증 정보가 삽입됩니다.편집 후 준비 완료.

코드 실행 결과


이 코드는 데이터를 읽고 도표를 표시하는 데 사용됩니다.CSV 파일 데이터에 해당하는 차트를 표시합니다.

참조 정보


이 코드의 출처 정보는 Working with Object Storage in Data Science Experience - Python Edition의 글에 근거한 JSON 읽기와 코드로 고친 것이다.

좋은 웹페이지 즐겨찾기