【EDA】常用函数

dataframe

  1. 删除
    1.1 删除重复列名
data = data.loc[:, ~data.columns.duplicated()]

1.2 删除空值所在的行

data_n.dropna(axis=0, inplace=True)

1.3 删除某列

del data['col']

or
删除一列

df.drop('state', axis=1)

删除多列

df.drop(['state', 'point'], axis=1)

1.4 dataframe 删除重复列
方法1:
df3.T.drop_duplicates().T
方法2:
df=df.groupby(level=0,axis=1).first() #按列名合并,保留第一个列名的值

2.dataframe 分割 split

data1 = data.iloc[:,0].str.split(';', n-1, expand=True)

EDA

  1. info
    data.shape, describe(), info()

  2. 缺失值
    isnull().sum()
    missingno.bar()
    .matrix()
    .heatmap()
    删除缺失值所在的行:
    data11 = data1.dropna(axis=0, subset=[, , ])

  3. 数据分布
    sns.distplot()
    value_counts()

  4. 相关性
    sns.heatmap(data.corr())

时间序列EDA

TLCC
时间滞后互相关(TLCC)可以定义两个信号之间的方向性,例如引导-追随关系,在这种关系中,引导信号会初始化一个响应,追随信号则重复它。

WTLCC窗口时间滞后互相关

reference:
https://www.zhihu.com/question/23525783

周期性:自相关ACF和傅里叶变换。
相关性:皮尔逊相关系数和斯皮尔曼相关系数。皮尔逊相关系数适用于线性关系的测量,而斯皮尔曼相关系数适用于非线性关系的测量。
互相关性cross correlation。
标准化的自相关(Normalized Auto-Correlation)
标准化的互相关与时移(Normalized Cross-Correlation with Time Shift)
标准化的自相关与时移(Normalized Auto-Correlation with Time Shift)
滞后性:自相关函数(ACF)和偏自相关函数(PACF)
趋势性:简单移动平均、加权移动平均和趋势线拟合等
离群值:箱线图、Z分数、3σ原则和孤立森林等

reference:https://blog.csdn.net/Eaton18/article/details/103116059

plot

twinx

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0., np.e, 0.01)
y1 = np.exp(-x)
y2 = np.log(x)

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(x, y1,'r',label="right");
ax1.legend(loc=1)
ax1.set_ylabel('Y values for exp(-x)');
ax2 = ax1.twinx() # this is the important function
ax2.plot(x, y2, 'g',label = "left")
ax2.legend(loc=2)
ax2.set_xlim([0, np.e]);
ax2.set_ylabel('Y values for ln(x)');
ax2.set_xlabel('Same X for both exp(-x) and ln(x)');
plt.show()

画图常用设置

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
pd.set_option('display.max_colwidth', None)  # 显示所有列
pd.set_option('display.max_rows', None)  # 显示所有行

dict

定义值为空的dict

dict() 字典构造器

key = [1, 2, 3, 4]
a = dict([(k, []) for k in key])

fromkeys()

key = [1, 2, 3, 4]
# 使用 fromkeys()
b = {}.fromkeys(key, [])

时序数据常用处理

找寻时间不连续点

from pandas import NaT

def time_split(df):
    data = df.copy()
    data.reset_index(drop=True, inplace=True)

    data['time_diff_on'] = data['_time'].diff(1)
    data['time_diff_on'] = [_.total_seconds() for _ in data['time_diff_on'] if _ != NaT]
    data['time_diff_on'].fillna(0, inplace=True)
    data['on'] = [0 if i < -50 else 1 for i in data['time_diff_on']]
    lst_on = data.loc[data['on'] == 0, '_time'].tolist()
    lst_on = [pd.to_datetime(data['_time'].values[0])] + lst_on

    data['time_diff_off'] = data['_time'].diff(-1)
    data['time_diff_off'] = [_.total_seconds() for _ in data['time_diff_off'] if _ != NaT]
    data['time_diff_off'].fillna(0, inplace=True)
    data['off'] = [0 if i < -50 else 1 for i in data['time_diff_off']]
    lst_off = data.loc[data['off'] == 0, '_time'].tolist()
    lst_off = lst_off + [pd.to_datetime(data['_time'].values[-1])]
    
	return lst_on, lst_off

读取拼接一个文件夹里的多个文件

def concat_data(path_base):
	# path_base = r'E:\data'
    path_list = os.listdir(path_base)
    df_ = pd.DataFrame()
    for i in range(len(path_list)):
        path = os.path.join(path_base, path_list[i])
        df = pd.read_csv(path)
        df_ = pd.concat([df_, df], axis=0)
    return df_

评估一份数据的质量

可能的分析角度:
数据采集频率
数据精度
数据测量误差:如果是手动记录的数据,可以尝试计算时间的差分,数值的差分。
数据缺失值
数据异常值
数据方差
数据偏态
数据有效生产时长占比

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值