表格部分?jǐn)?shù)據(jù)如下
附件里會(huì)給出全部數(shù)據(jù)鏈接
運(yùn)行效果如下
代碼解析
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties(fname='PingFang Bold.ttf')
導(dǎo)入需要用到的Python庫(kù)。pandas用于處理數(shù)據(jù),numpy用于科學(xué)計(jì)算,matplotlib.pyplot用于繪圖,F(xiàn)ontProperties用于設(shè)置字體屬性。在這里我們導(dǎo)入了中文字體PingFang Bold.ttf,以后進(jìn)行繪圖時(shí)就可以使用這個(gè)字體了。
df = pd.read_excel('中國(guó)各地現(xiàn)貨棉花價(jià)格.xlsx')
df['指標(biāo)名稱'] = pd.to_datetime(df['指標(biāo)名稱'])
df.set_index('指標(biāo)名稱', inplace=True)
df.fillna(method='ffill', inplace=True)
打開了名為“中國(guó)各地現(xiàn)貨棉花價(jià)格.xlsx”的Excel文件,并將數(shù)據(jù)存儲(chǔ)到名為df的pandas DataFrame中。接下來(lái),在DataFrame中執(zhí)行以下操作:
- 將“指標(biāo)名稱”列轉(zhuǎn)換為datetime類型;
- 將“指標(biāo)名稱”列設(shè)置為索引;
- 使用前向填充(ffill)方法填充缺失值。
plt.figure(figsize=[15,8])
plt.plot(df['新疆:現(xiàn)貨價(jià):棉花'], label='新疆')
plt.plot(df['中國(guó):現(xiàn)貨價(jià):平均價(jià):棉花'], label='中國(guó)')
plt.plot(df['山東:現(xiàn)貨價(jià):棉花'], label='山東')
plt.plot(df['河南:現(xiàn)貨價(jià):棉花'], label='河南')
plt.plot(df['江蘇:現(xiàn)貨價(jià):棉花'], label='江蘇')
plt.plot(df['河北:現(xiàn)貨價(jià):棉花'], label='河北')
plt.plot(df['湖北:現(xiàn)貨價(jià):棉花'], label='湖北')
plt.plot(df['浙江:現(xiàn)貨價(jià):棉花'], label='浙江')
plt.plot(df['安徽:現(xiàn)貨價(jià):棉花'], label='安徽')
plt.plot(df['重慶:現(xiàn)貨價(jià):棉花'], label='重慶')
plt.plot(df['遼寧:現(xiàn)貨價(jià):棉花'], label='遼寧')
plt.plot(df['北京:現(xiàn)貨價(jià):棉花'], label='北京')
plt.plot(df['陜西:現(xiàn)貨價(jià):棉花'], label='陜西')
plt.plot(df['山西:現(xiàn)貨價(jià):棉花'], label='山西')
plt.plot(df['中國(guó)棉花價(jià)格指數(shù):328'], label='中國(guó)棉花價(jià)格指數(shù):328')
plt.plot(df['中國(guó)棉花價(jià)格指數(shù):229'], label='中國(guó)棉花價(jià)格指數(shù):229')
plt.plot(df['中國(guó)棉花價(jià)格指數(shù):527'], label='中國(guó)棉花價(jià)格指數(shù):527')
plt.legend(loc='upper left', prop=font)
plt.xlabel('時(shí)間', fontproperties=font)
plt.ylabel('價(jià)格', fontproperties=font)
plt.title('各地棉花現(xiàn)貨價(jià)格趨勢(shì)', fontproperties=font)
plt.show()
繪制了各個(gè)地區(qū)棉花現(xiàn)貨價(jià)格趨勢(shì)圖。首先使用matplotlib.pyplot庫(kù)的figure()函數(shù)創(chuàng)建一個(gè)大小為15*8的繪圖空間,然后使用plot()函數(shù)將各地棉花現(xiàn)貨價(jià)格數(shù)據(jù)繪制到同一張圖表上,并為每個(gè)數(shù)據(jù)系列添加了標(biāo)簽和線條顏色。最后添加圖例、橫縱坐標(biāo)標(biāo)題和圖表標(biāo)題,并調(diào)用show()函數(shù)顯示圖表。
train = df.iloc[:-10, :]
test = df.iloc[-10:, :]
將讀取的數(shù)據(jù)集拆分成前面的訓(xùn)練集和后面的測(cè)試集。這里將DataFrame對(duì)象轉(zhuǎn)換為了numpy數(shù)組,并使用“最后10個(gè)數(shù)據(jù)”作為測(cè)試集,“除了最后10個(gè)數(shù)據(jù)以外的數(shù)據(jù)”作為訓(xùn)練集。
X_train = train.drop('中國(guó)棉花價(jià)格指數(shù):527', axis=1)
y_train = train['中國(guó)棉花價(jià)格指數(shù):527']
X_test = test.drop('中國(guó)棉花價(jià)格指數(shù):527', axis=1)
y_test = test['中國(guó)棉花價(jià)格指數(shù):527']
通過drop()函數(shù)刪除’target’列,獲取輸入和輸出數(shù)據(jù)。在這里輸入數(shù)據(jù)由除了中國(guó)棉花價(jià)格指數(shù):527以外的數(shù)據(jù)組成,而輸出數(shù)據(jù)只包含中國(guó)棉花價(jià)格指數(shù):527這一列。
svr = SVR(kernel='rbf', C=10, gamma='auto')
svr.fit(X_train, y_train)
rf = RandomForestRegressor(n_estimators=100, random_state=0, criterion='mse', max_depth=None,
min_samples_split=2, min_samples_leaf=1, max_features='auto',
bootstrap=True, n_jobs=-1)
rf.fit(X_train, y_train)
knn = KNeighborsRegressor(n_neighbors=5, weights='distance')
knn.fit(X_train, y_train)
lr = LinearRegression()
lr.fit(X_train, y_train)
定義了四個(gè)回歸模型(支持向量回歸、隨機(jī)森林回歸、線性回歸和K-最近鄰回歸),并使用fit()函數(shù)基于訓(xùn)練集數(shù)據(jù)對(duì)這些模型進(jìn)行訓(xùn)練。參數(shù)的設(shè)置需要根據(jù)實(shí)際情況和調(diào)參結(jié)果來(lái)進(jìn)行調(diào)整。
svr_pred = svr.predict(X_test)
rf_pred = rf.predict(X_test)
knn_pred = knn.predict(X_test)
lr_pred = lr.predict(X_test)
使用 predict() 函數(shù)對(duì)測(cè)試集進(jìn)行預(yù)測(cè),得到四個(gè)回歸模型的預(yù)測(cè)值。
plt.figure(figsize=[15,8])
plt.plot(test['中國(guó)棉花價(jià)格指數(shù):527'].values, label='實(shí)際值')
plt.plot(svr_pred, label='支持向量回歸')
plt.plot(rf_pred, label='隨機(jī)森林回歸')
plt.plot(knn_pred, label='K-最近鄰回歸')
plt.plot(lr_pred, label='線性回歸')
plt.legend(loc='upper left', prop=font)
plt.xlabel('時(shí)間', fontproperties=font)
plt.ylabel('價(jià)格', fontproperties=font)
plt.title('不同算法的中國(guó)棉花價(jià)格指數(shù)預(yù)測(cè)', fontproperties=font)
plt.show()
將四種回歸模型的預(yù)測(cè)結(jié)果與實(shí)際值一起繪制成圖表,以便于對(duì)預(yù)測(cè)結(jié)果進(jìn)行比較和評(píng)估。其中實(shí)際值來(lái)自測(cè)試集中的數(shù)據(jù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-480885.html
完整代碼
# 導(dǎo)入必要的庫(kù)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 創(chuàng)建字體對(duì)象
font = FontProperties(fname='PingFang Bold.ttf')
# from matplotlib.font_manager import FontProperties
# pd.set_option('display.max_rows', None) # 顯示所有行
# pd.set_option('display.max_columns', None) # 顯示所有列
# 讀取數(shù)據(jù)
df = pd.read_excel('中國(guó)各地現(xiàn)貨棉花價(jià)格.xlsx')
# 將時(shí)間戳字段轉(zhuǎn)換為 datetime 類型
df['指標(biāo)名稱'] = pd.to_datetime(df['指標(biāo)名稱'])
# 設(shè)定時(shí)間戳為數(shù)據(jù)索引
df.set_index('指標(biāo)名稱', inplace=True)
# 使用缺失值前向填充方法填充缺失值
df.fillna(method='ffill', inplace=True)
# 查看數(shù)據(jù)框結(jié)構(gòu)
# print(df)
# 繪制每個(gè)地區(qū)的棉花價(jià)格
plt.figure(figsize=[15,8])
plt.plot(df['新疆:現(xiàn)貨價(jià):棉花'], label='新疆')
plt.plot(df['中國(guó):現(xiàn)貨價(jià):平均價(jià):棉花'], label='中國(guó)')
plt.plot(df['山東:現(xiàn)貨價(jià):棉花'], label='山東')
plt.plot(df['河南:現(xiàn)貨價(jià):棉花'], label='河南')
plt.plot(df['江蘇:現(xiàn)貨價(jià):棉花'], label='江蘇')
plt.plot(df['河北:現(xiàn)貨價(jià):棉花'], label='河北')
plt.plot(df['湖北:現(xiàn)貨價(jià):棉花'], label='湖北')
plt.plot(df['浙江:現(xiàn)貨價(jià):棉花'], label='浙江')
plt.plot(df['安徽:現(xiàn)貨價(jià):棉花'], label='安徽')
plt.plot(df['重慶:現(xiàn)貨價(jià):棉花'], label='重慶')
plt.plot(df['遼寧:現(xiàn)貨價(jià):棉花'], label='遼寧')
plt.plot(df['北京:現(xiàn)貨價(jià):棉花'], label='北京')
plt.plot(df['陜西:現(xiàn)貨價(jià):棉花'], label='陜西')
plt.plot(df['山西:現(xiàn)貨價(jià):棉花'], label='山西')
plt.plot(df['中國(guó)棉花價(jià)格指數(shù):328'], label='中國(guó)棉花價(jià)格指數(shù):328')
plt.plot(df['中國(guó)棉花價(jià)格指數(shù):229'], label='中國(guó)棉花價(jià)格指數(shù):229')
plt.plot(df['中國(guó)棉花價(jià)格指數(shù):527'], label='中國(guó)棉花價(jià)格指數(shù):527')
plt.legend(loc='upper left', prop=font)
plt.xlabel('時(shí)間', fontproperties=font)
plt.ylabel('價(jià)格', fontproperties=font)
plt.title('各地棉花現(xiàn)貨價(jià)格趨勢(shì)', fontproperties=font)
plt.show()
# 劃分?jǐn)?shù)據(jù)集
train = df.iloc[:-10, :]
test = df.iloc[-10:, :]
# 支持向量回歸
from sklearn.svm import SVR
X_train = train.drop('中國(guó)棉花價(jià)格指數(shù):527', axis=1)
y_train = train['中國(guó)棉花價(jià)格指數(shù):527']
X_test = test.drop('中國(guó)棉花價(jià)格指數(shù):527', axis=1)
y_test = test['中國(guó)棉花價(jià)格指數(shù):527']
# svr = SVR(kernel='poly', C=100, gamma='auto', degree=3, epsilon=.1, coef0=1)
# svr.fit(X_train, y_train)
#
# # # 隨機(jī)森林回歸
# from sklearn.ensemble import RandomForestRegressor
#
# rf = RandomForestRegressor(n_estimators=10, random_state=0)
# rf.fit(X_train, y_train)
#
# # 線性回歸
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train, y_train)
#
# # K-最近鄰回歸
# from sklearn.neighbors import KNeighborsRegressor
#
# knn = KNeighborsRegressor(n_neighbors=2)
# knn.fit(X_train, y_train)
svr = SVR(kernel='rbf', C=10, gamma='auto')
svr.fit(X_train, y_train)
# 隨機(jī)森林回歸
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(n_estimators=100, random_state=0, criterion='friedman_mse', max_depth=None,
min_samples_split=2, min_samples_leaf=1, max_features='auto',
bootstrap=True, n_jobs=-1)
rf.fit(X_train, y_train)
# K-最近鄰回歸
from sklearn.neighbors import KNeighborsRegressor
knn = KNeighborsRegressor(n_neighbors=5, weights='distance')
knn.fit(X_train, y_train)
# 預(yù)測(cè)
svr_pred = svr.predict(X_test)
rf_pred = rf.predict(X_test)
lr_pred = lr.predict(X_test)
knn_pred = knn.predict(X_test)
# print(test['中國(guó)棉花價(jià)格指數(shù):527'].values)
# 展示預(yù)測(cè)結(jié)果
plt.figure(figsize=[15,8])
plt.plot(test['中國(guó)棉花價(jià)格指數(shù):527'].values, label='實(shí)際值')
plt.plot(svr_pred, label='支持向量回歸')
plt.plot(rf_pred, label='隨機(jī)森林回歸')
plt.plot(lr_pred, label='線性回歸')
plt.plot(knn_pred, label='K-最近鄰回歸')
plt.legend(loc='upper left', prop=font)
plt.xlabel('時(shí)間', fontproperties=font)
plt.ylabel('價(jià)格', fontproperties=font)
plt.title('不同算法的中國(guó)棉花價(jià)格指數(shù)預(yù)測(cè)', fontproperties=font)
plt.show()
附件
鏈接: https://pan.baidu.com/s/1qa99ntHsozgqB2xliVYd7A 提取碼: sp9h
–來(lái)自百度網(wǎng)盤超級(jí)會(huì)員v6的分享文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-480885.html
到了這里,關(guān)于通過向量回歸、隨機(jī)森林回歸、線性回歸和K-最近鄰回歸將預(yù)測(cè)結(jié)果繪制成圖表進(jìn)行展示的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!