當前位置: 妍妍網 > 碼農

Python和RPA什麽關系?

2024-03-11碼農

知乎上有人問「為什麽會python了,還要用RPA?」

RPA:機器人流程自動化

Python是實作RPA的工具之一,且RPA要復雜的多,遠不是會Python這麽簡單。

要理解RPA和Python的區別,先看它們各自做什麽。

1、什麽時候會用到RPA?

比如你的財務同事需要做財務對賬,發票報銷,稅務申報等,這些流程看似容易,其實到操作層面很繁瑣細碎,而且大多是重復性操作。

如果人工來處理財務之類的數據,很浪費時間,而RPA可以搭建一整套財務自動化的系統,從數據采集、儲存、整合、分析、輸出都幫你串起來,既節省了人力又極大的避免人為出錯。

你可以把這個流程放到任何業務場景上,人力資源、供應鏈、保險理賠、裝置管理等,都有RPA的用武之地。

這就是RPA,obotic process automation,機器人流程自動化。

2、什麽是RPA技術?

RPA是一種模仿人類與軟體互動方式的技術,用於執行大批次、可重復的任務,特別是財務、供應鏈之類的重復流程化業務。

你的IPhone上的快捷指令也是一種RPA,透過一系列指令的設定,實作自動化操作某個復雜任務。

RPA的一大特點是無程式碼或者低程式碼開發,RPA 能夠復制人類執行基於電腦的流程的方式,你只需要在自動化軟體上設定好流程和步驟,就可以實作復雜的操作。

最簡單的 RPA 機器人是透過記錄使用者與應用程式互動時的點選和按鍵來建立的,比如剛說的手機上的快捷指令。

3、Python是否可以替代RPA呢?

並不能!!!

Python只是一種程式語言,你可以用它來編寫一套RPA程式,但這個建立在你的Python能力非常NB的基礎上,而且你要懂RPA涉及到的各種復雜的流程、技術和邏輯。

所以說RPA並不是Python,也不是編程,它是一套完整的自動化系統,涉及業務流程、介面協定、通訊機制、ETL、資料庫管理、數據建模、數據安全等等。

其中尤其要註意,設計一套RPA,對於業務流程需要很深的研究。

比如你想做個保單管理的RPA系統,首先你得要知道保單哪些環節可以透過RPA來提升效率,比如保單錄入、更新、查詢、續保、理賠等流程,這些流程涉及到使用者的哪些數據、這些數據在哪些系統裏等等,都需要很專業的保險行業知識。

所以單純地以為學會Python,就不需要RPA,其實是不懂RPA。

當然你可以透過Python指令碼開發一些簡單的自動化工具,比如文件轉換、網路爬蟲、生成報表、影像處理等等,這些都可以透過相應的Python庫很快地實作。

4、使用Python開發簡單的自動化報表程式

下面舉個例子:

你作為數據分析師,每周定期為公司基金銷售數據制作報表 該報表包含以下內容:

  1. 繪制月度銷售額趨勢圖

  2. 繪制基金產品銷售額分布圖

  3. 繪制未來6個月基金銷售額預測趨勢圖

要求在excel中自動執行Python程式碼,每次更新數據只要點選xlwings外掛程式執行即可。

xlwings是Python的第三方庫,用來操作Excel,也有Excel的外掛程式。

步驟如下:

「1. 在excel中呼叫Python指令碼」

直接在命令列輸入以下程式碼即可:

xlwings quickstart fund_sales

如果你想把檔建立到指定資料夾裏,需要提前將命令列導航到指定目錄。

建立好後,在fund_sales資料夾裏會出現兩個檔,.xlsm和.py檔。

「2. 編寫Python指令碼」

開啟.py檔裏在main函式裏面寫python程式碼,功能是為公司基金銷售數據制作報表。

(其他程式碼不用動)

程式碼見下方

「3. 代開xlsm檔,點選run main,就會直接執行python指令碼,就會自動制作報表」

程式碼如下:

import xlwings as xw
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams["font.sans-serif"]=["SimHei"# 設定字型
plt.rcParams["axes.unicode_minus"]=False# 該語句解決影像中的「-」負號的亂碼問題
defmain():
# 開啟Excel檔
wb = xw.Book.caller()
sheet = wb.sheets[0]
# 讀取基金銷售數據
data = sheet.range('A1').options(expand='table').value
# 將數據轉換為Pandas DataFrame
df = pd.DataFrame(data[1:], columns=data[0])
df['月'] = df['日期'].dt.month
df['年'] = df['日期'].dt.year
# 繪制基金銷售額月度趨勢圖
monthly_sales = df.groupby(['年''月']).agg({'銷售額''sum'}).reset_index()
monthly_sales['日期'] = pd.to_datetime(monthly_sales['年'].astype(str) + '-' + monthly_sales['月'].astype(str), format='%Y-%m')
monthly_sales = monthly_sales.sort_values('日期')
fig1, ax1 = plt.subplots()
sns.lineplot(x='日期', y='銷售額', data=monthly_sales)
ax1.set(xlabel='日期', ylabel='銷售額', title='基金銷售額月度趨勢圖')
plt.xticks(rotation=45)
sheet.pictures.add(fig1, name='基金銷售額月度趨勢圖', update=True, left=sheet.range('D2').left, top=sheet.range('D2').top)
# 繪制基金產品銷售額分布圖
fund_sales = df.groupby('基金名稱').agg({'銷售額''sum'}).reset_index()
fig2, ax2 = plt.subplots()
sns.barplot(x='銷售額', y='基金名稱', data=fund_sales)
ax2.set(xlabel='銷售額', ylabel='基金名稱', title='基金產品銷售額分布圖')
sheet.pictures.add(fig2, name='基金產品銷售額分布圖', update=True, left=sheet.range('D20').left, top=sheet.range('D20').top)
# 搭建線性回歸模型,用於預測未來6個月的銷售額
x = monthly_sales.index.values.reshape(-11)
y = monthly_sales['銷售額'].values
model = LinearRegression()
model.fit(x, y)
# 預測未來6個月銷售額
future_months = 6
last_month = monthly_sales['日期'].max().to_period('M').to_timestamp().to_pydatetime()
next_months = pd.date_range(start=last_month, periods=future_months+1, freq='M')[1:]
next_months_index = np.arange(len(monthly_sales), len(monthly_sales)+future_months)
next_months_df = pd.DataFrame({'日期': next_months, '銷售額': [np.nan]*future_months, '年': next_months.year, '月': next_months.month})
next_months_df['預測銷售額'] = model.predict(next_months_index.reshape(-11))
monthly_sales_pred = pd.concat([monthly_sales, next_months_df], ignore_index=True)
# 繪制未來6個月基金銷售額預測趨勢圖
fig3, ax3 = plt.subplots()
sns.lineplot(x='日期', y='銷售額', data=monthly_sales_pred,label='銷售額',)
sns.lineplot(x='日期', y='預測銷售額', data=monthly_sales_pred,label='預測銷售額')
ax3.set(xlabel='日期', ylabel='銷售額', title='未來6個月基金銷售額預測趨勢圖')
plt.xticks(rotation=45)
sheet.pictures.add(fig3, name='未來6個月基金銷售額預測趨勢圖', update=True, left=sheet.range('D40').left, top=sheet.range('D40').top)
@xw.func
defhello(name):
returnf"Hello {name}!"
if __name__ == "__main__":
xw.Book("PythonExcelTest.xlsm").set_mock_caller()
main()






這就使用Python建立了一個簡單的RPA程式,用來自動化使用基金數據建立報表。

大家可以試試,RPA是一個很好玩的東西。

加入知識星球【我們談論數據科學】

600+小夥伴一起學習!