데이터과학을 위한 파이선에서
출처 : Unsplash
프로그래밍 할 때 동일한 질문, 개념 또는 구문을 반복해서 찾아 본 적이 있다면 혼자가 아닙니다.
나는이 일을 끊임없이하고 있음을 깨닫는다.
StackOverflow 또는 다른 리소스에서 물건을 보는 것은 부자연스럽지 않지만 좋은 언어를 느리게하고 언어에 대한 완전한 이해에 대해 질문을 제기합니다.
우리는 겉으로보기에는 무한한 양의 접근 가능한 무료 자원이 항상 하나의 검색으로 어렴풋이 나타나고있는 세상에 살고 있습니다. 그러나 이것은 축복이 될 수도 있고 저주가 될 수도 있습니다. 효과적으로 관리하지 않으면 이러한 리소스에 대한 과도한 의존으로 인해 장기간에 걸친 빈약 한 습관이 생길 수 있습니다.
출처 : xkcd
개인적으로, 나는 다음 번에 코드를 스스로 재현 할 수 있도록 개념을 배우고 확고히하기보다는 여러 번 비슷한 토론 스레드에서 코드를 가져 왔습니다.
이 방법은 게으르며 단기적으로는 저항이 가장 적은 경로 일 수 있지만 궁극적으로 성장, 생산성 및 문법 (기침, 인터뷰 ) 을 회상 할 수 있습니다.
최근 저는 Udemy에서 데이터 과학 및 기계 학습을위한 Python 이라는 온라인 데이터 과학 강좌를 진행했습니다 (오, 하느님, 나는 Youtube의 그 사람 처럼 들립니다 ). 이 시리즈의 초반 강연에서는 파이썬에서 데이터 분석을 수행 할 때 일관되게 간과하는 몇 가지 개념과 구문을 생각해 냈습니다.
이러한 개념에 대한 이해를 한층 강화하고 StackOverflow 검색을 두 번 저장하는 데 관심이 있으시다면 여기에 파이썬, NumPy 및 팬더로 작업 할 때 항상 잊고있는 것들이 있습니다.
간단한 설명과 예제를 각각 포함 시켰지만 귀하의 이익을 위해 각 개념을 더 깊이 탐구하는 비디오 및 기타 리소스에 대한 링크도 포함 할 것입니다.
일종의리스트를 정의 할 필요가있을 때마다 for 루프를 작성하는 것은 지루합니다. 운 좋게도 파이썬은 단 한 줄의 코드로이 문제를 해결할 수있는 내장 된 방법을 가지고 있습니다. 문법은 머리를 감싸기가 조금 힘들지만 일단이 기술에 익숙해지면 꽤 자주 사용하게 될 것입니다.
출처 : Trey Hunner
for 루프로리스트 comprehension을 수행하는 방법과 루프가 필요없는 간단한 라인으로리스트를 생성하는 방법에 대해서는 위와 아래의 예제를 참조하십시오.
x의 항목에 대해 x = [1,2,3,4]
out = []
:
out.append (항목 ** 2)
print (출력)
[1, 4, 9, 16]
# 대
x = [1,2,3,4]
out = [x 항목의 2 항목]
print (out)
[1, 4, 9, 16]
제한된 사용 사례를위한 함수 다음에 함수를 작성하는 것에 지친 적이 있습니까? 람다는 구출 기능을합니다! 람다 함수는 파이썬에서 작고, 일회성이고, 익명의 함수 객체를 만드는 데 사용됩니다. 기본적으로 함수 를 만들지 않고도함수 를 만들 수 있습니다 .
람다 함수의 기본 구문은 다음과 같습니다.
람다 인수 : 표현식
람다 함수는 단 하나의 표현식이있는 한 일반 함수가 할 수있는 모든 것을 할 수 있습니다. 아래의 간단한 예제와 곧 나오는 비디오를 통해 lambda 함수의 힘에 대해 더 잘 이해할 수 있습니다.
double = lambda x : x * 2
print (double (5))
10
람다 함수에 대해 파악한 후에는지도와 필터 함수를 조합하여 강력한 도구가 될 수 있습니다.
특히 맵은 각 요소에 대해 일종의 연산을 수행하여 목록을 가져와 새로운 목록으로 변환합니다. 이 예에서는 각 요소를 거치며 자체 결과 2를 새 목록에 매핑합니다. 리스트 함수는 단순히 출력을리스트 타입으로 변환합니다.
# map
seq = [1, 2, 3, 4, 5]
결과 = 목록 (map (lambda var : var * 2, seq))
print (결과)
[2, 4, 6, 8, 10]
필터 함수는지도와 마찬가지로 목록과 규칙을 사용하지만 각 요소를 부울 필터링 규칙과 비교하여 원래 목록의 하위 집합을 반환합니다.
# 필터
seq = [1, 2, 3, 4, 5]
결과 = 목록 (필터 (람다 x : x> 2, seq))
print (결과)
[3, 4, 5]
Numpy 배열을 쉽고 빠르게 생성하려면 대들보와 빈 공간 함수를 살펴보십시오. 각각은 특별한 목적을 가지고 있지만 범위를 사용하는 대신 여기에 호소하는 것은 NumPy 배열을 출력한다는 것입니다. NumPy 배열은 일반적으로 데이터 과학에서 사용하기가 더 쉽습니다.
Arange는 주어진 간격 내에서 고른 간격의 값을 반환합니다. 시작 및 중지 지점과 함께 필요한 경우 단계 크기 또는 데이터 유형을 정의 할 수 있습니다. 정지 점은 'cut-off'값이므로 어레이 출력에 포함되지 않습니다.
# np.arange (시작, 중지, 단계)
np.arange (3, 7, 2)
배열 ([3, 5])
Linspace는 매우 유사하지만 약간의 비틀어 짐이 있습니다. Linspace는 지정된 간격 동안 균등 한 간격의 숫자를 반환합니다. 그래서 시작과 중단 지점, 그리고 많은 값들과 함께, linspace는 NumPy 배열에서 당신을 위해 그것들을 고르게 배치 할 것입니다. 이는 특히 데이터 시각화 및 플로팅 할 때 축을 선언하는 데 유용합니다.
# np.linspace (시작, 정지, 숫자)
np.linspace (2.0, 3.0, num = 5)
배열 ([2.0, 2.25, 2.5, 2.75, 3.0])
Pandas에서 열을 삭제하거나 NumPy 행렬에서 값을 합산 할 때이 문제가 발생할 수 있습니다. 그렇지 않다면 반드시 언젠가는 가능할 것입니다. 지금 열을 삭제하는 예제를 사용합니다.
df.drop ( '열 A', 축 = 0)
df.drop ( '열 A', 축 = 1)
실제로 내가 왜 내가 축을 선언했는지 알기 전에이 코드 줄을 몇 번이나 썼는지 모르겠습니다. 위에서 언급 한 것처럼 추측 할 수 있듯이, 열을 처리하려면 축을 1로 설정하고 행을 원하면 0으로 설정하십시오. 근데 왜 이래? 내가 좋아하는 추론, 또는 적어도 내가 이것을 어떻게 기억하는지 :
df.shape
(행 수, 열 수)
Pandas 데이터 프레임에서 shape 속성을 호출하면 행 수를 나타내는 첫 번째 값과 열 수를 나타내는 두 번째 값이 포함 된 튜플이 반환됩니다. 파이썬에서 이것이 어떻게 인덱싱되는지 생각하면 행 값은 0이고 열 값은 1입니다. 우리가 축 값을 선언하는 것과 같습니다. 미친, 맞지?
SQL에 익숙하다면 이러한 개념이 훨씬 쉽게 나타날 것입니다. 어쨌든,이 기능은 본질적으로 특정 방식으로 데이터 프레임을 결합하는 단지 방법입니다. 어떤 시간에 어느 것이 가장 사용하기 좋은지 추적하는 것은 어려울 수 있으므로 검토해 보겠습니다.
Concat을 사용하면 사용자가 축 정의 방법에 따라 하나 이상의 데이터 프레임을 아래 또는 옆에 서로 추가 할 수 있습니다.
Merge는 기본 키 역할을하는 특정 공통 열에 여러 데이터 프레임을 결합합니다.
조인은 병합과 마찬가지로 두 개의 데이터 프레임을 결합합니다. 그러나 지정된 열이 아닌 인덱스를 기준으로 조인합니다.
특정 문법과 더 구체적인 예는 물론 훌륭한 몇 가지 특수한 경우에 대한 훌륭한 판다 문서 를 확인하십시오 .
적용을 맵 함수라고 생각하면 Pandas DataFrames 용으로, 더 구체적으로는 Series 용으로 만들어야합니다. 친숙하지 않다면 Series는 NumPy 배열과 거의 비슷합니다.
Apply는 지정한 내용에 따라 열 또는 행의 모든 요소에 함수를 보냅니다. 루프가 전혀 필요없이 전체 DataFrame 열에서 값의 형식을 지정하고 조작하는 경우 유용 할 수 있습니다.
마지막으로 피벗 테이블이 가장 중요합니다. Microsoft Excel에 익숙하다면 어떤면에서는 피벗 테이블에 대해 들어 보셨을 것입니다. Pandas에 내장 된 pivot_table 함수는 스프레드 시트 스타일 피벗 테이블을 DataFrame으로 만듭니다. 피벗 테이블의 수준은 결과 DataFrame의 인덱스와 열에있는 MultiIndex 개체에 저장됩니다.
그게 지금이야. 이 두 개 개요가 데이터 과학을 위해 Python을 사용할 때 자주 만나는 중요하지만 다소 까다로운 메소드, 함수 및 개념에 대해 효과적으로 메모리를 조깅했기를 바랍니다. 개인적으로, 나는이 글을 쓰고 간단한 말로설명하려고해도 나를 도와 줬다.