Đây là một tình huống mà tôi gặp phải trong công việc thực tế của mình và nó cũng là một trong những công việc thú vị nhất để tạo một báo cáo html đơn giản. Tôi đã viết một cái gì đó phức tạp và tôi được yêu cầu tạo một hàm hơi giống với chức năng in và để xác định xem một Hình ảnh 1 — Mẫu dữ liệu được tạo (hình ảnh của tác giả)Và thế là xong — bây giờ bạn có một chức năng tạo dữ liệu bán hàng giả. Hãy xem cách hình dung nó tiếp theo Trực quan hóa dữ liệuNhiệm vụ tiếp theo của bạn là tạo một hàm trực quan hóa tập dữ liệu đã tạo trước đó dưới dạng biểu đồ đường. Đây là loại trực quan hóa phù hợp nhất khi bạn đang xử lý dữ liệu chuỗi thời gian Đây là chức năng hiển thị dữ liệu và gọi ví dụ def plot(data: pd.DataFrame, filename: str) -> None:
plt.figure(figsize=(12, 4))
plt.grid(color='#F2F2F2', alpha=1, zorder=0)
plt.plot(data['Date'], data['ItemsSold'], color='#087E8B', lw=3, zorder=5)
plt.title(f'Sales 2020/{data["Date"].dt.month[0]}', fontsize=17)
plt.xlabel('Period', fontsize=13)
plt.xticks(fontsize=9)
plt.ylabel('Number of items sold', fontsize=13)
plt.yticks(fontsize=9)
plt.savefig(filename, dpi=300, bbox_inches='tight', pad_inches=0)
plt.close()
return
# Test
december = generate_sales_data(month=12)
plot(data=december, filename='december.png')
Tóm lại — bạn đang tạo trực quan hóa dữ liệu, đặt tiêu đề, thử nghiệm với các phông chữ — không có gì đặc biệt. Hình ảnh trực quan không được hiển thị cho người dùng mà thay vào đó được lưu vào máy. Sau này bạn sẽ thấy điều này có thể mạnh mẽ như thế nào Một cuộc gọi ví dụ sẽ lưu hình ảnh dữ liệu cho tháng 12 năm 2020. Đây là cách nó trông giống như Hình ảnh 2 — Bán hàng cho lô đất tháng 12/2020 (hình ảnh của tác giả)Và đó là chức năng trực quan hóa của bạn. Chỉ còn một bước trước khi bạn có thể tạo tài liệu PDF, đó là lưu tất cả các hình ảnh trực quan và xác định cấu trúc trang báo cáo Tạo cấu trúc trang PDFNhiệm vụ bây giờ là tạo một hàm thực hiện như sau - Tạo một thư mục cho các biểu đồ — xóa nếu nó tồn tại và tạo lại nó
- Lưu trực quan hóa dữ liệu cho mỗi tháng trong năm 2020 ngoại trừ tháng 1 — để bạn có thể xem cách làm việc với số lượng phần tử khác nhau trên mỗi trang (vui lòng bao gồm cả tháng 1)
- Tạo ma trận PDF từ trực quan hóa — ma trận 2 chiều trong đó một hàng đại diện cho một trang trong báo cáo PDF
Đây là đoạn mã cho chức năng PLOT_DIR = 'plots'
def construct():
# Delete folder if exists and create it again
try:
shutil.rmtree(PLOT_DIR)
os.mkdir(PLOT_DIR)
except FileNotFoundError:
os.mkdir(PLOT_DIR)
# Iterate over all months in 2020 except January
for i in range(2, 13):
# Save visualization
plot(data=generate_sales_data(month=i), filename=f'{PLOT_DIR}/{i}.png')
# Construct data shown in document
counter = 0
pages_data = []
temp = []
# Get all plots
files = os.listdir(PLOT_DIR)
# Sort them by month - a bit tricky because the file names are strings
files = sorted(os.listdir(PLOT_DIR), key=lambda x: int(x.split('.')[0]))
# Iterate over all created visualization
for fname in files:
# We want 3 per page
if counter == 3:
pages_data.append(temp)
temp = []
counter = 0
temp.append(f'{PLOT_DIR}/{fname}')
counter += 1
return [*pages_data, temp]
Nó có thể rất nhiều để tiêu hóa, vì vậy hãy xem qua từng dòng. Các ý kiến sẽ giúp. Ý tưởng đằng sau việc sắp xếp là lấy biểu diễn số nguyên tháng từ chuỗi — e. g. , 3 từ “3. png” và sử dụng giá trị này để sắp xếp các biểu đồ. Xóa dòng này nếu thứ tự không quan trọng, nhưng đó không phải là trường hợp của tháng Đây là một cuộc gọi ví dụ của hàm
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 0plots_per_page = construct()
plots_per_page
Bạn sẽ thấy phần sau trong Notebook của mình sau khi chạy đoạn mã trên Hình ảnh 3 — Hình ảnh trực quan được tạo (hình ảnh của tác giả)Trong trường hợp bạn đang thắc mắc — đây là giao diện của thư mục
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 1 trên máy của tôi (sau khi gọi hàm
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 0)Hình 4 — Ma trận nội dung báo cáo PDF (hình ảnh của tác giả)Và đó là tất cả những gì bạn cần để tạo báo cáo PDF — bạn sẽ học cách thực hiện điều đó trong phần tiếp theo Tạo báo cáo PDFĐây là nơi mọi thứ kết hợp với nhau. Bây giờ, bạn sẽ tạo một lớp
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 3 tùy chỉnh kế thừa từ lớp
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 7. Bằng cách này, tất cả các thuộc tính và phương thức đều có sẵn trong lớp của chúng ta, nếu bạn không quên gọi
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 5 trong hàm tạo. Hàm tạo cũng sẽ giữ các giá trị cho chiều rộng và chiều cao của trang (giấy A4)Lớp
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 3 của bạn sẽ có một số phương thức
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 7 – được sử dụng để xác định tiêu đề tài liệu. Một logo tùy chỉnh được đặt ở bên trái (đảm bảo có một hoặc xóa dòng mã này) và một văn bản mã hóa cứng được đặt ở bên phải
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 8 – được sử dụng để xác định chân tài liệu. Nó sẽ chỉ hiển thị số trang
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 9 – được sử dụng để xác định trang trông như thế nào. Điều này sẽ phụ thuộc vào số lượng trực quan hóa được hiển thị trên mỗi trang, vì vậy các vị trí là lề được đặt tương ứng (vui lòng chơi xung quanh với các giá trị)def plot(data: pd.DataFrame, filename: str) -> None:
plt.figure(figsize=(12, 4))
plt.grid(color='#F2F2F2', alpha=1, zorder=0)
plt.plot(data['Date'], data['ItemsSold'], color='#087E8B', lw=3, zorder=5)
plt.title(f'Sales 2020/{data["Date"].dt.month[0]}', fontsize=17)
plt.xlabel('Period', fontsize=13)
plt.xticks(fontsize=9)
plt.ylabel('Number of items sold', fontsize=13)
plt.yticks(fontsize=9)
plt.savefig(filename, dpi=300, bbox_inches='tight', pad_inches=0)
plt.close()
return
# Test
december = generate_sales_data(month=12)
plot(data=december, filename='december.png') 0 – được sử dụng để thêm một trang trống và điền nội dung vào đó
Đây là toàn bộ đoạn mã cho lớp
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 5Bây giờ là lúc khởi tạo nó và nối các trang từ ma trận nội dung 2 chiều
def generate_sales_data(month: int) -> pd.DataFrame:
# Date range from first day of month until last
# Use ```calendar.monthrange(year, month)``` to get the last date
dates = pd.date_range(
start=datetime(year=2020, month=month, day=1),
end=datetime(year=2020, month=month, day=calendar.monthrange(2020, month)[1])
)
# Sales numbers as a random integer between 1000 and 2000
sales = np.random.randint(low=1000, high=2000, size=len(dates))
# Combine into a single dataframe
return pd.DataFrame({
'Date': dates,
'ItemsSold': sales
})
# Test
generate_sales_data(month=3) 6Ô trên sẽ mất một chút thời gian để thực thi và sẽ trả về một chuỗi trống khi hoàn tất. Điều đó được mong đợi, vì báo cáo của bạn được lưu vào thư mục lưu trữ Sổ ghi chép Đây là cách trang đầu tiên của báo cáo trông như thế nào Hình 5 — Trang đầu tiên của báo cáo PDF (hình ảnh của tác giả)Tất nhiên, sản phẩm của bạn trông sẽ khác do logo khác và do dữ liệu bán hàng hoàn toàn ngẫu nhiên Và đó là cách bạn tạo các báo cáo PDF hỗ trợ trực quan hóa dữ liệu bằng Python. Hãy kết thúc mọi thứ tiếp theo Phần kết luậnHôm nay bạn đã học được nhiều điều — cách tạo dữ liệu giả cho bất kỳ trường hợp nào, cách trực quan hóa dữ liệu đó và cách nhúng trực quan hóa vào một báo cáo PDF. Nhúng trực quan hóa của bạn sẽ yêu cầu thay đổi mã tối thiểu — chủ yếu là để định vị và lề Hãy cho tôi biết nếu bạn muốn xem hướng dẫn tạo báo cáo tự động dựa trên diễn giải mô hình máy học (SHAP hoặc LIME) hoặc nội dung nào khác liên quan đến khoa học dữ liệu
Python có thể tạo báo cáo không?
Tin vui là Python có thể tạo báo cáo ở tất cả các định dạng này . Vì vậy, bạn có thể chọn bất kỳ định dạng nào trong số này, tùy thuộc vào nhu cầu của người dùng báo cáo. Dưới đây là tóm tắt những gì chúng tôi sẽ trình bày trong hướng dẫn này. Chúng tôi sẽ cần gấu trúc cho tất cả các báo cáo, vì chúng tôi cần thao tác và phân tích dữ liệu khi xây dựng báo cáo.
Làm cách nào để tạo báo cáo HTML bằng Python?
Báo cáo Python HTML bằng Python/v3 . Bước 1. Tạo 2 biểu đồ và 2 bảng. đồ thị đầu tiên. Dữ liệu chứng khoán Apple năm 2014 với đường trung bình động. Hãy lấy dữ liệu chứng khoán của Apple bằng cách sử dụng mô hình tài chính matplotlib từ năm 2014, sau đó lấy một đường trung bình động với một tích chập gọn gàng. . Bước 2. Tạo báo cáo HTML. dưới dạng một chuỗi và ghi vào tệp
Python có thể tự động báo cáo không?
Python là một công cụ tuyệt vời để tự động hóa , gần như thần kỳ. Trong bài viết này tôi sẽ hướng dẫn bạn cách xây dựng hệ thống báo cáo tự động với Python. Hệ thống sẽ tạo báo cáo PDF hàng ngày và gửi qua email.
Tạo báo cáo nghĩa là gì?
Tạo Báo cáo được được thiết kế để cho phép bạn lấy dữ liệu báo cáo ở một số định dạng . Các định dạng có sẵn bao gồm báo cáo biểu đồ với báo cáo bảng đồng hành và báo cáo danh sách để biết thông tin chi tiết. |