帮我写一段python代码,一组df数据有2列x和y,画出散点图,并且对每一段x范围求y的正态分布,标记出超过2西格玛的数据
时间: 2024-05-08 16:21:38 浏览: 83
好的,可以使用matplotlib和scipy库来实现。下面是一段示例代码:
```python
import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats as stats
# 生成示例数据
df = pd.DataFrame({'x': [1, 2, 3, 4, 5], 'y': [1, 3, 5, 7, 9]})
# 绘制散点图
plt.scatter(df['x'], df['y'])
# 对每段x范围求y的正态分布,并标记超过2西格玛的数据
for i in range(len(df) - 1):
x_range = (df.iloc[i]['x'], df.iloc[i+1]['x'])
y_data = df[(df['x'] >= x_range[0]) & (df['x'] < x_range[1])]['y']
mu, sigma = stats.norm.fit(y_data)
upper_bound = mu + 2 * sigma
outliers = df[(df['x'] >= x_range[0]) & (df['x'] < x_range[1]) & (df['y'] > upper_bound)]
plt.plot(x_range, [mu]*2, 'r--')
plt.plot(x_range, [upper_bound]*2, 'g--')
plt.scatter(outliers['x'], outliers['y'], color='r')
# 显示图形
plt.show()
```
这段代码首先使用pandas读取数据,并使用matplotlib绘制散点图。然后,使用scipy库中的norm函数,对每段x范围内的y数据进行正态分布拟合,并计算出2西格玛的上界。最后,将超过上界的数据标记为红色。
阅读全文