数据的基本特征(数据统计分析)

数据科学领域,我们需要理解和分析数据的特点,以便为建立模型、制定策略以及做出决策提供支持。在本文中,我们将从多个方面对数据的基本特征进行详细阐述。

一、数据的类型

数据可以分为数字数据和非数字数据。数值型数据是指可以进行数值操作的数据,包括整数和浮点数。例如,年龄、体重和工资等都是数值型数据。非数字型数据则是指不能进行数学运算的数据,包括文本、图像和视频等。例如,性别、国籍以及邮政编码等是非数字型数据。

针对不同的数据类型,需要采取不同的分析方法和处理工具。例如,对于数值型数据,我们可以计算平均值、方差和最大值最小值等数学特征;对于非数字型数据,我们可以统计频率、建立词云图进行视觉分析。


# 数值型数据统计
import numpy as np

data = [1, 2, 3, 4, 5]
print('Mean:', np.mean(data))
print('Variance:', np.var(data))
print('Max:', np.max(data))
print('Min:', np.min(data))

# 非数字型数据统计
from collections import Counter
import matplotlib.pyplot as plt

data = ['Apple', 'Banana', 'Orange', 'Apple', 'Apple', 'Orange', 'Banana', 'Banana']
counter = Counter(data)
labels, values = zip(*counter.items())
fig, ax = plt.subplots()
ax.bar(labels, values)
plt.show()

二、数据的分布

数据的分布是数据样本的频率分布。在数据分析中,我们通常关心的是数据的中心趋势和数据的离散程度。中心趋势是指数据的平均值、中位数或众数等;离散程度则是指数据的方差、标准差和四分位数距离等。

通常情况下,数据的分布可分为正态分布、偏态分布和离散分布。正态分布是指数据点分布在均值周围并形成对称的钟形曲线;偏态分布则是指数据点向一侧偏移,形成不对称曲线;离散分布则是指数据点分布在离散的间隔内,不呈现明显的趋势。


# 正态分布
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-5, 5, 0.1)
y = np.exp(-x**2/2)/np.sqrt(2*np.pi)
plt.plot(x, y, '-r')
plt.show()

# 偏态分布
import matplotlib.pyplot as plt
import numpy as np

x = np.random.normal(0, 1, 10000)
y = np.mean(x) + np.std(x) * (np.random.random(size=10000) * 2 - 1)
plt.hist(y, bins=50)
plt.show()

# 离散分布
import matplotlib.pyplot as plt
import numpy as np

x = np.random.randint(1, 7, size=1000)
y = np.bincount(x)[1:]
plt.bar(np.arange(1, 7), y)
plt.show()

三、数据的相关性

在数据分析中,我们通常需要确定两个或多个变量之间的相互关系,这种关系称为相关性。相关性分析可以用来探究两个变量之间的线性或非线性关系,例如:两个股票价格之间的相关性,或者温度和能源消耗之间的相关性。

常用的相关性分析方法包括:皮尔森相关系数、斯皮尔曼相关系数和肯德尔相关系数等。其中,皮尔森相关系数常用于两个数值型变量之间的相关性分析;斯皮尔曼相关系数常用于两个等距型或等比型变量之间的相关性分析;肯德尔相关系数常用于两个等距型或等比型变量之间的相关性分析。


# 皮尔森相关系数
import numpy as np
import pandas as pd

data = {'A': [1, 2, 3, 4, 5], 'B': [2, 4, 6, 8, 10]}
df = pd.DataFrame(data)
print("Correlation:n", df.corr())

# 斯皮尔曼相关系数
import numpy as np
import pandas as pd

data = {'A': [1, 2, 3, 4, 5], 'B': [2, 4, 6, 8, 10]}
df = pd.DataFrame(data)
print("Correlation:n", df.corr(method='spearman'))

# 肯德尔相关系数
import numpy as np
import pandas as pd

data = {'A': [1, 2, 3, 4, 5], 'B': [2, 4, 6, 8, 10]}
df = pd.DataFrame(data)
print("Correlation:n", df.corr(method='kendall'))

四、异常值的检测

异常值是指与其它数据明显不同的数据点,也称作离群点。在数据分析中,我们需要确定是否存在异常值,以便进一步分析处理。常用的异常值检测方法包括:箱线图、3σ原则和DBSCAN等。

箱线图是一种常用的异常值检测方法。箱线图按照数据点的分布情况,以四分位数为界,将数据分为上下两个箱子,箱子之外的点被视为异常值。3σ原则是一种基于常态分布的异常值检测方法,即在均值附近的大部分数据均为正常数据,而超出3个标准差之外的数据点为异常值。DBSCAN则是一种基于密度的聚类分析方法,可以确定密度较高的区域作为正常数据区域,而稀疏区域则可能是异常值。


# 箱线图
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1234)
data = np.random.normal(0, 1, 100)
fig, ax = plt.subplots()
ax.boxplot(data)
plt.show()

# 3σ原则
import numpy as np

data = [3, 4, 5, 6, 7, 8, 9, 10, 1000] # 最后一个数据点为异常值
mean = np.mean(data)
std = np.std(data)
outliers = [x for x in data if (x - mean) > 3*std]
print('Outliers:', outliers)

# DBSCAN
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons

X, y = make_moons(n_samples=200, noise=0.05, random_state=0)
dbscan = DBSCAN(eps=0.5, min_samples=5)
clusters = dbscan.fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=clusters, cmap='viridis')
plt.show()

Published by

风君子

独自遨游何稽首 揭天掀地慰生平