我有这个情节
现在我想为它添加趋势线,我该怎么做?
数据如下所示:
我想描绘一下多年来加利福尼亚州的中位数价格是如何上涨的,所以我这样做了:
# 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()
我想过添加一个趋势线或某种类型的线,但我是可视化的新手。如果有人有任何其他建议我会很感激。
根据评论中的建议,我得到了这个散点图
我想知道我是否应该进一步格式化数据,以便更清晰地检查。
如果通过“趋势线”表示文字行,那么您可能希望对数据进行线性回归。在sklearn
的provides this functionality 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()
澄清一下,“整体趋势”并不是一个定义明确的事情。很多时候,通过“趋势”,人们意味着一条“适合”数据的文字线。反过来,“适合数据”我们的意思是“预测数据”。因此,获得趋势线的最常见方法是选择最能预测您观察到的数据的线。事实证明,我们甚至需要明确“预测”的含义。实现此目的的一种方法(以及非常常见的方法)是以这样的方式定义“最佳预测”,以便最小化“趋势线”和观察数据之间的所有误差的平方和。这被称为ordinary least squares linear regression,是获得“趋势线”的最简单方法之一。这是在sklearn.linear_model.LinearRegression
中实现的算法。