数据分析之数据处理(二)
一、拉格朗日插值法实际运用
1、创建数据
# 1.1创建数据
data=pd.Series(np.random.rand(100)*100)
data[3,6,33,56,45,66,67,80,90]=np.nan
print(data.head())
print('\n*******总数据量:%i******\n'%len(data))
运行结果
2、缺失值的数量
# 1.2缺失值的数量
data_na=data[data.isnull()]
print('\n*******缺失值数据量:%i******\n'%len(data_na))
print('\n*******缺失数据占比:%.2f%%******\n'%(len(data_na)/len(data)*100))
运行结果
3、密度图查看缺失情况
# 1.3密度图查看缺失情况
data_c=data.fillna(data.median())#中位数填充缺失值
fig,axes=plt.subplots(1,4,figsize=(20,5))
data.plot.box(ax=axes[0],grid=True,title='数据分布')
data.plot(kind='kde',style='--r',ax=axes[1],grid=True,title='删除缺失值',xlim=[-50,150])
data_c.plot(kind='kde',style='--b',ax=axes[2],grid=True,title='缺失值填充中位数',xlim=[-50,150])
plt.show()
运行结果
4、拉格朗日插值法
# 1.4拉格朗日插值法
# 创建函数做插值,由于数据量原因,k=5表示以空值前后5个数据为例做插值
def na_c(s,n,k=5):
# y=s[list(range(n-k,n+k+1))]#取数,因为Series不支持反向索引,也就是类似于pd.Series[-1]第一个缺失值位于第三位,n-k出现负值,所以报错。
y = s.reindex(list(range(n - k, n)) + list(range(n + 1, n + 1 + k))) # 取数
y=y[y.notnull()]#剔除空值
return (lagrange(y.index,list(y))(n))
na_re = []
for i in range(len(data)):
if data.isnull()[i]:
data[i]=na_c(data,i)
print(na_c(data,i))
na_re.append(data[i])
data.dropna(inplace=True)#清除插值后人存在的缺失值
data.plot(kind='kde',style='--k',ax=axes[3],grid=True,title='拉格朗日插值后',xlim=[-50,150])
plt.show()
运行结果
注:因为数据随机产生,所以本图的前三幅子图与上图的前三幅子图不同
本文出现小插曲
- 图像中汉字的显示
# 设置字体,不设置不能显示中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定字体
- 图像中负数的显示
# 图画中正常显示负数
plt.rcParams['axes.unicode_minus'] =False
- series不能反向索引
#因为Series不支持反向索引,也就是类似于pd.Series[-1]第一个缺失值位于第三位,n-k出现负值,所以报错。
#y=s[list(range(n-k,n+k+1))]#取数
y = s.reindex(list(range(n - k, n)) + list(range(n + 1, n + 1 + k))) # 取数
自学自用,希望可以和大家积极沟通交流,小伙伴们加油鸭,如有错误还请指正,不喜勿喷