我正在用 Python 构建一个应用程序,它可以从数据帧中预测 Pm2.5 污染的值。我正在使用 11 月的值,并且我试图首先构建线性回归模型。如何在不使用日期的情况下进行线性回归?我只需要 Pm2.5 的预测,日期是已知的。这是我到目前为止尝试过的:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
data = pd.read_csv("https://raw.githubusercontent.com/iulianastroia/csv_data/master/final_dataframe.csv")
data['day'] = pd.to_datetime(data['day'], dayfirst=True)
#Splitting the dataset into training(70%) and test(30%)
X_train, X_test, y_train, y_test = train_test_split(data['day'], data['pm25'], test_size=0.3,
random_state=0
)
#Fitting Linear Regression to the dataset
lin_reg = LinearRegression()
lin_reg.fit(data['day'], data['pm25'])
Run Code Online (Sandbox Code Playgroud)
此代码引发以下错误:
ValueError: Expected 2D array, got 1D array instead:
array=['2019-11-01T00:00:00.000000000' '2019-11-01T00:00:00.000000000'
'2019-11-01T00:00:00.000000000' ... '2019-11-30T00:00:00.000000000'
'2019-11-30T00:00:00.000000000' '2019-11-30T00:00:00.000000000'].
Reshape your data either using array.reshape(-1, 1) if …Run Code Online (Sandbox Code Playgroud) 我有一个数据框,df,列 pm1 和 pm25。我想显示这两个信号的相关性的图表(使用 Plotly)。到目前为止,我已经设法显示了散点图,但我没有设法绘制信号之间的相关性拟合线。到目前为止,我已经尝试过这个:
denominator=df.pm1**2-df.pm1.mean()*df.pm1.sum()
print('denominator',denominator)
m=(df.pm1.dot(df.pm25)-df.pm25.mean()*df.pm1.sum())/denominator
b=(df.pm25.mean()*df.pm1.dot(df.pm1)-df.pm1.mean()*df.pm1.dot(df.pm25))/denominator
y_pred=m*df.pm1+b
lineOfBestFit = go.Scattergl(
x=df.pm1,
y=y_pred,
name='Line of best fit',
line=dict(
color='red',
)
)
data = [dataPoints, lineOfBestFit]
figure = go.Figure(data=data)
figure.show()
Run Code Online (Sandbox Code Playgroud)
阴谋:
如何使 lineOfBestFit 正确绘制?