目录

  • 任务内容
    • (1)将数据进行转置,转置后型如eg.csv, 缺失值用NAN代替。
    • (2) 对数据中的异常值进行识别并用NA代替。
    • (3) 计算每个用户用电数据的基本统计量,包括:最大值、最小值、均值、中位数、和、方差、偏度、峰度。(不包括空值)
    • (4) 每个用户用电数据按日差分,并计算差分结果的基本统计量,统计量同上述第3问。
    • (5) 计算每个用户用电数据的5%分位数。
    • (6) 对每个用户的用电数据按周求和并差分(一周7天),计算差分结果的基本统计量,统计量同第3问。
    • (7) 每个用户在一段时间内会有用电数据最大值,统计用电数大于‘0.9×最大值’的天数。
    • (8) 获取每个用户用电数据出现最大值和最小值的月份,若最大值(最小值)存在于多个月份,则输出含有最大值(最小值)最多的那个月份。我们按天统计每个用户的用电数据,假设1号用户用电量的最小值为0(可能是当天外出没有用电),在一年的12个月,每个月都有可能有若干天用电量为0,那么就输出含有最多用电量为0的天数所在的月份。最大用电量统计同理。
    • (9) 以每个用户7月和8月用电数据为同一批统计样本,3月和4月用电数据为另一批统计样本,分别计算这两批样本之间的总体和(sum)之比,均值(mean)之比,最大值(max)之比和最小值(min)之比。
    • (10)将上述统计的所有特征合并在一张表格中显示出来。

任务内容

给定数据文件data.csv,其中记录的是用户用电数据。数据中有编号为1~200的200位用户,DATA_DATE表示时间,如:2015/1/1表示2015年1月1日, KWH表示用电量。请用给定的数据,实现以下任务:

(1)将数据进行转置,转置后型如eg.csv, 缺失值用NAN代替。
(2) 对数据中的异常值进行识别并用NA代替。
(3) 计算每个用户用电数据的基本统计量,包括:最大值、最小值、均值、中位数、和、方差、偏度、峰度。(不包括空值)
(4) 每个用户用电数据按日差分,并计算差分结果的基本统计量,统计量同上述第3问。
(5) 计算每个用户用电数据的5%分位数。
(6) 对每个用户的用电数据按周求和并差分(一周7天),计算差分结果的基本统计量,统计量同第3问。
(7) 每个用户在一段时间内会有用电数据最大值,统计用电数大于‘0.9×最大值’的天数。
(8) 获取每个用户用电数据出最大值和最小值的月份,若最大值(最小值)存在于多个月份,则输出含有最大值(最小值)最多的那个月份。我们按天统计每个用户的用电数据,假设1号用户用电量的最小值为0(可能是当天外出没有用电),在一年的12个月,每个月都有可能有若干天用电量为0,那么就输出含有最多用电量为0的天数所在的月份。最大用电量统计同理。
(9) 以每个用户7月和8月用电数据为同一批统计样本,3月和4月用电数据为另一批统计样本,分别计算这两批样本之间的总体和(sum)之比,均值(mean)之比,最大值(max)之比和最小值(min)之比。
(10)将上述统计的所有特征合并在一张表格中显示出来。

(1)将数据进行转置,转置后型如eg.csv, 缺失值用NAN代替。

import pandas as pd
import numpy as np
data = pd.read_csv('data.csv', parse_dates=[1])
null_value = data.isna().sum() # 缺失值识别
print("data具有的缺失值:\n",null_value)
data = data.fillna(value=np.NAN)
result = pd.pivot_table(data, index='CONS_NO', columns='DATA_DATE')
result.to_csv('eg.csv')


(2) 对数据中的异常值进行识别并用NA代替。

u = data['KWH'].mean() # 平均值
si = data['KWH'].std() # 标准差
three_si= data['KWH'].apply(lambda x: x>u+3*si  or x<u-3*si )
# print(three_si)
result1 = data.loc[three_si,'KWH'] # 使用3σ方法识别异常值
print("data在3σ下具有的异常值(前10):\n",result1.head(10))
data.loc[three_si,'KWH'] = pd.NA

(3) 计算每个用户用电数据的基本统计量,包括:最大值、最小值、均值、中位数、和、方差、偏度、峰度。(不包括空值)

def statistics(df): # 数据统计并合并统计量statistical_table = pd.concat([df.max(), df.min(), df.mean(), df.median(), df.sum(), df.var(), df.skew(), df.kurt()],axis=1)statistical_table.columns = ['最大值','最小值','均值','中位数','和','方差','偏度','峰度']return statistical_table
# 对其输出
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
pd.set_option('display.width',180)
print("每个用户用电数据的基本统计量:\n",statistics(result.T))

(4) 每个用户用电数据按日差分,并计算差分结果的基本统计量,统计量同上述第3问。

difference = result.diff(axis=1)
difference.T #每个用户用电数据按日差分
print("每个用户用电数据按日差分的基本统计量:\n",statistics(difference.T))

(5) 计算每个用户用电数据的5%分位数。

print("每个用户的5%分位数为:\n",result.quantile(0.05,axis=1))#运用df.quantile()函数求分位数

(6) 对每个用户的用电数据按周求和并差分(一周7天),计算差分结果的基本统计量,统计量同第3问。

w_index = pd.PeriodIndex(data['DATA_DATE'], freq='w')#重组时间序列
sum_week = data.groupby(by=['CONS_NO', w_index]).sum()
week_table = pd.pivot_table(sum_week, index='DATA_DATE', columns='CONS_NO')
diff_week = week_table.diff(1)#差分
print("每个用户按周求和并差分:\n",diff_week)
print("每个用户按周求和并差分的基本统计量:\n",statistics(diff_week))

(7) 每个用户在一段时间内会有用电数据最大值,统计用电数大于‘0.9×最大值’的天数。

max_d = result.apply(lambda x:x>x.max()*0.9,axis=1).sum(axis=1)
print("每个用户用电数大于‘0.9最大值’的天数:\n",max_d)

(8) 获取每个用户用电数据出现最大值和最小值的月份,若最大值(最小值)存在于多个月份,则输出含有最大值(最小值)最多的那个月份。我们按天统计每个用户的用电数据,假设1号用户用电量的最小值为0(可能是当天外出没有用电),在一年的12个月,每个月都有可能有若干天用电量为0,那么就输出含有最多用电量为0的天数所在的月份。最大用电量统计同理。

最大值:

data['flag']=data.groupby('CONS_NO')['KWH'].apply(lambda x:x==x.max())#为每个最大值的记录打上标记
data['MAX']=data.groupby('CONS_NO')['KWH'].transform('max')#记录最大值
max_index = data[data.flag == True].index #筛出最大值的记录
surface_max = data.iloc[max_index]
#print(surface_max) #筛选出的数据
key = pd.PeriodIndex(surface_max['DATA_DATE'], freq='m')
max_count = surface_max.groupby(by=['CONS_NO', key])['KWH'].count()# 按月进行分组,统计每个月份最大值数量
max_count_df = pd.DataFrame(max_count)
max_count_df_index = max_count_df.reset_index().groupby('CONS_NO')['KWH'].idxmax()#筛出数量最多的月份
max_result = max_count_df.iloc[max_count_df_index]
max_result.columns = ['KWH最大值次数']
#print(max_result) # 最大值数量key = pd.PeriodIndex(data['DATA_DATE'], freq='m')
month = data.groupby(by=['CONS_NO', key])['KWH'].max()# 按月进行分组
month_df = pd.DataFrame(month)
max_index = month_df.reset_index().groupby('CONS_NO')['KWH'].idxmax()#筛出用户KWH最大值
max_value = month_df.iloc[max_index]
#print(max_value) # 最大值max_result=max_result.copy()
max_result.loc[:,'各用户的KWH最大值']=max_value.values
print(max_result)


最小值:

data['flag']=data.groupby('CONS_NO')['KWH'].apply(lambda x:x==x.min())#为每个最小值的记录打上标记
data['MIN']=data.groupby('CONS_NO')['KWH'].transform('min')#记录最小值
min_index = data[data.flag == True].index #筛出最小值的记录
surface_min = data.iloc[min_index]
#print(surface_min) #筛选出的数据key = pd.PeriodIndex(surface_min['DATA_DATE'], freq='m')
min_count = surface_min.groupby(by=['CONS_NO', key])['KWH'].count()# 按月进行分组,统计每个月份最小值数量
min_count_df = pd.DataFrame(min_count)
min_count_df_index = min_count_df.reset_index().groupby('CONS_NO')['KWH'].idxmax()#筛出数量最多的月份
min_result = min_count_df.iloc[min_count_df_index]
min_result.columns = ['KWH最小值次数']
#print(min_result) # 最小值数量key = pd.PeriodIndex(data['DATA_DATE'], freq='m')
month = data.groupby(by=['CONS_NO', key])['KWH'].min()# 按月进行分组
month_df = pd.DataFrame(month)
min_index = month_df.reset_index().groupby('CONS_NO')['KWH'].idxmin()#筛出用户KWH最小值
min_value = month_df.iloc[min_index]
#print(min_value) # 最小值min_result=min_result.copy()
min_result.loc[:,'各用户的KWH最小值']=min_value.values
print(result)

(9) 以每个用户7月和8月用电数据为同一批统计样本,3月和4月用电数据为另一批统计样本,分别计算这两批样本之间的总体和(sum)之比,均值(mean)之比,最大值(max)之比和最小值(min)之比。

data = pd.read_csv('data.csv', parse_dates=[1])#重新加载数据(之前加载的data已被修改)
def date_filter(df): # 日期筛选,返回两张表idx = pd.IndexSlicemon78 = df.loc[idx[:,['2015-7','2015-8', '2016-7', '2016-8']],:]mon34 = df.loc[idx[:,['2015-3','2015-4', '2016-3', '2016-4']],:]return mon78, mon34def date_merge(df_1, df_2, name): # 合并符合要求的日期,同时进行比值处理df_ratio = pd.merge(df_1, df_2, on='CONS_NO')df_ratio.columns = ['7-8月', '3-4月']df_ratio[name] = df_ratio['7-8月'] / df_ratio['3-4月']return df_ratiodef analysis(df): # 每月数据统计a_table = pd.concat([df.max()['KWH'], df.min()['KWH'], df.mean(), df.sum()],axis=1)a_table.columns = ['最大值','最小值','均值','和']return a_tabledef analysis2(df):# 筛选出来的数据统计a2_table = pd.concat([df['最大值'].max(),df['最小值'].min(),df['均值'].mean(),df['和'].sum()],axis=1)return a2_tablem_index = pd.PeriodIndex(data['DATA_DATE'], freq='m')
m_all = data.groupby(['CONS_NO', m_index])# 按月进行分组
t=analysis(m_all)
mon78,mon34 = date_filter(t)
mon_78 = analysis2(mon78.groupby('CONS_NO'))
mon_34 = analysis2(mon34.groupby('CONS_NO'))
col = ['最大值','最小值','均值','和']
names=['最大电量比','最小电量比','均值比','总和比']
summary_table = pd.DataFrame()
for i in range(4):print('每个用户七八月电量%s与三四月电量%s的比值:'%(col[i],col[i]))ratio_table = date_merge(mon_78[col[i]], mon_34[col[i]], names[i])summary_table[names[i]] = ratio_table[names[i]]print(ratio_table,'\n')
print('比值汇总表:\n',summary_table)





(10)将上述统计的所有特征合并在一张表格中显示出来。

def rename_columns(df,add):#统计量重命名new_col = list()for i in df.columns:if i != 'CONS_NO':new_col.append(i+add)else:new_col.append(i)df.columns=new_colreturn dfdf1 ,df2,df3,df4 ,df5= statistics(result.T),statistics(difference.T),statistics(diff_week),min_result.reset_index(),max_result.reset_index()
df6,df7= pd.DataFrame(result.quantile(0.05,axis=1)),pd.DataFrame(max_d)
adds = ['_原始','_日差分','_周差分','_min','_max']
new = ['5%分位数','kwh>0.9max的天数']
dfs=[df1,df2,df3,df4,df5,df6,df7]#合并表单的集合
all_feature_tables = summary_table
for i in range(len(dfs)):if i < 5:a = rename_columns(dfs[i],adds[i])all_feature_tables = pd.merge(all_feature_tables,a,on='CONS_NO')elif i < 7:dfs[i].columns=[new[i-5]]all_feature_tables = pd.merge(all_feature_tables,dfs[i],on='CONS_NO')all_feature_tables #展示总表

【Python与数据分析实验报告】Pandas数据分析基础应用相关推荐

  1. python数据分析实验报告_Python数据分析综合小练习:销售数据分析

    有这样一个小小的练习题: 卖电子商品的老板,每天记录了自己卖出的U盘,电脑支架,插座,电池,音箱,鼠标,usb数据线,手机充电线等数量,客户的需求是一方面,也可以通过客户购买关联性比较强的商品进行引导 ...

  2. python数据分析实验报告_Python 数据分析入门实战

    本训练营中,我们将学习怎么样使用 Python 进行数据分析.课程将从数据分析基础开始,一步步深入讲解.从 Python 的基础用法到数据分析的各种算法,并结合各种实例,讲解数据分析过程中的方方面面. ...

  3. Hive数据分析实验报告

    文章目录 Hive数据分析实验报告 实验要求 1 完成本地数据user_log文件上传至HDFS中 2 完成HDFS文件上传至Hive中 3 Hive操作 IP地址规划表 实验步骤 1 数据集预处理 ...

  4. python程序设计报告-《Python程序设计》 实验报告.doc

    <Python程序设计> 实验报告 温州大学瓯江学院数学与信息工程学院 <Python程序设计> 实验报告 实验名称: 实验3 Python基本数据类型 班 级: 计算机一班 ...

  5. 《Python程序设计》实验四 Python综合实践实验报告

    <Python程序设计>实验四 Python综合实践实验报告 1.实验内容 Python综合应用:爬虫.数据处理.可视化.机器学习.神经网络.游戏.网络安全等. 在华为ECS服务器(Ope ...

  6. 计算机实训机器人实验原理是什么,实验报告机器人控制技术基础实验报告.doc...

    实验报告机器人控制技术基础实验报告 华北电力大学 实 验 报 告 | | 实验名称: 机器人控制技术基础 课程名称: 机器人控制技术基础 | | 实 验 人: 成 绩: 18.00秒 指导教师: 实验 ...

  7. 计算机硬件技术基础实验教程实验报告,计算机硬件技术基础实验报告.doc

    计算机硬件技术基础实验报告 计算机硬件技术基础实验日志认识集成操作软件DDATA SEGMENT MSRDB "HELLO,WORLD!$" LENEQU $- MSR DDATA ...

  8. matlab图像处理基础实验,数字图像处理实验报告 Matlab图像处理基础

    <数字图像处理实验报告 Matlab图像处理基础>由会员分享,可在线阅读,更多相关<数字图像处理实验报告 Matlab图像处理基础(27页珍藏版)>请在人人文库网上搜索. 1. ...

  9. python数据分析实验报告_用Python处理实验数据

    开篇语 近来忙于考试以及应付专业课,基本很少写简书了.昨晚攻坚了三个学生工作的任务(妈妈的吻.好久没有这么疯狂工作了.还是很爽的哦!) 只恨这张图没有标记时间,其实已经是十二点四十多了 今天难得清静, ...

  10. Python 全栈 400 之Pandas数据分析练习

    288 Pandas 读取 URL 路径的文件 数据输入路径,可以是文件路径,也可以是 URL,或者实现 read 方法的任意对象. 如下经典的数据集 iris,直接通过 URL 获取. In [16 ...

最新文章

  1. Oracle-数据泵expdp/impdp实操
  2. 的源码管理器中有感叹图标_Win7系统我的电脑中没有光驱图标的解决方法
  3. (读书随笔)接口和抽象类的一些区别总结
  4. 4位加法器的设计代码verilog_一个简单的8位处理器完整设计过程及verilog代码
  5. 使用Backtrace函数打印调用栈 - Debug居家必备
  6. JAVA环境配制和生成jar包的方法
  7. js负数比较大小_【建阳童小|阅享数学(第十一期)】负数的由来
  8. 「SF图片上传不清晰」解决方案
  9. python接口自动化(四十)- logger 日志 - 下(超详解)
  10. 马云点名的工程师,除了几百封求爱信还有13项区块链专利
  11. 邮件服务器最常见的安全问题及解决办法
  12. 64位的系统最大可以支持多大内存
  13. 沃尔沃押注“超大尺寸HUD”,软硬件同步升级机会凸显
  14. 查看欧拉系统服务器ip,EulerOS 系统配置
  15. 苹果公司为什么储备那么多现金?
  16. 分享几个appstore之外的iOS软件下载网址
  17. c语言字符数组自动填充,数组在C中自动填充
  18. Dewarp 文件恢复技术
  19. 配置群晖NAS中的cpolar开机自启动 2-2
  20. el-upload回显细节--没有图片数据返回的时候每点击一次添加多了一个空白图片

热门文章

  1. 010序列检测电路设计
  2. 02 who——open、read、close
  3. c语言less函数,LESS使用方法
  4. (离散数学)用谓词逻辑推理的方法证明下面推理的有效性。要求按照推理的格式书写推理过程。
  5. 小米打印机显示服务器出错,关于小米笔记本连接不上网络打印机的处理方法
  6. MDT 2013 从入门到精通之Office 2013应答文件生成
  7. linux打开xml文件,xml文件扩展名,xml文件怎么打开?
  8. udacity深度学习--2. 深度学习简介--LESSON5 Jupyter notebook
  9. 华为p6 android4.4,华为P6终于品尝到了安卓4.4.2 可惜……
  10. 用python制作一张简单的节日贺卡