Python实验五:Pandas数据分析及数据预处理

任务一:对用户信心更新表和登陆信息表进行长宽转换
需求说明:通过对数据的描述性统计、以及时间数据信息提取,分组聚合操作已经获得了相当多的信息,但用户信息更新表和登录信息表是长表,而主表是宽表,需要通过长宽表转换将数据合并在一张以用户编号为主键的表内。
任务二:插补用户用电量数据缺失值
需求说明:用户用电量数据呈现一定的周期性关系, missing data.csv表中存放了用户A、用户B 和用户C的用电量数据,其中存在缺失值,需要进行缺失值插补才能进行下一步分析。
任务三:合并线损、用电量趋势与线路告警数据
需求说明:线路线损数据、线路用电量趋势下降数据和线路告警数据是识别用户窃漏电与否的3个重要特征,需要对由线路编号(ID)和时间(date)两个键值构成的主键进行合并。
任务四:标准化建模专家样本数据
需求说明:为了消除特征之间量纲和和取值范围差异可能会造成的影响,需要对数据进行标准化处理。对线路线损特征、线路用电量趋势下降特征、线路告警特征进行标准化有助于后续分析的准确性。

  • 1
    data文件
"""
# @Time    :  2020/5/21
# @Author  :  JM
"""

import pandas as pd

logInfo = pd.read_csv('./data/Training_LogInfo.csv', encoding='gbk')
userUpdate = pd.read_csv('./data/Training_Userupdate.csv', encoding='gbk')

LogInfo_pivot = pd.pivot_table(logInfo, index='Idx', columns=['LogInfo1'], aggfunc='count')
print('用LogInfo1作为分组键创建的登录信息表\n', LogInfo_pivot.head())

UserUpdate_pivot = pd.pivot_table(userUpdate, index='Idx', columns=['UserupdateInfo1'], aggfunc='count')
print('用UserupdateInfo1作为分组键创建的用户信息更新表\n', UserUpdate_pivot.head())

LogInfo_cross = pd.crosstab(index=logInfo['Idx'], columns=logInfo['LogInfo1'])
print('用LogInfo1作为分组键创建的登录信息表\n', LogInfo_cross.head())
Userupdate_cross = pd.crosstab(index=userUpdate['Idx'], columns=userUpdate['UserupdateInfo1'])

print('用UserupdateInfo1作为分组键创建的用户信息更新表\n', Userupdate_cross.head())

  • 2
    data文件链接
"""
# @Time    :  2020/5/21
# @Author  :  JM
"""

import pandas as pd
import numpy as np
from scipy.interpolate import lagrange

arr = np.array([0, 1, 2])
missing_data = pd.read_csv("./data/missing_data.csv", names=arr)
data = pd.read_csv("./data/missing_data.csv", names=arr)
print("lagrange插值前(False为缺失值所在位置)", '\n', missing_data.notnull())

for i in range(0, 3):
    la = lagrange(missing_data.loc[:, i].dropna().index, missing_data.loc[:, i].dropna().values)
    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("lagrange插值后(False为缺失值所在位置)", "\n", missing_data.notnull())

  • 3
    data数据链接
"""
# @Time    :  2020/5/21
# @Author  :  JM
"""
import pandas as pd

el = pd.read_csv('./data/ele_loss.csv', encoding='gbk')
al = pd.read_csv('./data/alarm.csv', encoding='gbk')
print('ele_loss表的形状为', el.shape)
print('alarm表的形状为', al.shape)

merge = pd.merge(el, al, left_on=['ID', 'date'], right_on=['ID', 'date'], how='inner')
print("合并后的表形状为:", merge.shape)
print("合并后的表为:", merge)

  • 4
    data数据链接
"""
# @Time    :  2020/5/21
# @Author  :  JM
"""
import pandas as pd
import numpy as np


def standard(data):
    data = (data - data.mean()) / data.std()
    return data

def mms(data):
    data = (data - data.min()) / (data.max() - data.min())
    return data

def ds(data):
    data = data / 10 ** np.ceil(np.log10(data.abs().max()))
    return data

m1 = pd.read_csv('./data/model.csv', encoding='gbk')

s = standard(m1)
print('标准化后的数据为', '\n', s.head())

s = mms(m1)
print('离差标准化后的数据为', '\n', s.head())

d = ds(m1)
print('小数定标差标准化的数据为', '\n', d.head())

你可能感兴趣的:(pythonLearning,数据分析,python)