Price Impact of Order Book Imbalance in Cryptocurrency Markets -번역

Image for post

~의 사진젠 시어 도어의 위에Unsplash

Cryptocurrency 시장에서 주문 장 불균형의 가격 영향

190 만 건의 주문서 관찰에서 무엇을 배울 수 있습니까?

불균형 주문서가 책의 얇은면으로 가격 변동을 유발하는지 조사합니다.즉,이 가설에 의해 지정가 주문 장부가 입찰 측에 비해 호가 측에 게시 된 양이 많을 때 가격이 하락하고, 주문 장부가 입찰 측에서 더 무거 우면 가격이 상승합니다.우리는이 가설을 테스트하고 주문 장 불균형 정보를 이용하여 ETHUSD 시장의 가격 변동을 수익성있게 예측할 수 있는지 평가합니다.

주문 장 불균형

우리는 문헌을 따릅니다.Cartea et al.(2015), 주문 장 불균형을 다음과 같이 정의하십시오.

Image for post

방정식 1

어디시간을 인덱싱하고,V입찰 (위 첨자) 또는 질문 (위첨자) 및ρ를 계산하기 위해 고려되는 주문서의 깊이 수준입니다..그림 1은 불균형을 계산하는 방법의 예를 보여줍니다.ρ주어진 주문서에 대해.

Image for post

그림 1 : 주문 장 불균형.L = 4의 깊이를 보여주는 Coinbase 웹 사이트의 스크린 샷을 기반으로 한 ETHUSD에 대한 지정가 주문서의 예.L = 1의 불균형은 (38.7828–19.1463) / (38.7828 + 19.1463) ≈ 0.33으로 계산됩니다.이 기사에서 조사한 가설에 따르면 0보다 큰 값은 가격 상승 압력에 해당합니다.L = 2의 경우 불균형을 계산하기 위해 2 개의 최적 가격, 즉 (38.7828 + 1.86–19.1463-0.2505) / (38.7828 + 1.86 + 19.1463 + 0.2505) ≈ 0.36을 더합니다.

ρ-1에 가까운-값은 시장 조성자가 입찰 수량에 비해 대량의 수량을 게시 할 때 획득됩니다.ρ 값이 1에 가까우면 요청 측에 비해 주문서의 입찰 측에 대량이 있음을 의미합니다.불균형이 0이면 주문서가 주어진 수준에서 완벽하게 균형을 이룹니다..가설은 낮은 불균형 숫자 (& lt; 0)는 음의 수익을 의미하고, 높은 불균형 숫자 (& gt; 0)는 양의 수익을 의미합니다. 즉, 가격이 불균형 방향으로 이동 함ρ.

연구자들은 주식 시장 데이터에서 무엇을 결론 내립니까?

Cont et al.(2014)미국 주식 데이터를 사용하여 주문 흐름 불균형의 가격 영향과 “주문 흐름 불균형”과 가격 변동 사이의 선형 관계가 있음을 보여줍니다.저자는 주문 흐름 불균형을 주어진 기간 동안 들어오는 주문을 집계하여 측정 된 공급과 수요 사이의 불균형으로 정의합니다.선형 모델의 R²는 약 70 %입니다.이 연구는 과거 주문 흐름 (불균형 측정을 초래 함)을 고려하고이를 동일한 기간 동안의 가격 변동과 비교합니다.따라서 결론은 주문 흐름 불균형이 미래 가격을 예측하는 것이 아니라 과거 기간 동안 계산 된 주문 흐름 불균형이 같은 기간 동안의 가격 변화를 설명한다는 것입니다.따라서이 연구는 미래 가격에 대한 현재 주문 흐름 불균형에 대한 직접적인 통찰력을 보여주지 않습니다.실란 티 예프 (2018)미디엄 기사에서 BTC-USD 주문서 데이터를 사용하여이 연구 결과를 확인합니다.

Lipton et al.(2013), 우리 불균형 측정ρL = 1다음 틱까지의 가격 변동은 주문 장 불균형의 선형 함수에 의해 잘 근사화 될 수 있지만
(1) 변경이 매도 매도 스프레드보다 훨씬 낮고
(2) 방법은 “그 자체로는 직접적인 통계적 차익 거래 기회를 제공하지 않습니다”.

Cartea et al.(2018)에 의해 측정 된 더 높은 주문 책 불균형을 발견하십시오ρ그 뒤에는 시장 주문량이 증가하고 불균형은 시장 주문이 도착한 직후 가격 변화를 예측하는 데 도움이됩니다.

그들의 책에서Cartea et al.(2015)과거 불균형과 가격 변동의 상관 관계가 괜찮은 특정 주식에 대해 존재합니다 (10 초 간격 동안 약 25 %).

스토이 코프 (2017)통합하는 중간 가격 조정을 정의합니다.
주문 장 불균형 및 매도 매도 스프레드.그는 결과가
가격 (중가 + 조정)은 중가 및 볼륨 가중 중가보다 중가의 단기 변동에 대한 더 나은 예측 변수입니다.이 연구에서 주문 장 불균형은 우리의 불균형과 약간 다릅니다. 특히 공식 (1)은 지명자에서 요청 볼륨을 제거하고 레벨을 고정하여 조정됩니다.이 방법은 현재 정보를 조건으로 미래의 중간 가격에 대한 기대치를 추정하며 수평선과 무관합니다.예측이 가장 정확한 경험적 지평은 평가 된 주식에 대해 3 ~ 10 초 범위입니다.조정 된 중간 가격은 제시된 데이터에 대한 입찰과 요청 사이에 존재하며, 이는 방법 자체가 통계적 차익 거래 방법을 제시하지 않지만 저자가 언급했듯이 알고리즘을 개선하는 데 사용할 수 있음을 나타냅니다.

이 연구에서는 최적의 매도 호가 가격 (L = 1),
우리는 더 긴 수평선을보고 순서를 계산하기 위해 깊이 5를 조사합니다.
불균형.이 연구의 데이터는 주식 시장 데이터를 사용합니다.
주목할만한 예외실란 티 예프 (2018), 우리는 암호 화폐 주문서를 조사합니다.

데이터

오더 북 데이터는 암호 화폐 거래소에서 공개 API를 통해 조회 할 수 있습니다.캔들 데이터 이외의 과거 데이터는 일반적으로 사용할 수 없습니다.따라서 2019 년 5 월부터 12 월까지 (2019–05–21 01:46:37 ~ 2019–12–18 18:40:59) 10 초 간격으로 Coinbase에서 ETHUSD에 대한 주문 장 데이터를 최대 5 단계까지 수집했습니다.이것은 1,920,617 개의 관측치에 해당합니다.데이터에 약간의 차이가 있습니다 (예 : 시스템 다운 타임으로 인해 분석에서 설명 함).두 개의 후속 주문서 관찰 간의 타임 스탬프 차이가 11 초보다 큰 592 개의 간격을 계산합니다.두 주문서 사이의 타임 스탬프는 연속적인 Websocket 스트림이 아닌 반복적 인 REST 요청을 사용하여 데이터를 수집했기 때문에 데이터에서 정확히 10 초가 아닙니다.

오더 북 불균형 분배

가격 변동과 주문 장 불균형 간의 관계를 살펴보기 전에 다양한 주문 장 수준에 대한 불균형 분포를 살펴 봅니다.

주문 장 불균형을 계산합니다.ρ모든 관측치와 방정식 1에 따라 5 가지 레벨에 대해 다음 속성을 찾습니다.

  1. 에서L = 1불균형은 종종 매우 뚜렷하거나 전혀 존재하지 않습니다.더 높이, 균형 잡힌 주문 장부가 더 빈번할수록 (즉,ρ≈0).
  2. 불균형은 자기 상관입니다.레벨이 깊을수록, 자기 상관이 높을수록

그림 2와 3에서 첫 번째 결과를, 그림 4에서 두 번째 결과를 제시합니다.

그림 2는 레벨 1에 대한 오더 북 불균형의 히스토그램을 보여줍니다.이 레벨에서 오더 북은 대부분 균형이 잡혀 있거나 (0에 가까움) 매우 불균형 (-1 또는 1에 가까움)되어 있습니다.

Image for post

그림 2 : 주문 장 불균형의 히스토그램.이 그림은 레벨 1의 불균형을 보여줍니다. 즉, 불균형을 계산하기 위해 최적가와 최적가 만 고려한 것입니다.

불균형을 계산하기 위해 주문 장 깊이를 늘리면 그림 3에서 볼 수 있듯이 주문 장의 균형이 더 높아집니다.

Image for post

그림 3 : 다양한 주문 장 깊이에 대한 주문 장 불균형.이 그림은 레벨 2 (왼쪽 상단), 3 (오른쪽 상단), 4 (왼쪽 하단) 및 5의 불균형을 보여줍니다. 더 많은 수준의 깊이를 고려할 때 주문서가 더 균형을 이룹니다.

그림 4는 자기 상관 함수 (ACF)를 보여줍니다.일치Cuartea et al.(2015)불균형은 자기 상관성이 높다는 것을 알 수 있습니다.주어진 지연에 대한 상관 관계는 더 높은 경향이 있으며 주문 장 깊이가 더 큽니다.불균형 계산을 위해.

그림 4 : 고정 주문 장 불균형.상단 플롯은 레벨 1에서 계산 된 불균형에 대한 자기 상관 함수를 보여줍니다. 하단은 레벨 5에 대해 계산 된 불균형에 대한 자기 상관 함수를 보여줍니다. 불균형을 계산할 때 깊이를 늘리면 주문 장 불균형의 자기 상관이 더 높습니다.

주문 장 불균형이 가격 변동을 예측하는 데 도움이됩니까?

이제 ρ와 미래 중간 가격의 상관 관계를 조사합니다.중간 가격은 최고 입찰 가격과 최저 요청 가격의 평균으로 정의됩니다.

먼저 주문 장 불균형을 관찰 할 때마다 중간 가격의 p- 기간 선행 로그 수익을 계산합니다.그런 다음 이러한 수익률과 기간 초에 관찰 된 주문 불균형 간의 상관 관계를 계산합니다.p-주기가 평균 11 초 (1주기 ≈ 10 초)보다 긴 관측치를 제거합니다.

그림 5와 6은 수익이 측정되는 기간의 함수로서 미래 수익률과 불균형의 상관 관계를 보여줍니다.우리는 다음과 같이 결론을 내립니다.

  1. 상관 관계가 낮습니다.
    예 :Cont et al.(2014)가격 영향과 동일한 기간 동안의 주문 흐름 불균형 측정 사이에 약 70 %의 R²를보고합니다.선형 일 변량 회귀 모델의 경우R²는 상관 관계를 의미합니다.sqrt의(0.70) = 0.84.그러나 저자는 가격 인상을같은 기간주문 흐름 불균형으로 인해이 방법은 가격 예측을 제공하지 않습니다.
  2. 불균형 측정ρ불균형 관찰에 가까운 가격에 대해 더 예측 가능합니다 (p가 증가하면 상관 관계가 감소 함).
  3. 깊이 수준이 높을수록불균형을 계산하기 위해 고려되는 주문서의 불균형 측정치가 미래 가격 변동과 더 많이 연관 됨
Image for post

그림 5 : 주문 불균형 (L = 1)과 중간 가격 수익률을 앞선 p 기간의 상관 관계.불균형 측정 값과 수익률의 상관 관계는 단기 가격에서 가장 높습니다.
Image for post

그림 6 : 주문 불균형 (L = 5)과 중간 가격 수익률을 앞선 p 기간의 상관 관계.그림 5와 비교할 때 데이터는 더 깊은 주문 장 레벨 (L)로 계산 된 주문 장 불균형이 낮은 L로 계산 된 것보다 더 나은 가격 예측 변수임을 시사합니다.

깊이에 대한 해당 플롯L = 2…에4간결하게 보여주지 않는 것은 이러한 결과와 일치합니다.이러한 플롯에 대한 Python 코드는 부록 A2를 참조하십시오.

가격 불확실성

위에 제시된 상관 관계는 불균형이 더 높은낮은 가격으로 계산 된 불균형보다 가격 상승과 더 나은 상관 관계.더 많은 단기 가격은 ρ와 더 높은 상관 관계를 갖습니다.이를 바탕으로 우리는 한 기간 앞선 예측 (≈10 초)만으로 분석을 계속합니다.

상관 관계는 평균 측정 값입니다. 중간 가격 움직임의 불확실성은 어떻습니까?

그림 7과 8은 기간 초에 관찰 된 불균형에 대한 1주기 로그 수익률을 보여줍니다.L = 1L = 5각기.레벨 1 불균형 플롯 (그림 7)은 불균형이 크거나 (-1에 가까움 또는 1에 가까움) 0 일 때 로그 반환의 더 큰 변동이있는 것처럼 보이며, 이는 레벨 5 불균형에 대해 관찰되지 않습니다 (그림 8).그러나이 플롯의 더 큰 변동은 경계와 0 (그림 2 및 3의 히스토그램에서 볼 수 있음)에서 L = 1에 대해 더 많은 관측치를 가지고 있다는 사실에서 기인합니다. 수익률의 표준 편차를 계산해도 더 높은 것이 확인되지는 않습니다.다음 단락에서 볼 수 있듯이 극단에서의 차이.

Image for post

그림 7 : L = 1에 대한 1주기 수익률 대 불균형.플롯의 각 점은 주문 불균형 (x 축)을 관찰 한 후 한 기간 동안 관찰 된 수익률 (y 축)을 나타냅니다.
Image for post

그림 8 : L = 5에 대한 한 기간 수익률 대 불균형.

불균형 체제

우리는 따른다Cartea et al.(2018)불균형 측정 값을 지점을 따라 균등하게 배치되도록 선택한 5 개 체제로 분류합니다.

θ = {-1, -0.6, -0.2, 0.2, 0.6, 1}.

즉, 정권 0은 -1과 -0.6 사이의 가격 불균형을 가지고 있고, 정권 1은 -0.6에서 -0.2까지 등등입니다.표 1은 5 개 체제 모두에 대한 1주기 선행 가격 수익률의 표준 편차를 보여줍니다.

표 1 : 정권 당 1 기 중간 가격 수익률의 표준 편차.

표 1은 이전 단락의 질문을 다룹니다. 극심한 불균형 (정권 0 및 정권 4)에서 중간 가격 차이는 다음과 같습니다.아니주문 장 깊이 레벨 L = 1이 레벨 5보다 높습니다.

이제 우리는이 분석을 추가로 취하고 신뢰 구간을 구성하여 주어진 체제에서 예상되는 중간 가격 수익률에 대한 확률 적 한계를 추정합니다.이 계산에 대한 자세한 내용은 부록 A1에 나와 있습니다.

Image for post

그림 9 : 레벨 1 (어두움) 및 5 (밝음) 불균형에 대한 예상 중간 가격 수익률에 대한 신뢰 구간.수직 마커는 기대 수익의 포인트 추정치를 보여주고, 수평선은 기대 수익의 99 % 신뢰 구간의 경계를 나타냅니다.진한 선은 불균형 수준 1의 간격을, 밝은 선은 수준 5의 간격을 나타냅니다.

그림 9는 주어진 체제에서 예상되는 중간 가격 수익률에 대한 신뢰 구간을 보여줍니다.실제로 수익률은 낮은 불균형 수 (정권 0 및 1)에 대해 평균 음수이고 높은 불균형 수 (정규 3 및 4)에 대해 양수임을 알 수 있습니다.불균형이 더 높은 수준으로 구성 될 때 평균은 순서 불균형 방향으로 더 많이 이동합니다. 예를 들어, 영역 4에서 불균형이 다음과 같이 계산 될 때 1주기 선행 수익의 평균L = 1(진한 선)은 레벨의 깊이에서 계산을 수행 할 때보 다 작습니다.L = 5(밝은 선).표시된 신뢰 구간은 예상 값의 불확실성을 반영합니다.표 1의 표준 편차는이 예상 값 주변 수익률의 불확실성에 대해 알려줍니다.

이 분석은 상관 분석의 결과를 확인합니다. 불균형과 1주기 선행 수익 사이에는 양의 상관 관계가 있지만 약한 상관 관계가 있으며, 더 깊은 수준 (L)은 약간 더 예측 가능한 불균형 측정을 생성합니다.

경험적 확률

다음 기간 중간 가격이 우리가 어떤 불균형 체제에 속해 있는지 알면서 상승, 고정 또는 하락할 확률은 얼마입니까?

이를 확인하기 위해 모든 주문 불균형을 영역 0-4로 버킷 화 한 다음 음수 수익률, 0 수익률 및 양의 1 기간 수익률을 계산하고이 개수를 관측치 수로 나누어 확률에 대한 추정치를 구합니다.중간 가격 움직임.

그림 10과 11은 다음에 대해 계산 된 불균형에 대한 경험적 확률을 보여줍니다.L = 1L = 5각기.수치는 우리의 초기 가설을 확인합니다.

주문 장 불균형 값이 낮은 제도에서는 중간 가격이 하락할 가능성이 더 높으며 그 반대의 경우도 마찬가지입니다.

1 단계 (그림 10) 또는 5 단계 (그림 11)만으로 불균형을 계산할 때 경험적 확률에 질적으로 차이가 없음을 알 수 있습니다.우리는 더 높은 수준에 대한 확률이L = 5보다 차별적이다L = 1, 이는 원하는 속성입니다.

부록 A3에서 우리는 또한 0이 아닌 가격 변동을 관찰 할 때 조건부 확률을 보여줍니다.가격이 움직이면 레벨 5 불균형이 레벨 1 불균형보다 약간 더 나은 예측 변수입니다.

Image for post

그림 10 : L = 1에서 중간 가격 움직임에 대한 경험적 확률.
Image for post

그림 11 : L = 5에서 중간 가격 움직임에 대한 경험적 확률.

수익성

Image for post

~의 사진조던 롤랜드의 위에Unsplash

많은 암호 화폐 거래소에는 10bps의 거래 수수료가 있습니다 (그리고 우리는 2 번의 거래를 실행할 것입니다).신뢰 구간 (그림 9)에서 고려한 10 초 기간 동안 중간 가격 수익률이 10 베이시스 포인트 미만임을 알 수 있습니다.따라서 차이를 고려하지 않고 기대 수익률로 판단하면 주문 불균형이 매도-매도 스프레드를 조사하지 않고서도 자체적으로 수익성있는 전략을 의미하는 것은 아니라는 결론을 내릴 수 있습니다.

이 결과를 확인하기 위해 다른 각도에서 수익성을 살펴보고 그림 10 및 11과 유사하게 10 베이시스 포인트보다 큰 가격 변동의 경험적 확률을 계산합니다. 즉, 절대적으로 10 베이시스 포인트 미만인 모든 움직임을 다음과 같이 계산합니다.플랫.표 3은 주문 장 수준이 1과 5 모두 인 불균형 계산의 경우 대부분의 거래가 모든 체제에서 10 베이시스 포인트의 절대 수익 이하로 끝날 것임을 보여줍니다.이것은 전략이 자체적으로 통계적 차익 거래를 허용하지 않음을 확인합니다.

표 3 : 주문 장 불균형 체제 당 경험적 확률.이 표는 주문 장 불균형 관찰 (정권 0 ~ 4) 후 한 기간 내에 상승, 하락 또는 10bps (플랫)보다 작은 상대 이동에 대한 경험적 확률을 보여줍니다.열 확률 L1은 레벨 1 주문 장 불균형에 대해 계산 된 경험적 확률과 레벨 5 주문 장 불균형에 대해 L5를 보여줍니다.

결론

ETHUSD 주문 장 및 중간 가격 움직임에 대한 우리의 분석은 주식 시장의 주문 장 불균형에 대한 문헌의 결과와 일치합니다.

  • 불균형이 -1에 가까울 때 매도 압력이 있고 단기적으로 중가가 하락할 가능성이 더 높고, 불균형이 1에 가까울 때 매수 압력이 있고 중간 가격이이동.
  • 불균형 조치의 가격 영향은 수명이 짧으며 시간이 지남에 따라 빠르게 악화됩니다.
  • 불균형 측정 자체는 통계적 차익 거래에 직접 사용할 수 없지만 알고리즘을 개선하는 데 사용할 수 있습니다.

오더 북 불균형에 대한 문헌에서 인용 한 것 외에도 최대 5 개 레벨을 사용하여 계산 된 오더 북 불균형을 분석 한 결과 불균형 측정 값과 미래 가격 움직임과의 상관 관계가 레벨에 따라 증가한다는 것을 발견했습니다 (평가 된 5 개 레벨에 대해)..그러나 그림 9의 기대 값과 신뢰 구간에서 높은 수준은 수익 방향을 약간 개선 할 뿐이며, 더 높은 수준의 주문 장 깊이로 작업 할 때 경험적 확률이 약간 더 차별적이라는 것을 관찰했습니다.따라서, 더 깊은 레벨 (L & gt; 1)에서 추가 된 값은 아마도 더 높은 복잡성을 정당화하지 않을 것입니다 (더 깊은 레벨을 처리하는 것은 일반적으로 고주파 알고리즘에 대해 더 많은 시간이 소요됨).

마지막으로 불균형과 가격 변동 사이의 가장 강력한 관계가 데이터에서 사용할 수있는 가장 짧은 기간 (10 초) 내에 있음을 발견했습니다.따라서 틱 데이터를 살펴보면이 기사에서 살펴본 10 초의 기간과 달리 더 많은 통찰력을 얻을 수 있다고 결론지었습니다.

참고 문헌

Cartea, A., R. Donnelly 및 S. Jaimungal (2018).주문 장 신호로 거래 전략을 강화합니다.응용 수학 금융25 (1), 1-35.

Cartea, A., S. Jaimungal 및 J. Penalva (2015).알고리즘 및 고주파 거래.캠브리지 대학 출판부.

Cont, R., A. Kukanov 및 S. Stoikov (2014).오더 북 이벤트의 가격 영향.Journal of Financial Econometrics12 (1), 47-88.

Lipton, A., U. Pesavento 및 M.G. Sotiropoulos (2013).지정가 주문서의 무역 도착 역학 및 견적 불균형.arXiv 프리 프린트 arXiv : 1312.0514.

Paolella, MS (2007).중간 확률 : 계산적 접근.John Wiley & amp;자제.

Silantyev, E. (2018).암호 화폐 시장의 주문 흐름 분석.매질.

Stoikov, S. (2017).마이크로 가격 : 미래 가격에 대한 높은 빈도의 추정치.SSRN 2970694에서 사용 가능합니다.

부록

A1.신뢰 구간

우리는 주어진 체제에 있다는 조건으로 로그 반환의 평균에 관심이 있습니다.주어진 체제에서 예상되는 중간 가격 수익률에 대한 확률 적 한계를 추정 할 수있는 신뢰 구간을 구성합니다.여기에 제시된 방법은 표준입니다 (예 : Paollela 2017 참조).

에 의해중심 한계 정리, 표본 평균

Image for post

방정식 A.1

i.i.d.랜덤 변수Xi정상입니다 :

Image for post

방정식 A.2

어디Xi대표하다i = 1,…, n평균이있는 분포에서 도출 된 관측치μ및 표준 편차σ, 위첨자가있는 화살표분포 수렴을 나타내고 N (0,1)은 표준 정규 분포를 나타냅니다.방정식 A.2를 표현할 수 있습니다.비공식적으로

Image for post

방정식 A.3

평균과 분산의 추정치로 이어지는

Image for post

방정식 A.4

어디에스표본 표준 편차입니다.이제 수준 (1-α)에 대한 신뢰 구간은 다음과 같이 지정됩니다.

Image for post

방정식 A.5

z (α)다음보다 큰 값을 관찰 할 확률이되도록 표준 정규 밀도 곡선의 x 축에있는 점을 나타냅니다.z (α)이하-z (α)α와 같습니다.

이 형태의 중앙 한계 정리를 적용하려면 중간 가격 수익률이i.i.d..중간 가격 수익률의 자기 상관은 1 % 미만이며 (A2 참조) 다른 분포에서 비롯되거나 상관 관계에 반영되지 않은 다른 종속성을 가져야한다는 표시가 없으므로 다음을 가정 할 수 있습니다.i.i.d.재산 보유 및 사용 방정식 A.4.

scipy.stats를 st로 가져 오기
numpy를 np로 가져 오기
def Estimated_confidence (shifted_return,
vol_binned,
volume_regime_num,
alpha = 0.1) :
"" "
주어진 알파에 대한 신뢰 구간 추정
: paramshifted_return : 계산할 반환 배열
신뢰 구간
평균의 NaN 포함 가능
:유형shifted_return : 길이 n의 부동 소수점 배열
: paramvol_binned : 볼륨 체제.항목 i는
volume regime associated with
shifted_return[i]
:typevol_binned : 길이 n의 부동 배열
: param volume_regime_num: equals np.max(vol_binned)+1
:유형volume_regime_num : 정수
:반환: confidence intervals for mean of the returns per regime
: rtype: float array of size volume_regime_num x 2
"""
Confident_interval = np.zeros ((volume_regime_num, 2))
z = st.norm.ppf (1- 알파)
for regime_num in range(0, volume_regime_num):
m = np.nanmean (shifted_return [vol_binned == regime_num])
s = np.nanstd (shifted_return [vol_binned == regime_num])
sqrt_n = np.sqrt(np.sum(vol_binned == regime_num))
confidence_interval[regime_num, :] = [m - z * s/sqrt_n,
m + z * s / sqrt_n]
return confidence_interval

A2. Plot the autocorrelation function

아래의 Python 코드 조각은 자기 상관과 플롯을 계산합니다.계산은 11 초보다 큰 시계열의 (하드 코딩 된) 간격을 설명합니다.

numpy를 np로 가져 오기
datetime 가져 오기 datetime에서
import plotly.express as px
def shift_array(v, num_shift):
'' '
배열을 왼쪽 (num_shift & lt; 0) 또는 오른쪽 num_shift & gt; 0으로 이동
: paramv : 이동할 float 배열
:유형v : 어레이 1d
: param num_shift: number of shifts
:typenum_shift : 정수
:반환: 원래 배열과 동일한 길이의 부동 배열,
num_shifts 요소로 이동, np.nan
경계의 항목
: rtype: array
'''
v_shift = np.roll (v, num_shift)
num_shift & gt;0 :
v_shift [: num_shift] = np.nan
그밖에:
v_shift [num_shift :] = np.nan
반환 v_shift
def plot_acf(v, max_lag, timestamp):
'' '
자기 상관 함수를 플로팅하기위한 Figure 생성
:parammax_lag : 자기 상관을 중지 할시기
계산 (최대 max_lag 시차까지)
: param timestamp: timestamp array of length n
with entry i corresponding to timestamp of
entry i in v, used to remove time-jumps
v : n 개의 관측치가있는 배열
:return: 음모 그림
'' '
corr_vec = np.zeros (max_lag, dtype = float)
for k in range(max_lag):
v_lag = shift_array (v, -k-1)
timestamp_lag = shift_array (타임 스탬프, -k-1)
dT = (timestamp - timestamp_lag) / (k+1)
msk_time_gap = dT & gt;11000.0
마스크 = ~ np.isnan (v) & amp;~ np.isnan (v_lag) & amp;~ msk_time_gap
corr_vec [k] = np.corrcoef (v [마스크], v_lag [마스크]) [0, 1]
fig_acf = px.bar (x = 범위 (1, max_lag + 1), y = corr_vec)
fig_acf.update_layout (yaxis_range = [0, 1])
fig_acf.update_xaxes (title = "Lag")
fig_acf.update_yaxes(title="ACF")
return fig_acf

A3. Conditional Empirical Probabilities

그림 A1과 A2는 0이 아닌 수익률을 관찰 할 때 중간 가격 상승 / 하강 이동의 경험적 확률을 보여줍니다.수준 5 불균형은 더 나은 차별 력을 보여줍니다. 즉, 영역 0과 5에서 확률은 수준 1보다 더 극단적입니다.

If the mid-price moves, the imbalance with L=5 is a better indicator of the price direction than the imbalance of L=1.

Image for post

그림 A1 : 중간 가격 움직임에 대한 조건부 경험적 확률 (불균형 깊이 수준 1).
Image for post

그림 A2 : 중간 가격 움직임에 대한 조건부 경험적 확률 (불균형 깊이 레벨 5).

Towards Data Science 편집자의 참고 사항 :독립적 인 저자가 우리의규칙 및 지침, 우리는 각 저자의 기여를 보증하지 않습니다.전문적인 조언을 구하지 않고 작가의 작품에 의존해서는 안됩니다.우리를 참조하십시오독자 용어자세한 내용은.

Real-time dashboard in Python -번역

Python의 실시간 대시 보드

스트리밍 및 새로 고침

Image for post

데이터 과학자는 데이터 시각화를 사용하여 데이터를 전달하고 통찰력을 생성합니다.데이터 과학자는 의미있는 시각화 대시 보드, 특히 실시간 대시 보드를 만드는 방법을 알아야합니다.이 기사에서는 Python에서 실시간 대시 보드를 얻는 두 가지 방법에 대해 설명합니다.

  • 먼저 스트리밍 데이터를 사용하고 자동 업데이트되는 스트리밍 대시 보드를 만듭니다.
  • 둘째, 대시 보드를 새로 고쳐야 할 때마다 “새로 고침”단추를 사용하여 대시 보드를 새로 고칩니다.

데모 목적으로 플롯과 대시 보드는 매우 기본적이지만 실시간 대시 보드를 수행하는 방법에 대한 아이디어를 얻을 수 있습니다.

이 기사의 코드는 다음에서 찾을 수 있습니다.realtime_dashboard.ipynbrealtime_dashboard.py.이 두 파일의 내용은 서로 다른 형식으로 완전히 동일합니다.

데이터 소스

방법을 보여주기 위해 실제 API로이 대시 보드를 만들고이 기사의 예로 OpenWeather API의 날씨 데이터를 사용합니다.

이 기사에 언급 된 코드를 시험 해보고 싶다면 OpenWeather 날씨 API에 액세스해야합니다.에서 등록 할 수 있습니다.날씨 웹 사이트 열기그런 다음API 키.

설정

코드를 시작하기 전에 필요한 패키지를 설치하겠습니다.나는 만들었습니다environment.yml파일.이 파일을 다운로드하고 다음을 실행하여 환경을 만들고 활성화하십시오.

conda env create -f environment.yml
conda 활성화 realtime_dashboard

또는 모든 패키지를 직접 설치하려면conda install datashader holoviews hvplot 노트북 numpy pandas panel param requests streamz.문제가 발생하면 내가 사용중인 Python 버전 및 패키지 버전이 environment.yml에 기록됩니다.

패키지 가져 오기

여기에서이 기사에 사용 된 패키지를 가져옵니다.

스트리밍 데이터 및 대시 보드

먼저 함수를 만듭니다.weather_dataOpenWeather API를 사용하여 도시 목록에 대한 날씨 데이터를 가져옵니다.출력은 각 도시를 나타내는 각 행이있는 pandas 데이터 프레임입니다.

둘째, 우리는Streamz샌프란시스코의 날씨 데이터를 기반으로 스트리밍 데이터 프레임을 만듭니다.함수스트리밍 _ 날씨 _ 데이터콜백 함수로 사용됩니다.주기적 DataFrame만드는 기능Streamz스트리밍 데이터 프레임df.Streamz문서화 방법주기적 DataFrame공장:

streamz는이를 위해 PeriodicDataFrame이라고하는 고급 편의 클래스를 제공합니다.PeriodicDataFrame은 Python의 asyncio 이벤트 루프 (Jupyter 및 기타 대화 형 프레임 워크에서 Tornado의 일부로 사용됨)를 사용하여 사용자가 제공 한 함수를 정기적으로 호출하여 결과를 수집하고 나중에 처리 할 수 있도록합니다.

https://streamz.readthedocs.io/en/latest/dataframes.html#streaming-dataframes

그만큼Streamz스트리밍 데이터 프레임df값은 30 초마다 업데이트됩니다 (간격 = ’30 ').

Image for post

셋째, 우리는hvPlot플롯하기 위해Streamz데이터 프레임을 사용한 다음패널플롯을 구성하고 모든 것을 대시 보드에 넣습니다.사용 방법에 대해 더 알고 싶다면hvPlot플롯Streamz데이터 프레임, 참조하십시오hvPlot 문서.

다음은 대시 보드의 모습입니다.스트리밍 데이터 프레임은 30 초마다 업데이트되므로이 대시 보드도 30 초마다 자동으로 업데이트됩니다.여기에서 온도는 변했지만 습도와 풍속은 변하지 않았습니다.

Image for post

이제 스트리밍 데이터 프레임과 스트리밍 대시 보드를 만드는 방법을 알았습니다.

더 자세히 알고 싶다면 여기 멋진 비디오가 있습니다.지도 시간제 친구 Jim Bednar 박사의 스트리밍 대시 보드에서그것을 확인하시기 바랍니다!

대시 보드 새로 고침

때로는 스트리밍 대시 보드가 실제로 필요하지 않습니다.대신 대시 보드가 표시 될 때마다 새로 고칠 수 있습니다.이 섹션에서는 대시 보드에서 “새로 고침”버튼을 만들고 “새로 고침”을 클릭 할 때마다 새 데이터로 대시 보드를 새로 고치는 방법을 보여 드리겠습니다.

먼저 간단한 함수를 만들어 보겠습니다weather_plot도시 이름이 지정된지도에 날씨 데이터를 플로팅하고 플롯과 데이터를 모두 반환합니다.

Image for post

플로팅 기능이 준비되면 새로 고칠 수있는 대시 보드를 만들 수 있습니다.나는param.Action버튼을 클릭 할 때마다 업데이트를 트리거하는 함수새롭게 하다.또한param.ObjectSelector플로팅에 관심이있는 데이터 프레임 열의 드롭 다운 메뉴를 생성하고param.ObjectSelector드롭 다운 메뉴에서 다른 옵션을 선택할 때마다 업데이트를 트리거합니다.그런 다음@ param.depends ( 'action', 'select_column')데코레이터는get_plot클릭 할 때마다 다시 실행되는 기능새롭게 하다버튼을 누르거나 다른 열을 선택하십시오.

새로 고침 대시 보드는 다음과 같습니다.

Image for post

마지막으로패널우리가 만든 두 대시 보드를 결합합니다.

전개

최종 대시 보드창유리이다패널다음을 실행하여 제공 할 수있는 객체입니다.

panel serve realtime_dashboard.py

또는

패널 서비스 realtime_dashboard.ipynb

자세한 내용은패널배포, 참조하십시오패널 문서.

이제 Python에서 실시간 스트리밍 대시 보드와 새로 고침 가능한 대시 보드를 만드는 방법을 알았습니다.hvplot,패널Streamz.이 기사가 도움이 되었기를 바랍니다.

참고 문헌

https://anaconda.cloud/tutorials/4038ae58-286a-4fdc-b8bf-b4b257e2edf3

https://openweathermap.org/api

https://panel.holoviz.org/gallery/param/action_button.html

https://streamz.readthedocs.io/en/latest/dataframes.html

https://hvplot.holoviz.org/user_guide/Streaming.html

https://panel.holoviz.org/user_guide/Deploy_and_Export.html

2021 년 2 월 7 일 양 소피아

3 Must-have JupyterLab 2.0 extensions -번역

3 필수 JupyterLab 2.0 확장

JupyterLab은 코드 지원, 디버깅 및 Git과 같은 기능을 갖춘 완전한 IDE가되었습니다. 노트북 편집의 미래에 오신 것을 환영합니다.

Photo by Victor Garcia on Unsplash

JupyterLab이 최신 확장 기능의 도움으로 본격적인 IDE가되었음을 확인하게되어 기쁩니다.일주일 전에 JupyterLab으로 노트북을 편집하는 동안 발견 한 몇 가지 결함에 대해 언급했습니다. 존재하지 않는 코드 지원도 그중 하나였습니다.

JupyterLab-LSP의 수석 개발자 중 한 명이 저에게 연락하여 확장 기능을 보여주었습니다.시도해 보았습니다. Jupyter 생태계의 엄청난 개선입니다.

아직 몇 JupyterLab 생태계의 누락 된 부분을 최소한 기능 측면에서 PyCharm과 동일하게 만듭니다.하지만 더 이상은 아닙니다.

다음은 관심을 가질만한 몇 가지 링크입니다.

- Labeling and Data Engineering for Conversational AI and Analytics- Data Science for Business Leaders [Course]- Intro to Machine Learning with PyTorch [Course]- Become a Growth Product Manager [Course]- Deep Learning (Adaptive Computation and ML series) [Ebook]- Free skill tests for Data Scientists & Machine Learning Engineers

위의 링크 중 일부는 제휴 링크이며 구매를 위해 통과하면 수수료를 받게됩니다.내가 코스를 링크하는 이유는 구매에 대한 수수료 때문이 아니라 품질 때문이라는 점을 명심하십시오.

이 주제와 관련된 이전 기사를 놓친 경우 :

JupyterLab-LSP

JupyterLab-LSP는 JupyterLab에 코드 지원 기능을 추가합니다.읽다JupyterLab 2.0.그것에 대해 자세히 알아 보려면 :

JupyterLab-LSP를 사용하여 JupyterLab에서 코드 완성

디버거

저는 pdb 패키지를 사용하여 JupyterLab에서 디버깅을 수행했습니다. 매우 힘든 과정이었습니다.며칠 전 새로운 디버깅 확장 프로그램에 대해 들었고이 기능을 사용해보고 싶었습니다.

적절한 디버거는 JupyterLab 생태계에서 마지막으로 누락 된 부분 중 하나입니다.최신 JupyterLab 확장의 개발자에게 모든 찬사를 보냅니다. 설치는 첫 번째 시도, 잘 작성된 문서 등에서 작동합니다. 디버거 확장과 다르지 않았습니다.디버거는 JupyterLab 2.0 이상 만 지원하며 아직 개발 중입니다.

How to enable the debugger?

Create a new xpython notebook, enable debugging and open debug pane.

디버거는 xpython Notebook에서 작동합니다. x는 xeus의 약자이며 Jupyter 용 커널 구현을 용이하게하기위한 라이브러리입니다.개발자가 커널의 인터프리터 부분을 구현하는 데 집중할 수 있도록 Jupyter Kernel 프로토콜을 구현하는 부담이 필요합니다.

디버거를 사용하는 방법?

디버거를 사용하려면 오른쪽 상단의 주황색 스위치를 활성화하고 중단 점을 설정하고 코드를 실행합니다.오른쪽의 디버그 패널을 사용하여 변수를 조사하십시오.

함수의 변수 값을 조사하여 디버거를 시도했습니다. 이것은 pdb 패키지를 사용할 때 가장 큰 고통이었습니다. 그리고 잘 작동합니다.또한 클래스와 DataFrame의 값을 조사하려고했습니다.모든 것이 완벽하게 작동합니다.

그것을 설치하는 방법?

JupyterLab 2.0 이상이 설치되어 있고 Extension Manager가 활성화되어 있는지 확인하십시오.그런 다음 요구 사항을 설치하십시오.

pip install xeus-python == 0.7.1
pip 설치 ptvsd

확장을 설치하려면 다음을 실행하십시오.

jupyter labextension 설치@ jupyterlab / 디버거

JupyterLab-Git

Jupyter Notebook을 Git에 푸시 한 다음 일부를 변경하고 다시 푸시 한 적이 있다면 Git의 diff 기능이 쓸모가 없다는 것을 알 수 있습니다. 모든 것을 표시합니다.푸시하기 전에 모든 출력을 재설정하여 해결 방법을 사용했지만 가끔 잊어 버리고 (또는 JupyterLab이 최신 상태를 저장하지 않음) 결국 큰 문제가 발생했습니다.나는 이것에 대해 정말 흥분됩니다.내 기대에 부응할까요?

해 보자

오른쪽에있는 git 패널을 엽니 다.그런 다음 3 개의 셀을 제거하고 3 개의 셀을 추가합니다.diff 기능이 잘 작동합니다.

와, 정말 놀랐습니다.노트북에서 몇 가지를 변경했는데 diff 기능이 정말 잘 작동합니다.에 대한 명성jupyterlab-git팀.

팁 : 노트북에서 변경 사항을 되돌릴 때는 먼저 노트북을 닫은 다음 되돌리기를 사용하십시오.더 잘 작동합니다.

커밋 내역

jupyter-git blame으로 커밋 내역 탐색

커밋 내역을 관찰 할 수 있습니다. 이것은 킬러 기능입니다.이미지도 보여줍니다.마침내 노트북 전체를 통하지 않고도 동료가 변경 한 내용을 관찰 할 수 있습니다.

그것을 설치하는 방법?

JupyterLab 2.0 이상이 설치되어 있고 Extension Manager가 활성화되어 있는지 확인하십시오.그런 다음 다음을 실행하십시오.

pip 설치-jupyterlab-git 업그레이드
Jupyter Lab 빌드

설치 후 Extension Manager는 패키지가 오래된 것으로 표시되었으므로 업데이트를 클릭하고 잠시 기다린 후 다시 빌드를 확인하고 jupyter-lab을 다시 시작했습니다.그런 다음 작동했습니다!

결론

JupyterLab에 대한 이전 기사에서 언급했듯이 노트북 편집의 미래는 밝습니다 ☀️ vim 확장 및 코드 포맷터 확장을 사용할 수있게되면 JupyterLab 2.x로 전환 할 것입니다.그때까지는 JupyterLab 1.2를 고수하겠습니다.

가기 전에

나를 따라와트위터, 내가 정기적으로트위터데이터 과학 및 기계 학습에 대해.

~의 사진코트니 헤저의 위에Unsplash

Stylize and Automate Your Excel Files with Python -번역

Python + Excel

Python으로 Excel 파일 스타일 화 및 자동화

초보자가 Python을 시작하는 방법 인 xlwings를 사용하여 양식화 된 Excel 보고서를 만드는 데 Python을 활용하는 방법.

Photo by Fotis Fotopoulos on Unsplash

Introduction

세계로의 여정을 처음 시작할 때 통과 할 기본 게이트웨이는 없습니다.이썬.언어의 일반적인 사용 범위는 데이터 과학에서 기계 학습, 인공 지능에 이르기까지 다양합니다.이들은 Python을 빠르게 구현할 수있는 훌륭한 영역이지만 대부분의 회사에서 대다수의 인력을위한 사용 사례가 없습니다.금융 서비스는 다른 산업과 함께 여전히 기본적인 데이터 조작을 위해 Excel을 사용하고 있습니다.이런 방식으로 작업하는 사람은 Python이 이러한 복잡한 주제와 수년에 걸쳐 구축 한 연관성을 고려할 때 Python을 잠재적 인 솔루션으로 고려하지 않을 수 있습니다.

Python에 대한 노출은 수동 Microsoft Excel 작업에 투자하는 시간을 최소화해야하기 때문입니다.반복적 인 작업을 자동화하면 엄청난 양의 작업자 시간을 확보 할 수 있으므로 당면한 더 복잡한 문제에 집중할 수 있습니다.VBA는이 워크 플로의 속도를 높이는 데 이상적인 솔루션처럼 보였습니다.

VBA를 배우고 이해하기까지 몇 달이 걸렸습니다.그러나 그 역량의 지점에 도달하더라도이 접근 방식이 얼마나 효율적이고 효과적인지 엄격하게 정의하고 제한하는 융통성없는 한계가있는 것처럼 느껴졌습니다.그때 제가 파이썬에 관심을 돌렸고 파이썬이 제가 필요하다는 것이 분명해지기까지 오래 걸리지 않았습니다.

매일 Excel을 사용하고 이러한 작업의 자동화를 검토 중이며 현재 VBA를 배우려고하는 상황에 처해있는 경우이 문서에서 작업 과정을 변경할 수 있습니다.

VBA 대신 Python을 사용하는 Excel을 사용하는 이유

Python은 표준 라이브러리에 내장 된 강력한 패키지의 방대한 배열을 포함합니다.또한 설치하기 쉬운 타사 모듈을 활용할 수 있습니다.이들의 조합은 VBA에 비해 코드를 실행하는 데 걸리는 시간뿐 아니라 필요한 코드의 양을 크게 줄일 수 있습니다.이를 보여주는 가장 좋은 방법은 간단한 예입니다.

VBA와 Python 및 Pandas를 사용하여 데이터 세트의 열에서 각 고유 값을 계산하는 방법을 쉽게 비교할 수 있습니다.다음 두 가지 방법 모두 초보자가이를 달성 할 수있는 방법입니다.

VBA

이 코드는 Excel의= COUNTIF ()함수를 사용하고 결과를 새 통합 문서에 붙여 넣습니다.

하위 매크로 ()Workbooks ( "Book1"). 활성화
Workbooks ( "Book1"). Sheets ( "fruit_and_veg_sales"). Activate
열 ( "B : B"). 선택
선택. 복사
통합 문서. 추가
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveSheet.Range ( "$ A : $ A"). RemoveDuplicates 열 : = 1, 헤더 : = xlNo
Range ( "B1") = "개수"
Range ( "B2"). Formula = "= COUNTIF ([Book1] fruit_and_veg_sales! $ B : $ B, A2)"
범위 ( "B2"). 복사
Range ( "B2 : B"& amp; ActiveSheet.UsedRange.Rows.Count) .PasteSpecial xlPasteAll
계산하다
Range ( "B2 : B"& amp; ActiveSheet.UsedRange.Rows.Count) .Copy
Range ( "B2 : B"& amp; ActiveSheet.UsedRange.Rows.Count) .PasteSpecial xlPasteValues
Application.CutCopyMode = False

End Sub

Python

df [ "col"]. value_counts ()Pandas를 사용하는 Python에서 필요한 모든 것입니다.(또한 추가 혜택으로 값을 정렬합니다)

Image for post

이미지 작성자 |고유 한 값 개수 출력 : Python (왼쪽), Excel (오른쪽)

Python에서 이미 사용 가능한 패키지를 사용하고 최종 데이터를 Excel로 출력하면 데이터의 모든 일반 사용자에 대해 동일한 출력을 유지하면서 전체 자동화 프로세스의 속도를 높일 수 있습니다.여기서 절약되는 시간은 코드를 적게 작성하는 것뿐만 아니라 훨씬 더 이해하기 쉬운 코드를 작성하는 것입니다.

이렇게하면 귀하와 향후 코드 사용자 모두에게 엄청난 시간을 절약 할 수 있습니다.

이제 알 수있을 것입니다. Python은 초보자가 쉽게 익힐 수있는 언어입니다.아직 뛰어 들지 않으려는 사람들에게는 Excel과 통합 할 수 있고 익숙한 인터페이스를 사용하는 것이 Python을 쉽게 사용할 수있는 완벽한 방법입니다.

Python과 Excel로 첫 걸음을 내 디딘 후 SQL 데이터베이스에서 언어를 사용하고 웹 사이트에서 데이터를 스크랩하고 대시 보드를 만드는 데 더 큰 진전을 이룰 것입니다.Python 모듈로 모든 것을 쉽게 달성 할 수 있습니다.

Python을 시작하는 것은 이러한 추가 기술을 배우는 데 큰 도움이 될 수 있습니다!

xlwings

이제이 보고서 작성을 어떻게 시작합니까?

큐 xlwings…

xlwings는 Python 코드를 사용하여 Excel을 쉽게 조작하고 자동화 할 수있는 오픈 소스 Python 라이브러리입니다.xlwings는 Python의 과학 패키지 (NumPy, Pandas, SciPy, scikit-learn 등)를 활용하고 VBA 대신 Python으로 도구를 작성하며 Python에서 Excel에서 사용할 사용자 정의 함수를 만들 수 있습니다.대시 보드를 만들어 Excel 데이터에 온라인으로 액세스 할 수도 있습니다!요약하면 xlwings는 현재 Excel 툴킷과 워크 플로를 크게 향상시킬 수있는 기능을 가지고 있습니다!

선호하는 Python 설치 방법이 Anaconda 인 경우 2020 년 11 월 릴리스부터 xlwings 0.20.8이 Anaconda의 사전 설치된 패키지에 내장됩니다.즉, Anaconda를 통해 Python을 설치하면 xlwings를 자동으로 가져 와서 사용할 수 있습니다.

이 사전 설치가없는 경우pip 설치 xlwings거기로 데려다 줄 것입니다.

xlwings는 Excel 기반 작업의 자동화와 보고서 작성에 매우 유용했습니다.Python을 사용하고 Excel과 상호 작용할 수있게되면서 Excel을 뒷좌석 역할로 밀어 붙이면서 더 복잡한 코딩 주제를 배우는 데 시간을 집중할 수있었습니다.

데이터를 표현 가능한 보고서로 포맷

이 튜토리얼에 사용하기 위해 csv 형식의 과일 및 채소 판매 테스트 데이터 세트를 만들었습니다.

데이터는 Github에서 다운로드 할 수 있습니다.링크

Steps to creating your report!

  1. Import Pandas and xlwings. We will be focusing on xlwings in this tutorial. Pandas will only be used to quickly import our data into Python.
import pandas as pd
Import xlwings as xw

2. 이제 Pandas를 사용하여 csv 파일을 DataFrame으로 가져옵니다.

df = pd.read_csv (r”path_to_csv / fruit_and_veg_sales.csv”)

팁:대신이 줄을 실행하여 Github에서 직접 csv 파일을 읽을 수도 있습니다.df = pd.read_csv (r "https://raw.githubusercontent.com/Nishan-Pradhan/xlwings_report/master/fruit_and_veg_sales.csv")

이제 Python에 데이터가 있으므로 조작이나 추가 계산을 자유롭게 수행 할 수 있습니다.이 튜토리얼의 목적을 위해 데이터를 그대로 유지합니다.

3. Excel 통합 문서를 초기화합니다.

wb = xw.Book ()

여기서 우리는 통합 문서의 이름을wb사용 된 xlwings도서()Excel 통합 문서를 초기화합니다.

4. 다음으로 워크 시트 참조를 변수로 설정하고 시트의 이름을 변경합니다.

sht = wb.sheets [ "Sheet1"]
sht.name = "fruit_and_veg_sales"

여기에서 Excel Sheet1에 대한 참조를 다음과 같이 설정합니다.Sheet1의 이름을 fruit_and_veg_sales로 변경했습니다.

5. 이제 과일 및 채소 판매와 함께 Python으로 된 DataFrame이 있고 “fruit_and_veg_sales”라는 시트가있는 열린 Excel 통합 문서가 있습니다.다음 단계는 Python에서 Excel로 데이터를 가져 오는 것입니다.다음을 호출하여이를 수행합니다.

sht.range ( "A1"). options (index = False) .value = df

VBA를 알고 있다면 익숙한 구문을 인식해야합니다.sht.range ( "A1").여기에서 DataFrame을 얻으려면dfExcel 문서에 데이터를 저장할 위치를 지정했습니다 (이 경우 “A1″셀).

그만큼.options (index = False)원치 않는 색인 복사를 방지합니다.DataFrame의 인덱스가 필요한 경우 줄의이 부분을 제거 할 수 있습니다.진실기본적으로, 즉sht.range ( "A1"). value = df.

포함하는 것을 잊지 마십시오.값, 이것을 지정하지 않으면 구문 오류가 발생합니다.SyntaxError : cal에 함수를 할당 할 수 없습니다...값곧 다룰 다른 속성이 아니라 Excel 셀의 값에 대해 이야기하고 있음을 xlwings에 알립니다.

6. 이제 완전히 서식이 지정되지 않은 데이터가있는 Excel 파일을보고 있어야합니다.

Image for post

이미지 작성자 |데이터가 삽입 된 Excel 워크 시트

7. Python에서 Excel로 데이터를 가져 왔습니다.이제 포맷을 시작하겠습니다!

Excel 내에서 데이터 서식을 지정할 때 가장 먼저해야 할 일은 서식을 지정할 데이터를 선택하는 것입니다.xlwings에서이를 수행하기 위해 시트의 범위와 관련된 변수를 생성합니다.

all_data_range = sht.range ( "A1"). expand ( 'table')

여기 사용sht.range ( "A1"). expand ( 'table')기본적으로 A1 셀에서 시작하여 CTRL + SHIFT + ↓ (아래쪽 화살표), CTRL + SHIFT + → (오른쪽 화살표)로 이동하여 데이터 (Windows)를 선택합니다.그러면 범위 A1 : I1001이 선택되고이 범위 참조는 이름이 지정된 변수에 저장됩니다.모든 _ 데이터 _ 범위.

Python에서 변수로 참조하는 범위를 확인하려면print (모든 _ 데이터 _ 범위. 주소).

Image for post

이미지 작성자 |range.address 예

8. 범위 참조 변수를 설정 했으므로 이제 보고서 스타일 지정을 시작할 수 있습니다.데이터의 행과 열 높이부터 시작하겠습니다.

all_data_range.row_height = 22.5
all_data_range.column_width = 12

22.5 및 12는 Microsoft 설명서에 따라 ‘기본 글꼴의 문자’에있는 Excel의 크기 측정을 나타냅니다.

9. 다음으로 셀의 배경색을 변경합니다.이를 위해 튜플에서 RGB 색상을 사용합니다.

all_data_range.color = (208,206,206)

이렇게하면 범위의 배경색이 밝은 회색으로 변경됩니다.

10. 텍스트를 편집하려면 필요한 기능이 약간 다릅니다.xlwings를 사용하여 Microsoft의 Excel API를 호출합니다.이것은 VBA를 사용하는 것과 거의 동일합니다.

all_data_range.api.Font.Name = 'Arial'
all_data_range.api.Font.Size = 8
all_data_range.api.HorizontalAlignment = xw.constants.HAlign.xlHAlignCenterall_data_range.api.VerticalAlignment = xw.constants.HAlign.xlHAlignCenterall_data_range.api.WrapText = True

여기에서는 데이터의 글꼴을 Arial로 변경하고 글꼴 크기를 8로 설정하고 텍스트 중앙을 가로 및 세로로 정렬하고 마지막으로 텍스트 줄 바꿈을 켜서 셀의 모든 텍스트를 봅니다.

11. 테이블을 더욱 매력적으로 보이게하기 위해 몇 가지 색상을 추가하고 헤더 형식을 지정합니다.

header_range = sht.range ( "A1"). expand ( 'right')
header_range.color = (112,173,71)
header_range.api.Font.Color = 0xFFFFFF
header_range.api.Font.Bold = True
header_range.api.Font.Size = 9

이 블록은 이전에했던 것처럼 범위를 선택합니다.이 선택의 주요 차이점은.expand ( 'right')CTRL + SHIFT + → (오른쪽 화살표)로만 전환됩니다.이를 통해 A1 셀에서 시작하여 Excel의 헤더 열인 I1을 선택할 수 있습니다.

여기서 또 다른 차이점은 글꼴 색상을 흰색으로 변경하도록 선택했다는 것입니다.이를 위해 16 진수 코드를 사용하여 색상을 지정했습니다.0xFFFFFF.

이미지 작성자 |절반 형식의 문서

12. 이제 거래 ID 번호 열의 형식을 지정하겠습니다.나는 이것을 더 밝은 녹색 음영으로 만들고 싶습니다.앞서 언급 한 RGB 방법을 사용하여이를 수행 할 수 있습니다.이번에는확장 ( '아래')셀 A2에서.

id_column_range = sht.range ( "A2"). expand ( 'down')
id_column_range.color = (198,224,180)

13. 다음 단계에서는 데이터의 테두리 색상 만 변경합니다 (헤더 열 또는 트랜잭션 ID # 열 제외).Microsoft의 API는 경계 작업에 약간 어색하지만 문서화여기충분합니다.

요약, 위쪽, 아래쪽, 왼쪽 및 오른쪽 테두리는 각각 숫자 7,8,9,10으로 지정됩니다.

data_ex_headers_range = sht.range ( "A2"). expand ( 'table')범위 (7,13)의 border_id :
data_ex_headers_range.api.Borders (border_id) .Weight = 2
data_ex_headers_range.api.Borders (border_id) .Color = 0xFFFFFF

14. 마지막 단계는 보고서를 저장하는 것입니다.요구wb.save (), 저장하려는 경로와 원하는 파일 이름을 지정하십시오.파일 이름을 파일 형식으로 끝내는 것을 잊지 마십시오.이 경우 우리는.xlsx모든 형식을 유지합니다.

wb.save (r "폴더로 _ 경로 \ fruit_and_veg_report.xlsx")

Bonus!

추가로 탭 색상을 녹색으로 변경합니다.

sht.api.Tab.Color = 0x70AD47
GIF by Author | Formatted Excel Sheet Using xlwings

Conclusion

몇 줄의 간단한 코드로 최종 사용자를 위해 깔끔하고 표현 가능한 형식으로 Excel 문서를 만들 수있었습니다.이 튜토리얼은 창의력을 발휘하고 자신 만의 미학적으로 만족스러운 보고서를 만들 수있는 충분한 xlwings 구성 요소를 제공해야합니다!빈 행을 삽입하고 글꼴 크기, 배경색, 테두리 두께 및 테두리 색상을 변경하여 보고서를 더욱 멋지게 만드십시오!

이것은 Python과 xlwings를 사용하여 달성 할 수있는 것의 시작일뿐입니다!

이 튜토리얼에 사용 된 코드는 Github에서 사용할 수 있습니다.여기

막힌 경우 xlwings 문서를 확인하십시오.여기

더 궁금한 점이 있으면 아래 댓글 섹션에 남겨주세요.

The Science Behind the New 4-Second Workout -번역

새로운 4 초 운동의 과학

고강도 루틴은 간단하고 효과적이지만 쉽지는 않습니다.

Woman working out in her living room.

Photo: Oscar Wong/Getty Images

아르 자형연구자들은 체력과 건강을 개선하는 데 필요한 최소 운동량을 찾기 위해 경쟁하고 있습니다.여러 연구실에서 발견 한 결과에 따르면 1 분 정도의 노력 만 있으면된다는 흥미로운 헤드 라인을 만들었습니다.하나의 새로운 연구를 기반으로, 단 4 초.

현실은 아주 다릅니다.

짧지 만 강렬한 운동은 절대적으로 향상 될 수 있습니다.유산소 운동, 근력 및 힘.10 ~ 15 분만에 기존의 덜 격렬한 운동과 유사한 피트니스 혜택을 얻을 수 있습니다.그리고 증거에 따르면 더 짧은 시간에 노력을 분산시킬 수 있습니다.운동 간식” 하루 종일.

그러나 이러한 운동은 결코 쉬운 일이 아니며, 들리는 것처럼 미니멀하지도 않습니다.고강도 인터벌 트레이닝 (HIIT)이라고하는 격렬한 루틴에는 워밍업과 쿨 다운이 포함되며 일반적으로 최대 심박수의 80 % 이상을 달성하기 위해 여러 번의 격렬한 노력이 필요합니다.어려운.그리고 HIIT보다 훨씬 더 강렬한 스프린트 인터벌 트레이닝 (SIT) 운동은 약탈하는 벨로시 랩터를 피하기 위해 소환 할 수있는 일종의 노력을 이끌어냅니다.

짧은 고강도 운동에 대한 모든 최신 연구에서 나온 간단한 메시지 :“가끔 편안하게 벗어나십시오.”라고 캐나다 온타리오에있는 McMaster University의 운동 과학과 교수이자 저자 인 Martin Gibala는 말합니다.1 분 운동, 기록을 위해약 10 분 소요완료합니다.

4 초의 노력, 계속해서 그리고 …

새로운 연구일지에스포츠 및 운동의 의학 및 과학50 대와 60 대에 앉아있는 남성과 여성이 4 초 간격으로 여러 번 격렬하게 노력하는 운동 요법을 주 3 회 8 주 동안 훈련했습니다.운동은 평균적으로 심혈관 능력 (10 %)과 근력 (12 %)의 상당한 증가를 포함하여 전반적인 체력을 향상 시켰습니다.

2 ~ 3 개의 인터벌 만 포함하는 일부 HIIT 루틴과 달리, 이러한 운동에는 무거운 플라이휠이있는 파워 사이클이라는 특수 고정 자전거에서 4 초 동안의 전력 질주가 여러 번 필요했습니다.참가자들은 일반적으로 각각 30 초 휴식으로 18 회 스프린트를 수행하거나 15 초 휴식 기간으로 30 회 스프린트를 수행했다고 오스틴에있는 텍사스 대학교의 인간 성능 연구소 책임자 인 Edward Coyle 박사는 설명합니다.모두 말하면 운동은 평균 10 분 동안 지속되었습니다.

스프린트에는 엄청난 힘이 필요합니다.그것은 중요하다고 Coyle은 말합니다.근육 섬유 손실30 세 전후에 근육의 40 %가 70 세가되면 사라질 수 있습니다.빠른 트 위치 근육 섬유전력이 가장 빨리 감소하는 데 필요합니다.

“많은 사람들이 전통적인 형태의 운동을 할 시간이 충분하지 않다고 생각합니다.그러나 HIIT는 사람들이 시도 할 수있는 실행 가능하고 시간 효율적인 운동 대안을 제공합니다. “

전구와 마찬가지로 주어진 운동의 파워는 와트로 측정됩니다.자전거 초보자는 30 분 동안 평균 약 75 와트의 출력을 낼 수 있습니다.일반적인 HIIT 간격의 전력 출력은 1 분 이상 지속되는 스프린트 동안 180 와트에서 20 초 전체 스프린트 동안 700 와트까지 다양하다고 Coyle은 말합니다.그러나 4 초 스프린트는 1,000 와트 이상의 전력을 사용합니다.차례로, 상대적으로 짧은 휴식 시간과 결합 된 전력 출력의 수준은 큰 유산소 세션을 생성합니다.

Coyle은 전화 인터뷰에서“운동이 매우 강력하기 때문에 휴식 기간 동안에도 여전히 심혈 관계를 자극합니다.”당신은 많은 산소를 소비하고 있으며, 스프린트 동안 사용한 에너지 저장고를 회복하고 있습니다.”

각 참가자에 대해 처음 몇 번의 인터벌은 숨을 힘들게했고 마지막 몇 번은 숨을 헐떡 였다고 Coyle은 말합니다.

장비가 필요하지 않습니다

Coyle의 운동은 가장 짧은 인터벌로 무엇을 할 수 있는지 보여줍니다.그러나 집에서 그의 특수 자전거의 효과를 복제하는 것은 비현실적입니다.괜찮습니다. HIIT는다양한 방법, 장비 유무에 관계없이.결과는 도보 나 자전거 또는 다양한 기타 일반적인 운동을 통해 언덕을 질주함으로써 얻을 수 있습니다.Gibala와 동료들의 2018 년 연구운동 간식으로 사람들을 형태로 만들었습니다., 하루에 세 번씩 세 번의 계단을 활기차게 오르게하면서 각 노력 사이에 몇 시간 씩 시간을 투자합니다.

Gibala의 최신 연구에 따르면 고전적인 미용 체조가 트릭을 수행 할 수도 있습니다.그의 팀은11 분 운동 세션5 가지 체중 전용 운동 :

각 동작은 “도전적인 페이스”로 1 분 동안 이루어지며, 쉽게 점프하는 잭이 1 분 워밍업 역할을 한 다음 각 운동 후 1 분 동안 제자리에서 걷는다.9 명의 부적합하지만 건강한 남녀가 6 주 동안 일주일에 세 번 운동을했습니다.연구진은 지구력이 평균 약 7 % 증가했으며 운동을하지 않은 대조군에 비해 운동가의 다리가 더 강해졌습니다.보고서1 월호에서국제 운동 과학 저널.

“최신 연구 결과는 간단한 체중 운동과 같은 간단하고 실용적인 전략이 특별한 장비 나 많은 시간을 투자 할 필요없이 유익 할 수 있음을 상기시켜줍니다.”라고 Gibala는 말합니다.원소 같은.”특히 피트니스 시설 및 장비에 대한 접근이 제한되어있는 폐쇄 버전을 경험하는 많은 사람들에게 현재 현실에 공감합니다.”

시도해보세요. 좋아할 수도 있습니다.

미국인을위한 신체 활동 지침은 일주일에 두 번 요구합니다체력 단련, 주당 150 분의 중간 강도의 신체 활동 또는 75 분의 격렬한 출력 또는이 둘의 조합입니다.10 분 미만 지속되는 고강도 노력은 이제 총최신 개정2018 년 가이드 라인의.

HIIT는 만병 통치약이 아니라고 Gibala는 말합니다. 많은 HIIT 연구가 소수의 참가자 만 참여하고 특정 체력 지표 만 측정한다는 점에 주목합니다.이러한 일상이 평생 혜택으로 어떻게 변환 될 수 있는지는 아직 연구되지 않았습니다.하지만기존 연구 검토당뇨병 예방 또는 관리에 도움이 될 수 있음을 시사합니다.다른 실험나쁜 콜레스테롤 수치를 낮추는 것으로 나타났습니다지방 대사를 개선하고 트리글리세리드 수치를 낮추어 높은 수치에서 심장 질환의 위험을 높입니다.

또한 사람들은 HIIT 운동이 당신이 상상하는 것만 큼 불쾌하다고 생각하지 않습니다.Coyle은 그의 연구에서 노인들이 그 강도를 감당할 수 없을지 궁금해했습니다.”그들은 잘했고 좋아했습니다.”라고 그는 말합니다.

“음식과 마찬가지로 상황과 필요에 따라 선택할 수있는 다양한 유형의 신체 활동 메뉴를 만들 수 있습니다.현실적이고 달성 가능하며 즐거운 것을 목표로하십시오.”

하나연구강도가 불쾌감을 유발하는지 여부를 구체적으로 살펴본은이를 뒷받침합니다.연구원들은 30 명의 사람들이 각각 실험실에서 세 가지 유형의 운동을하도록했습니다. HIIT, 더 강렬한 SIT, 전통적인 유산소 운동과 더 유사한 중간 강도의 연속 훈련입니다.오카 나간 브리티시 컬럼비아 대학의 운동 과학 연구원 인 연구 리더 인 매튜 스토크 (Matthew Stork) 박사는 세 가지 유형 모두에 대해 즐거움 반응이 비슷했다고 말합니다.그 후 참가자들은 4 주 동안 자유롭게 운동 할 수있었습니다.그들 중 79 %는 적어도 한 세션의 HIIT를 선택했습니다.

“많은 사람들이 전통적인 형태의 운동을 할 시간이 충분하지 않다고 생각합니다.”라고 Stork는 말합니다.”그러나 HIIT는 사람들이 시도 할 수있는 실행 가능하고 시간 효율적인 운동 대안을 제공합니다.”

강도는 상대적인 것임을 주목하는 것도 중요합니다.몸매가 좋은 사람에게는 한 사람을 지치게하는 것이 쉬울 수 있습니다.자신을 육체적으로 밀어 붙이는 것이 체력을 얻는 방법이지만 안전과 피로를 피하기 위해 현명하게 수행해야합니다.

Stork는 “저는 특히 활동이 적고 운동 경험이 적은 개인을 대상으로 전반적으로 홍보해야하는 ‘자신을 한계까지 밀어 붙이는’아이디어를 개인적으로 좋아하지 않습니다.”라고 말합니다.”경험이 적은 개인의 경우 너무 빨리 밀면 지속적인 참여를 방해 할 수 있습니다.”

우리 인간은 운동으로 진화하지 않았습니다. 매달린 출산이나 생존의 당근없이 운동하는 것은 우리의 본성에 있지 않습니다.

조깅, 에어로빅 또는 기타 장시간 운동에 흥미를 느끼기 힘들다면 다음과 같은 자연 활동을 고려하십시오.활발한 산책,춤 또는 정원 가꾸기, 그리고 어쩌면 자신에게 몇 가지 도전팔 굽혀 펴기약간의 HIIT도 있습니다.체력 향상을위한 입증 된 방법.그리고 그것은혜택을 받기에 너무 늦지 않음, 연구 결과.

“음식과 마찬가지로 상황과 필요에 따라 선택할 수있는 다양한 유형의 신체 활동 메뉴를 만들 수 있습니다.”라고 Stork는 말합니다.“현실적이고 달성 가능하며 즐거운 것을 목표로하십시오.그것은긴 하이킹또는 짧은 HIIT 세션 — 당신의 필요와 물리적 능력에 따라 당신에게 적합한 것이 무엇이든.모든 작은 것이 중요합니다.”

Python Can Be Faster Than C++ -번역

Python은 C ++보다 빠를 수 있습니다.

파이썬을 상상할 수있는 것보다 더 빠르게 만드는 트릭

Image for post

Photo by Jake Givens on Unsplash

Python은 다재다능한 프로그래밍 언어입니다.파이썬은 라이브러리와 높은 수준의 언어로 인해 기계 학습 문제 해결에 가장 많이 사용되지만 다른 많은 언어보다 느린 것으로 알려져 있습니다.그 명성 때문에 많은 사람들이 언어를 버리고 프로그램 해결을 위해 C ++와 같은 다른 옵션을 고수하기로 결정했습니다.

이 기사에서는 파이썬이 C ++보다 얼마나 빠른지 보여줄 것입니다.

기본 속도 테스트

Python과 C ++의 정상적인 속도 차이를 테스트하기 위해소수의 생성연산.두 언어 모두에서 명확한 짧은 단계가있는 간단한 알고리즘입니다.

수입 수학
카운터 당 시간 가져 오기에서
def is_prime (num) :
만약 num == 2 :
반환 True;
num & lt; = 1이거나 num % 2가 아닌 경우 :
False를 반환
range (3, int (math.sqrt (num) +1), 2)의 div의 경우 :
num % div가 아닌 경우 :
False를 반환
True 반환
def 실행 프로그램 (N) :
i 범위 (N) :
is_prime (i)
__name__ ==‘__main__’인 경우 :
N = 10000000
시작 = perf_counter ()
프로그램 실행 (N)
끝 = perf_counter ()
인쇄 (끝-시작)
#include <iostream>
#include <cmath>
#include <time.h>
using namespace std;bool isPrime(int num)
{
if (num == 2) return true;
if (num <= 1 || num % 2 == 0) return false;
double sqrt_num = sqrt(double(num));
for (int div = 3; div <= sqrt_num; div +=2){
if (num % div == 0) return false;
}
return true;
}int main()
{
int N = 10000000;
clock_t start,end;
start = clock();
for (int i; i < N; i++) isPrime(i);
end = clock();
cout << (end — start) / ((double) CLOCKS_PER_SEC);
return 0;
}
  • Python: 80.137 seconds
  • C++ : 3.174 seconds

예상대로 C ++은 기본 테스트에서 Python보다 25 배 더 빠릅니다.따라서 평판은 사실이며 이것은 논리적입니다.

  • Python은 C ++와 달리 동적 언어입니다.
  • GIL (Python Global Interpreter)은 병렬 프로그래밍을 허용하지 않습니다.

이 속도 차이는 파이썬이 유연한 다목적 언어로 만들어 졌기 때문에 수정할 수 있습니다.속도 문제에 대한 최고의 솔루션 중 하나는Numba.

Numba

Numba는 Python 및 NumPy 코드의 하위 집합을 빠른 기계 코드로 변환하는 오픈 소스 JIT 컴파일러입니다.~위키 백과

간단히 말해서 Numba는 Python을 빠르게 만드는 라이브러리입니다.사용하기 매우 쉽고 코드 속도를 크게 변경합니다.Numba 사용을 시작하려면 콘솔 사용을 사용하여 설치하십시오.

pip 설치 numba

Python Implementation After Using Numba

import math
from time import per_counter
from numba import njit, prange
@njit(fastmath=True, cache=True)
def is_prime(num):
if num == 2:
return True;
if num <= 1 or not num % 2:
return False
for div in range(3,int(math.sqrt(num)+1),2):
if not num % div:
return False
return True
@njit(fastmath=True, cache=True,parallel=True)
def run program(N):
for i in prange(N):
is_prime(i)
if __name__ == ‘__main__’:
N = 10000000
start = perf_counter()
run_program(N)
end = perf_counter()
print (end — start)

결과

파이썬: 1.401 초
C ++: 3.174 초

따라서 Python은 C ++보다 빠릅니다.따라서 Python에서 알고리즘의 속도를 C ++보다 빠르게 할 수 있습니다.

Are You Still Using Pandas to Process Big Data in 2021? -번역

2021 년에도 여전히 Pandas를 사용하여 빅 데이터를 처리하고 있습니까?

Pandas는 빅 데이터를 잘 처리하지 못합니다.이 두 라이브러리는 그렇습니다!어느 것이 더 낫습니까?더 빨리?

Photo by NASA on Unsplash

나는최근에 빅 데이터를 처리하는 방법에 대한 두 개의 소개 기사를 작성했습니다.DaskVaex— 메모리 데이터 세트보다 큰 처리를위한 라이브러리.글을 쓰는 동안 내 마음에 질문이 떠올랐다.

이러한 라이브러리가 실제로 메모리 데이터 세트보다 더 큰 데이터를 처리 할 수 있습니까? 아니면 모두 판매 슬로건입니까?

이것은 나를 흥미롭게했다 Dask와 Vaex로 실용적인 실험을하고 메모리보다 큰 데이터 셋을 처리하려고합니다.데이터 세트가 너무 커서 팬더로 열 수도 없습니다.

빅 데이터 란 무엇을 의미합니까?

~의 사진ev의 위에Unsplash

빅 데이터는 느슨하게 정의 된 용어입니다. Google의 조회수만큼 많은 정의가 있습니다.이 기사에서는이 용어를 사용하여 데이터를 처리하기 위해 특수 소프트웨어가 필요한 너무 큰 데이터 세트를 설명합니다.Big에서는 “단일 시스템의 주 메모리보다 더 크다”는 의미입니다.

Wikipedia의 정의 :

빅 데이터는 기존의 데이터 처리 응용 프로그램 소프트웨어로 처리하기에는 너무 크거나 복잡한 데이터 세트를 분석하거나, 체계적으로 정보를 추출하거나, 처리하는 방법을 다루는 분야입니다.

Dask와 Vaex는 무엇입니까?

~의 사진JESHOOTS.COM의 위에Unsplash

Dask분석을위한 고급 병렬 처리를 제공하여 좋아하는 도구에 대한 대규모 성능을 지원합니다.여기에는 numpy, pandas 및 sklearn이 포함됩니다.오픈 소스이며 자유롭게 사용할 수 있습니다.기존 Python API 및 데이터 구조를 사용하여 Dask로 구동되는 등가물간에 쉽게 전환 할 수 있습니다.

VaexLazy Out-of-Core DataFrames (Pandas와 유사)를위한 고성능 Python 라이브러리로, 큰 테이블 형식 데이터 세트를 시각화하고 탐색합니다.초당 10 억 개 이상의 행에 대한 기본 통계를 계산할 수 있습니다.빅 데이터의 대화 형 탐색을 허용하는 여러 시각화를 지원합니다.

Dask 및 Vaex 데이터 프레임은 Pandas 데이터 프레임과 완전히 호환되지 않지만 가장 일반적인 “데이터 랭 글링”작업은 두 도구에서 모두 지원됩니다.Dask는 클러스터를 계산하기 위해 코드를 확장하는 데 더 중점을 두는 반면 Vaex는 단일 컴퓨터에서 대규모 데이터 세트로 작업하기가 더 쉽습니다.

Dask 및 Vaex에 대한 내 기사를 놓친 경우 :

실험

~의 사진루이스 리드의 위에Unsplash

1 백만 개의 행과 1000 개의 열이있는 두 개의 CSV 파일을 생성했습니다.파일 크기는 18.18GB로 합쳐서 36.36GB입니다.파일에는 0과 100 사이의 균일 분포에서 난수가 있습니다.

임의 데이터가있는 두 개의 CSV 파일.저자가 만든 사진
팬더를 pd로 가져 오기
numpy를 np로 가져 오기
OS 가져 오기 경로에서n_rows = 1_000_000
n_cols = 1000
범위 (1, 3)에있는 i의 경우 :
파일 이름 = 'analysis_ % d.csv'% i
file_path = path.join ( 'csv_files', 파일 이름)
df = pd.DataFrame (np.random.uniform (0, 100, size = (n_rows, n_cols)), columns = [ 'col % d'% i for i in range (n_cols)])
print ( '저장', 파일 _ 경로)
df.to_csv (file_path, index = False)
df.head ()
Head of a file. Photo made by the author

이 실험은 32GB의 메인 메모리를 갖춘 MacBook Pro에서 실행되었습니다.pandas Dataframe의 한계를 테스트 할 때 놀랍게도 그러한 컴퓨터에서 메모리 오류에 도달하는 것이 상당히 어렵다는 것을 알았습니다!

macOS는 메모리가 용량에 가까워지면 메인 메모리에서 SSD로 데이터를 덤프하기 시작합니다.Pandas Dataframe의 상한은 머신의 100GB 여유 디스크 공간이었습니다.

WMac에 메모리가 필요한 경우 현재 사용되지 않는 항목을 임시 저장을 위해 스왑 파일로 푸시합니다.다시 액세스해야 할 때 스왑 파일에서 데이터를 읽어 메모리에 다시 넣습니다.

실험이 공정 해지려면이 문제를 어떻게 해결해야할지 고민했습니다.내 마음에 떠오른 첫 번째 아이디어는 각 라이브러리가 주 메모리 만 사용할 수 있도록 스와핑을 비활성화하는 것이 었습니다. macOS에서 행운을 빕니다.몇 시간을 보낸 후 스와핑을 비활성화 할 수 없었습니다.

두 번째 아이디어는 무차별 대입 방식을 사용하는 것이 었습니다.기기에 여유 공간이 없어 운영 체제에서 스왑을 사용할 수 없도록 SSD를 전체 용량으로 채웠습니다.

실험 중 디스크가 거의 꽉 찼습니다.저자가 만든 사진

이것은 효과가 있었다!Pandas는 두 개의 18GB 파일을 읽을 수 없었고 Jupyter Kernel이 다운되었습니다.

이 실험을 다시 수행하면 메모리가 더 적은 가상 머신을 만들 것입니다.이렇게하면 이러한 도구의 한계를 더 쉽게 보여줄 수 있습니다.

Dask 또는 Vaex가 이러한 대용량 파일을 처리하는 데 도움을 줄 수 있습니까?어느 것이 더 빠릅니까?알아 보자.

Vaex 대 Dask

~의 사진프리다 브레 데센의 위에Unsplash

실험을 설계 할 때 데이터 분석을 수행 할 때 데이터 그룹화, 필터링 및 시각화와 같은 기본 작업을 생각했습니다.다음 작업을 생각해 냈습니다.

  • 열의 10 번째 분위수 계산,
  • 새 열 추가,
  • 열로 필터링,
  • 열별로 그룹화 및 집계,
  • 열 시각화.

위의 모든 작업은 단일 열을 사용하여 계산을 수행합니다. 예 :

# 단일 열로 필터링
df [df.col2 & gt;10]

그래서 모든 데이터를 처리해야하는 작업을 시도하고 싶었습니다.

  • 모든 열의 합계를 계산합니다.

이것은 계산을 더 작은 청크로 분할하여 달성 할 수 있습니다.예 :각 열을 개별적으로 읽고 합계를 계산하고 마지막 단계에서 전체 합계를 계산합니다.이러한 유형의 계산 문제는 다음과 같이 알려져 있습니다.난처하게 평행— 문제를 별도의 작업으로 분리하기 위해 노력할 필요가 없습니다.

Vaex

~의 사진Lanty의 사진의 위에Unsplash

Vaex부터 시작하겠습니다.실험은 각 도구에 대한 모범 사례를 따르는 방식으로 설계되었습니다. 이것은 Vaex 용 바이너리 형식 HDF5를 사용하는 것입니다.따라서 CSV 파일을 HDF5 형식 (The Hierarchical Data Format 버전 5)으로 변환해야합니다.

glob 가져 오기
수입 vaex
csv_files = glob.glob ( 'csv_files / *. csv')i의 경우 enumerate (csv_files, 1)의 csv_file :
j의 경우 enumerate (vaex.from_csv (csv_file, chunk_size = 5_000_000), 1)의 dv :
print ( '% d % s을 (를) hdf5 부분 % d'로 내보내는 중 '% (i, csv_file, j))
dv.export_hdf5 (f'hdf5_files / analysis_ {i : 02} _ {j : 02} .hdf5 ')

Vaex는 2 개의 CSV 파일 (36.36GB)을 16GB가 결합 된 2 개의 HDF5 파일로 변환하는 데 405 초가 필요했습니다.텍스트에서 이진 형식으로 변환하면 파일 크기가 줄어 들었습니다.

Vaex로 HDF5 데이터 세트 열기 :

dv = vaex.open('hdf5_files/*.hdf5')

Vaex는 HDF5 파일을 읽는 데 1218 초가 필요했습니다.Vaex가 바이너리 형식의 파일을 거의 즉시 열 수 있다고 주장하므로 더 빠를 것으로 예상했습니다.

Vaex 문서에서:

이러한 데이터를 여는 것은 디스크의 파일 크기에 관계없이 즉시 이루어집니다. Vaex는 데이터를 메모리에서 읽는 대신 메모리 매핑 만합니다.이것은 사용 가능한 RAM보다 큰 대용량 데이터 세트로 작업하는 최적의 방법입니다.

Vaex가있는 디스플레이 헤드 :

dv.head()

Vaex는 머리를 표시하는 데 1189 초가 필요했습니다.각 열의 처음 5 개 행을 표시하는 데 왜 그렇게 오래 걸 렸는지 잘 모르겠습니다.

Vaex를 사용하여 10 번째 분위수 계산 :

Vaex에는 분위수의 근사치를 계산하는 percentile_approx 함수가 있습니다.

분위수 = dv.percentile_approx ( 'col1', 10)

Vaex는 col1 열에 대한 10 번째 분위수의 근사치를 계산하는 데 0 초가 필요했습니다.

Vaex로 새 열을 추가하십시오.

dv[‘col1_binary’] = dv.col1 > dv.percentile_approx(‘col1’, 10)

Vaex에는 식을 열로 저장하는 가상 열 개념이 있습니다.메모리를 차지하지 않으며 필요할 때 즉시 계산됩니다.가상 열은 일반 열처럼 처리됩니다.예상대로 Vaex는 위의 명령을 실행하는 데 0 초가 필요했습니다.

Vaex로 데이터 필터링 :

Vaex는선택, Dask는 선택을 지원하지 않아 실험이 불공평 해 지므로 사용하지 않았습니다.아래 필터는 Vaex가 데이터를 복사하지 않는다는 점을 제외하면 Pandas로 필터링하는 것과 유사합니다.

dv = dv [dv.col2 & gt;10]

Vaex는 위의 필터를 실행하는 데 0 초가 필요했습니다.

Vaex로 데이터 그룹화 및 집계 :

아래 명령은 그룹화 및 집계를 결합하므로 pandas와 약간 다릅니다.이 명령은 col1_binary로 데이터를 그룹화하고 col3의 평균을 계산합니다.

group_res = dv.groupby (by = dv.col1_binary, agg = { 'col3_mean': vaex.agg.mean ( 'col3')})
Calculating mean with Vaex. Photo made by the author

Vaex는 위의 명령을 실행하는 데 0 초가 필요했습니다.

히스토그램 시각화 :

더 큰 데이터 세트를 사용한 시각화는 기존의 데이터 분석 도구가이를 처리하도록 최적화되지 않았기 때문에 문제가됩니다.Vaex로 col3의 히스토그램을 만들 수 있는지 살펴 보겠습니다.

플롯 = dv.plot1d (dv.col3, what = 'count (*)', 제한 = [0, 100])
Visualizing data with Vaex. Photo made by the author

Vaex는 플롯을 표시하는 데 0 초가 필요했는데 놀랍도록 빨랐습니다.

모든 열의 합계 계산

한 번에 하나의 열을 처리 할 때 메모리는 문제가되지 않습니다.Vaex를 사용하여 데이터 세트에있는 모든 숫자의 합계를 계산해 보겠습니다.

suma = np.sum (dv.sum (dv.column_names))

Vaex는 모든 열의 합계를 계산하는 데 40 초가 필요했습니다.

Dask

~의 사진켈리 식 케마의 위에Unsplash

이제 위의 작업을 반복하지만 Dask를 사용합니다.Dask 명령을 실행하기 전에 Jupyter 커널이 다시 시작되었습니다.

Dask의 read_csv 함수를 사용하여 CSV 파일을 직접 읽는 대신 CSV 파일을 HDF5로 변환하여 공정한 실험을 만듭니다.

dask.dataframe을 dd로 가져 오기ds = dd.read_csv ( 'csv_files / *. csv')
ds.to_hdf ( 'hdf5_files_dask / analysis_01_01.hdf5', key = 'table')

Dask는 변환에 763 초가 필요했습니다.Dask로 데이터를 변환하는 더 빠른 방법이 있으면 댓글로 알려주세요.운없이 Vaex로 변환 된 HDF5 파일을 읽으려고했습니다.

Dask의 모범 사례:

HDF5는 고성능이 필요한 Pandas 사용자에게 인기있는 선택입니다.Dask DataFrame 사용자는 대신 Parquet을 사용하여 데이터를 저장하고로드하는 것이 좋습니다.

Dask로 HDF5 데이터 세트 열기 :

import dask.dataframe as ddds = dd.read_csv('csv_files/*.csv')

Dask는 HDF5 파일을 여는 데 0 초가 필요했습니다.실제로 파일을 읽는 compute 명령을 명시 적으로 실행하지 않았기 때문입니다.

Dask가있는 디스플레이 헤드 :

ds.head()

Dask는 파일의 처음 5 개 행을 출력하는 데 9 초가 필요했습니다.

Dask를 사용하여 10 번째 분위수를 계산합니다.

Dask에는 근사치가 아닌 실제 분위수를 계산하는 분위수 함수가 있습니다.

Quantile = ds.col1.quantile (0.1) .compute ()

Dask는 Juptyter Kernel이 중단되어 분위수를 계산할 수 없었습니다.

Dask로 새 열을 정의합니다.

아래 함수는 분위수 함수를 사용하여 새 이진 열을 정의합니다.Dask는 분위수를 사용하기 때문에 계산할 수 없었습니다.

ds [ 'col1_binary'] = ds.col1 & gt;ds.col1.quantile (0.1)

Dask로 데이터 필터링 :

ds = ds[(ds.col2 > 10)]

위의 명령은 Dask가 지연된 실행 패러다임을 사용하므로 실행하는 데 0 초가 필요했습니다.

Dask로 데이터 그룹화 및 집계 :

group_res = ds.groupby('col1_binary').col3.mean().compute()

Dask는 데이터를 그룹화하고 집계 할 수 없었습니다.

col3의 히스토그램을 시각화합니다.

plot = ds.col3.compute().plot.hist(bins=64, ylim=(13900, 14400))

Dask는 데이터를 시각화 할 수 없었습니다.

모든 열의 합계를 계산합니다.

suma = ds.sum().sum().compute()

Dask는 모든 데이터를 합산 할 수 없었습니다.

결과

아래 표는 Vaex vs Dask 실험의 실행 시간을 보여줍니다.NA는 도구가 데이터를 처리 할 수없고 Jupyter Kernel이 다운되었음을 의미합니다.

실험의 실행 시간 요약.저자가 만든 사진

결론

~의 사진조슈아 골데의 위에Unsplash

Vaex는 CSV를 HDF5 형식으로 변환해야하는데, 점심에 가서 돌아 오면 데이터가 변환 될 수 있기 때문에 신경 쓰지 않습니다.또한 주 메모리가 거의 또는 전혀없는 열악한 조건 (실험과 같이)에서는 데이터를 읽는 데 더 오래 걸릴 것임을 이해합니다.

내가 이해하지 못하는 것은 Vaex가 파일의 헤드를 표시하는 데 필요한 시간입니다 (처음 5 개 행에 대해 1189 초!).Vaex의 다른 작업은 크게 최적화되어 주 메모리 데이터 세트보다 더 큰 데이터를 대화식으로 분석 할 수 있습니다.

Dask는 단일 머신 대신 컴퓨팅 클러스터에 더 최적화되어 있기 때문에 다소 문제가있을 것으로 예상했습니다.Dask는 pandas 위에 구축되어 있습니다. 즉, pandas에서 느린 작업은 Dask에서 느리게 유지됩니다.

실험의 승자는 분명합니다.Vaex는 노트북의 메인 메모리 파일보다 더 큰 파일을 처리 할 수 있었지만 Dask는 처리 할 수 없었습니다.이 실험은 컴퓨팅 클러스터가 아닌 단일 머신에서 성능을 테스트하기 때문에 구체적입니다.

가기 전에

-교육 분야의 AI [동영상]-데이터 과학자를위한 무료 기술 테스트 & amp;기계 학습 엔지니어-비즈니스 리더를위한 데이터 과학[강좌]-PyTorch를 사용한 기계 학습 소개[강좌]-성장 제품 관리자되기[강좌]-대화 형 AI 및 분석을위한 라벨링 및 데이터 엔지니어링

위의 링크 중 일부는 제휴 링크이며 구매를 위해 통과하면 수수료를 받게됩니다.내가 코스를 링크하는 이유는 구매에 대한 수수료 때문이 아니라 품질 때문이라는 점을 명심하십시오.

나를 따라와트위터, 내가 정기적으로트위터데이터 과학 및 기계 학습에 대해.

~의 사진코트니 헤저의 위에Unsplash

Deploy Your Jupyter Notebooks the Easy Way — Python Edition -번역

바인더 저장소를 사용하여 노트북 배포

쉬운 방법으로 Jupyter 노트북 배포 — Python 에디션

간단한 7 단계를 통해 다른 사람의 컴퓨터에서 Jupyter 노트북을 실행하세요.

Photo by Lidya Nada on Unsplash

Intro

이 기사에서 나는 당신이 결코 말하지 않도록 도울 것입니다.

“하지만… 내 노트북에서 작동했습니다 😥”다시 한번.

간단한 7 단계로 노트북을 배포하는 방법을 보여 드리겠습니다. 😄.

이것을 상상하십시오.Jupyter 노트북에서 멋진 머신 러닝 파이프 라인을 구축하는 데 시간을 보냈습니다.컴퓨터에서 끝까지 실행되며 이제 상사 또는 LinkedIn 네트워크와 공유하여 얼마나 멋진 지 보여주고 싶습니다.

“이것은 쉬운 부분입니다”, 당신은 순진하게 자신에게 말합니다.

“이메일에 첨부하거나 노트북을 보관하고있는 GitHub 저장소에 링크를 게시하겠습니다.

만약 당신이 b이자형jw.org ko이 상황에서 작업을 공유하려는 좌절감을 알게 될 것입니다.

직면했을 가능성이있는 합병증 목록은 다음과 같습니다.

😡 라이브러리 종속성으로 인해 노트북 오류의 코드.

😡 사용자가 노트북과 상호 작용할 수 없습니다.

😡 노트북에 사용 된 데이터는 로컬 컴퓨터에 있습니다.

좋은 소식은 실제로 Jupyter 노트북을 배포하고 이러한 모든 일반적인 문제를 피할 수있는 놀랍도록 간단하고 무료 인 방법이 있다는 것입니다.또한 소프트웨어 엔지니어링 전문가 일 필요도 없습니다.

👍Binder Repositories로 노트북을 배포 할 수 있습니다.

자세한 내용을 살펴보기 전에 바인더 저장소에 대해 간략히 살펴 보겠습니다.

바인더 저장소 란 무엇입니까?

바인더는 최소 두 가지 요소를 포함하는 코드 저장소입니다.

☑️ 사람들이 실행할 수 있도록하려는 코드 또는 콘텐츠.우리의 목적을 위해 이것은 Jupyter 노트북이 될 것입니다.

☑️ 환경에 대한 구성 파일.바인더는 코드를 실행하는 데 필요한 환경을 구축하는 데 사용됩니다.

좋은 점은 Jupyter 노트북을 쉽게 배포 할 수있는 온라인 오픈 소스 바인더 저장소 서비스가 있다는 것입니다.

이 자습서에서는 My Binder를 사용합니다.바인더 서비스 및 BinderHub 기술 시연의 역할을하는 바인더 커뮤니티에서 유지 관리하는 사용하기 쉬운 서비스입니다.

시작하자!

전제 조건

이 자습서는 Python 기반 Jupyter 노트북 배포에 중점을 둡니다.따라서 독자가 이미 Jupyter 노트북에 익숙하다고 가정하겠습니다.

GitHub 계정이 필요합니다.사용 된 모든 csv / 데이터를 포함하여 프로젝트를 저장합니다.GitHub 계정이없는 경우 계속하기 전에 계정을 만들어야합니다.

노트북 배포

배포 자습서를 위해 일부 데이터를 표시하는 작은 Jupyter 노트북을 만들었습니다.GitHub에서 사용할 수 있도록하겠습니다.

1 단계 — 프로젝트를 보관할 GitHub 리포지토리를 만들고 원하는대로 GitHub 리포지토리의 이름을 지정할 수 있습니다.

저는 “deploy_notebook_example”이라고 불렀습니다 (… 매우 창의적입니다).

2 단계 — 다음 코드를 사용하여 Jupyter 노트북을 만듭니다.

GitHub에서 CSV 읽기
막대 차트 플로팅

첫 번째 코드는 GitHub 저장소에서 CSV 파일을 읽는 함수입니다.저장소의 데이터 파일 위치로 URL을 변경해야합니다.

3 단계 — 요구 사항 텍스트 파일을 만들고 GitHub에 업로드합니다.

이 파일에는 Jupyter 노트북에 대한 모든 라이브러리 종속성이 포함되어 있습니다.이것이 바인더가 노트북이 다른 사람의 컴퓨터에서 원활하게 실행되는 데 필요한 환경을 재현하기 위해 설치할 라이브러리를 파악하는 방법입니다.

이를 수행하는 가장 쉬운 방법은 “핍 동결“Jupyter 노트북에서.그러면 환경에 설치된 모든 라이브러리가 표시됩니다.노트북에서 사용한 라이브러리를 메모장에 복사하여 붙여넣고 “요구 사항”으로 저장하기 만하면됩니다.

라이브러리에도 버전이 포함되어 있어야합니다.

올바르게 완료되면 요구 사항 파일은 다음과 같아야합니다.

작성자 별 이미지 : 요구 사항 파일

⭐ 노트북으로 가져온 라이브러리 만 복사해야합니다!

4 단계 — Jupyter 노트북, csv 파일, 요구 사항 텍스트 파일을 GitHub 저장소에 업로드합니다.

GitHub 저장소는 다음과 같아야합니다.

이미지 작성자 : GitHub 저장소 :

5 단계 — 내 바인더로 이동

여기에 MyBinder 링크

프로젝트가 포함 된 저장소의 GitHub URL을 창에 붙여 넣습니다.

Git 참조 유형이라고 표시된 곳본관.

노트북 파일 이름에 노트북 유형의 경로가 표시됩니다.GitHub 저장소에서 노트북을 클릭하고 파일 경로를 복사하여 노트북 파일 이름을 얻을 수 있습니다.

이 작업이 완료되면시작하다단추.My Binder는 몇 분 안에 바인더 저장소를 구성합니다.

빌드가 완료되면 컴퓨터에서 프로젝트를 실행하려는 모든 사람과이 링크를 공유 할 수 있습니다.

🚀 바인더 버튼을 클릭하여 링크를 잡으세요!

image by author: binder example

Step 6 — Grab your Binder link and share it with the world!

아까 준비한 게 있어요

Step 7 — Celebrate

그것이 쉬웠다는 것을 알 수 있으며 “하지만… 내 노트북에서 작동했다”고 다시는 말할 필요가 없을 것입니다.

🌈 이것이 도움이 되었다면 피드백을 남기거나 Jupyter 노트북을 선보이고 싶은 친구와 공유하십시오.

감사

Players, Positions, and Probability in the NBA -번역

NBA의 선수, 위치 및 확률

지도 머신 러닝을 사용하여 NBA 위치 분류기 구축

Kobe Bryant shoots a free throw during a game against the Sacramento Kings. Photo by Ramiro Pianarosa on Unsplash

중요한 질문으로이 블로그를 시작하겠습니다. NBA 선수를 위치별로 분류하기 위해 기계 학습을 사용해야하는 이유는 무엇입니까?평범한 농구 팬이라면 어느 선수가 어떤 포지션을하는지 식별 할만큼 충분히 농구를봤을 것입니다.게임에 대한 지식이없는 사람이라도 각 위치가하는 일을 이해하기 위해 역대 최고의 유튜브 클립을 찾을 수 있습니다.그렇다면 기계 학습 알고리즘이 그 사용을 정당화하는 추가 정보를 제공 할 수 있습니까?

글쎄, 올 때o 분류 작업에서 기계 학습 알고리즘은 예측 된 확률을 사용하여 그룹에 속하는지 여부를 결정합니다. NBA 포지션의 경우 머신 러닝 알고리즘은 플레이어가 포인트 가드, 슈팅 가드, 스몰 포워드, 파워 포워드 또는 센터 일 확률을 예측합니다. 알고리즘은 주어진 플레이어의 각 위치에 대한 확률을 제공합니다. NBA 분석가 간의 토론이나 프론트 오피스에 유용 할 수있는 것은 바로 이러한 확률입니다. 새로운 세대의 NBA 재능이있을 때마다 선수들의 스킬 세트와 관련하여 더 많은 하이브리드 화를 보았습니다. 센터는 더 이상 화면을 설정하기 위해 3 포인트 라인에만 오는 바스켓에 엄격하게 가까운 로우 포스트 플레이어가 아닙니다. 현대 센터는 3 점 선으로 이동하여 3 점을 가져오고 일부는 빠른 휴식을 효과적으로 실행하는 데 필요한 기술을 갖추고 있습니다. 플레이어에게 할당 된 위치 확률을 통해 플레이어의 다양성을 이해하기 시작할 수 있습니다. 팀 내 각 선수의 위치 확률을 알고 있다면 자신의 팀이나 상대의 라인업 분석에 사용할 수 있습니다.

이러한 위치 확률에 대한 또 다른 용도를 고려해 보겠습니다.매년 스포츠 작가와 방송인 패널이 가장 가치있는 선수, 올해의 수비 선수, 모든 NBA 팀과 같은 다양한 상을 위해 투표합니다.당hoopsrumors.com에서 플레이어는 다음 기준을 충족하는 경우 슈퍼 맥스 계약 (팀 연봉 한도의 30 %)을받을 수 있습니다.

  • 이전 시즌 또는 이전 시즌 3 개 중 2 개에서 All-NBA 팀을 구성합니다.
  • 이전 시즌 또는 이전 시즌 3 개 중 2 개에서 올해의 수비 선수로 선정
  • 이전 세 시즌 중 최소 한 번에 가장 가치있는 선수로 선정

이러한 미디어 회원의 투표가 플레이어의 향후 수익에 영향을 미칠 수 있다는 점을 감안할 때 플레이어를 평가하고 비교할 때 공평한 메트릭을 갖는 것이 무엇보다 중요합니다.NBA 위치 분류 알고리즘에 대한 입력은 플레이어의 성능과 게임에 미치는 영향을 설명하는 기록 된 통계 그룹입니다.그런 다음 알고리즘은 이러한 입력을 받아 어떤 종류의 수학을 수행하고 위치 확률을 제공합니다.입력으로 올바른 가정을하고 모델을 적절하게 훈련한다고 가정하면 다음과 같은 것을 생성 할 수 있습니다.

2015 ~ 2016 시즌 동안 르브론 제임스의 위치 확률.(작가 별 이미지)

두 명의 잠재적 MVP 후보 중에서 결정하는 경우 수상 유권자는 위에 표시된 것과 같은 도구를 사용하여 위치 다양성이 더 큰 플레이어와 함께 가기로 결정할 수 있습니다.

데이터 수집

위에 표시된 확률을 생성 할 수있는 모델을 만들려면 먼저 각 플레이어에 대한 데이터를 수집해야합니다.소유 통계 100 개당고급 통계basketball-reference.com에서 수집되었습니다.플레이어 추적 데이터는 stats.nba.com에서nba_stats_trackingPython 용 라이브러리.이 라이브러리에 대한 문서를 찾을 수 있습니다.여기. 2015–16에서 2018–19 시즌의 선수 데이터 만 사용되었습니다. COVID-19로 인한 갑작스러운 정지와 플레이 한 정규 시즌 총 횟수가 일치하지 않아 2019-20 플레이어 데이터를 사용하지 않기로 결정했습니다. NBA 웹 사이트의 선수 추적 데이터는 2013–2014 시즌으로 거슬러 올라갑니다. 곧 보게 되겠지만 NBA는 샷 선택에있어서 약간의 발전을 거쳤습니다. NBA의 모든 팀에서 시도하고 만든 3 개의 포인터 수가 크게 증가했습니다. 3 포인트 시대에 해당하는 4 시즌의 데이터를 사용하여 해마다 통계적 차이로 인해 모델이 플레이어에 대해 잘못된 가정을하는 것을 방지하는 것이 제 목표였습니다. 정규 시즌 데이터 만 사용되었습니다. 다른 소스는 플레이어 이름과 시즌을 사용하여 단일 Pandas 데이터 프레임으로 결합되었습니다. 각 플레이어는 단일 관찰로 취급되었습니다 (예 : 2015–16 LeBron James는 2017–18 LeBron James와 다릅니다). 나는 세 가지 이유로 각 플레이어를 단일 관찰로 취급하기로 결정했습니다.

  1. 모델 학습 및 테스트에 충분한 데이터가 있는지 확인하려면
  2. 명단은 해마다 거의 동일하지 않습니다.드래프트, 트레이드 또는 자유 에이전시 출신이든 새로운 선수를 소개하면 코치가 라인업을 조정해야 할 수 있으며 선수들은 팀 성공을 위해 자신의 플레이를 변경할 수 있습니다.
  3. 다른 모든 사람들과 마찬가지로 NBA 선수는 매년 나이가 들어갑니다.나이 때문이든 부상 때문이든 시간은 플레이어의 플레이 방식에 영향을 미칩니다.큰 부상을 입은 폭발성 포인트 가드는 회복 후 점프 슈팅에 더 의존하는 것처럼 보일 수 있으며 다른 플레이어가 공격을 실행하도록하는 동안 슈팅 가드로 더 적합합니다.

데이터 탐색

최종 모델을 만들기 위해 각 플레이어에 대해 51 개의 변수를 사용했습니다.분명히 각 통계를 생성하고 분석하는 데 엄청난 시간이 걸리므로이 블로그에는 몇 가지만 포함하겠습니다.더 많은 분석 및 시각화를 볼 수있는 내 Github 저장소에 대한 링크를 아래에 남겨 두겠습니다.

3 점 슈팅이 오늘날 NBA에서 점점 더 중요한 스킬이되었다고 간략히 말씀 드렸습니다.위치별로 4 시즌에 걸친 3 점 슈팅을 살펴 보겠습니다.

3 점 촬영 비율 및 위치 별 시도 횟수 (작가 이미지)

각 포지션은 지난 4 시즌 동안 100 포지션 당 3 개의 포인터를 증가 시켰으며, 파워 포워드와 센터의 비율이 시간이 지남에 따라 향상되었음을 알 수 있습니다.파워 포워드와 센터는 주변 위치와 같은 비율로 3 점을 얻지 못하지만 이는 플레이어의 재능 수준이 증가함에 따라

2 포인트 촬영 비율 및 위치 별 시도 횟수 (작성자 별 이미지)

3 점 시도 횟수가 증가할수록 2 점 시도 횟수를 줄여야한다는 사실을 알 수 있습니다.모든 포지션에 걸쳐 전체적으로 긍정적 인 경향이 있습니다.전년 대비 2 포인트 퍼센트 증가는 미드 레인지 샷이 아닌 바스켓 근처에서 2 포인트 샷의 빈도가 높기 때문일 가능성이 높습니다.여기NBA에서 수년간 샷 선택이 어떻게 바뀌 었는지 알 수있는 좋은 기사입니다.

또한 소유 시간과 같은 플레이어 추적 메트릭을 살펴 보겠습니다.

직위 별 평균 보유 시간 (저자별 이미지)

여기서 주목할 점은 누가 가장 많이 공을 잡았는지에 대한 명확한 순서가있는 것 같다는 것입니다.통계를 통해 직위 간의 명확한 묘사가 분류 모델의 성능을 향상시키는 데 도움이 될뿐임을 알 수있었습니다.소유 시간과 유사하게, 100 개의 소유물 당 3 점 시도 횟수 또는 100 개의 소유물 당 2 점 비율을 보면 약간의 차이가 있습니다.

모델 선택

이 프로젝트에 사용한 최종 모델에 도달하기 전에 먼저 시도한 다른 모델 중 일부에 대해 논의하고 적합하지 않은 이유에 대해 논의하겠습니다.

로지스틱 회귀

적합하지 않은 이유 : 로지스틱 회귀 분석에서는 변수가 서로 독립적이어야합니다.

앞서 언급했듯이 각 플레이어의 위치를 결정하기 위해 51 개의 입력 변수가 있습니다.예를 들어, 전체 3 점 시도뿐만 아니라 캐치 앤슈 3 점 시도도 포함하도록 선택했습니다.캐치 앤슈 3 점 시도가 증가함에 따라 3 점 시도 횟수도 증가합니다.나는 그들의 위치를 예측하려고 할 때 3 개의 포인터를 잡아서 쏘는 숫자가 중요한 척도라고 주장 할 것이다.우리는 중앙에 비해 사격 경비원의 비율이 더 높을 것으로 예상 할 수 있습니다.

K 가까운 이웃

적합하지 않은 이유 : 정확도 점수는 기껏해야 평범했습니다.

3 개의 이웃으로 시작하여 모델 정확도는 64.5 %에 불과했습니다.더 많은 이웃으로 프로세스를 반복하면 정확도가 점진적으로 증가 할뿐입니다.11 개의 이웃은 68.8 %의 모델 정확도를 가져 왔습니다.정확성이 계속 향상되기를 바라면서 이웃 수를 계속 늘릴 수 있지만 위험 할 수 있습니다.

왜 위험한가요?두 명의 NBA 플레이어를 사용하여 K Nearest Neighbor 알고리즘이 작동하는 방식을 요약 해 보겠습니다.

게임당 어시스트 수와 게임당 리바운드로 플레이어를 분류하려고한다고 상상해보십시오.각 선수 (x 축은 어시스트, y 축은 리바운드)를 플로팅하면 어시스트 및 리바운드 수치가 높은 플레이어가 함께 클러스터링되고 어시스트 및 리바운드 수치가 낮은 플레이어가 함께 클러스터링됩니다.LeBron James는 평균 경기당 7.4 어시스트 (APG)와 경기당 7.4 리바운드 (RPG)를 기록했으며 Russell Westbrook은 경기당 평균 8.3 어시스트와 7.1 리바운드를 기록했으며 Jason Kidd는 평균 8.7APG와 6.3RPG를 기록했습니다.Russell Westbrook과 Jason Kidd는 포인트 가드이며 LeBron James (적어도 그의 커리어 대부분)는 스몰 포워드입니다.이 경우 가장 가까운 이웃 알고리즘은 LeBron을 포인트 가드로 분류하기 위해 선택합니다.분명히 우리는 LeBron이 포인트 가드 (또는 더 좋기는하지만 포인트 포워드)가되는 경우를 만들 수 있지만 이는 약간 다른 논의입니다.

랜덤 포레스트

적합하지 않은 이유 : 과적 합에 심각한 문제가 있습니다.

랜덤 포레스트와 XGBoost를 모두 사용하여 각각 78.2 %와 83.8 %의 훈련 정확도를 얻을 수있었습니다. 불행히도 테스트 세트의 모델 정확도는 각각 68.6 %와 69.5 %에 불과했습니다. 분명히 정확도의 차이로 인해 랜덤 포레스트 알고리즘이이 문제에 적합하지 않습니다. 랜덤 포레스트가 작동하는 방식을 생각할 때이 알고리즘이이 데이터에 대해 작동하지 않는 이유에 대한 직관을 개발할 수 있습니다. 본질적으로 랜덤 포레스트는 의사 결정 트리 그룹 일 뿐이며 각 의사 결정 트리는 데이터를 그룹으로 분할하는 임계 값을 설정합니다. 랜덤 포레스트의 의사 결정 트리 중 하나가 평균이 최소 5 PPG, 5 APG 및 5 RPG 인 모든 플레이어가 스몰 포워드 인 임계 값을 생성 한 경우 특히 해당 의사 결정 트리가 매우 자주 잘못 될 수 있음을 금방 알 수 있습니다. 이 평균을 충족하거나 초과 한 모든 포지션에 걸쳐 확실히 많은 플레이어가 있습니다. 위에서 설명한 것과 같은 의사 결정 트리가 보이지 않는 테스트 세트에 적용된 임의 포리스트가있는 경우 해당 임계 값이 적용되지 않을 수 있습니다.

그래서 어떤 모델이 작동 했습니까?

이 데이터에 대해 가장 성능이 좋은 모델은 서포트 벡터 머신이었습니다.교차 검증 된 훈련 정확도 74 %와 테스트 정확도 73 %를 얻을 수있었습니다.이 두 정확도 점수는 NBA 선수를 위치별로 분류 할 수있는 일반화 된 모델이 있다는 결론을 내릴 수있을만큼 충분히 가깝습니다.참고로 아래는이 모델에 대한 최적의 매개 변수입니다.GridSearchCV:

{ 'svc__C': 1,
'svc_gamma': '스케일',
'svc_kernel': '선형',
'svc_proability : True}

NBA에는 여러 직책을 맡을 수있을만큼 재능있는 선수가 많다는 것을 알고 있습니다.이것은 우리가 모델의 오 분류를 가지고 살 수 있음을 의미합니다.모델의 성능을 더 잘 이해하기 위해 몇 가지 숫자에 대해 논의하고 혼동 행렬을 살펴 보겠습니다.다중 클래스 혼동 행렬을 해석하는 방법을 이해하기 위해).

위치 예측을위한 혼동 행렬 (저자별 이미지)

위의 혼동 매트릭스를 살펴보면 파워 포워드의 24 %가 센터로, 스몰 포워드의 22 %가 슈팅 가드로, 슈팅 가드의 20 %가 스몰 포워드로 분류되었습니다.이러한 위치는 플레이어 (및 팀)에 따라 서로 바뀔 수 있다는 점을 고려할 때 특정 플레이어 분류가 허용되는지 여부를 이해하기 위해 특정 플레이어의 오 분류를 살펴볼 필요가 있습니다.

위의 최악의 오 분류는 스몰 포워드로 예측 된 센터 1 개와 파워 포워드로 예측 된 두 명의 슈팅 가드 일 가능성이 높습니다.또한 스몰 포워드로 잘못 분류 된 14 개의 파워 포워드 그룹을 볼 수도 있습니다.그 파워 포워드 중 일부가 스몰 포워드 포지션을 플레이하는 데 필요한 슈팅 능력과 볼 핸들링 스킬을 갖추었다면 오늘날 NBA에서 놀라운 일은 아닐 것입니다.

2016 NBA 결승에 대한 빠른 회상

플레이어의 위치 확률을 확인하기 위해 플레이어 메서드가 호출 된 클래스.position_breakdown () 이를 통해 모델이 각 플레이어를 어떻게 보는지 쉽게 시각화 할 수 있습니다.편리하게basketball-reference.com플레이어의 특정 위치에서 보낸 시간의 백분율을 추정하는 유사한 기능이 있습니다.이러한 추정치는 모델이 예측하는 위치 확률에 대한 벤치 마크를 제공 할 수 있습니다.

플레이어 개체를 인스턴스화하고 .position_breakdown () 앞에서 본 파이 플롯을 생성하려면 다음과 같이 메서드를 사용하십시오.

LeBron = Player('LeBron', 'James', '15-16')LeBron.position_breakdown()

소개에서 언급했듯이 위치 확률을 사용하여 다양한 라인업을 평가하고 해당 라인업이 상대방과 경쟁 할 때 어떤 장단점이 있는지 이해하기를 바랍니다.

먼저 2015–2016 Cleveland Cavaliers :

2015 ~ 2016 년 시작 Cavs 라인업에 대한 위치 확률 (작성자 별 이미지)

2015–2016 Golden State Warriors :

2015 ~ 2016 년에 시작하는 Warriors 라인업의 위치 확률 (작성자 별 이미지)

Andrew Bogut를 제외하고 2016 NBA 파이널의 선발 선수가 둘 이상의 포지션을 플레이 할 수 있다고 가정하는 것이 합리적입니다.게임 영화 및 스카우팅 보고서와 함께 사용할 때 클리블랜드 코칭 스태프는 이러한 위치 확률을 사용하여 공격시 Andrew Bogut를 더 작은 모바일 플레이어로 전환하고 그 불일치를 활용하도록 강요 할 수 있습니다.코칭 스태프는 트리스탄 톰슨의 윙 플레이어로 서브를 선택하고 케빈 러브가 센터로 이동하고 르브론이 파워 포워드로 이동하도록 할 수 있습니다.Kevin Love의 3 점슛 능력은 Bogut를 페인트에서 빼내고 Cavaliers가 LeBron이 바스켓에 더 명확한 차선을 가지고있는 플레이를 실행할 수 있도록합니다.

추가 모델 튜닝을 통해 플러스 / 마이너스 통계와 함께 이러한 위치 확률을 확인하여 다양한 라인업의 생산을 평가할 수 있습니다.

생각을위한 음식 : 해마다 변화하는 변화

여기 내가 관심이 있다고 생각했던 플레이어 포지션 분석이 더 있습니다!농구는 팀 게임이며 코트에서의 역할 / 위치는 코트에있는 다른 사람의 영향을받습니다.

다음은 2015 ~ 16 년 오클라호마 시티 썬더의 Kevin Durant와 2016 ~ 17 년 Golden State Warriors의 Kevin Durant의 모습입니다.

Kevin Durant 위치 확률의 연도 별 비교 (작성자 별 이미지)

같은 해에 Russell Westbrook의 위치 확률은 다음과 같습니다.

Russell Westbrook 위치 확률의 연도 별 비교 (저자 이미지).2016-17 년 Russell Westbrook은 Oscar Roberston이 1962 년에 위업을 달성 한 이래 처음으로 평균 트리플 더블을 기록했습니다. Westbrook은 그해 NBA MVP이기도했습니다.

다음 단계 및 향후 고려 사항

이제 위치 확률을 예측할 수있는 기준 모델이 있으므로 확실히 개선하고 싶을 것입니다!모델을 개선 할 수있는 한 가지 가능한 방법은 주성분 분석을 사용하여 예측에 필요한 기능의 수를 줄이고 줄이는 것입니다.위에서 설명한 지원 벡터 머신은 51 개의 서로 다른 변수를 사용했으며 중요하지 않은 변수를 제거함으로써 모델 정확도를 향상시킬 수 있습니다.비 기술적 이해 관계자 (예 : 코치, 스카우트 또는 프론트 오피스)에게 모델 성능과 다양한 통계의 중요성을 설명 할 때 변수가 적을수록 더 도움이됩니다.

미래의 NBA 포지션 분류자는 대학 초안 유망주 나 서명되지 않은 FA를 평가하는 데에도 유용 할 수 있습니다.특정 대학 선수는 대학 팀에 비해 NBA 팀의 다른 위치에 더 잘 맞을 수 있습니다.안타깝게도 다른 국가의 대학이나 농구 리그에서는 선수 추적 데이터를 쉽게 사용할 수 없습니다.WNBA와 여자 대학 농구를 위해 동일한 모델을 만드는 것도 도움이 될 것이라고 생각하지만플레이어 추적 시스템의 채택이 뒤쳐지고 있습니다.여자 농구에서.

NBA 포지션 분류기를 구축하는 것도 또 다른 중요한 질문을 제기합니다.73 % 정확도의 모델을 사용하는 경우 기존의 5 가지 위치가 다양한 플레이 스타일을 설명하는 데 여전히 충분합니까?5 개 위치 중 3 개 위치에서 해당 플레이어 중 25 % 이상이 잘못 분류 된 것을 확인했습니다.나는 그 선수들 중 일부가 전혀 잘못 분류되지 않았고 오히려 5 개의 전통적인 위치 중 하나에 맞지 않는 다재다능한 기술을 가지고 있다고 주장합니다.콤보 가드, 3 & amp; D, 스트레치 4 또는 포인트 포워드와 같은 용어를 들어 보셨을 것입니다.이것은 새로운 용어가 아니며 이러한 유형의 선수들이 NBA 농구의 초기 시대로 거슬러 올라간다는 증거가 있지만 NBA 어휘에서는 더 자주 사용되는 용어가되었습니다.다행히 NBA 명단에서 선수의 다양한 역할을 더 잘 설명하기위한 연구와 분석이 이미 있습니다.(위의 내용이 흥미 롭다면이 기사를 반드시 읽으십시오).

여기까지왔다면 읽어 주셔서 감사합니다!조금 길었지만 농구 팬과 데이터 과학자 모두에게 통찰력있는 블로그를 작성하고 싶었습니다.언제나 그렇듯이 모든 피드백을 환영합니다.내 프로젝트 전체를 내Github.

언제든지 문의하십시오.LinkedIn또는트위터데이터 과학이나 농구 분석에 대해 더 많이 논의하고 싶다면!

Analyzing Erasmus Study Exchanges with Pandas -번역

판다와 에라스무스 연구 교환 분석

Erasmus 프로그램 2011–12에서 발생한 20 만 개의 연구 교환으로 데이터 세트를 분석 한 결과

Photo by Windows on Unsplash

1987 년 이래, Erasmus 프로그램은 매년 수십만 명의 유럽 학생들에게 한 학기 또는 1 년을 다른 유럽 국가에서 해외로 보낼 수있는 기회를 제공하여 학생들에게 쉬운 교환 과정과 경제적 지원을 제공합니다.유럽의 다양한 사람, 언어 및 문화에 대한 마음과 마음을 열어주는 정말 귀중한 경험입니다.

Aust 비엔나에서 에라스무스 교환을 했어요아르 자형ia, 그리고 그것은 또한 잊을 수없는 경험이었습니다.데이터 분석에 대한 프로젝트를 수행해야하는 과정이있었습니다.힐케 반 뮈 르스그리고 나는 분석을하기로 결정했다2011-12 학년도 에라스무스 교환 데이터, 사용 가능유럽 연합 개방형 데이터 포털.1 년 후 오늘 저는이 프로젝트를 여러분과 공유하고 있습니다.

설정

이 과제에서 우리가 가진 주요 요구 사항은JupyterLab작업 환경으로파이썬프로그래밍 언어로판다데이터 처리 라이브러리로.또한 우리는Matplotlib일부 그래프를 그릴뿐만 아니라ScipyNumpy일부 작업을 수행합니다.

데이터 이해

그만큼데이터 세트,에서 다운로드유럽 연합 개방형 데이터 포털, CSV 파일로, 각 행은 한 학생을 나타내고 열은 그녀가오고가는 국가 및 대학, 학업 분야, 교환 기간 등 교환에 대한 정보를 제공합니다.

Erasmus 데이터 세트 미리보기

칼럼이 많고이 프로젝트에 쓸모없는 칼럼이 많으므로 지금 각각을 설명하는 대신 필요할 때마다 그 의미를 설명하겠습니다.또 다른 중요한 사실은이 데이터 세트가 연구 교환뿐만 아니라 인턴십과 같은 다른 유형의 에라스무스 배치에 대한 정보를 제공한다는 것입니다.이 프로젝트는 연구 교류에만 집중할 것이기 때문에, 곧 보게 될 다른 프로젝트는 삭제 될 것입니다.

데이터 다운로드 및 정리

그러니 일하러 가자!먼저 JupyterLab에서 새 노트북을 만들고 필요한 기본 라이브러리를 가져오고 플로팅 스타일을 설정하는 것으로 시작하겠습니다.

그런 다음 유럽 연합 데이터 포털 서버에서 데이터 세트를 다운로드하고이를 Pandas DataFrame으로 변환해야합니다.

마지막으로,이 데이터 세트는 학습 및 인턴십 교환을 모두 다루며 학습 교환에만 집중하기를 원하므로 게재 위치에 해당하는 행과 열을 제거합니다.

단일 변수 분석

연령,받은 보조금 및 크레딧 수

이제 데이터를 분석 할 준비가되었으므로 학생의 나이, 학생이받는 보조금 또는 ECTS (크레딧) 수와 같은 일부 단일 변수에 대한 최소, 최대, 평균 및 표준 편차를 계산하여 시작하겠습니다.연구.데이터를 더 잘 이해하기 위해 히스토그램으로 표시합니다.

예를 들어 학생의 연령에 대한 통계 지표를 얻는 방법을 살펴 보겠습니다 (열나이) :

2011-12 세의 막내 에라스무스 학생은 겨우 17 세였습니다. 놀랍습니다!하지만 가장 놀라운 것은 가장 나이가 83 세라는 것이 믿기지 않습니다.우리는 너무 충격을 받아이 사람에 대한 더 많은 정보를 위해 데이터 셋을 검색했고, 갑자기이 교환 프로그램에 참여하기로 결정한 것은 한 명뿐 아니라 두 명의 영국 신사였습니다.그럼에도 불구하고 평균 연령은 22 세입니다.

총계 (연구자) 및 월간 (STUDYGRANT / LENGTHSTUDYPERIOD)받은 보조금 및 크레딧 수 (TOTALECTSCREDITS) – 전체 노트북에서 코드를 찾을 수 있습니다 –.

성별 비율

남녀 비율을 결정하는 것도 매우 흥미로울 수 있습니다.이것은 얻을 수 있습니다성별DataFrame의 열과‘에프’(여성) 및‘미디엄’(남성) :

쉽죠?남성의 39.41 %에 비해 학생의 60.59 %가 여성 인 것 같습니다.그러나이 비율은 나중에 살펴 보 겠지만 대상 대학마다 크게 다릅니다.

학생의 60.59 %가 여성이고 39.41 %가 남성입니다.

대학 보내기 및 받기

더 많은 학생들을 해외로 보내는 유럽 대학이 무엇인지 궁금하십니까?그런 다음‘홈 인스 티 튜션’데이터 프레임에서 고유 한 값과 빈도를value_counts ()메서드를 사용하고 막대 그래프로 플로팅합니다.

보내는 기관의 상위 10 개

받는 기관의 상위 10 개를 얻으려면‘홈 인스 티 튜션’와‘HOSTINSTITUTION’및 voilà!10 대 발송 기관 중 8 개 기관이 수신 기관 상위 10 개 기관에 속한다는 것은 말할 필요도 없습니다.

언어

영어는 보편적 언어로 간주되지만 유럽 학생들이 교환을 위해 해외에 갈 때 셰익스피어 언어로 과정을 수강한다는 의미는 아닙니다.데이터 세트의 각 학생에 대해LANGUAGETAUGHT열은 코스를받은 언어를 제공하므로 코스에서 가장 많이 사용되는 10 가지 언어를 플로팅 해 보겠습니다.

예상대로 영어가 10 만 3 천명으로 가장 인기가 많았고, 스페인어가 2 만 7 천명으로 거의 4 배나 낮았습니다.

영어는 지금까지 가장 많이 가르치는 언어입니다.

그렇다면 이것은 영국과 아일랜드에서 에라스무스 학생들이 영어 코스를 수강하는 비율이 스페인에서 스페인어, 프랑스에서 프랑스어로 수강하는 것보다 훨씬 높다는 것을 의미합니까?찾아 보자!

에라스무스 학생들이 현지 언어로 공부하는 상위 10 개국

전혀!영국의 에라스무스 학생의 91.9 %가 영어로 배우고 있습니다 (영국에서도 영어의 전능함에도 불구하고 외국어 코스가 있음), 아일랜드의 86.8 %가 그 뒤를이었습니다.3 위는 스페인 에라스무스 학생의 84.5 %가 스페인어로 수강했으며 4 위는 프랑스 학생의 81.1 %가 프랑스어로 이수했습니다.1 위와 5 위 (영국과 이탈리아)의 차이는 14 %에 불과합니다.

주제 영역

또 다른 필수 질문은 에라스무스 학생들이 가장 인기있는 과목과 덜 인기있는 과목입니다.에 따르면유네스코의 ISCED 분류, 9 개의 연구 영역이 있습니다.교육, 인문학 & amp;예술, 사회 과학 & amp;비즈니스 & amp;법률, 과학, 공학 및제조 & amp;건설, 농업, 건강 및복지 및 서비스.데이터 세트의 각 행에 대해 학생의 주제 영역을 나타내는 숫자가 열에 있습니다.대상 지역.그러나 해당 필드에서는 첫 번째 숫자 만 필요하므로 코드에주의하십시오.람다함수:

8 만 명 이상의 학생들이있는 가장 인기있는 학습 영역은사회 과학, 비즈니스 및 법률.은메달과 동메달은인문학 & amp;기예엔지니어링, 제조 및구성, 각각 44.7k 및 30.8k 학생.

여러 변수 분석

대학 수혜에 따른 성별 비율

유럽에“여대”나“남학생”이 있는지 생각해 본 적이 있습니까?글쎄, 우리는 남학생이나 여학생 만받는 기관이 많다는 사실을 알고 깜짝 놀랐습니다.우리는 신입 여학생의 비율로 상위 30 대 대학을 쉽게 순위를 매길 수 있으며, 다른 학생은 신입생을위한 상위 30 대 대학으로 쉽게 순위를 매길 수 있습니다.

놀랍게도 두 순위 모두에서 남성 또는 여성의 비율은 100 %입니다.처음 123 개 대학을 인쇄하지 않는 한 남성의 100 %보다 낮은 비율이 표시되지 않으며 처음 256 개 기관을 나열하지 않는 한 여성도 마찬가지입니다.

대학 수강 기준 평균 연령

가장 나이가 많은 대학과 가장 어린 대학이 어디인지 궁금하십니까?

최연소 순위에서는 18 (IES Poblenou, Barcelona – 사실 대학이 아니라 기술 대학 센터 –)에서 상위 10 위의 19.5 년까지 차이가 거의 없지만 가장 오래된 순위에서는 차이가 다음과 같습니다.더 높은 : 45 년Hochschule 21독일에서 10 위는Lyceé Albert Camus, 프랑스에서 입학하는 학생들의 평균 연령은 32 세입니다.

국가 별 신입생 비율

제가 태어난 나라 인 스페인은 유학을가는 유럽 학생들이 가장 원하는 곳 중 하나입니다.그럼에도 불구하고 많은 스페인 학생들도 저처럼 에라스무스를 다니기 때문에 비율이 상당히 균형을 이룹니다.그러나 해외로 많은 학생을 파견하지만 거의받지 못하는 국가가 있으며 그 반대의 경우도 마찬가지입니다.막대 그래프를 통해 각 국가의 송수신 비율을 쉽게 확인할 수 있습니다.

변수 간의 상관 관계 분석

본국 및 호스트 국가

본국 및 목적지 국가는 숫자가 아닌 범주 형 변수이므로 상관 지수를 계산하는 것은 간단하지 않습니다.이러한 이유로 우리는 히트 맵과 같이 더 시각적 인 것을 선택했습니다.

위의 히트 맵에서 각 행은 모국을 나타내고 각 열은 목적지를 나타냅니다.결과는 각 국가에 대해 정규화됩니다. 즉, 색상은 각 목적지 (열)를 선택한 각 국가 (행)의 학생 비율을 나타냅니다.이 차트에서 보면이 변수 쌍의 엔트로피가 매우 낮은 것 같습니다. 즉, 특정 국가의 경우 선호하는 목적지가 어디인지 예측할 수 있음을 의미합니다.한 국가에 대해 확인해 보겠습니다.

본국과 목적지 국가간에 상관 관계가없는 경우, 각 본국에 대해 각 목적지 국가는 2.86 %의 학생을 받게됩니다.그러나 위의 히트 맵과 원형 차트에서 모두 그렇게 보이지 않습니다.예를 들어, 원형 차트에서 스페인 학생들이 이탈리아 (21.3 %), 프랑스 (12.4 %), 독일 (11.1 %), 영국 (9.4 %), 포르투갈 (6.8 %) 및 폴란드 (6.6 %).

목적지 및 주제 영역

유럽에는 매우 명망있는 대학이 있지만 모든 지식 영역에서 탁월한 대학을 찾기는 매우 어렵습니다.그렇기 때문에 각 과목에 대해 다른 기관보다 일부 기관에 대한 선호도가 있는지 확인하는 것이 흥미로울 것입니다.다시 범주 형 변수를 다루고 있으므로 이전과 동일한 기법을 적용 해 보겠습니다.

학과목과 목표 대학의 상관 관계가 0이면 각 학과목에 대해 각 목표 대학은 학생의 0.04 %를 받게된다.그러나 대부분의 교과 영역에서 더 많은 학생을받는 기관은 1 %에서 3.7 % 사이로 두 변수 간의 엔트로피가 높지 않음을 보여줍니다.그러나 이런 의미에서 우리는 나머지를 강조하는 대학을 찾을 수 없었습니다.“일반”범주에 대한 비율은 놀랍고 3 개 기관 만이 학생의 거의 50 %를받습니다.

가정 및 호스트 국가 및 월별 보조금

2019 년에 에라스무스 교환을 위해 서류 작업을 할 때 스페인 정부가 생활비에 따라 세 그룹의 목적지 국가를 설정하여 각기 다른 월별 보조금을 제공 한 것을 기억합니다.제가 그곳에 갔을 때 다른 유럽 국가에서 온 친구들이 저보다 더 많거나 적은 돈을받는 것을보고 놀랐습니다.그렇다면 월별 보조금은 무엇에 의존합니까? 당신이 가고자하는 국가 또는 당신이 오는 국가?찾아 보자!

각 목적지 국가의 월별 보조금 상자 그림
각 발송 국가의 월별 보조금 상자 그림

두 플롯을 비교하고 엄청난 양의 이상 값을 제거하면 학생들이받는 금액에서 본국이 목적지 국가보다 더 결정적인 요소임을 알 수 있습니다.첫 번째 그림에서 각 목적지 국가의 월별 보조금 평균은 매우 동질적인 것으로 보이며 대부분의 경우 평균값의 50 %에서 150 %까지 분산이 매우 높습니다.두 번째 플롯은 분산이 매우 낮고 평균 보조금은 매우 이질적입니다.따라서이 분석을하기 전에 예상했듯이 월별 보조금은 주로 귀하가 출신 국가에 달려 있습니다.

글이 너무 길지 않았 으면 좋겠습니다.사실,이 글에서는 너무 길지 않기 위해 우리가 만든 몇 가지 통찰력을 건너 뛰었습니다. 관심이 있다면 여기에완전한 노트북.나는 또한 다시 한 번 외침을하고 싶다힐케 반 뮈 르스이 프로젝트에 투입된 작업을 위해.물론 질문이나 제안이 있으시면 댓글로 알려주세요.

참고