Hướng dẫn partition by in python pandas - phân vùng theo pandas python

Bạn có thể sử dụng phương thức Pandas Transform () cho các tập hợp nhóm như "Over (phân vùng bởi ...)" trong SQL:

Show
import pandas as pd
import numpy as np

#create dataframe with sample data
df = pd.DataFrame({'group':['A','A','A','B','B','B'],'value':[1,2,3,4,5,6]})

#calculate AVG(value) OVER (PARTITION BY group)
df['mean_value'] = df.groupby('group').value.transform(np.mean)

df:
group   value   mean_value
A       1       2
A       2       2
A       3       2
B       4       5
B       5       5
B       6       5

Làm thế nào để bạn sắp xếp các giá trị trong gấu trúc nhóm? – Use .groupby and .transform to achieve SQL-like window functionality in Pandas

Sắp xếp các giá trị theo thứ tự giảm dần với GroupBy, bạn có thể sắp xếp các giá trị theo thứ tự giảm dần bằng cách sử dụng phương thức ascending = false param sang sort_values ​​(). Hàm đầu () được sử dụng để có được n hàng đầu tiên. Nó rất hữu ích cho việc kiểm tra nhanh chóng nếu đối tượng của bạn có đúng loại dữ liệu trong đó.

tl; dr-sử dụng .groupby và .transform để đạt được chức năng cửa sổ giống SQL trong gấu trúc

Dữ liệu cắt và cắt giảm dữ liệu bằng gấu trúc và SQL là một kỹ năng chính cho bất kỳ nhà khoa học dữ liệu nào.

Các nhà khoa học dữ liệu thường sẽ làm việc với cả SQL và gấu trúc để chuyển đổi dữ liệu tùy thuộc vào trường hợp sử dụng cụ thể và nơi lưu trữ dữ liệu. Ví dụ: SQL thường được sử dụng khi làm việc trực tiếp với dữ liệu trong cơ sở dữ liệu, tức là tạo các bảng hoặc chế độ xem mới của dữ liệu. Gandas được sử dụng thường xuyên hơn khi xử lý trước dữ liệu cho các quy trình công việc học máy hoặc trực quan hóa.

Điều quan trọng là phải lưu loát với cả cú pháp SQL và Pandas để có thể chuyển đổi liền mạch dữ liệu của bạn cho câu hỏi kinh doanh mà bạn đang cố gắng trả lời.

Tuy nhiên, có những trường hợp thực hiện các phép biến đổi nhất định dễ diễn ra bằng ngôn ngữ này hơn ngôn ngữ khác.

Đối với tôi, điều này dường như luôn xảy ra khi cố gắng thực hiện các phép biến đổi liên quan đến các chức năng cửa sổ bằng gấu trúc. Tôi không biết nó là gì, nhưng tôi thấy cú pháp SQL cho các chức năng cửa sổ sẽ trực quan hơn nhiều.

Trong bài đăng này, tôi sẽ mô tả sự khác biệt giữa cú pháp SQL và PANDAS để áp dụng các tính toán chức năng cửa sổ cho các phân vùng khác nhau trong dữ liệu của bạn.

Các chức năng cửa sổ cho phép người dùng thực hiện các tập hợp và tính toán so với các mặt cắt (phân vùng) khác nhau của dữ liệu. Trái ngược với các hàm tập hợp tiêu chuẩn (ví dụ: tổng, giá trị trung bình, đếm, v.v.) trả về một giá trị duy nhất cho mỗi phân vùng được xác định trong truy vấn, các hàm cửa sổ trả về một giá trị cho mỗi hàng trong bảng gốc.

Khi nào bạn sẽ sử dụng chức năng cửa sổ?

Tôi thấy có hai kịch bản chính trong quy trình công việc khoa học dữ liệu liên quan đến các chức năng cửa sổ:

  • nội suy hoặc buộc các giá trị bị thiếu dựa trên các thuộc tính thống kê của các giá trị khác trong cùng một nhóm
  • Tạo các tính năng mới cho các mô hình ML

Khi bạn có dữ liệu bảng điều khiển, các chức năng cửa sổ rất hữu ích để tăng cường dữ liệu của bạn với các tính năng mới đại diện cho các thuộc tính tổng hợp của các phân vùng cụ thể trong dữ liệu của bạn.

Ví dụ, hãy tưởng tượng bạn đang tạo ra một mô hình để dự đoán giá nhà trong khu phố của bạn cung cấp nhiều thông tin khác nhau về mỗi ngôi nhà như loại nhà (ví dụ: tách rời, căn hộ, v.v.), diện tích sàn, số phòng ngủ, số phòng tắm, v.v.

Một tính năng bạn có thể muốn tạo cho mô hình của mình là so sánh diện tích sàn của ngôi nhà hiện tại với khu vực trung bình cho một ngôi nhà thuộc loại cụ thể đó. Giả thuyết này: Nếu ngôi nhà có diện tích sàn lớn hơn khu vực trung bình cho một loại nhà tương đương, thì nó có nhiều khả năng được định giá ở đầu thị trường.

Để tính toán tính năng này, chúng tôi sẽ cần tạo một cột mới, với mỗi hàng, chứa giá nhà trung bình cho loại nhà hàng hiện tại. Sau đó, chúng tôi có thể tính toán sự khác biệt giữa khu vực nhà và trung bình nhóm của nó để sử dụng làm tính năng trong mô hình của chúng tôi.

Tính năng mới này sẽ yêu cầu một hàm cửa sổ sẽ tính toán và trả về giá trị cho mỗi hàng trong bộ dữ liệu với giá nhà trung bình của nhóm đó.

Tài liệu cơ sở dữ liệu Postgres có một hướng dẫn tuyệt vời về các chức năng cửa sổ.

Đây là một bản tóm tắt nhanh chóng.

Để tạo thành hàm cửa sổ trong SQL, bạn cần ba phần:

  • Hàm tổng hợp hoặc tính toán để áp dụng cho cột đích (ví dụ:
    import datetime
    import random
    
    import ffn
    import matplotlib.pyplot as plt
    
    import pandas as pd
    
    %matplotlib inline
    
    1,
    import datetime
    import random
    
    import ffn
    import matplotlib.pyplot as plt
    
    import pandas as pd
    
    %matplotlib inline
    
    2)
  • Từ khóa
    import datetime
    import random
    
    import ffn
    import matplotlib.pyplot as plt
    
    import pandas as pd
    
    %matplotlib inline
    
    3 để bắt đầu chức năng cửa sổ
  • Từ khóa
    import datetime
    import random
    
    import ffn
    import matplotlib.pyplot as plt
    
    import pandas as pd
    
    %matplotlib inline
    
    4 xác định (các) phân vùng dữ liệu để áp dụng hàm tổng hợp
  • (Tùy chọn) Từ khóa
    import datetime
    import random
    
    import ffn
    import matplotlib.pyplot as plt
    
    import pandas as pd
    
    %matplotlib inline
    
    5 để xác định phân loại cần thiết trong mỗi phân vùng dữ liệu. Ví dụ: nếu thứ tự của các hàng ảnh hưởng đến giá trị của phép tính

Chức năng cửa sổ trong gấu trúc

.groupby là cơ sở của các chức năng cửa sổ trong gấu trúc

Tôi nghĩ rằng sự nhầm lẫn của tôi khi cố gắng dịch các chức năng cửa sổ SQL sang gấu trúc bắt nguồn từ thực tế là bạn không sử dụng rõ ràng từ khóa

import datetime
import random

import ffn
import matplotlib.pyplot as plt

import pandas as pd

%matplotlib inline
6 cho các chức năng cửa sổ trong SQL. Trong khi đó, trong gấu trúc, cơ sở của các hàm cửa sổ là hàm .groupby.

import datetime
import random

import ffn
import matplotlib.pyplot as plt

import pandas as pd

%matplotlib inline
7 trong gấu trúc tương tự như từ khóa
import datetime
import random

import ffn
import matplotlib.pyplot as plt

import pandas as pd

%matplotlib inline
4 trong SQL. Điều khoản nhóm trong Pandas xác định phân vùng (nhóm) trong dữ liệu mà hàm tổng hợp nên được áp dụng.

.Transform cho phép bạn áp dụng các phép biến đổi phức tạp

Ngoài việc chỉ định các phân vùng dữ liệu bằng cách sử dụng

import datetime
import random

import ffn
import matplotlib.pyplot as plt

import pandas as pd

%matplotlib inline
7, chúng ta cần xác định tổng hợp hoặc tính toán nào để áp dụng cho các phân vùng dữ liệu. Điều này có thể đạt được bằng cách sử dụng hàm .transform.

Hàm

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
0 có hàm (nghĩa là hàm tính toán số lượng mong muốn) làm đối số và trả về một khung dữ liệu có cùng độ dài với bản gốc.

Hàm được cung cấp cho

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
0 có thể là một chuỗi (đối với các chức năng tổng hợp đơn giản như ‘sum,‘ nghĩa là, ‘đếm) hoặc hàm có thể gọi được (tức là hàm lambda) cho các hoạt động phức tạp hơn.

Bạn don luôn luôn phải sử dụng .transform

Nếu chức năng bạn áp dụng cho dữ liệu của mình không phải là hàm tổng hợp, tức là nó tự nhiên trả về một giá trị (hàng) cho mỗi hàng trong khung dữ liệu, thay vì một hàng, bạn không cần sử dụng từ khóa

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
0.

Ví dụ: nếu bạn muốn tạo một cột mới với các giá trị trong mỗi nhóm được thay đổi bởi một (nghĩa là trong một thời gian, giá trị của ngày trước), bạn có thể bỏ qua hàm

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
0 và chỉ cần sử dụng chức năng pandas tích hợp thay thế - trong trường hợp này Hàm
tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
4. Điều này là do việc chuyển dữ liệu tự nhiên trả về một giá trị cho mỗi hàng, thay vì một giá trị tổng hợp duy nhất cho nhóm.

Ví dụ

Cách tốt nhất để giải thích sự khác biệt là bằng cách chứng minh với một số ví dụ.

Đối với các chức năng cửa sổ này, bản demo, chúng tôi sẽ sử dụng bộ dữ liệu về giá cổ phiếu cho các công ty khác nhau. Mã dưới đây cho thấy một số thiết lập đơn giản để thu thập dữ liệu này.

Có một cuốn sổ tay đi kèm cho bài đăng trên blog này có sẵn trong REPO Kỹ thuật cho Khoa học Dữ liệu nếu bạn muốn tự mình thử các ví dụ.

Thành lập

Cài đặt các yêu cầu nếu cần thiết

# install required libraries if necessary
pip install matplotlib pandas ffn

Nhập thư viện

import datetime
import random

import ffn
import matplotlib.pyplot as plt

import pandas as pd

%matplotlib inline

Thu thập dữ liệu

Chúng tôi sẽ sử dụng một trong những thư viện yêu thích của tôi để phân tích tài chính - thư viện FFN - để thu thập dữ liệu trong một dòng mã.

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()

Hướng dẫn partition by in python pandas - phân vùng theo pandas python

Lưu vào cơ sở dữ liệu SQLite

Để chứng minh và so sánh cú pháp SQL với Pandas, chúng tôi sẽ lưu dữ liệu này trong cơ sở dữ liệu SQLite trong bộ nhớ đơn giản. Điều này cho phép chúng tôi sử dụng cú pháp trực tiếp SQL để đọc và chuyển đổi dữ liệu.

import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)

Hãy cùng lấy một số ví dụ bằng cách sử dụng bộ dữ liệu giá cổ phiếu để so sánh sự khác biệt giữa các hàm cửa sổ trong SQL và tương đương trong gấu trúc.

Ví dụ 1: Tính giá cổ phiếu tối đa cho mỗi công ty trong khoảng thời gian

SQL

Chúng tôi tính toán giá cổ phiếu tối đa cho mỗi đánh dấu bằng cách sử dụng hàm

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
5 kết hợp với hàm cửa sổ:

  • Hàm cửa sổ được bắt đầu với từ khóa
    tickers = [
        "AAPL",  # apple
        "DIS",  # disney
        "NKE",  # nike
        "TSLA",  # tesla
    ]
    
    # get stock price data
    prices = ffn.get(tickers, start="2018-01-01")
    
    # convert data into 'long' table format for purposes of this exercise
    prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")
    
    # reset index to make 'Date' a column
    prices = prices.reset_index()
    
    # display 5 example rows in the dataset
    prices.sample(5).sort_index()
    
    6
  • Chúng tôi chỉ định rằng cột
    tickers = [
        "AAPL",  # apple
        "DIS",  # disney
        "NKE",  # nike
        "TSLA",  # tesla
    ]
    
    # get stock price data
    prices = ffn.get(tickers, start="2018-01-01")
    
    # convert data into 'long' table format for purposes of this exercise
    prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")
    
    # reset index to make 'Date' a column
    prices = prices.reset_index()
    
    # display 5 example rows in the dataset
    prices.sample(5).sort_index()
    
    7 nên được sử dụng để phân vùng dữ liệu

Điều này sẽ trả về một bảng có cùng độ dài với bản gốc, nhưng với một cột mới có tên

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
8 chứa giá cổ phiếu tối đa của công ty có liên quan trong khoảng thời gian, dữ liệu bao gồm.

ex1_sql_query = """
SELECT
    date(Date) as Date
    , ticker
    , closing_price
    , MAX(closing_price) OVER(PARTITION BY ticker) as max_price
FROM
    prices
"""

# use pandas read_sql to execute the query and return a dataframe
ex1_sql = pd.read_sql(ex1_sql_query, con=conn)
ex1_sql

Hướng dẫn partition by in python pandas - phân vùng theo pandas python

Gấu trúc

Chúng tôi sử dụng chức năng GroupBy để phân vùng dữ liệu của Ticker và cung cấp

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
9 cho hàm
import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
0 để có được một cột mới cho thấy giá cổ phiếu tối đa cho người đánh dấu đó.

Lưu ý rằng

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
9 là một hàm tập hợp đơn giản, chúng ta chỉ có thể chuyển nó dưới dạng chuỗi cho hàm
import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
0 thay vì cung cấp một hàm mới (ví dụ: hàm Lambda).

# copy dataframe to avoid overwritting original (optional)
ex1_pandas = prices.copy()

# add new column
ex1_pandas["max_price"] = ex1_pandas.groupby("ticker")["closing_price"].transform("max")

ex1_pandas

Hướng dẫn partition by in python pandas - phân vùng theo pandas python

Ví dụ 2: 28 ngày đóng cửa trung bình di chuyển cho mỗi công ty

SQL

Chúng tôi tính toán giá cổ phiếu tối đa cho mỗi đánh dấu bằng cách sử dụng hàm

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
5 kết hợp với hàm cửa sổ:

Hàm cửa sổ được bắt đầu với từ khóa

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
6

ex2_sql_query = """
SELECT
    date(Date) AS Date
    , ticker
    , closing_price
    , AVG(closing_price) OVER(
        PARTITION BY ticker
        ORDER BY date(Date)
        ROWS BETWEEN 27 PRECEDING AND CURRENT ROW
    )
     AS ma_28_day
FROM
    prices
"""

ex2_sql = pd.read_sql(ex2_sql_query, con=conn)
ex2_sql

Hướng dẫn partition by in python pandas - phân vùng theo pandas python

Gấu trúc

Chúng tôi sử dụng chức năng GroupBy để phân vùng dữ liệu của Ticker và cung cấp

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
9 cho hàm
import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
0 để có được một cột mới cho thấy giá cổ phiếu tối đa cho người đánh dấu đó.

Lưu ý rằng

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
9 là một hàm tập hợp đơn giản, chúng ta chỉ có thể chuyển nó dưới dạng chuỗi cho hàm
import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
0 thay vì cung cấp một hàm mới (ví dụ: hàm Lambda).

# install required libraries if necessary
pip install matplotlib pandas ffn
0

Hướng dẫn partition by in python pandas - phân vùng theo pandas python

Hướng dẫn partition by in python pandas - phân vùng theo pandas python
Ví dụ 2: 28 ngày đóng cửa trung bình di chuyển cho mỗi công ty

SQL

# install required libraries if necessary
pip install matplotlib pandas ffn
1

# install required libraries if necessary
pip install matplotlib pandas ffn
2

Hướng dẫn partition by in python pandas - phân vùng theo pandas python

Gấu trúc

Chúng tôi sử dụng chức năng GroupBy để phân vùng dữ liệu của Ticker và cung cấp

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
9 cho hàm
import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
0 để có được một cột mới cho thấy giá cổ phiếu tối đa cho người đánh dấu đó.

# install required libraries if necessary
pip install matplotlib pandas ffn
3

Hướng dẫn partition by in python pandas - phân vùng theo pandas python

Lưu ý rằng tickers = [ "AAPL", # apple "DIS", # disney "NKE", # nike "TSLA", # tesla ] # get stock price data prices = ffn.get(tickers, start="2018-01-01") # convert data into 'long' table format for purposes of this exercise prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price") # reset index to make 'Date' a column prices = prices.reset_index() # display 5 example rows in the dataset prices.sample(5).sort_index() 9 là một hàm tập hợp đơn giản, chúng ta chỉ có thể chuyển nó dưới dạng chuỗi cho hàm import sqlite3 # create connection to in memory sqlite db with sqlite3.connect(":memory:") as conn: # save prices dataframe to sqlite db prices.to_sql(name="prices", con=conn, index=False) 0 thay vì cung cấp một hàm mới (ví dụ: hàm Lambda).

SQL

Chúng tôi tính toán giá cổ phiếu tối đa cho mỗi đánh dấu bằng cách sử dụng hàm

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
5 kết hợp với hàm cửa sổ:

# install required libraries if necessary
pip install matplotlib pandas ffn
4

# install required libraries if necessary
pip install matplotlib pandas ffn
5

Hướng dẫn partition by in python pandas - phân vùng theo pandas python

Gấu trúc

Chúng tôi sử dụng chức năng GroupBy để phân vùng dữ liệu của Ticker và cung cấp

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
9 cho hàm
import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
0 để có được một cột mới cho thấy giá cổ phiếu tối đa cho người đánh dấu đó.

# install required libraries if necessary
pip install matplotlib pandas ffn
6

Hướng dẫn partition by in python pandas - phân vùng theo pandas python

Lưu ý rằng tickers = [ "AAPL", # apple "DIS", # disney "NKE", # nike "TSLA", # tesla ] # get stock price data prices = ffn.get(tickers, start="2018-01-01") # convert data into 'long' table format for purposes of this exercise prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price") # reset index to make 'Date' a column prices = prices.reset_index() # display 5 example rows in the dataset prices.sample(5).sort_index() 9 là một hàm tập hợp đơn giản, chúng ta chỉ có thể chuyển nó dưới dạng chuỗi cho hàm import sqlite3 # create connection to in memory sqlite db with sqlite3.connect(":memory:") as conn: # save prices dataframe to sqlite db prices.to_sql(name="prices", con=conn, index=False) 0 thay vì cung cấp một hàm mới (ví dụ: hàm Lambda).

Gấu trúc

Chúng tôi sử dụng chức năng GroupBy để phân vùng dữ liệu của Ticker và cung cấp

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
9 cho hàm
import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
0 để có được một cột mới cho thấy giá cổ phiếu tối đa cho người đánh dấu đó.

Lưu ý rằng

tickers = [
    "AAPL",  # apple
    "DIS",  # disney
    "NKE",  # nike
    "TSLA",  # tesla
]

# get stock price data
prices = ffn.get(tickers, start="2018-01-01")

# convert data into 'long' table format for purposes of this exercise
prices = prices.melt(ignore_index=False, var_name="ticker", value_name="closing_price")

# reset index to make 'Date' a column
prices = prices.reset_index()

# display 5 example rows in the dataset
prices.sample(5).sort_index()
9 là một hàm tập hợp đơn giản, chúng ta chỉ có thể chuyển nó dưới dạng chuỗi cho hàm
import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
0 thay vì cung cấp một hàm mới (ví dụ: hàm Lambda).

Ví dụ 2: 28 ngày đóng cửa trung bình di chuyển cho mỗi công ty

# install required libraries if necessary
pip install matplotlib pandas ffn
7

# install required libraries if necessary
pip install matplotlib pandas ffn
8

Hướng dẫn partition by in python pandas - phân vùng theo pandas python

# install required libraries if necessary
pip install matplotlib pandas ffn
9

import datetime
import random

import ffn
import matplotlib.pyplot as plt

import pandas as pd

%matplotlib inline
0

Khi tính trung bình di chuyển, thứ tự các giá trị trong nhóm rất quan trọng (chúng nên theo thứ tự thời gian), do đó chúng ta cần đặt hàng các giá trị trong nhóm vào ngày.

Ngoài ra, trong SQL, để xác định cửa sổ cuộn, chúng tôi chỉ định rằng trung bình nên được tính bằng cách sử dụng 27 hàng trước và hàng hiện tại (tổng cộng 28).

Để đạt được điều tương tự trong gấu trúc, chúng ta có thể tạo một cột mới trong DataFrame (‘MA_28_Day,) bằng cách sử dụng

import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
3 và
import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
0. Chúng tôi sử dụng cú pháp Python sườn Lambda để xác định chức năng nào nên được áp dụng cho mỗi nhóm. Trong trường hợp này, chúng tôi muốn sử dụng tính toán trung bình (trung bình) trên cửa sổ cuộn 28 hàng.

Hãy nhớ sắp xếp khung dữ liệu gấu trúc trước khi áp dụng chức năng cửa sổ khi sử dụng các tính toán nhạy cảm với thứ tự của các hàng

Trung bình di động 28 ngày cho Tesla vào năm 2021

Trong ví dụ này, chúng tôi không cần sử dụng hàm

import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
0 vì
import sqlite3

# create connection to in memory sqlite db
with sqlite3.connect(":memory:") as conn:

    # save prices dataframe to sqlite db
    prices.to_sql(name="prices", con=conn, index=False)
6 tự nhiên trả về giá trị cho mỗi hàng trong dữ liệu, thay vì tập hợp.

Ví dụ 4: Tỷ lệ phần trăm hàng ngày

  • Để tính toán lợi nhuận hàng ngày, chúng tôi cần tính toán mức đóng trước đó trong một truy vấn con (hoặc CTE) và sau đó sử dụng giá trị đó để tính toán mức tăng thay đổi phần trăm hoặc lợi nhuận hàng ngày.
  • Ở đây chúng ta có thể sử dụng cú pháp chức năng Lambda để áp dụng tính toán phức tạp hơn cho mỗi nhóm.
  • Ví dụ 5: Thiếu nội suy dữ liệu
  • Cuối cùng, ví dụ này, chúng tôi sẽ chỉ sử dụng gấu trúc để chứng minh cách sử dụng các chức năng loại cửa sổ để nội suy dữ liệu bị thiếu.
  • Trước tiên, chúng tôi ngẫu nhiên xóa một số dữ liệu để mô phỏng dữ liệu bị thiếu trong bộ dữ liệu trong thế giới thực.
  • Sau đó, chúng ta có thể sử dụng các chức năng nội suy hoặc cắt bỏ để điền vào các khoảng trống trong mỗi nhóm với một số lượng có ý nghĩa nhất cho tình huống. Đối với trường hợp sử dụng của chúng tôi, chúng tôi sẽ sử dụng phương thức ‘Forward Fill, để áp đặt giá trị của giá đóng trước đó nếu dữ liệu bị thiếu.

Làm thế nào để tôi phân vùng một gấu trúc trong Python?

Phân vùng () hoạt động theo cách tương tự như str.split (). Thay vì tách chuỗi ở mọi lần xuất hiện của dấu phân cách/dấu phân cách, nó chỉ chia chuỗi ở lần xuất hiện đầu tiên. Trong chức năng phân chia, bộ phân cách không được lưu trữ ở bất cứ đâu, chỉ có văn bản xung quanh nó được lưu trữ trong danh sách/dataFrame mới. split() . Instead of splitting the string at every occurrence of separator/delimiter, it splits the string only at the first occurrence. In the split function, the separator is not stored anywhere, only the text around it is stored in a new list/Dataframe.

Làm thế nào để bạn phân chia các tế bào trong gấu trúc?

Chia () gấu trúc cung cấp một phương thức để phân chia chuỗi xung quanh một dấu phân cách/dấu phân cách được truyền.Sau đó, chuỗi có thể được lưu trữ dưới dạng danh sách trong một chuỗi hoặc nó cũng có thể được sử dụng để tạo nhiều khung dữ liệu cột từ một chuỗi phân tách duy nhất. Pandas provide a method to split string around a passed separator/delimiter. After that, the string can be stored as a list in a series or it can also be used to create multiple column data frames from a single separated string.

Làm thế nào để phân vùng theo công việc trong SQL?

Phân vùng bởi: Điều này chia các hàng hoặc kết quả truy vấn được đặt thành các phân vùng nhỏ.Đặt hàng bởi: Điều này sắp xếp các hàng theo thứ tự tăng dần hoặc giảm dần cho cửa sổ phân vùng.Thứ tự mặc định là tăng dần.Hàng hoặc phạm vi: Bạn có thể giới hạn thêm các hàng trong một phân vùng bằng cách chỉ định các điểm bắt đầu và điểm cuối.divides the rows or query result set into small partitions. Order By: This arranges the rows in ascending or descending order for the partition window. The default order is ascending. Row or Range: You can further limit the rows in a partition by specifying the start and endpoints.

Làm thế nào để bạn sắp xếp các giá trị trong gấu trúc nhóm?

Sắp xếp các giá trị theo thứ tự giảm dần với GroupBy, bạn có thể sắp xếp các giá trị theo thứ tự giảm dần bằng cách sử dụng phương thức ascending = false param sang sort_values ().Hàm đầu () được sử dụng để có được n hàng đầu tiên.Nó rất hữu ích cho việc kiểm tra nhanh chóng nếu đối tượng của bạn có đúng loại dữ liệu trong đó.using ascending=False param to sort_values() method. The head() function is used to get the first n rows. It is useful for quickly testing if your object has the right type of data in it.