这次我们完成的题目来源于该网站:
https://nbviewer.jupyter.org/github/schmit/cme193-ipython-notebooks-lecture/blob/master/Exercises.ipynb
For each of the four datasets…
在计算数据的统计学数据时,我使用到了numpy库相关的函数,如np.average()
, np.var()
,np.corrcoef()
等,对statsmodule库也有了初步的了解。
data_stats = {}
# 打印四个数据集的相关统计数据,计算并画出四个数据集的拟合曲线
for i in range(0, 4):
# 获得对应数据集数据
data = anscombe[anscombe.data == i]
# 计算平均值,方差,相关系数,并使用json字符串打印出来
cur_data_stats = {}
cur_data_stats['average'] = np.average(data.x)
cur_data_stats['variance'] = np.var(data.x)
cur_data_stats['coef'] = np.corrcoef(data.x, data.y)[0,1]
# 计算回归曲线
X = data.x
X = sm.add_constant(X)
e = np.random.random()
## 需要拟合出来的初值
beta = [1.0, 1.0]
fit_result = sm.OLS(data.y, X).fit()
print(fit_result.summary())
cur_data_stats['fit_result'] = list(fit_result.params)
dataset_name = 'dataset_' + str(i)
data_stats[dataset_name] = cur_data_stats
print(json.dumps(data_stats, indent=4) )
该数据集的四个部分,均值,方差,相关系数以及拟合曲线均惊人的一致。我使用json格式打印出来,如下所示。
{
"dataset_0": {
"average": 9.0,
"variance": 10.0,
"coef": 0.81642051634484,
"fit_result": [
3.0000909090909085,
0.5000909090909091
]
},
"dataset_1": {
"average": 9.0,
"variance": 10.0,
"coef": 0.8162365060002428,
"fit_result": [
3.00090909090909,
0.5000000000000002
]
},
"dataset_2": {
"average": 9.0,
"variance": 10.0,
"coef": 0.8162867394895984,
"fit_result": [
3.002454545454544,
0.49972727272727285
]
},
"dataset_3": {
"average": 9.0,
"variance": 10.0,
"coef": 0.8165214368885028,
"fit_result": [
3.001727272727269,
0.499909090909091
]
}
}
Using Seaborn, visualize all four datasets.
hint: use sns.FacetGrid combined with plt.scatter
这道题要求使用Seaborn库来对数据进行展示。话说Seaborn是对matplotlib库更高级的封装,画出来的图表,代码少还好看!
这里我使用了两种方法来画图。
一种是Seaborn中的lmplot
函数来画,该函数还能够顺便把拟合曲线给画出来。
另一个就是题目中的提示,使用FacetGrid
函数将plt.scatter
的四个散点图拼在一起。
sns.set(style="ticks")
print(anscombe)
# Show the results of a linear regression within each dataset
sns.lmplot(x="x", y="y", data = anscombe, col='data')
g = sns.FacetGrid(anscombe, col='data')
g = g.map(plt.scatter, 'x', 'y')