-3

我有这个情节

在此处输入图像描述

现在我想给它添加一条趋势线,我该怎么做?

数据如下所示:

在此处输入图像描述

我想绘制加利福尼亚的中位挂牌价格多年来是如何上涨的,所以我这样做了:

# Get California data
state_ca = []
state_median_price = []
state_ca_month = []
for state, price, date in zip(data['ZipName'], data['Median Listing Price'], data['Month']):
    if ", CA" not in state:
        continue
    else:
        state_ca.append(state)
        state_median_price.append(price)
        state_ca_month.append(date)

然后我将字符串 state_ca_month 转换为 datetime:

# Convert state_ca_month to datetime
state_ca_month = [datetime.strptime(x, '%m/%d/%Y %H:%M') for x in state_ca_month]

然后画了

# Plot trends
figure(num=None, figsize=(12, 6), dpi=80, facecolor='w', edgecolor='k')
plt.plot(state_ca_month, state_median_price)
plt.show()

我想添加一条趋势线或某种类型的线,但我对可视化不熟悉。如果有人有任何其他建议,我将不胜感激。

按照评论中的建议,我得到了这个散点图

在此处输入图像描述

我想知道是否应该进一步格式化数据以制作更清晰的图来检查。

4

1 回答 1

1

如果“趋势线”是指文字线,那么您可能希望对数据进行线性回归。 在. sklearn _python

从上面的超链接示例中:

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

# Load the diabetes dataset
diabetes = datasets.load_diabetes()


# Use only one feature
diabetes_X = diabetes.data[:, np.newaxis, 2]

# Split the data into training/testing sets
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]

# Split the targets into training/testing sets
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]

# Create linear regression object
regr = linear_model.LinearRegression()

# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)

# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)

# The coefficients
print('Coefficients: \n', regr.coef_)
# The mean squared error
print("Mean squared error: %.2f"
      % mean_squared_error(diabetes_y_test, diabetes_y_pred))
# Explained variance score: 1 is perfect prediction
print('Variance score: %.2f' % r2_score(diabetes_y_test, diabetes_y_pred))

# Plot outputs
plt.scatter(diabetes_X_test, diabetes_y_test,  color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)

plt.xticks(())
plt.yticks(())

plt.show()

需要澄清的是,“总体趋势”并不是一个定义明确的东西。很多时候,人们所说的“趋势”是指一条能够很好地“拟合”数据的字面线。反过来,“拟合数据”是指“预测数据”。因此,获得趋势线的最常见方法是选择一条最能预测您观察到的数据的线。事实证明,我们甚至需要清楚我们所说的“预测”是什么意思。做到这一点的一种方法(也是一种非常常见的方法)是通过定义“最佳预测”以最小化“趋势线”和观察数据之间的所有误差的平方和。这称为普通最小二乘线性回归,是获得“趋势线”的最简单方法之一。sklearn.linear_model.LinearRegression

于 2019-03-22T17:47:24.127 回答