前言
首先我们做数据分析,想要得出最科学,最真实的结论,必须要有好的数据。而实际上我们一般面对的的都是复杂,多变的数据,所以必须要有强大的数据处理能力,接下来,我从我们面临的最真实的情况,一步一步教会大家怎么做。
1.数据的读取
1
2
3
4
5
6
7
|
( 1 )读取模块 Import pandas as pd Import numpy as np ( 2 )读取表格的全部数据 df = pd.read_csv( ".data/HR.csv" ) ( 3 )读取你所需要的数据 sl_s = df[ "sactisfaction_level" ] |
2. 数据的处理
2.1.异常值(空值)处理
2.1.1删除
首先,第一步是对空值的处理。
有两种,一种直接删除,另一种指代。
如果数据多,想简单一点,就直接删除,方法都很简单。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
首先,建立一个DataFrame表 1. 为了确定是否含有空值: df.isnull() #如果含有空值,返回True 2. 删除 df.dropna() #去掉含空值的行 如果想要删除某一个属性含空值的行就加入subset参数 df.dropna(subset = [ "B" ]) #去掉B属性含空值的行 判断是否有重复的数据: df.duplicated([ "A" ]) #A属性中重复的数据返回True 删除A属性重复的行 df.drop_duplicates([ "A" ]) df.drop_duplicates([ "A" ],keep = False ) #删除A属性全部重复的行 df.drop_duplicates([ "A" ],keep = first) #删除A属性全部重复的行,保留第一个 df.drop_duplicates([ "A" ],keep = last) #删除A属性全部重复的行,保留最后一个 |
2.1.2指代
有些数据非常重要,不能删除,那我们就选择指代,也就是替换
1
2
3
4
5
6
7
8
9
10
|
#含空值的数据被替换为“b*” df.fillna( "b*" ) #E属性中的含空值的数据被替换成该属性的平均值 df.fillna(df[ "E" ].mean()) #插值替换 如果含空值的元素为最后一个,那么空值的数据替换成和上一个数据一样 如何含空值的元素为中间,那么空值的数据被(上 + 下) / 2 代替 df[ "E" ].interpolate() #3次样条插值 order 参数就是几次样条插值 df[ "E" ].interpolate(method = "spline" ,order = 3 ) |
*函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
( 4 )异常值分析(含有就返回 True ) - - isnull() sl_s.isnull() 主要表示没有空值 ( 5 )提取异常值的该属性信息 sl_s[sl_s.isnull()] ( 6 )提取异常值的表格全部信息 df[df[ "sactisfaction_level" ].isnull()] ( 7 )丢弃异常值 - - dropna() sl_s = sl_s.dropna() 注:删除为空的异常值 可以利用where()把异常数据赋空,然后利用dropna()删除 ( 8 )填充异常值 - - fillna() sl_s = sl_s.fillna() ( 9 )平均值 - - mean() sl_s.mean() ( 10 )标准差 - - std() Sl_s.std() ( 11 )最大值 - - max () sl_s. max () ( 12 )最小值 - - min () sl_s. min () ( 13 )中位数 - - median() sl_s.median() ( 14 )下四分位数 - - quantile(q = 0.25 ) sl_s.quantile(q = 0.25 ) ( 15 )上四分位数 - - quantile(q = 0.75 ) sl_s.quantile(q = 0.75 ) ( 16 )偏度 - - skew() sl_s.skew() 分析:小于 0 是负偏 均值偏小,大部分数是比他的均值大的 大于 0 稍微有些振偏 远大于 0 , 是极度振偏,均值要比他的大多数值大好多。 ( 17 )峰度 - - kurt() sl_s.kurt() 分析:< 0 相比于正态分布,他的趋势相对平缓 远大于 0 说明他的形变是非常大的,所以是不靠谱的 ( 18 )获得离散化的分布(numpy模块) - - histogram() np.histogram(sl_s.values,bins = np.arange( 0.0 , 1.1 , 0.1 )) 结果分析: [ 195 , 1214 , 532 , 974 ,…] [ 0.0 , 0.1 , 0.2 , 0.3 , 0.4 …] 代表 0.0 - 0.1 之间有 195 个数, 0.1 - 0.2 之间有 1214 个数,以此类推 分布间隔为 0.1 |
3.利用四分位数来去除异常值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
3.1 .提取大于 1 的值 le_s[le_s> 1 ] 3.2 去除大于 1 的异常值 le_s[le_s< = 1 ] 3.3 提取正常值(利用四分位数) 3.3 . 1 下四分位 q_low = le_s.quantile(q = 0.25 ) 3.3 . 2 上四分位 q_high = le_s.quantile(q = 0.75 ) 3.3 . 3 四分位间距 q_interval = q_high - q_low 3.3 . 4 定义k的值 K = 1.5 ~ 3 之间 如果k = 1.5 ,删除的异常值是中度异常 如果k = 3.0 ,删除的异常值是极度异常 3.3 . 5 筛选 le_s = le_s[le_s<q_high + k * q_interval][le_s>q_low - k * q_interval] 3.4 数据的个数 - - len () len (le_s) 3.5 离散分布直方图(numpy模块) np.histogram(le_s.values,bins = np.arange( 0.0 , 1.1 , 0.1 )) 3.6 回顾数据的平均值,标准差,中位数,最大值,最小值,偏度,峰度,确定数据的正常。 |
4.静态结构分析
1
2
3
4
5
6
|
4.1 每个值出现的次数 - - values_counts() np_s.value_counts() 4.2 获取该数据的构成和比例(每个值的频率) np_s.value_counts(normalize = True ) 4.3 排序 np_s.value_counts(normalize = True ).sort_index() |
5.数据分区间
1
2
3
4
5
6
7
|
5.1 把数据分成几份 - - histogram() np.histogram(amh_s.values,bins = 10 ) 把数据分成 10 份 5.2 另一种方法 加了区间,计算区间的频数 (左闭右开的区间) Np.histogram(amh_s.values,bins = np.arange(amh_s. min (),amh_s. max () + 10 , 10 )) (左开右闭的区间) amh_s.value_counts(bins = np.arange (amh_s. min (),amh_s. max () + 10 , 10 )) |
6.英文异常值数据的处理
1
2
3
4
5
6
7
8
9
10
|
6.1 首先,统计该数据的分布频数 s_s.value_counts() 6.2 确定异常值的名字。 6.3 把异常值赋空(NaN) - - where() s_s.where(s_s! = "name" ) 意思是把”name”的数据赋空 6.4 把赋空的异常值删除 - - dropna()删除异常值 s_s.where(s_s! = "name" ).dropna() 6.5 检查删除异常值的结果 s_s.where(s_s! = "name" ).dropna().value_counts() |
7.对比分析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
7.1 对表格中空值的行删除 Df = df.dropna(axis = 0 ,how = 'any' ) axis = 0 ,代表的是行删除 how = ‘ any ' 代表的是含有部分空值就执行行删除 how = ‘ all ' 代表的是一行全部是空值执行行删除 7.2 含有条件性的对异常值的删除 df = df[df[ "last_evaluation" ]< = 1 ] [df[ "salary" ]! = "name" ][df[ "department" ]! = "sale" ] 7.3 分组(比如:把同一部门的人分为一组) - - groupby() df.groupby( "department" ) 7.4 对分组后的组取均值 df.groupby( "department" ).mean() 7.5 取部分数据(切片) - - loc() df.loc[:,[ "last_evaluation" , "department" ]] .groupby( "department" ) 7.6 取部分数据求平均 df.loc[:,[ "last_evaluation" , "department" ]] .groupby( "department" ).mean() 7.7 取部分数据求极差 - - apply () df.loc[:,[ "average_monthly_hours" , "department" ]].groupby ( "department" )[ "average_monthly_hours" ]. apply ( lambda x:x. max () - x. min ()) |
总结
以上所述是小编给大家介绍的python实现数据分析与建模 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
原文链接:http://www.uml.org.cn/bigdata/201907113.asp