標籤:

傳統行業的數據之花:遞減率分析(python)

本文主要為學習筆記,所以比較簡潔,有興趣的可以交流下代碼問題。

問題:已知紅友區塊連續17個月的產量,要求預測後續三個月產量。

思路:油田產量以恆定遞減率遞減,採用指數回歸法預測。

以下為python實現方案(數據因商業機密問題已做處理):

1、首先導入需要用到相關的庫。

import numpy as npimport pandas as pdimport matplotlib.pyplot as plt%matplotlib inline #單元格內顯示圖片from pylab import *mpl.rcParams[font.sans-serif] = [SimHei] #圖表中文顯示解決方案plt.style.use(ggplot) #圖表顯示風格from datetime import datetimefrom io import StringIOfrom sklearn import linear_model

2、讀取相關數據,因為用到數據少,做簡單清洗。

fx=pd.read_excel(rC:UsersThinkpadDesktophy153.xls)fx=fx.dropna(how=all) #除去無數據的列fx=fx.fillna(0) #未記錄填充為0fx.head(10) #簡單看下數據大概情況

3、業務原因,並不是所有的井都需要分析,業務部門有EXCEL格式井號列表,需要做篩選。

#從Excel直接複製過來well_str=uh1614h1627h1634h1641h1643h1646h1653hD1610紅153紅156紅157h1652h1644紅167h1658紅155紅159紅170_X紅154h1642h1662 well_num=well_str.split(
) #分離成列表fx=fx.ix[fx[u開發單元].map(lambda x : x in well_num)] #篩選

這裡有個疑問,本來數據的年月為數值如『201708』,但有時候篩選後自動變成日期格式,不知道為啥。

本來預備把年月從數值改成日期格式代碼為:

fx[u年月]=fx[u年月].map(lambda x: datetime.strptime(str(x),%Y%m))

4、按月組合求和,除以日曆天數得到日產量。

gpy=fx.groupby(u年月)[u月產油量].sum()cd=[30,31,31,30,31,30,31,31,28,31,30,31,30,31,31,30,31]#日曆天數gpy=gpy/cd

這裡的日曆天數我直接輸的,因為數據少方便,python有獲得當月日曆天數的演算法,大概思路是:把日期中的年和月提出來成數值,然後月份加1為下個月,用下個月的第一天減去當月第一天。

5、把指數遞減模型y=ae^bx(知乎的公式編輯器不會用),取對數轉換成直線模型Lny=Lna+bx

gpy=gpy.map(lambda x: np.log(x)) #y取對數x=np.arange(1,18) #建立x坐標

處理好的y值:

6、回歸預測,獲得相關參數。

model=linear_model.LinearRegression() #建立模型model.fit(x.reshape(-1, 1),gpy) #訓練數據c,d=model.coef_,model.intercept_ #獲得方程參數plt.scatter(x,gpy) #作圖plt.plot(x,model.predict(x.reshape(-1,1)))print c,exp(d)

指數模型y=ae^bx,參數a=522.19,b=0.0282。

7、根據回歸結果預測,輸出結果。

x2=np.arange(18,21)pre=model.predict(x2.reshape(-1,1))print(2017年11月產量為{:.2f}.format(np.exp(pre)[0]))print(2017年12月產量為{:.2f}.format(np.exp(pre)[1]))print(2018年01月產量為{:.2f}.format(np.exp(pre)[-1]))

輸出的結果:

本文只是大概說了下方法和流程,主要集中在代碼上。實際工作中需要花大量時間選取合適的井,使得分析的時間段內,井工作制度不發生改變。

本文思路也不是大數據的思路,已經有已知的因果關係。因本人傳統行業出生,目前正在轉型中,有所局限。


推薦閱讀:

用戶與許可權(節選自《MySQL數據分析實戰》講義)
「不婚族」、「求三觀」......用數據解讀讓人意外的95後婚戀觀
4 種最搶手的數據分析職業,你會選擇?
SQL學習三部曲
學習數據分析--念念不忘,終有迴響

TAG:數據分析 |