Python3(基础|高级)语法实战(|多线程|多进程|线程池|进程池技术)|多线程安全问题解决方案
一: 数据分析与挖掘认知升维
我们知道在数据分析与数据挖掘中,数据处理是一项复杂且繁琐的工作,同时也是整个数据分析过程中的最为重要的环节;数据处理一方面能提供数据的质量;另一方面能让数据更好的使用数据分析工具;
数据处理的主要内容包括:
(1) 数据清洗
1.1 重复值处理
1.2 缺少值处理
(2) 数据的抽取
2.1 字段抽取
2.2 字段拆分
2.3 重置索引
2.4 记录抽取
2.5 随机抽样
2.6 通过索引抽取数据
2.7 字典数据抽取
2.8 插入数据
2.9 修改数据记录
(3) 数据交换
3.1 交换行与列
3.2 排名索引
3.3 数据合并
(4) 数据计算
4.1 简单计算 (加,减,乘,除的计算)
4.2 数据标准化
4.3 数据分组
4.4 日期处理
....................
(5) 数据可视化
5.1 图表化
5.2 Excel|Word|PPT化
二: 数据处理
数据清洗认知升级:
在数据分析时,海量的原始数据中存在大量不完整,不一致,有异常的数据,严重影响到数据分析的结果;
索引进行数据清洗很重要,数据清洗是数据价值链中最关键的步骤。垃圾数据,即使是通过最好的分析,也将
产生错误的结果,并误导业务本身.因此在数据分析过程中.数据清洗占据很大的工作量
数据清洗就是处理缺失的数据以及清除无意义的信息,如删除原始数据集中的无关数据,重复数据,平滑噪声数据,
筛选掉与分析主题无关的数据,处理缺失值,异常值等
数据清洗:
一: 重复值的处理
二: 缺失的处理
实例一:重复数据处理
# -*- coding:utf-8 -*- import pandas as pd from pandas import Series """ 数据清洗认知升级: 在数据分析时,海量的原始数据中存在大量不完整,不一致,有异常的数据,严重影响到数据分析的结果; 索引进行数据清洗很重要,数据清洗是数据价值链中最关键的步骤。垃圾数据,即使是通过最好的分析,也将 产生错误的结果,并误导业务本身.因此在数据分析过程中.数据清洗占据很大的工作量 数据清洗就是处理缺失的数据以及清除无意义的信息,如删除原始数据集中的无关数据,重复数据,平滑噪声数据, 筛选掉与分析主题无关的数据,处理缺失值,异常值等 数据清洗: 一: 重复值的处理 二: 缺失的处理 """ print(""" (1)重复值的处理 利用DataFrame中的duplicated方法返回一个布尔型的Series,展示是否有重复行,没有重复的行显示FALSE; 有重复的则从第二行起均显示为TRUE (2)使用drop_duplicates方法用于把数据结构中行相同的数据去除(只保留一行),该方法返回一个DataFrame的数据框 """) dataFrame = pd.DataFrame({ 'age': Series([26, 85, 64, 85, 85]), 'name': Series(['Ben', 'John', 'Jerry', 'John', 'John']) }) print(dataFrame) # 显示那些行有重复 repeatableDataFrame = dataFrame.duplicated() print() print(repeatableDataFrame) print(""" 去掉重复的行 """) print("查看name列重复行") print(dataFrame.duplicated('name')) print() print("查看age列重复行") print(dataFrame.duplicated('age')) print() print("根据age列去掉重复的行数") print(dataFrame.drop_duplicates('age')) print() print("根据name列去掉重复的行数") print(dataFrame.drop_duplicates('name'))
运行效果:
D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\dataanalysis\DataAnalysisDataCleaning.py
(1)重复值的处理
利用DataFrame中的duplicated方法返回一个布尔型的Series,展示是否有重复行,没有重复的行显示FALSE;
有重复的则从第二行起均显示为TRUE
(2)使用drop_duplicates方法用于把数据结构中行相同的数据去除(只保留一行),该方法返回一个DataFrame的数据框
age name
0 26 Ben
1 85 John
2 64 Jerry
3 85 John
4 85 John
0 False
1 False
2 False
3 True
4 True
dtype: bool
去掉重复的行
查看name列重复行
0 False
1 False
2 False
3 True
4 True
dtype: bool
查看age列重复行
0 False
1 False
2 False
3 True
4 True
dtype: bool
根据age列去掉重复的行数
age name
0 26 Ben
1 85 John
2 64 Jerry
根据name列去掉重复的行数
age name
0 26 Ben
1 85 John
2 64 Jerry
Process finished with exit code 0
三: 缺失值处理
认知升维
从统计上说,缺失的数据可能会产生有偏估计,从而导致样本数据不能很好地代表总体,
而现实中绝大部分数据都包含缺失值,因此如何处理缺失值很重要。
一般来说,缺失值的处理包括两个步骤:
(1)缺失数据的识别
(2)缺失数据的处理
# -*- coding:utf-8 -*- import pandas as pd from pandas import Series """ 认知升维 从统计上说,缺失的数据可能会产生有偏估计,从而导致样本数据不能很好地代表总体, 而现实中绝大部分数据都包含缺失值,因此如何处理缺失值很重要。 一般来说,缺失值的处理包括两个步骤: (1)缺失数据的识别 (2)缺失数据的处理 """ print("读取数据来源: ") dataFrame = pd.read_excel(r'./file/rz.xlsx', sheet_name='Sheet2') print(dataFrame) print(""" 1)缺失值的识别 Pandas使用浮点值NaN表示浮点数和非浮点数组里的缺失数据,并使用.isnull和.notnull函数来判断缺失情况 """) print() print("缺失值判断;True表示缺失,False表示非缺失") print(dataFrame.isnull()) print() print("缺失值判断;True表示非缺失,False表示缺失") print(dataFrame.notnull()) print(""" 2)缺失值处理 对于缺失数据的处理方式有数据补齐,删除对应行,不处理等方式 2.1 dropna()去除数据结构中值为空的数据行 2.2 fillna()用其他数替代NaN;有的时候直接删除空数据会影响分析结果,可以对数据进行填补 2.3 fillna(method = 'pad')用前一个数据值代替NaN """) print("删除数据为空所对应的行: ") print(dataFrame.dropna()) print() print("使用数值或者任意字符替代缺失值:") print(dataFrame.fillna("$")) print() print("用前一个值替换缺失的值: ") print(dataFrame.fillna(method='pad')) print() print("用后一个值替换缺失的值:") print(dataFrame.fillna(method='bfill')) print() print("用平均数或者其它描述性统计量替代NaN") print(dataFrame.fillna(dataFrame.mean(numeric_only=True))) print() print(""" dataFrame.mean()['填补列名':'计算均值的列名']:可以使用选择列的均值进行缺失值的处理 """) print(dataFrame.fillna(dataFrame.mean(numeric_only=True)['高代':'解几'])) print() print("dataFrame.fillna({'列名1':值1,'列名2':值2}): 可以传入一个字典,对不同的列填充不同的值") print(dataFrame.fillna({'数分': 100, '高代': 0})) print("使用strip()清除字符串左,右或首尾指定的字符串,默认为空格,中间不清除") dataFrameStrip = pd.DataFrame({ 'age': Series([26, 85, 64, 85, 85]), 'name': Series(['Ben', 'John ', 'Jerry', 'John ', ' John']) }) print(dataFrameStrip) print() print(dataFrameStrip['name'].str.strip()) print() print("只删除右边的字符n,如果不指定删除的字符串,默认删除空格") print(dataFrameStrip['name'].str.rstrip()) print() print(dataFrameStrip['name'].str.rstrip('n')) print() print("只删除左边的字符n,如果不指定删除的字符串,默认删除空格") print(dataFrameStrip['name'].str.lstrip()) print() print(dataFrameStrip['name'].str.lstrip('J'))
运行效果:
D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\dataanalysis\DataAnalysisDataMissing.py
读取数据来源:
学号 姓名 英语 数分 高代 解几
0 2308024241 成龙 76 40.0 23.0 60
1 2308024244 周怡 66 47.0 47.0 44
2 2308024251 张波 85 NaN 45.0 60
3 2308024249 朱浩 65 72.0 62.0 71
4 2308024219 封印 73 61.0 47.0 46
5 2308024201 迟培 60 71.0 76.0 71
6 2308024347 李华 67 61.0 65.0 78
7 2308024307 陈田 76 69.0 NaN 69
8 2308024326 余皓 66 65.0 61.0 71
9 2308024219 封印 73 61.0 47.0 46
1)缺失值的识别
Pandas使用浮点值NaN表示浮点数和非浮点数组里的缺失数据,并使用.isnull和.notnull函数来判断缺失情况
缺失值判断;True表示缺失,False表示非缺失
学号 姓名 英语 数分 高代 解几
0 False False False False False False
1 False False False False False False
2 False False False True False False
3 False False False False False False
4 False False False False False False
5 False False False False False False
6 False False False False False False
7 False False False False True False
8 False False False False False False
9 False False False False False False
缺失值判断;True表示非缺失,False表示缺失
学号 姓名 英语 数分 高代 解几
0 True True True True True True
1 True True True True True True
2 True True True False True True
3 True True True True True True
4 True True True True True True
5 True True True True True True
6 True True True True True True
7 True True True True False True
8 True True True True True True
9 True True True True True True
2)缺失值处理
对于缺失数据的处理方式有数据补齐,删除对应行,不处理等方式
2.1 dropna()去除数据结构中值为空的数据行
2.2 fillna()用其他数替代NaN;有的时候直接删除空数据会影响分析结果,可以对数据进行填补
2.3 fillna(method = 'pad')用前一个数据值代替NaN
删除数据为空所对应的行:
学号 姓名 英语 数分 高代 解几
0 2308024241 成龙 76 40.0 23.0 60
1 2308024244 周怡 66 47.0 47.0 44
3 2308024249 朱浩 65 72.0 62.0 71
4 2308024219 封印 73 61.0 47.0 46
5 2308024201 迟培 60 71.0 76.0 71
6 2308024347 李华 67 61.0 65.0 78
8 2308024326 余皓 66 65.0 61.0 71
9 2308024219 封印 73 61.0 47.0 46
使用数值或者任意字符替代缺失值:
学号 姓名 英语 数分 高代 解几
0 2308024241 成龙 76 40.0 23.0 60
1 2308024244 周怡 66 47.0 47.0 44
2 2308024251 张波 85 $ 45.0 60
3 2308024249 朱浩 65 72.0 62.0 71
4 2308024219 封印 73 61.0 47.0 46
5 2308024201 迟培 60 71.0 76.0 71
6 2308024347 李华 67 61.0 65.0 78
7 2308024307 陈田 76 69.0 $ 69
8 2308024326 余皓 66 65.0 61.0 71
9 2308024219 封印 73 61.0 47.0 46
用前一个值替换缺失的值:
学号 姓名 英语 数分 高代 解几
0 2308024241 成龙 76 40.0 23.0 60
1 2308024244 周怡 66 47.0 47.0 44
2 2308024251 张波 85 47.0 45.0 60
3 2308024249 朱浩 65 72.0 62.0 71
4 2308024219 封印 73 61.0 47.0 46
5 2308024201 迟培 60 71.0 76.0 71
6 2308024347 李华 67 61.0 65.0 78
7 2308024307 陈田 76 69.0 65.0 69
8 2308024326 余皓 66 65.0 61.0 71
9 2308024219 封印 73 61.0 47.0 46
用后一个值替换缺失的值:
学号 姓名 英语 数分 高代 解几
0 2308024241 成龙 76 40.0 23.0 60
1 2308024244 周怡 66 47.0 47.0 44
2 2308024251 张波 85 72.0 45.0 60
3 2308024249 朱浩 65 72.0 62.0 71
4 2308024219 封印 73 61.0 47.0 46
5 2308024201 迟培 60 71.0 76.0 71
6 2308024347 李华 67 61.0 65.0 78
7 2308024307 陈田 76 69.0 61.0 69
8 2308024326 余皓 66 65.0 61.0 71
9 2308024219 封印 73 61.0 47.0 46
用平均数或者其它描述性统计量替代NaN
学号 姓名 英语 数分 高代 解几
0 2308024241 成龙 76 40.000000 23.000000 60
1 2308024244 周怡 66 47.000000 47.000000 44
2 2308024251 张波 85 60.777778 45.000000 60
3 2308024249 朱浩 65 72.000000 62.000000 71
4 2308024219 封印 73 61.000000 47.000000 46
5 2308024201 迟培 60 71.000000 76.000000 71
6 2308024347 李华 67 61.000000 65.000000 78
7 2308024307 陈田 76 69.000000 52.555556 69
8 2308024326 余皓 66 65.000000 61.000000 71
9 2308024219 封印 73 61.000000 47.000000 46
dataFrame.mean()['填补列名':'计算均值的列名']:可以使用选择列的均值进行缺失值的处理
学号 姓名 英语 数分 高代 解几
0 2308024241 成龙 76 40.0 23.000000 60
1 2308024244 周怡 66 47.0 47.000000 44
2 2308024251 张波 85 NaN 45.000000 60
3 2308024249 朱浩 65 72.0 62.000000 71
4 2308024219 封印 73 61.0 47.000000 46
5 2308024201 迟培 60 71.0 76.000000 71
6 2308024347 李华 67 61.0 65.000000 78
7 2308024307 陈田 76 69.0 52.555556 69
8 2308024326 余皓 66 65.0 61.000000 71
9 2308024219 封印 73 61.0 47.000000 46
dataFrame.fillna({'列名1':值1,'列名2':值2}): 可以传入一个字典,对不同的列填充不同的值
学号 姓名 英语 数分 高代 解几
0 2308024241 成龙 76 40.0 23.0 60
1 2308024244 周怡 66 47.0 47.0 44
2 2308024251 张波 85 100.0 45.0 60
3 2308024249 朱浩 65 72.0 62.0 71
4 2308024219 封印 73 61.0 47.0 46
5 2308024201 迟培 60 71.0 76.0 71
6 2308024347 李华 67 61.0 65.0 78
7 2308024307 陈田 76 69.0 0.0 69
8 2308024326 余皓 66 65.0 61.0 71
9 2308024219 封印 73 61.0 47.0 46
使用strip()清除字符串左,右或首尾指定的字符串,默认为空格,中间不清除
age name
0 26 Ben
1 85 John
2 64 Jerry
3 85 John
4 85 John
0 Ben
1 John
2 Jerry
3 John
4 John
Name: name, dtype: object
只删除右边的字符n,如果不指定删除的字符串,默认删除空格
0 Ben
1 John
2 Jerry
3 John
4 John
Name: name, dtype: object
0 Be
1 John
2 Jerry
3 John
4 Joh
Name: name, dtype: object
只删除左边的字符n,如果不指定删除的字符串,默认删除空格
0 Ben
1 John
2 Jerry
3 John
4 John
Name: name, dtype: object
0 Ben
1 ohn
2 erry
3 ohn
4 John
Name: name, dtype: object
Process finished with exit code 0