数据分析。(全套教程文末领取哈)
数据统计与计算
本节讨论使用Pandas来对数据进行处理和分析,主要包括以下内容
- 获取数据的统计信息
- 显示数据类型
- 转换数据类型
- 去除数据的重复值
- 对数据进行分组
- 寻找数据间的关系
- 计算百分比
在上一节“数据读取”中,我们用到了Pandas。现在我们将更深入了解Pandas在处理数据方面的应用。
首先先复习一下上节课中用Pandas读取CSV文件的代码:
import pandas as pd
# 创建列名列表
names = ['age', 'workclass', 'fnlwgt', 'education', 'educationnum', 'maritalstatus', 'occupation', 'relationship', 'race',
'sex', 'capitalgain', 'capitalloss', 'hoursperweek', 'nativecountry', 'label']
# 利用定义好的列名来读取数据
df = pd.read_csv("data/adult.data", header=None, names=names)
print(df.head())
获取数据的统计信息
首先我们使用Pandas的函数来查看数据,以更好地了解数据可能存在的问题。Describe()函数将为我们提供计数和一些连续变量的统计信息。
import pandas as pd
names = ['age', 'workclass', 'fnlwgt', 'education', 'educationnum', 'maritalstatus', 'occupation', 'relationship', 'race',
'sex', 'capitalgain', 'capitalloss', 'hoursperweek', 'nativecountry', 'label']
train_df = pd.read_csv("adult.data", header=None, names=names)
print(train_df.describe())
在得到的结果中,有mean,std,min,max,和一些不同百分比。
注意:请记住,异常值比中值对平均值的影响更大。另外,我们可以对标准差进行平方以获得方差。
我们可以发现结果中并没有包含所有列,那是因为describe()函数只对数值型的列进行统计。
显示数据类型
我们可以用info()函数来查看数据的类型
import pandas as pd
# 读取数据
names = ['age', 'workclass', 'fnlwgt', 'education', 'educationnum', 'maritalstatus', 'occupation', 'relationship', 'race',
'sex', 'capitalgain', 'capitalloss', 'hoursperweek', 'nativecountry', 'label']
train_df = pd.read_csv("adult.data", header=None, names=names)
print(train_df.info()) # 使用inf()函数
结果如图所示,在dataframe中有两种数据类型object和int64。我们可以把object类型当作字符串类型,把int64当作正数类型。
转换数据类型
如果说某一列数据的类型错误,我们可以用下面的函数进行转换:
- to_numeric()
- to_datetime()
- to_string()
例如:
df['numeric_column'] = pd.to_numeric(df['string_column'])
我们还可以从i上面使用info()函数获取的结果中查看每列非空值的计数以及数据的内存使用情况。
去除数据的重复值
另一个有用的步骤是查看列的都有哪些不重复的值。这是relationship列的示例:
import pandas as pd
names = ['age', 'workclass', 'fnlwgt', 'education', 'educationnum', 'maritalstatus', 'occupation', 'relationship', 'race',
'sex', 'capitalgain', 'capitalloss', 'hoursperweek', 'nativecountry', 'label']
train_df = pd.read_csv("adult.data", header=None, names=names)
print(train_df['relationship'].unique())
输出:
[' Not-in-family' ' Husband' ' Wife' ' Own-child' ' Unmarried'
' Other-relative']
上面显示了relationship列都有哪些取值,并且我们可以统计每个值出现的次数:
import pandas as pd
names = ['age', 'workclass', 'fnlwgt', 'education', 'educationnum', 'maritalstatus', 'occupation', 'relationship', 'race',
'sex', 'capitalgain', 'capitalloss', 'hoursperweek', 'nativecountry', 'label']
train_df = pd.read_csv("adult.data", header=None, names=names)
print(train_df