目录
2,对所有的缺省值至少使用两种方法进行插补,必须包含拉格朗日插值法:(1)补0法:
3,选择合适的方法合并处理后的data1和给定的data2:
2,画出data3中’PM2.5','PM10','SO2','CO','NO2','O3'几项的热力相关图,并给出结论:
3,画出’PM2.5','PM10','SO2','CO','NO2','O3'分别与’AQI’的对应散点图:
在我们解决具体的问题之前,我们可以先了解一下处理数据的原理:
原理:
1,处理缺省值的三种方法?
(1)删除含有缺省值的数据。
局限:这种方法简单易行,但可能会损失大量有价值的数据信息,适用于数据集中缺失值比例较小且对建模不是特别关键的情况。
(2)用全局常数替换缺失值。
例如将缺失值替换成0或均值、中位数等固定值,
局限:该方法适用于数据缺失率比较低的情况,数据本身没有特别明显的分布规律时可以采用这种方法。
(3)利用特征和标签间的关系进行预测和插值。
这种方法可以通过建立回归、分类或聚类等机器学习模型,预测缺失值并进行插值。这种方法可以利用数据之间的相关性,保留更多的有价值数据信息,因此在处理缺省值时较为常用。
2,详细解释一种异常值检测方法(IQR原则)
1.异常值是指与其他观测值相比,明显偏离正常规律的观测值。在机器学习和统计数据分析中,异常值的存在可能会导致模型预测性能下降,因此需要进行异常值检测和处理。
2.IQR原则是最常用的箱线图法之一,箱线图法就是通过绘制箱线图来判断数据是否存在异常值,判断标准是在箱线之外的数据点被视为异常值。其核心思想是通过计算数据分布的四分位间距(IQR),来判断数据是否存在异常值。IQR是指数据集的上四分位数(Q3)与下四分位数(Q1)之间的距离,即IQR=Q3-Q1。
3.它的具体的判断异常值的步骤如下:
(1)数据集的四分位数:Q1,Q2,Q3。
(2)四分位间距(IQR):IQR=Q3-Q1。
(3)下临界值和上临界值:Q1-1.5XIQR和Q3+1.5XIQR。
(4)判断数据是否为异常值,具体是将小于下临界值或大于上临界值的数据视为异常值。
4.需要的计算量为数据集的四分位数,四分位间距,下临界值和上临界值。
5.具体的过程如下:
首先,需要计算出数据集的四分位数Q1,Q2,Q3,其中Q1表示数据排序后中间位置左边的数的中位数,Q2表示数据的中位数,Q3表示数据排序后中间位置右边的数的中位数。
根据四分位数的定义,可以很容易地计算出四分位距IQR,即,Q3-Q1。
接着,根据IQR原则,计算出数据集的下限值和上限值,分别为Q1-1.5XIQR和Q3+1.5XIQR。
最后,遍历数据集中每一个数字,将小于下限值或大于上限值的数字视为异常值。
通过以上过程,我们可以得到结论,在使用IQR原则进行异常值检测时,需要通过计算出数据的上下临界值,然后判断数据是否超出这个范围来决定是否为异常值,通过计算数据集的四分位数、IQR和临界值,可以得出哪些数据是异常值,即小于下临界值或大于上临界值的数据被视为异常值。
3,有哪些方法可以给出特征间的关系性?
- 相关系数分析:可通过计算不同特征之间的相关系数(如皮尔逊相关系数、斯皮尔曼相关系数等)来表征它们之间的线性或非线性相关程度。通常情况下,当相关系数大于0.7或小于-0.7时,可认为两个特征之间具有较强的相关性。
- 热力图:对于数据集中各个特征,根据它们之间的相关性程度绘制出一个矩阵,即热力图。通过热力图可以方便地观察特征之间的相关性,并进行初步的筛选。
- 主成分分析(PCA):通过将数据进行正交变换,可以将高度相关的特征组合为一组线性无关的主成分,从而降低数据的维度。利用PCA可以快速识别并去除高度相关的特征。
- 因子分析:类似于PCA,因子分析可以通过将数据进行旋转来找到潜在的变量(因子),并将原始特征映射到这些因子上。可以通过选择最具信息量的因子来识别和解释特征之间的相关性。
- 决策树:通过构建决策树,可以对数据集中不同特征之间的相关性进行可视化,并判断哪些特征对模型预测结果更为关键。
例题1:
1,识别data1中的缺省值:
data1:
y | x1 | x2 | x3 |
1.2596 | 1.4332 | -0.4027 | 1.8623 |
0.201 | 1.1281 | -0.6043 | 2.6514 |
0.1964 | 2.6514 | 0.4845 | 0.3813 |
-0.3153 | 1.8623 | 1.0784 | -0.3003 |
1.5572 | 0.8397 | 0.4912 | -0.3003 |
1.9084 | 0.3404 | 1.0784 | |
-0.7705 | -0.945 | -0.8115 | -0.6214 |
0.4952 | 1.2596 | 0.3588 | 0.1421 |
0.5029 | 0.032 | -0.3157 | 0.032 |
1.3485 | 1.2596 | 2.6514 | 1.2596 |
1.9324 | 1.9084 | 2.6514 | 0.5482 |
1.631 | -0.847 | 2.3076 | 0.0342 |
1.2884 | 0.0316 | 0.1421 | |
0.5506 | 0.5382 | 2.3567 | 0.2326 |
-0.1707 | -0.6912 | 1.8352 | 1.2596 |
0.5506 | -0.6283 | 0.6644 | 1.7271 |
-0.1353 | 0.2927 | 2.6514 | 4.4375 |
1.2596 | -0.6912 | 1.2499 | 0.9677 |
-0.6296 | 2.3635 | 2.8394 | |
1.2596 | 0.3404 | 1.2596 | 0.0872 |
import pandas as pd
xlsx_file='data1.xlsx'
feature = pd.read_excel(xlsx_file, usecols=[0,1,2,3])
feature = pd.DataFrame(feature)
#识别缺失值位置,如果为缺失值,就为true
print(feature.isnull())
#识别每一列缺失值数量
print(feature.isnull().sum())
2,对所有的缺省值至少使用两种方法进行插补,必须包含拉格朗日插值法:
(1)补0法:
import pandas as pd
xlsx_file='data1.xlsx'
feature = pd.read_excel(xlsx_file, usecols=[0,1,2,3])
feature = pd.DataFrame(feature)
print("补0法")
df1 = feature.fillna(0)
print(df1)
(2)拉格朗日法:
import pandas as pd
import numpy as np
def lagrange_interpolation(x, y, x_new):
n = len(x)
result = 0.0
for i in range(n):
prod = 1.0
for j in range(n):
if j != i:
prod *= (x_new - x[j]) / (x[i] - x[j])
result += y[i] * prod
return result
df = pd.read_excel('data1.xlsx')
x_known = np.array(df['x1']) # 已知数据点的自变量值
y_known = np.array(df['y']) # 已知数据点的函数值
y_missing = np.array([5, 12, 18])
x_missing = [lagrange_interpolation(x_known, y_known, y) for y in y_missing]
print("已知数据点:")
print("x:", x_known)
print("y:", y_known)
print("待补全数据点:")
print("x:", y_missing)
print("拉格朗日插值法补全结果:")
print("y:", x_missing)
结果:
3,选择合适的方法合并处理后的data1和给定的data2:
data2:
z1 | x1 | z2 | z3 |
0.8912 | 1.4332 | 2.4647 | 0.5174 |
-0.038 | 1.1281 | 1.6352 | 1.0784 |
0.553 | 2.6514 | -0.6214 | 0.4952 |
0.626 | 1.8623 | 0.0782 | 1.6175 |
0.9677 | 0.8397 | 0.3238 | 0.823 |
-0.2633 | 1.9084 | -0.3958 | 0.9768 |
1.2596 | -0.945 | 0.3744 | 0.4845 |
0.556 | 1.2596 | 1.0784 | 0.5174 |
0.325 | 0.032 | 1.2596 | 1.0784 |
-0.9469 | 1.2596 | 2.6514 | 1.3037 |
0.0531 | 1.9084 | 0.6644 | 0.0782 |
0.0784 | -0.847 | 2.6514 | -2.7681 |
1.4647 | 1.2884 | -0.7705 | -1.5628 |
2.4647 | 0.5382 | 1.1107 | -1.258 |
0.7936 | -0.6912 | -1.9127 | 0.4912 |
-0.3157 | -0.6283 | 1.2596 | 0.2539 |
0.4845 | 0.2927 | -0.659 | -0.8568 |
2.5522 | -0.6912 | 0.0102 | -0.7561 |
-0.8115 | -0.6296 | 1.27 | 0.0649 |
1.0322 | 0.3404 | 1.2596 | -1.308 |
import pandas as pd
da1=pd.read_excel("data1.xlsx",sheet_name='Sheet1')
da2=pd.read_excel("data2.xlsx",sheet_name='Sheet1')
da3=da1.fillna(0)
mix=pd.merge(da3,da2,on='x1')
print(mix)
例题2:
1,识别给定数据data3中缺失值并处理:
data3:
import pandas as pd
xlsx_file='data3.xlsx'
feature = pd.read_excel(xlsx_file, usecols=[0,1,2,3,4,5,6,7,8])
feature = pd.DataFrame(feature)
print(feature)
# 补0法
df1 = feature.fillna(0)
print(df1)
2,画出data3中’PM2.5','PM10','SO2','CO','NO2','O3'几项的热力相关图,并给出结论:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.read_excel('data3.xlsx')
df = data[['PM2.5', 'PM10', 'SO2', 'CO', 'NO2', 'O3']]
corr = df.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('Correlation Heatmap of Air Pollutants')
plt.show()
结论:
根据热力图,我们可以看出来PM2.5 和 PM10 通呈现出正相关,他们之间相互影响,其中一个增长,另外一个也会增加。SO2 和 O3 呈现出负相关,这是因为它们代表的是不同的污染物指标,其中一个变量的值增加时,另一个变量的值会随之减少。CO 和 NO2 之间的相关性通常比较弱,增加或减少其中一个变量的值,对另一个变量的值没有明显的影响。
3,画出’PM2.5','PM10','SO2','CO','NO2','O3'分别与’AQI’的对应散点图:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_excel('data3.xlsx')
fig, axs = plt.subplots(2, 3, figsize=(15, 10))
axs = axs.flatten()
for i, col in enumerate(['PM2.5', 'PM10', 'SO2', 'CO', 'NO2', 'O3']):
axs[i].scatter(data[col], data['AQI'])
axs[i].set_xlabel(col)
axs[i].set_ylabel('AQI')
plt.show()
4,将质量等级一项数据画饼状图,并转为独热编码
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_excel('data3.xlsx')
counts = data['质量等级'].value_counts()
plt.pie(counts, labels=counts.index)
plt.title('饼图-质量等级')
plt.show()
one_hot = pd.get_dummies(data['质量等级'])
print(one_hot.head())