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


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

    """
  # @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())
   
    """
  # @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())
   
    """
  # @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)
   
    """
  # @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())
   

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM