机器学习

您所在的位置:网站首页 csv读取文件 机器学习

机器学习

2023-07-16 08:23| 来源: 网络整理| 查看: 265

Python - 对数据集(.csv文件或.excel文件)的基本处理 载入数据读取文件指定时间索引 查看数据显示数据集查看列数据查看索引值 操作修改特征编码数据统计检测重复删除重复行异常值处理缺失值处理合并数据帧

载入数据 读取文件

通过pandas库载入读取csv或excel文件。

import pandas as pd data = pd.read_csv('数据集的文件路径或者URL',header=None, sep=' ', names=[]) data = pd.read_excel('数据集的文件路径或者URL',header=None, sep=' ', names=[]) ''' header为表头,默认为第0行,header = None 默认没有表头,会自动添加数字作为列数 sep = ' ' 表示数据之间使用空格作为分隔符 names可以作为重新定义列索引的列表,如names=['col1', 'col2'] ''' 指定时间索引

通常来说,有时候在创建DataFrame的时候会指定日期作为索引,为此pandas提供了data_range()函数。

data_index = pd.data_range(strat='01/01/2020', end='02/10/2020'. periods=100, freq=None) ''' param: start:string或datetime-like,默认值是None,表示日期的起点。 end:string或datetime-like,默认值是None,表示日期的终点。 periods:integer或None,默认值是None,表示你要从这个函数产生多少个日期索引值;如果是None的话,那么start和end必须不能为None。 freq:string或DateOffset,默认值是’D’,表示以自然日为单位,这个参数用来指定计时单位,比如’5H’表示每隔5个小时计算一次,'30S'则为30秒一个批次。 如果设置了start和end,则只需要设置periods和frep中的一个就可以,一般只需要设置其中三个参数 更多参数自行搜索 ''' 查看数据 显示数据集 data # 显示数据集 data.sample(int n) # 随机显示 n 条数据, 默认n = 1 data.head(int n) # 从头显示 n 条数据, 默认n = 5 data.tail(int n) # 倒数显示 n 条数据, 默认n = 5 查看列数据 col_1 = data["class"] # 获取一列数据 col_12 = data[["sepallength","class"]] # 获取两列及以上数据集,**需要使用二维数据** 查看索引值 data.index # 显示行索引 data.columns # 显示列索引 操作修改 特征编码

1. 标签映射

'''这里假设data['class']为鸢尾花的种类,即将Iris-setosa映射为0, Iris-virginica映射为1, Iris-versicolor映射为2,方便统计''' '''方法1''' data["class"] = data["class"].map({"Iris-setosa" : 0,"Iris-virginica" : 1,"Iris-versicolor" : 2}) '''方法2''' scale_mapper = {"Iris-setosa" : 0,"Iris-virginica" : 1,"Iris-versicolor" : 2} data['class'].replace(scale_mapper)

2. one-hot编码

one-hot编码是一种分类编码的方法,如男-[1], 女-[0] 这里使用scikit-learn的LabelBinarizer进行onehot编码。

from sklearn.preprocessing import LabelBinarizer import numpy as np feature = np.array([ ['male'], ['female'], ['male'], ['female'], ['unknown'], ['male']]) one_hot = LabelBinarizer() one_hot.fit_transform(feature) ''' array([[0, 1, 0], [1, 0, 0], [0, 1, 0], [1, 0, 0], [0, 0, 1], [0, 1, 0]])''' # 查看种类 one_hot.classes_ '''array(['female', 'male', 'unknown'], dtype=''r':56,'g':24,'b':35}] dict_vectorizer = DictVectorizer() features = dict_vectorizer.fit_transform(data_dict) ''' array([[24.,24.,0.],[5.,24.,35.]]) ''' # 获取特征的名字 features_name = dict_vectorizer.get_feature_names() pd.DataFrame(features,columns=features_name) 数据统计

通过groupby统计数据。

# 如果只是用groupby不会返回具体的对象或值 data.groupby['col_name'].mean() # 对col_name列进行分类并且计算每一类的平均值 # 复杂化: data.groupby(['c1', 'c2'])['c3'].mean() # 对c1,c2进行分类后计算每一种类的c3的平均值

对数据集中某一列按类计数。

data["col_name"].value_counts()

如果index是按照时间序列(如按照data_range函数设置)建立的,则可以使用resample(),resample()按照一组时间间隔(偏移)来继续分组。

data.resample('W').sum() # 按周对行分组,计算每周总和 data.resample('2W').mean() # 按2周对行分组,计算每2周均值 data.resample('M').count() # 按月对行分组,计算每月行数 检测重复

验证是否存在重复,若存在重复返回True

data.duplicated().any() 删除重复行 data = data.drop_duplicates()

这里需要注意到,由于drop_duplicates()函数只会删除一摸一样的两行,所以如果有需求去删除某些列相同的行,可以使用drop_duplicates()中的参数subset=[].

data = data.drop_duplicates(subset = ['col_name'], keep='last')

drop_duplicates()函数会默认保留重复行中先出现的行,可以通过keep = last参数改变

异常值处理

识别异常的方法:

常用的方法是假设数据是正态分布的,基于这个假设,在数据周围画一个椭圆,椭圆内的数据视为正常数据。这里使用sklearn的函数:

from sklearn.covariance import EllipticEnvelope outlier_detector = EllipticEnvelope(contamination=.1) # 这里预设数据的异常值占比为0.1 outlier_detector.fit(data) # 这里需要使用数据训练 outlier_detector.predict(data) # 对于数据进行判断

除了考虑数据的所有属性,我们还可以只观察数据的某个属性,并使用四分位差法:

data = datas[:,0] # 这里只是用第一个属性 Q1_4, Q3_4 = np.percentile(data,[25,75]) # 四分之一分位值和四分之三分位值 IQR = Q3_4 - Q1_4 lower = Q1_4 - IQR * 1.5 upper = Q3_4 + IQR * 1.5 data = np.where((data > uppper)|(data lower and datas[:,0]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3