前言
在进行更深入的数据分析之前,描述性统计是一种有效的初步探索工具。它可以帮助发现数据中的异常值。下面,主要会演示如何对数据进行初步的分析,通过描述性统计了解数据的特征.
目录
概念
描述性统计可以快速地为数据分析人员提供数据集的整体概况。通过计算集中趋势的指标(如均值、中位数、众数),可以了解数据的中心位置,大致知道数据集中在哪个数值附近。
在科学研究中,描述性统计可以帮助研究者初步了解实验数据的特征,为进一步的假设检验和建模提供基础。
下面操作用到的第三方库
- matplotlib
- numpy
- pandas
- sklearn
数据来源
(
sklearn
)本身是一个用于机器学习的 Python 库,提供了一些数据集,其中包含了鸢尾花数据集(Iris dataset)
处理逻辑
- 先通过
sklearn库,获取
鸢尾花数据集;- 利用pandas库的
describe()
函数生成描述性统计信息,它可以快速地对数据进行初步分析,提供关于数据分布、中心趋势和离散程度等方面的信息;- 采用频率分布对鸢尾花的花萼宽度进行分析,了解分布特点;
- 采用百分比分布对鸢尾花的花瓣长度进行分析,了解分布特点;
- 采用箱型图对鸢尾花的花瓣宽度进行分析,了解分布特点;
代码实现
1.获取数据
python
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
df = pd.DataFrame(X, columns=iris.feature_names)
print(df.columns)
2.描述性统计
python
def iris_descriptive_table(df):
# 使用 describe 函数进行描述性统计
stats = df.describe()
# 保留2位小数
stats = stats.round(2)
fig, ax = plt.subplots(figsize=(8.8, 4))
# 隐藏坐标轴
ax.axis('off')
# 创建表格
table = Table(ax, bbox=[0, 0, 1, 1])
# 设置表格行数和列数
nrows = stats.shape[0]
ncols = stats.shape[1]
# 设置表格标题行
for j in range(ncols):
table.add_cell(0, j + 1, width=1 / len(stats.columns), height=1 / len(stats.index), text=stats.columns[j],
facecolor='lightblue')
# 设置表格列标题
for i in range(nrows):
table.add_cell(i + 1, 0, width=1 / len(stats.columns), height=1 / len(stats.index), text=stats.index[i],
facecolor='lightblue')
# 填充表格内容
for i in range(nrows):
for j in range(ncols):
val = stats.iloc[i, j]
table.add_cell(i + 1, j + 1, width=1 / len(stats.columns), height=1 / len(stats.index),
text=str(stats.iloc[i, j]))
ax.add_table(table)
plt.title("Iris Describe Table")
# 保存图像
# plt.savefig('iris_descriptive_stats_table.png', dpi=300)
# plt.close()
plt.show()
3.频率分布图
python
def iris_frequency_distribution(df):
sepal_widths = df["sepal width (cm)"]
# 计算频数分布
hist, bin_edges = np.histogram(sepal_widths, bins=10)
# 绘制频数分布图
plt.bar(bin_edges[:-1], hist, width=np.diff(bin_edges), align='edge')
plt.xlabel('Sepal Width')
plt.ylabel('Frequency')
plt.title('Frequency Distribution of Iris Sepal Width')
# 保存图像
# plt.savefig('iris_frequency_distribution.png', dpi=300)
# plt.close()
plt.show()
3.百分比分布图
python
def iris_percentage_distribution(df):
petal_lengths = df["petal length (cm)"]
# 计算频数分布
hist, bin_edges = np.histogram(petal_lengths, bins=10)
# 计算频率分布
frequencies = hist / len(petal_lengths)
# 将频率转换为百分数
percentages = frequencies * 100
# 绘制频率分布图(以百分数显示 y 轴)
plt.bar(bin_edges[:-1], percentages, width=np.diff(bin_edges), align='edge')
plt.xlabel('Petal Length')
plt.ylabel('Percentage(%)')
plt.title('Percentage Distribution of Iris Petal Length')
# plt.savefig('iris_percentage_distribution.png', dpi=300)
# plt.close()
plt.show()
4.箱型图
python
def iris_boxplot(df):
petal_widths = df["petal width (cm)"]
# 绘制箱型图
plt.boxplot(petal_widths)
plt.xlabel('Iris')
plt.ylabel('Petal Width')
plt.title('Box Plot of Iris Petal Width')
# plt.savefig('iris_boxplot.png', dpi=300)
# plt.close()
plt.show()
总结
在不进行复杂的统计分析的情况下,快速提供数据的基本特征。这对于在数据分析的早期阶段了解数据的性质非常有用。