코드 보기
print(1 / 200 * 30)
print((59 + 73 + 2) / 3)0.15
44.666666666666664
이전 장들을 따라왔다면 이제 파이썬 코드를 실행해 본 경험이 있을 것입니다. 자세한 내용은 다루지 않았지만, 기초적인 부분을 터득하셨거나 실망한 나머지 이 책을 내던져 버렸을 수도 있습니다! 파이썬 프로그래밍을 시작할 때 좌절감을 느끼는 것은 자연스러운 일입니다. 문장 부호에 매우 엄격하며 단 한 글자만 틀려도 불평을 쏟아내기 때문입니다. 하지만 좌절감을 느끼더라도 이러한 경험은 전형적이며 일시적인 것임을 기억하세요. 누구에게나 일어나는 일이며, 이를 극복하는 유일한 방법은 계속 시도하는 것입니다.
더 나아가기 전에, 파이썬 코드를 실행하기 위한 탄탄한 토대를 갖추었는지, 그리고 파이썬 작업에 가장 유용한 Visual Studio Code 기능들을 알고 있는지 확인해 보겠습니다.
가능한 한 빨리 궤도에 오르기 위해 지금까지 생략했던 기초적인 내용들을 복습해 보겠습니다. 파이썬을 계산기로 사용할 수 있습니다:
print(1 / 200 * 30)
print((59 + 73 + 2) / 3)0.15
44.666666666666664
추가 패키지인 numpy에는 필요할 수 있는 수많은 수학 연산자들이 포함되어 있습니다. numpy가 아직 설치되어 있지 않다면, Visual Studio Code에서 터미널을 열고(“Terminal -> New Terminal”로 이동한 뒤 터미널에 pixi add numpy를 입력하고 엔터를 누르세요). numpy가 설치되면 다음과 같이 가져와서 사용할 수 있습니다:
import numpy as np
print(np.sin(np.pi / 2))1.0
할당 연산자 =를 사용하여 새로운 객체를 만들 수 있습니다. 우변에 있는 값을 좌변의 변수로 복사한다고 생각하시면 됩니다.
x = 3 * 4
print(x)12
파이썬에는 여러 객체를 동시에 캡처하는 몇 가지 구조가 있지만, 가장 일반적인 것은 대괄호로 지정되는 리스트(list)입니다.
primes = [1, 2, 3, 5, 7, 11, 13]
print(primes)[1, 2, 3, 5, 7, 11, 13]
리스트에 대해 기본적인 산술 연산을 수행하려면, “이 리스트의 모든 요소에 대해 연산을 수행하라”는 구조를 가진 리스트 컴프리헨션(list comprehension)을 사용하세요. 예를 들어, 각 요소에 3을 곱하려면 다음과 같이 합니다.
[element * 3 for element in primes][3, 6, 9, 15, 21, 33, 39]
...for element in ...이라고 말함으로써 정의했기 때문에 위에서의 “element”라는 단어는 거의 어떤 단어든 될 수 있습니다. 다른 단어로 시도해 볼 수 있습니다. 예: [entry*3 for entry in primes].
객체를 생성하는(소위 할당 문장) 모든 파이썬 문장은 동일한 형태를 가집니다:
객체_이름 = 값
해당 코드를 읽을 때 머릿속으로 “객체_이름이 값을 얻는다”라고 말해 보세요.
파이썬은 # 뒤의 모든 텍스트를 무시합니다. 이를 통해 파이썬은 무시하지만 다른 인간은 읽을 수 있는 텍스트인 주석을 작성할 수 있습니다. 코드에서 어떤 일이 일어나고 있는지 설명하는 주석을 예제에 포함시키기도 할 것입니다.
주석은 뒤따르는 코드가 무엇을 하는지 간략하게 설명하는 데 도움이 될 수 있습니다.
# 소수(primes) 정의
primes = [1, 2, 3, 5, 7, 11, 13]
# 소수에 2를 곱하기
[el * 2 for el in primes][2, 4, 6, 10, 14, 22, 26]
이와 같은 짧은 코드 조각에서는 모든 코드 줄마다 명령을 남길 필요는 없으며, 가능한 한 유익한 이름을 사용하려고 노력해야 합니다. 왜냐하면 좋은 이름은 코드 독자(미래의 본인이 될 가능성이 높습니다!)가 무슨 일이 일어나고 있는지 이해하는 데 도움을 주기 때문입니다!
우리의 조언은 코드가 어떻게(how) 또는 무엇(what)을 하는지가 아니라, 왜(why) 그렇게 작성되었는지를 설명하기 위해 주석을 사용하는 것입니다. 코드의 ’무엇’과 ’어떻게’는 주의 깊게 읽기만 하면 언젠가는 파악할 수 있습니다. 주석에 모든 단계를 설명한 뒤 코드를 변경한다면, 주석도 업데이트하는 것을 잊지 말아야 하거나(번거로움) 나중에 코드를 다시 볼 때 혼란스러울 것입니다.
무언가가 ‘왜’ 행해졌는지 파악하는 것은 훨씬 더 어렵거나 불가능합니다. 예를 들어 geom_smooth()에는 곡선의 부드러움을 조절하는 span이라는 인수가 있으며, 값이 클수록 곡선이 더 부드러워집니다. span 값을 기본값인 0.75에서 0.9로 변경하기로 했다고 가정해 봅시다. 미래의 독자가 ‘무엇’이 일어나는지 이해하는 것은 쉽지만, 주석에 여러분의 생각을 적어두지 않는다면 아무도 여러분이 ’왜’ 기본값을 변경했는지 이해하지 못할 것입니다.
데이터 분석 코드의 경우, 주석을 사용하여 전반적인 공격 계획을 설명하고 중요한 통찰력을 얻었을 때 이를 기록해 두세요. 코드 자체로부터 이러한 지식을 다시 캡처할 방법은 없습니다.
대화형 창에 이미 생성된 객체의 이름을 입력하여 언제든지 확인할 수 있습니다:
primes[1, 2, 3, 5, 7, 11, 13]
그것이 어떤 타입의 객체인지 알고 싶다면, 다음과 같이 대화형 창에서 type(object)를 사용하세요.
type(primes)list
Visual Studio Code에는 객체 추적을 돕는 몇 가지 강력한 기능이 있습니다:
객체(일명 “변수”) 이름이 파이썬에서 유효하려면 다음 사항을 준수해야 합니다:
파이썬의 객체 이름은 대소문자를 구분하므로, age, Age, AGE는 모두 세 개의 서로 다른 변수가 될 수 있습니다.
객체 이름을 지을 때는 무엇인지 파악할 수 있도록 묘사적으로 짓는 것이 가장 좋습니다. 여러 단어를 사용할 때의 규칙을 정해야 할 것입니다. 소문자 단어들을 _로 구분하는 snake_case를 권장합니다. 예를 들어, i_use_snake_case는 객체의 유효한 스네이크 케이스 이름입니다.
{.callout-note} 연습 문제 `age`라는 객체를 만들고 값 `10`을 할당해 보세요. 콘솔에 `Age`라고 입력하면 어떤 일이 일어나나요?
이미 생성한 객체의 이름을 다시 입력하여 언제든지 확인할 수 있음을 기억하세요:
primes[1, 2, 3, 5, 7, 11, 13]
다른 할당을 해보겠습니다:
this_is_a_really_long_name = 2.5대화형 창을 통해 이 객체를 확인하는 시간을 아끼기 위해, 이름의 시작 부분만 입력하고(“this”라고 입력) TAB 버튼을 누르면 됩니다. Visual Studio Code가 세션 중에 정의한 변수들을 사용하여 작성 중인 내용을 자동 완성해 줄 것입니다. 시간을 아껴주는 최고의 팁입니다!
노트북이 아니라 대화형 콘솔을 사용하고 있다면 또 다른 팁이 있습니다. 이전에 this_is_a_really_long_name = 2.5라고 실행했지만 실제로는 3.5로 설정하려고 했다고 가정해 봅시다. 절망하지 마세요. 처음부터 다시 칠 필요는 없습니다. 대화형 창에 커서를 두고 키보드의 ↑ 키를 누르면 이전에 내렸던 명령어들을 순환할 수 있습니다. 2.5를 3.5로 바꾸고 shift + return을 누르면 변수가 재정의됩니다.
다른 변수를 정의해 보겠습니다:
py_variable = 2 ^ 3이제 이를 확인해 봅시다:
py_variabl
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/Users/aet/Documents/git_projects/python4DS/workflow-basics.ipynb Cell 31 in ()
----> 1 py_variabl
NameError: name 'py_variabl' is not defined이는 코딩의 훌륭함과 좌절감을 동시에 보여줍니다: 여러분의 IDE(Visual Studio Code)는 지루한 계산을 대신해 주지만, 그 대가로 지침을 매우 정밀하게 내려야 합니다. 그렇지 않으면 찾으려던 객체를 발견하지 못했다는 에러가 발생할 가능성이 큽니다. 오타는 중요합니다. 파이썬은 여러분의 마음을 읽고 “아, py_variabl이라고 쳤지만 아마 py_variable을 말하려던 거겠지”라고 말해주지 않습니다.
파이썬에는 수많은 내장 함수가 있습니다. 패키지에서 함수를 가져올 수도 있고(np.sin처럼), 직접 정의할 수도 있습니다.
코딩에서 함수는 입력을 받고, 기능을 수행하며, 출력을 반환합니다. 내장 함수인 sum()을 사용하는 간단한 예제를 보겠습니다:
sum(primes)42
함수의 일반적인 구조는 함수 이름, 그 뒤에 괄호, 그 안에 하나 이상의 인수가 오는 형식입니다. 가끔 키워드 인수가 있을 수도 있습니다. 예를 들어, sum()에는 특정 숫자부터 계산을 시작하도록 지시하는 키워드 인수가 있습니다. 10부터 시작하여 이를 확인해 보겠습니다:
sum(primes, start=10)52
함수가 무엇을 하는지 확실하지 않다면, 해당 함수에 대해 help()를 호출할 수 있습니다(그 자체로 함수입니다):
help(sum)Help on built-in function sum in module builtins:
sum(iterable, /, start=0)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.
또는 Visual Studio Code에서 함수 이름 위에 마우스를 올려보세요.
변수와 마찬가지로 코드 완성 기능은 함수에서도 작동합니다. su라고 입력하고 탭을 눌러 이를 확인해 보세요.
문자열 객체(단어, 문장, 글자, 어구)를 다룰 때는 특히 주의해야 합니다. 이들은 항상 주위에 따옴표가 있어야 하기 때문입니다. 작은따옴표나 큰따옴표 중 원하는 것을 사용할 수 있지만 i) 관례는 큰따옴표이며, ii) 무엇을 선택하든 일관성을 유지하는 것이 좋습니다.
에러를 발생시키는 코드 예제입니다:
x = "hello
Input In [3]
x = "hello
^
SyntaxError: unterminated string literal (detected at line 1)다시 한번, Visual Studio Code가 여기서 큰 도움을 줄 수 있습니다. 큰따옴표를 여는 즉시 닫는 따옴표를 미리 준비해 주기 때문입니다.
왜 이 코드가 작동하지 않을까요?
my_variable = 10
my_varıable주의 깊게 살펴보세요! 무의미한 연습처럼 보일 수 있지만, 아주 작은 차이점을 알아차리도록 뇌를 훈련하는 것은 프로그래밍을 할 때 큰 보상을 줄 것입니다.
다음 파이썬 명령어들이 올바르게 실행되도록 수정해 보세요:
import pandas as pd
from palmerpenguins import load_penguins
from lets_pot import *
LetsPlot.setup_html()
penguins = load_penguins()
(
ggplot(
dTA=penguins,
maping=aes(x="flipper_length_mm", y="body_mass_g", color="species"),
)
+ geom_smooth(method="lm)
)