""" ====================================================== =================案例:市場大盤容量分析================== ====================================================== """ import pandas as pd # 檔路徑為python檔位置下的相對路徑 dwx=pd.read_excel("電商案例資料及資料說明/驅蟲劑市場/電蚊香套裝市場近三年交易額.xlsx") fmfz=pd.read_excel("電商案例資料及資料說明/驅蟲劑市場/防黴防蛀片市場近三年交易額.xlsx") msmc=pd.read_excel("電商案例資料及資料說明/驅蟲劑市場/滅鼠殺蟲劑市場近三年交易額.xlsx") mz=pd.read_excel("電商案例資料及資料說明/驅蟲劑市場/盤香滅蟑香蚊香盤市場近三年交易額.xlsx") wxq=pd.read_excel("電商案例資料及資料說明/驅蟲劑市場/蚊香加熱器市場近三年交易額.xlsx") wxp=pd.read_excel("電商案例資料及資料說明/驅蟲劑市場/蚊香片市場近三年交易額.xlsx") wxy=pd.read_excel("電商案例資料及資料說明/驅蟲劑市場/蚊香液市場近三年交易額.xlsx") # 使用head()方法查看前5行資料 print(dwx.head()) # 使用tail()方法查看後5行資料 print(dwx.tail()) # 使用info()方法查看資料的欄位及類型 dwx.info() # 用sum方法匯總資料 dwx['交易金額'].sum() #匯總單張表格資料 # 將7張表格的資料匯總並形成一張表 m_sum=pd.DataFrame(data=[dwx.sum().values,fmfz.sum().values,msmc.sum().values ,mz.sum().values,wxq.sum().values,wxp.sum().values,wxy.sum().values] ,columns=['銷售額'] ,index=['電蚊香','防黴防蛀','滅鼠滅蟲','滅蟑','蚊香加熱器','蚊香片','蚊香液']) print(m_sum) # 對上述資料進行行匯總,得到驅蟲市場總規模 m_sum.loc['Row_sum'] = m_sum.apply(lambda x: x.sum()) # 或者m_sum ['Col_sum'] = m_sum.sum() print(m_sum) # 在上一節的基礎上計算相對規模 m_sum['份額占比']=m_sum/m_sum.loc['Row_sum'] print(m_sum) # 將份額占比調整為百分比,保留1位小數 # 使用函數round: round(number, ndigits=None),第一個參數為數字,第二個參數為保留幾位小數。 m_sum['份額占比']=round(m_sum/m_sum.loc['Row_sum']*100,1) # 並將最後一行Row_sum刪除 m_sum.drop(labels=['Row_sum'],axis=0,inplace=True) # 首先導入matplotlib繪圖包 import matplotlib.pyplot as plt # 設置參數,以確保圖像正確顯示 plt.rcParams['font.sans-serif']='simhei' #用來正常顯示中文標籤 plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號 # 將葉子行業的名稱設置為x軸,葉子行業的絕對份額設置為y軸 x=m_sum.index.values.tolist() y=m_sum["銷售額"].values.tolist() # 設置畫布大小 pl=plt.figure(figsize=(8,6))# 表示圖片的大小為寬8inch、高6inch(單位為inch) # 繪製葉子市場絕對份額直條圖 plt.bar(x,y) # 設置標題以及x軸標題,y軸標題 plt.xlabel('葉子市場') plt.ylabel('市場絕對份額') # 設置數字標籤 for a,b in zip(x,y): plt.text(a,b+0.05,'%.0f'% b,ha='center',va='bottom',fontsize=8) plt.show() # 用市場相對份額繪製圓形圖 # 將葉子行業名稱設置為圓形圖的標籤,相對市場份額設置為圓形圖的大小 labels = m_sum.index.values.tolist() sizes = m_sum["份額占比"].values.tolist() # 設置畫布大小寬8inch,高6inch pl=plt.figure(figsize=(8,6)) # 繪製圓形圖,autopct='%.1f%%':# 設置百分比的格式,此處保留1位小數,f後面的兩個%表示實際顯示數位的百分號,startangle=180# 設置圓形圖的初始角度。 plt.pie(sizes,labels=labels,autopct='%.1f%%',shadow=False,startangle=180) # 設置標題 plt.title("葉子市場相對市場份額") # 設置圓形圖使得圓形圖為圓形,如圖4-2所示 plt.axis('equal') plt.show() """ ====================================================== =================案例:市場大盤趨勢分析================== ====================================================== """ # 根據時間合併市場資料 d=pd.merge(dwx,fmfz,on='時間') for i in [msmc,mz,wxq,wxp,wxy]: d=pd.merge(d,i,on='時間') d.columns=['時間','電蚊香','防黴防蛀','滅鼠滅蟲','滅蟑','蚊香加熱器','蚊香片','蚊香液'] # 先使用head()和tail()方法觀察資料 d.head() d.tail() # 補齊缺失月份數據 # 預測一個葉子行業的12月資料 # 索引2017年12月分數據 t17=d.where(d.時間=='2017-12-1').dropna() # 同理將2016年12月和2015年12月的資料也索引出來 t16=d.where(d.時間=='2016-12-1').dropna() t15=d.where(d.時間=='2015-12-1').dropna() # 將2015年,2016年,2017年三年的資料合併 t4=pd.concat([t17,t16,t15]) # 由於我們的目的是用2015-2017年3年的12月份資料來進行回歸建模,預測2018年12月資料 # 因此,此處我們選用2015,2016,2017作為x變數,每一年12月份的資料作為y變數 y=t4.drop('時間',axis=1) # 設置x軸的年份。 x=[2017,2016,2015] # 使用回歸演算法預測,先載入numpy和sklearn庫。 import numpy as np from sklearn import linear_model # 將資料處理成回歸模型所需要的形式。 x_train=np.array(x).reshape(-1,1) y_train=np.array(y.iloc[:,0]) # 將線性模型產生實體。 linear_reg=linear_model.LinearRegression() # 訓練模型。 linear_reg.fit(x_train,y_train) # 輸入引數2018,預測2018年12月份的銷售額。 y_2018_12=linear_reg.predict(np.array([2018]).reshape(-1,1)).round(1) # 輸出預測結果。 print(y_2018_12[0]) # 當一個動作有規律的出現3次或以上,肯定有一個辦法可以更高效便捷。 # 用迴圈預測所有葉子行業的12月資料 # 寫FOR迴圈,得到2018年所有類目12月份的預測值。 y_12=[] for i in range(7): y_train=np.array(y.iloc[:,i]) linear_reg=linear_model.LinearRegression() linear_reg.fit(x_train,y_train) y_pre=linear_reg.predict(np.array([2018]).reshape(-1,1)).round(1) y_12.append(y_pre[0]) # 列印2018年個葉子行業12月份的預測結果。 print(y_12) # 預測11月的資料 # 提取2015到2017年11月的資料。 t1=d.where(d.時間=='2017-11-1').dropna() t2=d.where(d.時間=='2016-11-1').dropna() t3=d.where(d.時間=='2015-11-1').dropna() t=pd.concat([t1,t2,t3]) y1=t.drop('時間',axis=1) # 寫FOR迴圈,得到2018年所有類目11月份的預測值。 y_11=[] for i in range(7): y1_train=np.array(y1.iloc[:,i]) linear_reg=linear_model.LinearRegression() linear_reg.fit(x_train,y1_train) y_pre=linear_reg.predict(np.array([2018]).reshape(-1,1)).round(1) y_11.append(y_pre[0]) # 列印2018年葉子行業11月份的預測結果。 print(y_11) # 整理資料集 # 載入datetime庫。 import datetime # 將字串轉為datetime。 a1=datetime.datetime.strptime('2018-11-1','%Y-%m-%d') # 將資料插入y_11中。 y_11.insert(0,a1) print(y_11) # 將字串轉為datetime。 a2=datetime.datetime.strptime('2018-12-1','%Y-%m-%d') y_12.insert(0,a2) print(y_12) # 將2015年11月和12月的資料替換成預測的結果,2015年11月和12月的資料可以通過觀察資料集讀取行號精准定位。 d.iloc[34]=y_12 d.iloc[35]=y_11 d.tail() # 按照日期降冪排序。 d.sort_values(by='時間',ascending=False,inplace=True) # 重置索引。 d.reset_index(inplace=True) # 由於“index”列沒有作用,可以刪除。 del d['index'] # 查看資料結果。 print(d.head()) # 匯總每一個月份的類目市場資料 d2=d.drop('時間',axis=1) d['col_sum']=d2.apply(lambda x:x.sum(),axis=1) # 提取日期的年份。 d['year']=d.時間.apply(lambda x: x.year) # 按年份匯總資料。 data_sum=d.groupby('year').sum() print(data_sum) # 繪製趨勢圖 # 首先導入matplotlib繪圖包。 # import matplotlib.pyplot as plt # 將年份設置為x軸,將匯總的驅蟲市場總銷售作為y軸。 year=list(data_sum.index) x=range(len(year)) y=data_sum['col_sum'] # 選擇ggplot的繪圖方式。 with plt.style.context('ggplot'): # 設置畫布大小寬8inch,高6inch。 pl=plt.figure(figsize=(8,6)) # 繪製線圖。 plt.plot(x, y) # 設置圖表標題,x軸標題,y軸標題,設置刻度線格式。 plt.title('近三年驅蟲市場趨勢圖') plt.xlabel('year') plt.ylabel('交易額') plt.xticks(x, year, fontsize=9, rotation=45) # rotation=45表示橫軸逆時針選擇45度 # 展示趨勢圖,如圖4 - 3 # 所示,市場呈現增長趨勢。 plt.show() # 繪製各個葉子市場的趨勢圖 with plt.style.context('ggplot'): # 設置畫布大小寬8inch,高6inch。 pl=plt.figure(figsize=(8,6)) # 繪製各葉子行業市場趨勢線圖。 plt.plot(x,data_sum.iloc[:,0]) plt.plot(x,data_sum.iloc[:,1]) plt.plot(x,data_sum.iloc[:,2]) # 設置數字標籤。 for a,b in zip(x,data_sum.iloc[:,2]): plt.text(a,b+0.05,'%.0f'% b,ha='center',va='bottom',fontsize=8) plt.plot(x,data_sum.iloc[:,3]) plt.plot(x,data_sum.iloc[:,4]) plt.plot(x,data_sum.iloc[:,5]) plt.plot(x,data_sum.iloc[:,6]) # 設置數字標籤。 for a,b in zip(x,data_sum.iloc[:,6]): plt.text(a,b+0.05,'%.0f'% b,ha='center',va='bottom',fontsize=8) # 設置圖的標題,x軸標題,y軸標題,設置刻度線格式。 plt.title('近三年驅蟲市場各子市場容量趨勢') plt.xlabel('year') plt.ylabel('交易額') plt.xticks(x,year,fontsize=9,rotation=45) # 設置圖例,並畫圖,如圖4-4所示。 plt.legend(['電蚊香','防黴防蛀','滅鼠滅蟲','滅蟑','蚊香加熱器','蚊香片','蚊香液']) plt.show() # 繪製各個葉子市場占比趨勢圖 # 計算每一個葉子市場的占比。 data_percentage=data_sum.copy() for i in range(3): data_percentage.iloc[i]=round(data_percentage.iloc[i]/data_percentage.iloc[i][-1]*100,2) del data_percentage['col_sum'] # 繪製驅蟲市場各子市場占比趨勢圖 with plt.style.context('ggplot'): pl=plt.figure(figsize=(8,6)) plt.plot(x,data_percentage.iloc[:,0]) plt.plot(x,data_percentage.iloc[:,1]) plt.plot(x,data_percentage.iloc[:,2]) for a,b in zip(x,data_percentage.iloc[:,2]): plt.text(a,b+0.05,'%.0f'% b,ha='center',va='bottom',fontsize=8) plt.plot(x,data_percentage.iloc[:,3]) plt.plot(x,data_percentage.iloc[:,4]) plt.plot(x,data_percentage.iloc[:,5]) plt.plot(x,data_percentage.iloc[:,6]) for a,b in zip(x,data_percentage.iloc[:,6]): plt.text(a,b+0.05,'%.0f'% b,ha='center',va='bottom',fontsize=8) plt.title('近三年驅蟲市場各子市場占比趨勢') plt.xlabel('year') plt.ylabel('交易額') plt.xticks(x,year,fontsize=9,rotation=45) plt.legend(['電蚊香','防黴防蛀','滅鼠滅蟲','滅蟑','蚊香加熱器','蚊香片','蚊香液']) plt.show() # 計算市場增量 # 將滅鼠滅蟲市場近三年的銷售資料索引出來。 d_m=list(data_sum['滅鼠滅蟲'].round(2)) # 計算2017年的環比增幅。 print((d_m[1]-d_m[0])/d_m[0]) # 計算2018年的環比增幅。 print((d_m[2]-d_m[1])/d_m[1]) # 繪製組合圖 # 組合圖是將兩種以上的圖形類型疊加在一起,只要坐標系相同就可以疊加,如直條圖和折線圖,Python提供了靈活的圖形組合功能。 with plt.style.context('ggplot'): pl=plt.figure(figsize=(8,6)) # 繪製柱狀圖。 plt.bar(x,data_sum.iloc[:,2]) # 繪製線圖,color='b'表示圖形的顏色渲染成藍色(blue),marker表示標記用o標記。 plt.plot(x,data_sum.iloc[:,2],color='b',marker='o') # 設置圖標題、坐標軸標題,並畫圖 for a,b in zip(x,data_sum.iloc[:,2]): plt.text(a,b+0.05,'%.0f'% b,ha='center',va='bottom',fontsize=8) plt.title('近三年滅鼠殺蟲市場容量趨勢') plt.xlabel('year') plt.ylabel('交易額') plt.xticks(x,year,fontsize=9,rotation=45) plt.show()