Pandas数据分析基础应用

给定数据文件data.csv,其中记录的是用户用电数据。数据中有编号为1~200的200位用户,DATA_DATE表示时间,如:2015/1/1表示2015年1月1日, KWH表示用电量。
文件下载:
链接:https://pan.baidu.com/s/15PvDmfDqgdNM1hXAa59L8A
提取码:a245

请用给定的数据,实现以下任务:

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

分析过程:

转置的话想到了numpy的T,但是他的话是直接转的,和所给的eg.csv格式不相同而且转了之后对数据处理没有任何用处。给的例子是以CONS_NO为索引,DATA_DATE为字段的,脑子里没啥想法,于是百度
pandas的转置pandas的透视表,我感觉写的很详细了。
找到了pivot_table()函数,即透视表,一种可以对数据动态排布并且分类汇总的表格格式。用pd.pivot_table(data, index=‘CONS_NO’, columns=‘DATA_DATE’)进行转置即可。
在excel里面也是有这个功能的。

缺失值的识别和替换,用isnull()判断是否为空值,sum()函数对空值进行统计,替换的话用fillna(),功能是填充缺失值,这里要注意不要直接用字符串‘NAN’,要用np.NAN,不然数据类型会不同,很难处理。
读cvs的时候,需要将DATA_DATE以时间类型读入。
还有就是空值和缺失值的区别也要注意:空值在pandas中的空值是"";而缺失值在dataframe中为nan或者naT(缺失时间),在series中为none或者nan。

代码:

import pandas as pd
import numpy as np
#(1)数据转置,缺失值用NAN代替。
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) # 不要直接用字符串‘NAN’否则数据类型会不同。
result = pd.pivot_table(data, index='CONS_NO', columns='DATA_DATE')
result.to_csv('res.csv')

实验结果:

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

分析过程:
异常值和缺失值是不同的概念,要搞清楚。异常值是指数据中个别值的数值明显偏离其余的数值,有时也成为离群点,检测异常值就是检验数据中是否有录入错误以及是否含有不合理的数据。怎么检测呢,继续百度。
异常值的检测常用的方法有:业务法、3σ原则和箱线图分析。
我采用3σ原则检测异常值:如果数据服从正态分布,异常值被定义为一组测定值中与平均值的偏差超过3倍的值 → p(|x - μ| > 3σ) ≤ 0.003。
异常数据常用处理方法:
1.删除法(前提是异常观测的比例不能太大)
2.替换法(可以考虑使用低于判别上下限的最大值或最小值,均值或中位数替换等)
题目是用NA代替。

代码:

# (2)异常值识别/代替
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
print("异常值替换成NA(后10):\n",data.loc[three_si,'KWH'].tail(10))

实验结果:

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

分析过程:
主要是几个函数的运用,具体如下:

功能 函数 功能 函数
最大值 df.max() df.sum()
最小值 df.min() 方差 df.var()
均值 df.mean() 偏度 df.skew()
中位数 df.median() 峰度 df.kurt()

因为展示出来的格式对的不太齐,看着很难受,于是也百度了下对表格输出的格式化展示。

代码:

# (3)求每个用户的统计量
def statistics(df): # 数据统计并合并统计量
    statistical_table = pd.concat([df.max(), df.min(), df.mean(), df.median(), df.sum(), df
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值