公司財務小姐姐每月需要根據如下報表統計出本月、上月、去年同期的銷售額、客流量、客單價數據:
每個月都要手動計算,非常耗費時間,本著樂於助人的原則,我用python寫了個小程序,能夠實現自動生成財務報表,現把具體過程分享給大家:
一、pandas導入數據源
<code>import pandas as pd data=pd.read_csv('數據模板.csv',encoding='gbk',parse_dates=["成交時間"]) data /<code>
parse_dates可以將成交時間列轉換成時間格式
二、pandas計算相關指標
先給大家介紹一下指標的計算方式:
<code>銷售額=單價*銷量客流量=訂單id去重後的次數客單價=銷售額/客流量/<code>
1.計算上月數據
通過pandas比較功能,取出本月數據,&為比較運算符,相當於“與”
<code>from datetime import datetime current_m=data[(data["成交時間"]>=datetime(2020,2,1))&(data["成交時間"]<=datetime(2020,2,28))] current_m /<code>
銷售額計算
<code>current_s=(current_m['銷量']*current_m['單價']).sum() current_s /<code>
<code>sum是pandas中的求和函數,用於返回用戶所請求軸的值之和。/<code>
客流量計算
<code>current_t=current_m['訂單ID'].drop_duplicates().count() current_t /<code>
<code>drop_duplicatesop:去重函數count:計數函數/<code>
客單價計算
<code>curent_s_t=round(current_s/current_t,2) curent_s_t /<code>
2.計算上月數據
計算方式是一樣的,只不過把日期範圍調整一下,代碼如下:
<code>from datetime import datetime last_m=data[(data["成交時間"]>=datetime(2020,1,1))&(data["成交時間"]<=datetime(2020,1,31))] last_s=(last_m['銷量']*last_m['單價']).sum() last_t=last_m['訂單ID'].drop_duplicates().count() last_s_t=round(last_s/last_t,2) /<code>
3.計算去年同期數據
<code>from datetime import datetime same_m=data[(data["成交時間"]>=datetime(2019,2,1))&(data["成交時間"]<=datetime(2019,2,28))] same_s=(same_m['銷量']*same_m['單價']).sum() same_t=same_m['訂單ID'].drop_duplicates().count() same_s_t=round(same_s/same_t,2) /<code>
4.將上述數據轉成DataFrame表格型數據結構
<code>result=pd.DataFrame([[current_s,last_s,same_s],[current_t,last_t,same_t],[curent_s_t,last_s_t,same_s_t]],columns=["本月","上月同期","去年同期"],index=["銷售額","客流量","客單價"]) result /<code>
5.增加同比和環比數據
<code>result["同比"]=result["本月"]/result["上月同期"]-1 result["環比"]=result["本月"]/result["去年同期"]-1 result /<code>
自動化報表的模板基本已經做好了,等下月需要時,只需改一下時間,運行程序即可,省去了大量的人工計算時間
三、可視化展示
用plotly畫出柱狀圖
<code>import plotly.graph_objs as go columns=["本月","上月同期","去年同期"] fig = go.Figure(data=[ go.Bar(name='銷售額',x=columns,y=[current_s,last_s,same_s]), go.Bar(name='客流量',x=columns,y=[current_t,last_t,same_t]), go.Bar(name='客單價',x=columns,y=[curent_s_t,last_s_t,same_s_t]),]) fig.update_layout(barmode='group') fig.show() /<code>
點擊右上角標籤,可以展示不同的參數圖形
-完-
完整代碼請關注公眾號【python數據分析之禪】並回復財務報表獲取