단축키

명령모드(Command) 단축키

: above (위에 셀 추가하기) 

: bottom (아래 셀 추가하기) 

d+d : delete + delete (셀 삭제하기) 

shift + 'l' : line (셀 줄번호 표시하기) 

shift + 'm' : merger (셀 병합)

 

편집모드(Edit) 단축키

control + Return : 셀 실행

shift + Return : 셀 실행 후 아래 셀로 이동

option + Return : 셀 실행 후 아래 셀 삽입하며 이동

shift + Tab : 도움말

Tab : 자동 완성

control + '/' : 코드 주석 처리(해당 코드라인 가장 앞에 #을 넣는 기능)

control + shift + '-' : 셀 나누기 / shift + m 병합하기와 반대 기능

 

 

자료형 및 기본 문법

( ) : 함수, 쿼리

[ ] : 호출, 리스트

{ : } : 딕셔너리

ESC키를 누르면 명령(Command)모드로 전환
Return키를 누르면 편집(Edit)모드로 전환

ESC키를 눌러 명령모드로 전환된 상태에서 'M'키를 누르면 Markdown 상태가 되어 제목이나 메모를 기록할 수 있다. (M : Markdown, Y : Code)

 


문자열, 리스트

sum(ABC) : ABC 리스트의 합을 반환.

min(ABC) : ABC 리스트에서 최솟값 반환.

max(ABC) : ABC 리스트에서 최댓값을 반환

int(ABC) : ABC의 자료형을 숫자(정수)로 형변환. 소숫점 이하는 내림.

float(ABC) : ABC의 자료형을 숫자(실수)로 형변환.

str(123) : 123의 자료형을 문자로 형변환.

type(ABC) : ABC의 자료형을 반환한다.

ABC = 123 : 123은 숫자(정수)

ABC = "123" : 123은 문자

print(secinfo[3][0]) : secinfo 리스트의 3번 인덱스 값의 0번 인덱스 값

print(secinfo[0][2]) : secinfo 리스트의 0번 인덱스 값의 2번 인덱스 값

print(secinfo[1][1]) : secinfo 리스트의 1번 인덱스 값의 1번 인덱스 값

ABC[2] = 120 : ABC 리스트의 2번 인덱스 값을 120으로 업데이트한다. insert와 비교

ABC[2:4] = [120,250] : ABC 리스트의 2번 인덱스 ~ 4번 인덱스 전까지 값을 120,250으로 업데이트한다.

ABC.remove(120) : ABC 리스트에서 가장 앞에서 발견된 120을 삭제한다.

del ABC[3] : ABC 리스트에서 3 인덱스 값을 삭제한다.

ABC.pop() : ABC 리스트에서 마지막 값을 반환 후 리스트에서 삭제한다.

ABC.pop(3) : ABC 리스트에서 3번 인덱스 값을 반환 후 리스트에서 삭제한다.

ABC[2:5] = [ ] : ABC 리스트의 2번 인덱스 ~ 5번 인덱스 전까지 값을 삭제한다.

ABC.append(300) : ABC 리스트의 마지막에 값 300을 덧붙인다.

ABC.insert(3,200) : ABC 리스트의 3번 인덱스에  값 200을 삽입한다. update와 비교

ABC.extend([135,270]) : ABC 리스트의 마지막에 [135,270] 리스트를 연장한다.

(리스트 + 리스트 포맷은 리스트 연산으로도 가능하다. ABC = ABC + [135,270])

ABC.sort() : ABC 리스트의 값을 오름차순 오름차순 정렬한다. 1,2,3,4. ( 저장 X / 저장하려면 ABC = ABC.sort() )

ABC.sort(reverse = False) : ABC 리스트의 값을 오름차순 정렬한다. 1,2,3,4. 반드시 대문자로 쓴다. false로 입력하면 에러!!

ABC.sort(reverse = True) : ABC 리스트의 값을 내림차순 정렬한다. 4,3,2,1. 반드시 대문자로 쓴다. true로 입력하면 에러!!

len(ABC) : ABC 리스트의 길이를 반환.

ABC.index(120) : ABC 리스트에서 값 120의 인덱스를 반환.

ABC.count(120) : ABC 리스트에서 값 120의 개수 세기.

ABC.index("G") : ABC에서 대문자 "G"의 인덱스를 반환.

ABC.count("G") : ABC에서 대문자 "G"의 개수 세기.

ABC.upper() : ABC의 모든 문자를 대문자로 바꾼다.

ABC.lower() : ABC의 모든 문자를 소문자로 바꾼다.

ABC.replace("G","K") : ABC에서 대문자 "G"를 대문자 'K"로 바꾼다.

DEF = ABC.split("G") : ABC를 대문자 "G"를 기준으로 n개로 분리한 값들을 DEF 리스트로 만든다.

print("원숭이 엉덩이는 {} 빨가면 {} 사과는 {}".format(변수1, 변수2, 변수3)) : 변수와 문자열 여러개가 섞인 경우 출력 방법.

ABC.strip() : ABC 문자열 앞뒤의 공백(/n, /t 포함)을 제거한다. (문자열 중간의 공백은 유지)
 

딕셔너리

ABC["Key1"] : ABC 딕셔너리의 "Key1"에 대응하는 "Value1"을 반환한다.

ABC["Key1"] = "Value1_1" : ABC 딕셔너리에 "Key1"이 있으면 Value값을 "Value1_1"로 업데이트한다.

ABC["KeyA"] = "ValueA" : ABC 딕셔너리에 "KeyA"가 없으면 {"KeyA ": "ValueA"}를 딕셔너리에 추가한다.

del ABC["Key2"] : ABC 딕셔너리의 "Key2"와 그에 대응하는 "Value2"를 삭제한다.

dic.pop("Key2") : ABC 딕셔너리에의 "Key2"에 대응하는 "Value2"를 반환 후 딕셔너리에서 삭제한다.

 

홀수값 뽑아내기

ABC[0::2] : 리스트 0번에서 시작. 등차는 2.

 

짝수값 뽑아내기

ABC[1::2] : 리스트 1번에서 시작. 등차는 2.

반복문으로 표현하는 방법은 다음 글 하단을 참조한다.

 


 함수

import datetime as dt        (as dt는 빼도 되지만 이름을 선언하는게 코딩 하기 더 좋다.)

datetime.datetime.now()는 통째로 외우자!

datetime 모듈 이름을 dt라 정했다면, dt.datetime.now()로 쓸 수 있다.

 

ABC.hour : (ABC가 시간값일 때) 시(hour)를 정수로 출력.

ABC.minute : (ABC가 시간값일 때) 분(minute)을 정수로 출력.

 

import pandas as pd
import d6stack : 판다스 성능 향상.

pd.DataFrame(ABC, columns=[' ']) : ABC 리스트를 데이터프레임으로 만들기.

pd.DataFrame(zip(ABC,DEF), columns=[' ',' ']) ABC, DEF 리스트를 데이터프레임으로 만들기.
(2개 이상의 리스트를 데이터프레임으로 만들려면 한 번에 zip()으로 묶어서 만들거나
각각 데이터프레임으로 만든 다음 pd.concat으로 합친다.)

ABC.columns = ['aaa','bbb','ccc'] : ABC 데이터프레임에 aaa, bbb, ccc를 각 컬럼헤더로 넣기. (컬럼헤더를 못 넣고 데이터프레임을 만들었을 경우.)

ABC.rename(columns = {'aa':'A','bb':'B'}):ABC 데이터프레임의 컬럼헤더를 aa, bb에서 A, B로 변경하기.
파이썬에는 inplace라는 옵션을 가지는 함수가 있다. inplace=False : 저장 안 함.   inplace=True 저장함.
rename 함수의 inplace 기본값은 False로 저장하려면 다시 변수에 넣어주거나 .rename({ },inplace=True) 옵션을 준다.

ABC.index = ['aaa','bbb','ccc'] : ABC 데이터프레임에 aaa, bbb, ccc를 각 인덱스로 넣기. (로우헤더.)

pd.concat([ABC,DEF,GHI], axis = 1) : ABC,DEF,GHI 데이터프레임을 하나로 합치기. (axis = 0 : 위아래로, axis = 1 : 좌우로)

ABC.head(2) : ABC 데이터프레임에서 첫 2줄만 보기.

ABC.tail(2) : ABC 데이터프레임에서 끝 2줄만 보기.

ABC.columns :  ABC 데이터프레임의 컬럼헤더 보기.

ABC['컬럼헤더'] : ABC 데이터프레임에서 컬럼헤더가 '컬럼헤더'인 것만 보기.

ABC.loc[ABC.컬럼명 == ] : ABC 데이터프레임을 제한한다. ABC 데이터프레임의 컬렴명 만 뽑는다.

 

 

pd.read_csv("../../../ABC.csv") : ABC.csv를 판다스로 불러오기. (한글 포함 파일 에러 발생시, encoding='ms949' 또는 'cp949' 옵션을 준다.)

pd.read_csv("../../../ABC{}.csv".format(i)ABCi.csv를 판다스로 불러오기. (ABC1, ABC2, ... 이렇게 파일이 있을 경우 반복문을 통해 불러올 수 있다. 단, 중간에 비는 번호가 있을 경우를 대비해 try except로 예외처리를 해줘야한다.)

ABC.to_csv("./filename.csv", index=False, encoding="UTF-8") : AB데이터프레임을 filename.csv 로 저장한다. (판다스가 자동으로 인덱스를 1열에 삽입하여 저장하기 때문에 일반적으로 , index+False 옵션은 항상 주는 것이 좋다.)
(내보낼 수 있는 옵션은 csv 외에도 clipboard, dict, excel, html, json, latex, markdown, numpy, pickle, records, sql,string 등 다양하다.) (파일 저장시 누적해서 저장되지 않는다. 파일을 덮어쓰기 한다.)

pd.read_sql_query("Query", engine) : "Query"를 이용해 판다스로 불러올 수 있다. 접속은 engine을 이용한다. (테이블에서 원하는 것만 불러올 수 있다.)

pd.read_sql_table(table_name = ABC, con = engine) : 테이블 이름이 ABC인 것을 engine을 이용해 판다스로 불러오기. (테이블 전체를 불러온다.)

ABC.to_sql(name = "Hello", con = engine, index = False) : ABC 데이터프레임을 engine을 이용해 DB에 'Hello'라는 테이블 이름으로 저장한다. 

d6tstack.utils.pd_topsql(df = ABC, uri = "engine 만들 때 사용하는 URL", table_name = "Hello") : ABC 데이터프레임을 "engine 만들 때 사용하는 URL"을 이용해 "Hello"라는 테이블 이름으로 저장한다.

pd.json_normalize() : JSON 데이터를 데이터프레임으로 만든다.

pd.read_json() : JSON 데이터를 데이터프레임으로 만든다.

 

 

import psycopg2 : PostgreSQL 클라이언트 모듈.
import psymysql : MySQL, MariaDB 클라이언트 모듈.

 

from sqlalchemy import create_engine : 데이터베이스 종류, 주소, 이름 등을 이용해 접속하는 엔진을 만들어준다.

engine = create_engine

 

import request, bs4 : 웹 크롤링을 위해 HTML을 불러와 예쁘게 담아낸다.

 

from selenium import webdriver

driver.get(url) : url로 이동
driver.page_source : 현재 페이지의 HTML 태그를 저장한다. requests.get(url).text와 같다.

driver.find_element_by_xpath(xPath).click() : 클릭.
driver.find_element_by_xpath(xPath).send_keys('ABC') : 'ABC'를 입력.
driver.find_element_by_xpath(xPath).send_keys(Keys.ENTER) : return 입력. (반드시 ENTER를 대문자로 입력해야한다.)

Selenium Keys

더보기

i.e. send_keys(Keys.ENTER) 는 send_keys("\ue007")과 같다.

KEYS =
See Also:
Element#send_keys
http://www.google.com.au/search?&q=unicode+pua&btnK=Search
{
  null: "\ue000",
  cancel: "\ue001",
  help: "\ue002",
  backspace: "\ue003",
  tab: "\ue004",
  clear: "\ue005",
  return: "\ue006",
  enter: "\ue007",
  shift: "\ue008",
  left_shift: "\ue008",
  control: "\ue009",
  left_control: "\ue009",
  alt: "\ue00A",
  left_alt: "\ue00A",
  pause: "\ue00B",
  escape: "\ue00C",
  space: "\ue00D",
  page_up: "\ue00E",
  page_down: "\ue00F",
  end: "\ue010",
  home: "\ue011",
  left: "\ue012",
  arrow_left: "\ue012",
  up: "\ue013",
  arrow_up: "\ue013",
  right: "\ue014",
  arrow_right: "\ue014",
  down: "\ue015",
  arrow_down: "\ue015",
  insert: "\ue016",
  delete: "\ue017",
  semicolon: "\ue018",
  equals: "\ue019",
  numpad0: "\ue01A",
  numpad1: "\ue01B",
  numpad2: "\ue01C",
  numpad3: "\ue01D",
  numpad4: "\ue01E",
  numpad5: "\ue01F",
  numpad6: "\ue020",
  numpad7: "\ue021",
  numpad8: "\ue022",
  numpad9: "\ue023",
  multiply: "\ue024",
  add: "\ue025",
  separator: "\ue026",
  subtract: "\ue027",
  decimal: "\ue028",
  divide: "\ue029",
  f1: "\ue031",
  f2: "\ue032",
  f3: "\ue033",
  f4: "\ue034",
  f5: "\ue035",
  f6: "\ue036",
  f7: "\ue037",
  f8: "\ue038",
  f9: "\ue039",
  f10: "\ue03A",
  f11: "\ue03B",
  f12: "\ue03C",
  meta: "\ue03D",
  command: "\ue03D", # alias
  left_meta: "\ue03D", # alias
  right_shift: "\ue050",
  right_control: "\ue051",
  right_alt: "\ue052",
  right_meta: "\ue053",
  numpad_page_up: "\ue054",
  numpad_page_down: "\ue055",
  numpad_end: "\ue056",
  numpad_home: "\ue057",
  numpad_left: "\ue058",
  numpad_up: "\ue059",
  numpad_right: "\ue05A",
  numpad_down: "\ue05B",
  numpad_insert: "\ue05C",
  numpad_delete: "\ue05D"
}.freeze

action1 = driver.find_element_by_xpath(xPath1)
action2 = driver.find_element_by_xpath(xPath2)
ActionCahins.move_to_element(action1).click(action2).perform() : 마지막 perform()에 의해 순차적으로 실행.

# example

from selenium.webdriver.common.action_chains import ActionChains

coupangUrl = 'http://www.coupang.com'
driver.get(coupangUrl)

mainMenu = '//*[@id="header"]/div/a'
subMenu = '//*[@id="gnbAnalytics"]/ul[1]/li[4]/a'
subMenu2 = '//*[@id="gnbAnalytics"]/ul[1]/li[4]/div/div/ul/li[6]/a'
targetMenu = '//*[@id="gnbAnalytics"]/ul[1]/li[4]/div/div/ul/li[6]/div/ul/li[6]/a'
main = driver.find_element_by_xpath(mainMenu)
sub = driver.find_element_by_xpath(subMenu)
sub2 = driver.find_element_by_xpath(subMenu2)
target = driver.find_element_by_xpath(targetMenu)
ActionChains(driver).move_to_element(main).move_to_element(sub).move_to_element(sub2).click(target).perform()

time.sleep(3) : import time 필요.
driver.implicitly_wait(3) : 셀레니움 드라이버의 함수

driver.close() : 종료.

 

import smtpliba
from email.message import EmailMessage

 

 

 

import pickle

pw = "password"
pickle.dump(pw, open('pw.pickle', 'wb')) : pw.pickle이란 파일에 데이터를 입력한다. 파일이 없다면 새로 생성. (write byte)
pw = pickle.load(open('pw.pickle', 'rb')) : pw.pickle이란 파일에서 데이터를 읽어온다. (read byte)

#로그인 아이디 / 앱 비밀번호 (설정 -> 보안 -> 앱 비밀번호)
myid = getpass.getpass()    # 이메일 아이디를 넣는다.
mypw = getpass.getpass()    # 앱 비밀번호를 넣는다.

pickle.dump(myid, open('id.pickle', 'wb'))    # 내 이메일 ID를 id.pickle로 저장.
pickle.dump(mypw, open('pw.pickle', 'wb'))    # 내 앱 비밀번호를 pw.pickle로 저장.

# 이후 위에 로그인 아이디 / 앱 비밀번호는 주석처리하고 pickle로 불러와 사용하기만 하면 된다.
userid = pickle.load(open('id.pickle', 'rb'))
userpw = pickle.load(open('pw.pickle', 'rb'))

# smtp를 이용해 gmail에 로그인
smtp_gmail.login(userid, userpw)

 

 

시각화(표, 그래프, 차트)

import matplotlib.pyplot as plt
from matplotlib import rc
import seaborn as sns
%matplotlib inline

rc('font', family='AppleGothic')
plt.rcParams['axes.unicode_minus'] = False

 

 

경고 무시

import warnings
warnings.filterwarnings(action="ignore")

 

디렉토리 구별하기

os.path로 만든 디렉토리가 아닌 경우 디렉토리는 반드시 다음과 같이 정해져야한다
/Users/path (X)
/Users/path/ (O)   이렇게 끝나야 검색이 된다. 혹시 안 될 경우 뒤에 / 를 붙여보자. 된다면 os.path를 이용해 / 가 안 붙어도 작동하게 만들어준다.

디렉토리 목록만 리스트로 추출

## 둘 중 아무거나 하나 사용

# 입력 받은 디렉토리에서 디렉토리 목록만 리스트로 추출 (os.path.isfile)
def findDir(pwd):
    directory = []
    for eachDir in os.listdir(pwd):
        if os.path.isfile(eachDir):
            continue
        directory.append(eachDir)
    
    return directory
    
# 입력 받은 디렉토리에서 디렉토리 목록만 리스트로 추출 (os.path.isdir)
def findDir(pwd):
    directory = []
    for eachDir in os.listdir(pwd):
        fullDir = os.path.join(pwd, eachDir)
        if os.path.isdir(fullDir):
            directory.append(eachDir)
    
    return directory

디렉토리 목록을 전체 디렉토리 리스트로 추출

## 둘 중 아무거나 하나 사용
# 입력 받은 디렉토리에서 디렉토리만 전체 디렉토리 리스트로 추출 (os.path.isfile)
def findFullDir(pwd):
    directory = []
    for eachDir in os.listdir(pwd):
        if os.path.isfile(eachDir):
            continue
        directory.append(os.path.join(pwd, eachDir))
    
    return directory

# 입력 받은 디렉토리에서 디렉토리만 전체 디렉토리 리스트로 추출 (os.path.isdir)
def findFullDir(pwd):
    directory = []
    for eachDir in os.listdir(pwd):
        fullDir = os.path.join(pwd, eachDir)
        if os.path.isdir(fullDir):
            directory.append(fullDir)
    
    return directory

 

파일 구별하기

파일 목록만 리스트로 추출

# 입력 받은 디렉토리에서 파일 목록만 리스트로 추출 (os.path.isfile)
def findFile(pwd):
    file = []
    for eachFile in os.listdir(pwd):
        if os.path.isfile(eachFile):
            file.append(eachFile)
    
    return file

파일 목록을 전체 디렉토리 리스트로 추출

# 입력 받은 디렉토리에서 파일만 전체 디렉토리 리스트로 추출 (os.path.isfile)
def findFileFullDir(pwd):
    directory = []
    for eachFile in os.listdir(pwd):
        if os.path.isfile(eachFile):
            directory.append(os.path.join(pwd, eachFile))
    
    return directory

 

 

 

 

 

DB 접속 엔진 관련 (v1.1.2 updated 20.05.27)

PrintImport.py
0.00MB

모듈에 대한 다양한 목록은 아래 글의 가장 하단 부분을 참고.

2020/04/30 - [개발자/용어... 그 외의 것들...] - pip, brew 명령어

+ Recent posts