Code/Python

colab으로 csv관련 다루기.

kolbe_starziki 2019. 4. 26. 09:30

colaboratory라는 구글드라이브를 이용하는 노트북 환경이 있다. 

 

텐서플로우 등 까다로운 환경을 맞추지 않고, TPU를 쓸 수 있게 개방해놓은 것으로 안다.

 

제한적인 자원이지만, 노트북CPU를 쓰는 환경보단 빠르게 값을 받아볼 수 있으며,

 

완벽하게 꾸며진 개발환경(자동완성도구도 제한적으로 제공)을 제공하므로, 테스트하기엔 좋다.

 

이것을 하다 보니, Python을 올린 Docker서버와 CSV파일을 연결을 시키기가 힘들다.

 

솔직히 작은 데이터는 StringIO로 하는게 가장 빠른 거 같다.

 

참고로 다 귀찮다.

 

https://towardsdatascience.com/3-ways-to-load-csv-files-into-colab-7c14fcbdcb92

 

3 Ways to Load CSV files into Colab

(There are probably more ways but here are three)

towardsdatascience.com

1. 외부에 있는 예제 파일에 경우(특히 Github에 있는 자료)는 

   pandas의 read_csv으로 실제로 있는 자료의 주소를 던져서 바로 읽어온다.

 

2. from google.colab import files
   uploaded = files.upload()

files.upload()를 하면 뜨는 화면

   로컬에 작성한 파일이 있을 때는 이걸 이용해서 올려놓고   

   DataFrame에 넣기 위해  작업을 할 때는

 

   import io

   df2 = pd.read_csv(io.BytesIO(uploaded['Filename.csv']))

 

  글고, 포인트는 파일선택에 골랐던 파일명을 Filename.csv 넣은 칸에 변경하여 넣자.

 

3. 구글 드라이브에 있는 경우에는 구글드라이브에서 바로 가져올 수 있으므로 

 

   코랩도 구글 드라이브로 하는 거라고 생각해서 여러므로 편할 거라 생각했으나, 이건 그닥 편하진 않다. 

 

   키등을 받아와서 하기 때문에, 기획자나 문서관리자와 공동으로 구글드라이브에서 업데이트하는 작업을 하는 경우를 말곤 비추함.

   

# Code to read csv file into Colaboratory:
!pip install -U -q PyDrive #pip로 되기 전 깔기
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
import pandas as pd

# Authenticate and create the PyDrive client.
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

#“Google Cloud SDK wants to access your Google Account” 


link = 'https://drive.google.com/open?id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
#올린 것에 대한 공유명 허용

fluff, id = link.split('=')
print (id) # Verify that you have everything after '='

downloaded = drive.CreateFile({'id':id}) 
downloaded.GetContentFile('Filename.csv')  
df3 = pd.read_csv('Filename.csv')

        

    

모자이크된 거 안에는 실제 키값이 있습니다.

붙여서 넣으면 되긴 합니다만, 할때마다 이 키 값을 넣는 것을 작성해야 합니다.