pandas数据分析与处理

1.插补用户用电量数据缺失值。

用户用电量数据呈现一定的周期性关系,missing_data.csv表中存放了用户A、用户B和用户C的用电量数据,其中存在缺失值,需要进行缺失值插补才能进行下一步分析。

(1)读取missing_data.csv表中的数据。

(2)查询缺失值所在位置。

(3)使用SciPy库中interpolate模块中的lagrange对数据进行拉格朗日插值。

(4)查看数据中是否存在缺失值,若不存在则说明插值成功。

源程序

import pandas as pd
import numpy as np
arr=np.array([0,1,2])
missing_data=pd.read_csv('C:/Users/Administrator/Desktop/上机3/missing_data.csv',names=arr)
print('missing_data每个特征缺失的数目为:\n',missing_data.notnull())#查询缺失值所在位置
from scipy.interpolate import lagrange#拉格朗日插值
for i in range(0,3):
    la=lagrange(missing_data.loc[:,i].dropna().index,missing_data.loc[:,i].dropna().values)#训练lagrange模型
    list_d=list(set(np.arange(0,21)).difference(set(missing_data.loc[:,i].dropna().index)))#记录当前列缺失值所在行
    missing_data.loc[list_d,i]=la(list_d)#缺失值带入
    print('第%d列缺失值的个数为:%d' %(i,missing_data.loc[:,i].isnull().sum()))
print('missing_data拉格朗日插值后每个特征缺失的数目为:','\n',missing_data.notnull())#查询缺失值所在位置

结果截屏

pandas数据分析与处理
  1. 合并线损、用电量趋势与线路告警数据。

线路线损数据、线路用电量趋势下降数据和线路警告数据是识别用户窃漏电与否的3个重要特征,需要对由线路线路编号(ID)和时间(data)两个键值构成的主键进行合并。

(1)读取ele_loss.csv和alarm.csv表。

(2)查看两个表的形状。

(3)以ID和date两个键值作为主键进行内连接。

(4)查看合并后的数据。

源程序

import pandas as pd
ele_loss=pd.read_csv('C:/Users/Administrator/Desktop/上机3/ele_loss.csv',encoding='gbk')
alarm=pd.read_csv('C:/Users/Administrator/Desktop/上机3/alarm.csv',encoding='gbk')
print('ele_loss的形状为:',ele_loss.shape)
print('alarm的形状为:',alarm.shape)
merge=pd.merge(ele_loss,alarm,how='inner',left_on=['ID','date'],right_on=['ID','date'])
print('merge的数据为:',merge)

运行截图

pandas数据分析与处理

3.对菜品数据去重及异常值处理。

菜品数据存在重复的现象,所以需要对菜品销售数据分别进行记录去重和特征去重,并将异常值进行处理。

(1)读取detail.csv表。

(2)对订单详情表的样本去重与特征去重。

(3)订单详情表异常值检测与处理。

源程序

import pandas as pd
detail=pd.read_csv('C:/Users/Administrator/Desktop/上机3/detail.csv',encoding='gbk')
print('进行去重操作前菜品数据的的形状为:',detail.shape)
#样本去重
detail.drop_duplicates(inplace = True)
#特征去重
def FeatureEquals(df):
    dfEquals=pd.DataFrame([],columns=df.columns,index=df.columns)
    for i in df.columns:
        for j in df.columns:
            dfEquals.loc[i,j]=df.loc[:,i].equals(df.loc[:,j])
    return dfEquals
detEquals=FeatureEquals(detail)#应用上述函数
lenDet = detEquals.shape[0]
dupCol=[]
for k in range(lenDet):
    for l in range(k+1,lenDet):
        if detEquals.iloc[k,1] & \
        (detEquals.columns[1] not in dupCol):
            detail.drop(dupCol,axis=1,inplace=True)
print('进行去重操作后订单详情表的形状为:',detail.shape)

运行截图

pandas数据分析与处理

4.对菜品数据标准化,对部分数据进行转换。

(1)对订单详情表中的数值型数据做标准差标准化。

(2)对菜品dishes_name特征进行哑变量处理。

(3)对菜品售价使用等频法离散化。

源程序

#自定义标准差标准化函数
def StandardScaler(data):
    data=(data-data.mean())/data.std()
    return data
#对菜品订单表售价和销售量做标准化
data4=StandardScaler(detail['counts'])
data5=StandardScaler(detail['amounts'])
data6=pd.concat([data4,data5],axis=1)
print('标准差标准化之后销量和销量数据为:','\n',data6.head(10))

#哑变量处理
detail=pd.read_csv('C:/Users/Administrator/Desktop/上机3/detail.csv',encoding='gbk')
data=detail.loc[0:5,'dishes_name']
print('哑变量处理前的数据为:\n',data)
print('哑变量处理后的数据为:\n',pd.get_dummies(data))

#等频法散化
def SaneRateCut(data,k):
    w=data.quantile(np.arange(0,1+1.0/k,1.0/k))
    data=pd.cut(data,w)
    return data
result=SaneRateCut(detail['amounts'],5).value_counts()
print('菜品数据等频法离散化后各个类别数目分布情况为:','\n',result)

运行截图

pandas数据分析与处理

Original: https://blog.csdn.net/m0_55685573/article/details/122696205
Author: 泠泠七弦上@静听松风寒
Title: pandas数据分析与处理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/697230/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球