中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Python實現自動化生成數據報表

發布時間:2022-01-20 15:43:07 來源:億速云 閱讀:178 作者:清風 欄目:開發技術

這篇“如何使用Python實現自動化生成數據報表”文章,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要參考一下,對于“如何使用Python實現自動化生成數據報表”,小編整理了以下知識點,請大家跟著小編的步伐一步一步的慢慢理解,接下來就讓我們進入主題吧。

開發工具

Python版本: 3.6.4

相關模塊:

pandasxlwingsmatplotlib模塊;

xlwingsmatplotlib模塊;

matplotlib模塊;

以及一些Python自帶的模塊。

環境搭建

安裝Python并添加到環境變量,pip安裝需要的相關模塊即可。

原始數據如下,主要有水果蔬菜名稱、銷售日期、銷售數量、平均價格、平均成本、總收入、總成本、總利潤等。

如何使用Python實現自動化生成數據報表

主要代碼

先導入相關庫,使用pandas讀取原始數據。

import pandas as pd
import xlwings as xw
import matplotlib.pyplot as plt

# 對齊數據
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

# 讀取數據
df = pd.read_csv(r"fruit_and_veg_sales.csv")
print(df)

結果如下

如何使用Python實現自動化生成數據報表

一共是有1000行的銷售數據。

使用xlwings庫創建一個Excel工作簿,在工作簿中創建一個表,表名為fruit_and_veg_sales,然后將原始數據復制進去。

# 創建原始數據表并復制數據
wb = xw.Book()
sht = wb.sheets["Sheet1"]
sht.name = "fruit_and_veg_sales"
sht.range("A1").options(index=False).value = d

將原始數據取過來后,再在工作簿中創建一個可視化表,即Dashboard表。

# 創建表
wb.sheets.add('Dashboard')
sht_dashboard = wb.sheets('Dashboard')

現在,我們有了一個包含兩個工作表的Excel工作簿。fruit_and_veg_sales表有我們的數據,Dashboard表則是空白的。

下面使用pandas來處理數據,生成Dashboard表的數據信息。

DashBoard表的頭兩個表格,一個是產品的利潤表格,一個是產品的銷售數量表格。

使用到了pandas的數據透視表函數。

# 銷售數量透視表
pv_quantity_sold = pd.pivot_table(df, index='類別', values='銷售數量', aggfunc='sum')
print(pv_quantity_sold)

得到數據如下

如何使用Python實現自動化生成數據報表

這里先對數據進行了查詢,發現日期列為object,是不能進行分組匯總的。

所以使用了pd.to_datetime()對其進行了格式轉換,而后根據時間進行分組匯總,得到每個月的數據情況。

最后一個groupby將為Dashboard表提供第四個數據信息

# 總收入前8的日期數據
gb_top_revenue = (df.groupby(df["銷售日期"])
    .sum()
    .sort_values('總收入(美元)', ascending=False)
    .head(8)
    )[["銷售數量", '總收入(美元)', '總成本(美元)', "總利潤(美元)"]]
print(gb_top_revenue)

總收入前8的日期,得到結果如下

如何使用Python實現自動化生成數據報表

現在我們有了4份數據,可以將其附加到Excel中

# 設置背景顏色, 從A1單元格到Z1000單元格的矩形區域
sht_dashboard.range('A1:Z1000').color = (198, 224, 180)

# A、B列的列寬
sht_dashboard.range('A:B').column_width = 2.22
print(sht_dashboard.range('B2').api.font_object.properties.get())
# B2單元格, 文字內容、字體、字號、粗體、顏色、行高(主標題)
sht_dashboard.range('B2').value = '銷售數據報表'
sht_dashboard.range('B2').api.font_object.name.set('黑體')
sht_dashboard.range('B2').api.font_object.font_size.set(48)
sht_dashboard.range('B2').api.font_object.bold.set(True)
sht_dashboard.range('B2').api.font_object.color.set([0, 0, 0])
sht_dashboard.range('B2').row_height = 61.2

# B2單元格到W2單元格的矩形區域, 下邊框的粗細及顏色
sht_dashboard.range('B2:W2').api.get_border(which_border=9).weight.set(4)
sht_dashboard.range('B2:W2').api.get_border(which_border=9).color.set([0, 176, 80])

# 不同產品總的收益情況圖表名稱、字體、字號、粗體、顏色(副標題)
sht_dashboard.range('M2').value = '每種產品的收益情況'
sht_dashboard.range('M2').api.font_object.name.set('黑體')
sht_dashboard.range('M2').api.font_object.font_size.set(20)
sht_dashboard.range('M2').api.font_object.bold.set(True)
sht_dashboard.range('M2').api.font_object.color.set([0, 0, 0])

# 主標題和副標題的分割線, 粗細、顏色、線型
sht_dashboard.range('L2').api.get_border(which_border=7).weight.set(3)
sht_dashboard.range('L2').api.get_border(which_border=7).color.set([0, 176, 80])
sht_dashboard.range('L2').api.get_border(which_border=7).line_style.set(-4115)

先配置一些基本內容,比如文字,顏色背景,邊框線等,如下圖

如何使用Python實現自動化生成數據報表

使用函數,批量生成四個表格的格式

# 表格生成函數.
def create_formatted_summary(header_cell, title, df_summary, color):
    """
    Parameters
    ----------
    header_cell : Str
        左上角單元格位置, 放置數據

    title : Str
        當前表格的標題

    df_summary : DataFrame
        表格的數據

    color : Str
        表格填充色
    """

    # 可選擇的表格填充色
    colors = {"purple": [(112, 48, 160), (161, 98, 208)],
              "blue": [(0, 112, 192), (155, 194, 230)],
              "green": [(0, 176, 80), (169, 208, 142)],
              "yellow": [(255, 192, 0), (255, 217, 102)]}

    # 設置表格標題的列寬
    sht_dashboard.range(header_cell).column_width = 1.5

    # 獲取單元格的行列數
    row, col = sht_dashboard.range(header_cell).row, sht_dashboard.range(header_cell).column

    # 設置表格的標題及相關信息, 如:字號、行高、向左居中對齊、顏色、粗體、表格的背景顏色等
    summary_title_range = sht_dashboard.range((row, col))
    summary_title_range.value = title
    summary_title_range.api.font_object.font_size.set(14)
    summary_title_range.row_height = 32.5
    # 垂直對齊方式
    summary_title_range.api.verticalalignment = xw.constants.HAlign.xlHAlignCenter
    summary_title_range.api.font_object.color.set([255, 255, 255])
    summary_title_range.api.font_object.bold.set(True)
    sht_dashboard.range((row, col),
                        (row, col + len(df_summary.columns) + 1)).color = colors[color][0]  # Darker color

    # 設置表格內容、起始單元格、數據填充、字體大小、粗體、顏色填充
    summary_header_range = sht_dashboard.range((row + 1, col + 1))
    summary_header_range.value = df_summary
    summary_header_range = summary_header_range.expand('right')
    summary_header_range.api.font_object.font_size.set(11)
    summary_header_range.api.font_object.bold.set(True)
    sht_dashboard.range((row + 1, col),
                        (row + 1, col + len(df_summary.columns) + 1)).color = colors[color][1]  # Darker color
    sht_dashboard.range((row + 1, col + 1),
                        (row + len(df_summary), col + len(df_summary.columns) + 1)).autofit()

    for num in range(1, len(df_summary) + 2, 2):
        sht_dashboard.range((row + num, col),
                            (row + num, col + len(df_summary.columns) + 1)).color = colors[color][1]

    # 找到表格的最后一行
    last_row = sht_dashboard.range((row + 1, col + 1)).expand('down').last_cell.row
    side_border_range = sht_dashboard.range((row + 1, col), (last_row, col))

    # 給表格左邊添加帶顏色的邊框
    side_border_range.api.get_border(which_border=7).weight.set(3)
    side_border_range.api.get_border(which_border=7).color.set(colors[color][1])
    side_border_range.api.get_border(which_border=7).line_style.set(-4115)


# 生成4個表格
create_formatted_summary('B5', '每種產品的收益情況', pv_total_profit, 'green')
create_formatted_summary('B17', '每種產品的售出情況', pv_quantity_sold, 'purple')
create_formatted_summary('F17', '每月的銷售情況', gb_date_sold, 'blue')
create_formatted_summary('F5', '每日總收入排名Top8 ', gb_top_revenue, 'yellow')

得到結果如下

如何使用Python實現自動化生成數據報表

可以看到,一行行的數據經過Python的處理,變為一目了然的表格。

最后再繪制一個matplotlib圖表,添加一張logo圖片,并保存Excel文件

# 中文顯示
plt.rcParams['font.sans-serif']=['Songti SC']

# 使用Matplotlib繪制可視化圖表, 餅圖
fig, ax = plt.subplots(figsize=(6, 3))
pv_total_profit.plot(color='g', kind='bar', ax=ax)

# 添加圖表到Excel
sht_dashboard.pictures.add(fig, name='ItemsChart',
                           left=sht_dashboard.range("M5").left,
                           top=sht_dashboard.range("M5").top,
                           update=True)

# 添加logo到Excel
logo = sht_dashboard.pictures.add(image="pie_logo.png",
                           name='PC_3',
                           left=sht_dashboard.range("J2").left,
                           top=sht_dashboard.range("J2").top+5,
                           update=True)

# 設置logo的大小
logo.width = 54
logo.height = 54

# 保存Excel文件
wb.save(rf"水果蔬菜銷售報表.xlsx")

此處需設置一下中文顯示,否則會顯示不了中文,只有一個個方框。

得到最終的水果蔬菜銷售報表

如何使用Python實現自動化生成數據報表

python可以做什么

Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。

以上是“如何使用Python實現自動化生成數據報表”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

剑阁县| 江油市| 南投县| 江阴市| 漠河县| 奇台县| 浦北县| 奉化市| 班玛县| 枞阳县| 咸阳市| 四子王旗| 凤冈县| 双鸭山市| 吴川市| 宽城| 满城县| 当涂县| 延寿县| 即墨市| 营山县| 武鸣县| 张家界市| 开远市| 沙洋县| 民权县| 南陵县| 南开区| 遵义市| 东乡县| 平谷区| 巴南区| 闽侯县| 改则县| 宝山区| 噶尔县| 孝义市| 惠来县| 衡阳县| 谷城县| 普安县|