机器学习测试笔记(6)——数据清洗和准备(上)

简介: 机器学习测试笔记(6)——数据清洗和准备(上)

顾老师新书《全栈软件测试工程师宝典》

https://item.m.jd.com/product/10023427978355.html

以前两本书的网上购买地址:

《软件测试技术实战设计、工具及管理》:

https://item.jd.com/34295655089.html

《基于Django的电子商务网站》:

https://item.jd.com/12082665.html


# coding:utf-8
import numpy asnp
import pandas aspd#C:\Users\xiang>pip3install pandas


1 数据清洗和准备


1.1 数据概览和类型转换

#1.1.1数据概览
def data_info():
    data = pd.read_csv('my.csv')
    print("data.info:\n",data.info())
    print("data.shape:\n",data.shape)#规模
    print("data.dtype:\n",data.dtypes)#类型
    print("data.head:\n",data.head())#前五行
    print("data.tail:\n",data.tail())#后五行


输出:

<class'pandas.core.frame.DataFrame'>
RangeIndex: 3entries, 0 to 2
Data columns(total 4 columns):
 #  Column  Non-Null Count  Dtype
---  ------ --------------  -----
 0   编号      3 non-null      int64
 1   姓名      3 non-null      object
 2   手机      3 non-null      int64
 3  Email      3 non-null      object
dtypes:int64(2), object(2)
memory usage:224.0+ bytes
data.info:
 None
data.shape:
 (3, 4)
data.dtype:
 编号        int64
姓名         object
手机         int64
Email        object
dtype:       object
data.head:
    编号   姓名  手机              Email
0   1      张三  13686544556      zhangsan@126.com
1   2      李四  13554346655      lisi@126.com
2   3      王五  18954357788      wangwu@126.com
data.tail:
    编号    姓名  手机              Email
0   1      张三   13686544556      zhangsan@126.com
1   2      李四   13554346655      lisi@126.com
2   3      王五   18954357788      wangwu@126.com


#1.1.2数据类型转换
defchange_type():
data = pd.read_csv('user.csv')
data['编号'] = data['编号'].astype(str)
data['价格'] = data['价格'].str[1:].astype(float)
data['生日'] = pd.to_datetime(data['生日'],format='%Y-%m-%d')
    print("data.dtype:\n",data.dtypes)


输出:

data.dtype:
编号                object
姓名                object
手机                int64
Email               object
生日                datetime64[ns]
价格                float64
dtype:              object


1.2 处理丢失数据

# 1.2.1 判断是否为空
def judge_is_null():
    data = pd.read_csv('my2.csv')
    print("data is:\n",data)
    print("data is null\n",data.isnull())
    print("去除缺省值的数据行\n",data.dropna())
    print("去除缺省值的数据列\n",data.dropna(axis=1))


输出:


data is:
    编号   姓名     手机             Email
0   1      张三     13686544556     zhangsan@126.com
1   2      李四     13554346655     NaN
2   3      王五     18954357788     wangwu@126.com
data is null
      编号  姓名   手机    Email
0     False False  False  False
1     False False  False  True
2     False False  False  False
去除缺省值的数据行
    编号  姓名   手机            Email
0   1     张三   13686544556    zhangsan@126.com
2   3     王五   18954357788    wangwu@126.com
去除缺省值的数据列
    编号  姓名   手机            Email
0   1     张三   13686544556
1   2     李四   13554346655
2   3     王五   18954357788 


# 1.2.2 填充丢失数据
def replace_null():
    data = pd.read_csv('my2.csv')
     print("用0填充\n",data.fillna(0))
     print("用字典填充\n",data.fillna({"姓名":"--","手机":"未知","Email":"---"}))


输出:

用0填充
    编号      姓名    手机            Email
0   1         张三    13686544556     zhangsan@126.com
1   2         李四    13554346655     0
2   3         王五     18954357788    wangwu@126.com
用字典填充
   编号       姓名        手机               Email
0  1          张三        13686544556       zhangsan@126.com
1  2          李四        13554346655        ---
2  3          王五        18954357788       wangwu@126.com


1.3 处理重复数据

# 1.3.1 是否重复
def is_duplicate():
    data =pd.DataFrame({"A":['a','b']*3+['a','b'],"B":[1,1,2,2,3,3,2,3]})
    print("data is:\n",data)
    print("数据是否有重复:\n",data.duplicated())
    print("A列数据是否有重复:\n",data.duplicated(['A']))


输出:

data is:
   A  B
0  a  1
1  b  1
2  a  2
3  b  2
4  a  3
5  b  3
6  a  2
7  b  3
数据是否有重复:
0    False
1    False
2    False
3    False
4    False
5    False
6     True
7     True
dtype: bool
A列数据是否有重复:
0    False
1    False
2     True
3     True
4     True
5     True
6     True
7     True
dtype: bool


# 1.3.2 丢弃重复数据
def  drop_duplicate():
     data =  pd.DataFrame({"A":['a','b']*3+['a','b'],"B":[1,1,2,2,3,3,2,3]})
    print("删除重复行:\n",data.drop_duplicates())
     print("删除A列的重复数据:\n",data.drop_duplicates(['A']))


输出:

删除重复行:
   A  B
0  a  1
1  b  1
2  a  2
3  b  2
4  a  3
5  b  3
删除A列的重复数据:
   A  B
0  a  1
1  b  1


1.4 数据转换

def  data_type_transfer():
    data = pd.read_csv('user1.csv')
    data['姓名'] = data['姓名'].str.lower() #姓名转为小写
    data['生日'] = pd.to_datetime(data['生日'],format='%Y-%m-%d')
    city_to_Province ={
'上海':'上海',
'北京':'北京',
'南京':'江苏',
'银川':'宁夏',
'苏州':'江苏',
'无锡':'江苏'
    }
    data['省'] = data['城市'].map(city_to_Province)
    print("Data is:\n",data)


输出:

Data is:
    编号   姓名      手机                 生日           城市     省
0   1       jerry      136865445561972-08-23  上海      上海
1   2      tom        13554346655 1965-06-24  南京       江苏
2   3      cindy      189543577881987-04-23  银川      宁夏
3   4      peter      180675432331992-04-23  北京      北京
4   5      jessca     139876545671957-04-23  南京      江苏
5   6      john       13899773438 1962-04-23  苏州       江苏
6   7      black      189009876541973-04-23  无锡      江苏
7   8      white      188112211111983-04-23  苏州       江苏


1.5 数据替换

def data_replace():
   data = pd.Series([1,2,3,4,7,888,9999])
   print("Data is:\n",data)
   print("Replace 9999 to -1\n",data.replace(9999,-1))
   print("Replace 9999 and 888\n",data.replace([9999,888],[-1,0]))


输出:

Data is:
0       1
1       2
2       3
3       4
4       7
5       888
6       9999
dtype: int64
Replace 9999 to-1
  0      1
1      2
2      3
3      4
4      7
5      888
6      -1
dtype: int64
Replace 9999 and 888
0    1
1    2
2    3
3    4
4    7
5    0
6   -1
dtype: int64


1.6 数据离散化,数据拆分

def data_categories():
   scores = [54,63,76,83,93]
   grade = [0,60,70,80,90,100]
   data = pd.cut(scores,grade)
   print("data is:\n",data)
   print("data.categories is:\n",data.categories)
   print("data.codes is:\n",data.codes)
   print("value counts:\n",pd.value_counts(data))
   print("User Lables:\n",pd.cut(scores,grade,labels=['E','D','C','B','A']))


输出:

(70, 80], (80, 90], (90, 100]]
Categories (5,interval[int64]): [(0, 60] < (60, 70] < (70, 80] < (80, 90] < (90,100]]
data.categoriesis:
IntervalIndex([(0, 60], (60, 70], (70, 80],(80, 90], (90, 100]],
              closed='right',
              dtype='interval[int64]')
data.codes is:
[0 1 2 3 4]
value counts:
(90, 100]    1
(80, 90]     1
(70, 80]     1
(60, 70]     1
(0, 60]      1
dtype: int64
User Lables:
['E', 'D', 'C','B', 'A']
Categories (5,object): ['E' < 'D' < 'C' < 'B' < 'A']


1.7 过滤异常值

def data_filter():
   data =  pd.DataFrame(np.random.rand(1000,3))
   data = round(data*100)
   print("data info:\n",data.describe())
   print("data[1]>60:\n",data[1][data[1]>60])#第一列大于60
   print("any data>60:\n",data[(data>60).any(1)])#任意一列大于60


输出:

data info:
                0    1            2
count    1000.000000 1000.000000  1000.000000
mean     49.901000    49.376000   50.897000
std      29.140906    29.287102   29.123918
min       0.000000     0.000000   0.000000
25%      24.000000    25.000000   25.000000
50%      49.500000    47.000000   52.000000
75%      75.000000    76.000000   77.000000
max     100.000000    100.000000   100.000000
data[1]>60:
1      87.0
7      89.0
9      76.0
10     94.0
11     74.0
       ...
991    90.0
993    80.0
996    76.0
997    61.0
999    88.0
Name: 1, Length:386, dtype: float64
any data>60:
        0 1     2
0    74.0 32.0  61.0
1     8.0 87.0  38.0
2    65.0  9.0   3.0
3    21.0 35.0  61.0
4    46.0 10.0  97.0
..    ...  ...   ...
994  85.0  7.0  64.0
996  86.0 76.0  60.0
997  51.0 61.0  96.0
998  85.0 38.0  30.0
999  27.0 88.0  75.0
[788 rows x 3columns]


1.8 字符串处理

1.8.1普通处理法

def str_deal():
   text = '1,2,3,4,5,  6'
   splittext = text.split(',')
   striptext = [x.strip()  for x in splittext]
   print("split:\n",splittext)
   print("strip:\n",striptext)
   print("join:\n","+".join(striptext))
   print("find:\n",text.find('3'))
   print("replace:\n",text.replace('6','0'))


输出:

split:
 ['1', '2', '3', '4', '5', '  6']
strip:
 ['1', '2', '3', '4', '5', '6']
join:
 1+2+3+4+5+6
find:
 4
replace:
 1,2,3,4,5, 0


1.8.2正则表达式处理(略)

目录
相关文章
|
19天前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
25 6
|
21天前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
26 1
|
26天前
|
机器学习/深度学习 数据采集 人工智能
自动化测试的未来:AI与机器学习的融合之路
【10月更文挑战第41天】随着技术的快速发展,软件测试领域正经历一场由人工智能和机器学习驱动的革命。本文将探讨这一趋势如何改变测试流程、提高测试效率以及未来可能带来的挑战和机遇。我们将通过具体案例分析,揭示AI和ML在自动化测试中的应用现状及其潜力。
34 0
|
2月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
115 1
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
72 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
130 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
263 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
19天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
63 4
|
16天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
32 1
|
25天前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络