第二季度結束了,半年也過去了,又要給一向雷厲風行的領導出銷售數據簽單和回款的數據分析報告,眼看著還有三天,需求緊急,小編也不敢懈怠。
找信息部導了上兩個季度以及去年一年的excel數據,腦子第一個想到的是怎們構建表格,同比、環比、回款率,用excel做幾張表,打印完事。轉身倒了一杯水,一想不對,第一季度給領導彙報的時候,給了領導一份10頁的紙質報告,領導甩了一句“當我批卷子吶,不合格”懟了回來,雖然沒讓重做,但總歸是惹得不開心。
後來跟著信息部門的哥們學了兩週的Python,小編大學裡學了一點編程,再加上很多代碼的邏輯類似於Excel的函數,好說歹說算是入了門,同時也學習了數據分析的一點思路。
按照粗淺的數據分析思路:
1、首先明確領導關注哪些數據和指標
之前想的同比、環比、回款率,其實每次月末彙報的時候都講過了,按照這樣的邏輯,季度彙報無非是把過去三個月彙總在一起,再算一下累計的數據,確實枯燥不直觀。
於是我前一天有意無意地試探了下領導,除了常規的總比環比彙總數據,還想關注哪些信息。領導透露口風,“每個區域的銷售和回款數據如何,回款率高低可以給個排名不,哪一季度份額最大,我們公司歷年整體的銷售情況是怎樣等等,好讓我知道匯款低了怎麼回事,哪個區域表現最佳?”
2、用可視化的方式替代傳統表格
這一點小編我嚐到過甜頭,上季度那10頁報告被懟之後,我又用PPT做了一份彙報,引用各種圖表,才倖免於難。
所以這一次可以升級一下,是不是用Python或者其他數據分析工具露一手,也算一次項目實踐。
於是,我找信息部門的同事導來幾份數據,但是由於有多年曆史數據需要分析,csv文件導出大概有100多兆,試著用excel看看,一打開直接掛了。。。正無限在響應中。
算了,這麼大的數據量,正好用回Python。
關於Python,同在數據分析領域的同學可能都不陌生,我們經常會使用Python提供的numpy、pandas、matplotlib等第三方庫來對數據進行計算處理,同時最終生成所需要的可視化報告。
Python語言簡明便捷的特性對小編還是非常有吸引力的,空想不如行動,為了快速出成果,直接開幹。
一、Python數據分析可視化過程
1.DataFrame數據類型轉換
首先是導入本次分析所需要使用的matplib、pandas、datetime、pylab這幾個數據處理以及可視化相關的庫,指定mpl的默認字體(否則圖表可能會出現中文亂碼問題)。接著導入銷售合同明細數據表以及銷售回款數據表,然後根據合同ID進行左拼接,得到結果轉成DataFrame類型格式方便後續的數據計算以及可視化分析處理。
# 導入所需要的庫
import matplotlib.pyplot as plt
import pandas as pd
import datetime
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認字體:解決plot不能顯示中文問題
mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示為方塊的問題
pdcsv1=pd.read_csv('D:/DEMO/demo_contract.csv',encoding='gb2312') #導入銷售合同明細表數據
pdcsv2=pd.read_csv('D:/DEMO/demo_capital_return.csv',encoding='gb2312') #導入銷售回款明細表數據
pdcsv=pd.merge(pdcsv1,pdcsv2,how='left',on=['合同ID','合同ID']) #將銷售合同明細表和銷售回款明細表數據進行拼接
df = pd.DataFrame(pdcsv) #轉為DataFrame格式方便進行數據處理
2.時間類型轉換
接著通過datatime類提供的轉換方法,對合同簽約時間進行格式化,分別取出簽約年份、簽約季度、簽約月份字段,方便從不同的統計口徑來觀察和分析銷售的簽單數據和回款數據。
i=0 #遍歷計數器
for a in df['合同簽約時間']:
df.set_value(i, '簽約年份',int(datetime.datetime.strptime(a,'%Y-%m-%d %H:%M:%S.0').strftime('%Y'))) #格式化合同簽約字段,取出合同簽約年份
i=i+1
i=0
for a in df['合同簽約時間']:
df.set_value(i, '簽約季度',(str((int(datetime.datetime.strptime(a,'%Y-%m-%d %H:%M:%S.0').strftime('%m'))-1)//3+1))+'季度') #格式化合同簽約字段,取出合同簽約季度
i=i+1
i=0
for a in df['合同簽約時間']:
df.set_value(i, '簽約月份',int(datetime.datetime.strptime(a,'%Y-%m-%d %H:%M:%S.0').strftime('%m'))) #格式化合同簽約字段,取出合同簽約月份
i=i+1
3.分組統計&&圖表繪製
最後分別按照簽約年份、簽約季度、簽約月份來對銷售的簽單金額以及回款金額進行分組統計,設置好相關圖形統計標題、座標軸標題、圖例等屬性,規劃好繪圖排版區域,並且以折線圖、餅圖、對比柱狀圖的形式進行數據可視化呈現。
df.to_csv('D:/DEMO/join.csv',encoding='gb2312') #合併明細數據導出為csv文件數據存儲
dfgp1=(df['總金額']/10000.0).groupby(df['簽約年份']).sum() #年度總簽單金額分組統計,並且單位轉為萬
dfgp2=(df['付款金額']/10000.0).groupby(df['簽約年份']).sum() #年度付款總額分組統計,並且單位轉為萬
plt.subplot(2,2,1) #限定繪圖區域為左上方
plt.ylabel('總金額(萬)')#顯示y軸名稱
plt.title('各年度簽單總金額走勢')#顯示統計標題
dfgp1.plot.line(label='簽單金額') #年度總簽單金額繪圖
dfgp2.plot.line(label='回款金額') #年度付款總額繪折線圖
plt.legend()#顯示圖例
dfgp=df.groupby(df['簽約季度'])['付款金額'].sum().reset_index() #各季度付款金額分組統計
plt.subplot(2,2,2)#限定繪圖區域為左上方
plt.title('各季度回款金額分佈')#顯示統計標題
plt.pie(dfgp['付款金額'],labels=dfgp['簽約季度'],autopct='%1.1f%%')#各季度付款金額繪製餅圖
dfgp=df.groupby(['簽約月份'])['總金額','付款金額'].sum().reset_index()#各月度簽單&&回款分組統計
dfgp['總金額']=dfgp['總金額']/10000 #並且單位轉為萬
dfgp['付款金額']=dfgp['付款金額']/10000 #並且單位轉為萬
plt.subplot(3,1,3)#限定繪圖區域為最下方
plt.title('各月度簽單合同金額&&回款金額對比')#顯示統計標題
plt.bar(dfgp['簽約月份'],dfgp['總金額'],width=0.4,label='簽單金額')#各月度簽單&&回款分組統計繪製對比柱狀圖
plt.bar(dfgp['簽約月份']+0.4,dfgp['付款金額'],width=0.4,label='回款金額')#各月度簽單&&回款分組統計繪製對比柱狀圖,0.4為寬度偏移量
plt.ylabel('總金額(萬)')#顯示y軸名稱
plt.legend()#顯示圖例
plt.show() # 出圖
4.Python可視化成果展示
程序編譯運行,各年度的簽單總金額&&回款金額走勢、各季度回款金額分佈、各月度合同簽單金額&&回款金額對比數據就都以可視化的形式直接呈現出來了,還是非常舒服的,給自己默默點個贊~哼哧哼哧地準備明天過去給領導彙報我的可視化“戰果”!
二、從Python到FineBI——數據可視化升級
跟領導彙報完畢之後,出來的可視化成果還是得到領導的一些認可的,將海量的數據以可視化圖表的形式給領導直觀地呈現了出來。
但是和我那信息化的哥們交流一番後,他覺得我的Python可視化“傑作”還存在一些問題,我也總結一下:
1.可視化圖形界面是靜態頁面,沒有動態的界面數據交互,如懸浮提示、圖形聯動、數據鑽取、超鏈接跳轉等等;
2.界面沒有篩選器,無法切片呈現過濾部分數據;
3.領導看了已有數據之後,針對一些增長或者異常數據無法做進一步深入分析。
4.開發調試還是有一定週期的,說出來不怕大家笑話哈,我為了調這個Python頁面耗費了我大半天時間。。。。
哥們建議我不妨用BI工具來實現,正好信息化採購了BI軟件FineBI,之後也會和全公司像我一樣的業務數據員推廣學習,正好我來練練手。而且公司的數據報表需求非常多,一些部門也逐漸有了深度的數據分析的需求,確實非常迫切地需要一款能夠真正多維深入地企業級數據分析工具來解決這些問題。
1.FineBI自助拖拽分析初版
到官網下載安裝完畢後發現這是一款提供給企業的B/S架構在線數據即席分析平臺。比較好的地方是:能夠可視化的做報表。嘗試了整個過程,除了創建新字段時需要寫兩行函數,整個過程也沒說要寫代碼,SQL也不需要,嗯,比較適合小白,確實蠻自助的。
以下圖為例,託拖拽拽就統計出了公司歷年的銷售金額以及回款金額數據......相比永代碼調試Python程序比,確實很爽!
按照FineBI幫助文檔,初步做出了以下的這個企業的銷售&回款分析頁面,輕鬆地解決了領導之前反饋的Python數據可視化界面的一系列問題!
2.美化升級版
經過一番研究,發現FineBI還能夠進一步提供給用戶設置組件背景、儀表板背景等功能,於是乎我調出了以下的這一個美化升級版本~美滋滋!
3.領導彙報最終敲定版
另外參考了FineBI的一些內置demo,於是乎做出下圖這個精美的銷售管理中心駕駛艙,驚豔吧~嘿嘿,其實也不過是半個小時的鼠標操作功夫了,數據完全可視化呈現在領導面前。給領導彙報完畢之後,FineBI靈活的多維聯動、鑽取等OLAP分析的特性,備受領導的誇獎與喜愛!
以上就是我這次從Python到FineBI的數據分析可視化升級心得總結了,特地寫出來給大家分享分享,能看到這裡的同學都是真愛啦。
三、後記
當然,其實我所用到的也只是FineBI這款軟件的冰山一角了,像以上的很多豐富的可視化圖表也非常值得大家去使用和分析探索的,感興趣的可以到FineBI官網參考幫助文檔去了解試用,篇幅有限暫時跟大家聊到這裡,更多內容可以看往期文章。
閱讀更多 帆軟 的文章