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