深度學習--專案提煉2(線性迴歸模型)
阿新 • • 發佈:2021-12-06
預測2018年,11月和12月的銷售額
1 import glob #讀檔案 2 import os #設定工作路徑 3 import pandas as pd 4 import re #正則表示式 5 import numpy as np 6 import datetime as dt #時間包 7 from sklearn.linear_model import LinearRegression 8 import seaborn as sns 9 from matplotlib import pyplot as plt 10 import jieba #分詞 11 importjieba.analyse 12 import imageio #配合做詞雲的 13 from wordcloud import WordCloud #詞雲 14 15 #windows 中文編碼 16 plt.rcParams['font.sans-serif']='simhei' 17 plt.rcParams['axes.unicode_minus']=False 18 19 sns.set_style("darkgrid",{"font.sans-serif":['simhei','Droid Sans Fallback']}) 20 os.chdir(r'C:\Users\Administrator\Downloads\模組三資料\模組三資料\模組三程式碼檔案\code\綜合專案(電商文字挖掘)\data') 21 os.chdir('./驅蟲劑市場') 22 filenames = glob.glob('*市場近三年交易額.xlsx') #列表 23 24 25 26 def load_xlsx(filename): 27 # 抽取子類目的名字 28 colname = re.search(r'.*(?=市場)', filename).group() 29 # 讀取檔案 30 df = pd.read_excel(filename) 31 # 修改日期的格式 32 if df['時間'].dtypes == 'int64': 33 df['時間'] = pd.to_datetime(df['時間'], unit='D', origin=pd.Timestamp('1899-12-30')) 34 35 # 重新命名列名為子類目名 36 df.rename(columns={df.columns[1]: colname}, inplace=True) 37 38 # 設定時間列作為索引 39 df = df.set_index('時間') 40 return df 41 dfs = [load_xlsx(i) for i in filenames] 42 df = pd.concat(dfs,axis=1).reset_index() #時間從大到小排序 43 month = df['時間'].dt.month 44 # 預測2018年 11、12月的資料 45 def momth_data(df,month): 46 for i in [11, 12]: 47 # 抽取對月份的資料 48 dm = df[month == i] # 2015.11 2016.11 2017.11 49 # 訓練x是年份 50 xtrain = np.array(dm['時間'].dt.year).reshape(-1, 1) 51 print(xtrain)#[[2017][2016][2015]] 52 # 測試y是新增的行,對應的日期 53 ytest = [pd.datetime(2018, i, 1)] #[datetime.datetime(2018, 12, 1, 0, 0)] 54 print(ytest) 55 print(dm.columns)#Index(['時間', '滅鼠殺蟲劑', '電蚊香套裝', '盤香滅蟑香蚊香盤', '蚊香加熱器', '蚊香液', '蚊香片', '防黴防蛀片'], dtype='object') 56 57 for j in range(1, len(dm.columns)):#1,2,3,4,5,6,7,每一列 58 print(j) 59 # 訓練y是指定的列 60 ytrain = np.array(dm.iloc[:, j]).reshape(-1, 1) 61 # 迴歸建模 62 lm = LinearRegression().fit(xtrain, ytrain) 63 # 預測當測試x為2018時銷售額 yhat 64 yhat = lm.predict(np.array([2018]).reshape(-1, 1)) 65 ytest.append(round(yhat[0][0], 2)) 66 # 給預測結果賦值對應的列名 67 newrow = pd.DataFrame([dict(zip(df.columns, ytest))]) 68 # 預測結果行加在資料前 69 df = newrow.append(df) 70 momth_data(df,month) 71 72 df.reset_index(drop=True,inplace=True) 73 df = df[df['時間'].dt.year != 2015] 74 df['colsums'] = df.sum(1) #取值第一列。交易金額總和列 :滅鼠殺蟲劑 2.469394e+09 75 76 df.insert(1,'year',df['時間'].dt.year) #年份列
圖表分析
近三年的市場趨勢
byyear = df.groupby('year').sum().reset_index()
1 byyear = df.groupby('year').sum().reset_index() 2 sns.relplot('year','colsums',kind='line',marker='o',data=byyear,height=4) 3 plt.title('近三年的市場趨勢') 4 plt.xticks(byyear.year,rotation=45) 5 plt.xlabel('年份') 6 plt.ylabel('總交易額') 7 plt.show()