第七章 pandas进阶
pandas内置来了10余种数据源读取函数和对应的数据写入函数,能够读写常见的数据源,如CSV、Excel、数据库等。(下面将推开数据分析的第一扇门)
文件读写
read_csv函数用于读取CSV文件。read_table也可以用来读取CSV文件,唯一的区别是分隔符默认为制表符“[Tab]”。使用to_csv方法将DataFrame数据写入CSV文件。
pandas提供read_excel函数来读取“xls”“xlsx”两种Excel文件,提供to_excel方法用于将DataFrame写入Excel文件。
统计分析
统计分析:统计分析是最常用的了解数据的手段,常见的统计方法有描述性系统分析、多元统计分析。下面介绍描述性方法和移动窗口对象,其中移动窗口主要用于时间序列处理。
- 描述性分析:描述性分析是最常用的用来概括、表述事物整体状况以及事物间关联、类属关系的统计方法,通过几个统计值简洁地表示了一组数据的集中程度和离散程度。
- 移动窗口rolling方法:为了提升数据的准确性,将某个点的取值扩大到包含这个点的一段区间,用区间来进行判断,这个区间就是窗口。pandas提供的rolling方法可用于对DataFrame进行移动窗口操作。
- 累计计算:cummax,依次给出前n个数的最大值; cummin,依次给出前n个数的最小值; cumprod,依次给出前n个数的乘积; cumsum,依次给出前n个数的和。
分组对象GroupBy
pandas提供分组对象GroupBy,配合相关运算方法能够实现特定的分组运算目的。
- agg方法灵活多变,即可针对所有的特征一次进行相同的聚合,也可以根据特征选择不同的聚合方法,且能用于DataFrame与Series,是聚合操作时最常用的方法。
- apply方法由于能够同时返回标量和数组,在返回结果为数组时使用最佳。
- transform是最特殊的的一种方法,使用场景也很特殊,主要有组内标准化等,使用频率较低。
交叉表和透视表
使用pivot_table函数创建透视表,使用crosstab函数用于制作交叉表。
数据处理
缺失值处理
pandas提供insull方法,能够识别出缺失值,返回bool。Insull方法结合其他操作,找出缺失值的数量及占比。
- 删除法:删除法分为删除观测记录和删除特征两种,观测记录指删除行,特征指删除列,减少样本量来换取信息完整度。使用dropna函数实现参数控制。
- 替换法:替换法是指用一个特定的值来替换缺失值。缺失值为数值型时,通常用其均值、中位数和众数等描述其集中趋势的统计量来替代缺失值; 缺失值所在特征为类别型时,则选择用众数来替换缺失值。使用fiillna方法替换。
- 插值法:interpolate方法用于对缺失值进行插值。
重复数据处理
重复数据处理是机器学习经常面对的问题之一,drop_duplicates方法用于去除一个或多个特征的重复记录。
使用该方法去重时,默认对所有特征起作用,即只有所有特征的重复记录对应的索引(行)相同的情况下才会执行去除操作,除了能够针对所有特征去重外,还能够针对某个或某几个特征进行去重,只需要将特定的特征名称传给subset参数即可。
数据离散化
某些算法,如ID3决策树算法和Apriori算法等,要求数据是离散化的,此时就需要将连续型特征(数值型)转换成离散型特征(类别型),即连续特征离散化。常用的离散化方法有3种:等宽法、等频法和通过聚类分析离散化(一维)。
哑变量
哑变量又称虚拟变量,通常取0或1。在机器学习中,将类别型转换成数值型经常使用。
第七章课后题概述
- D
read_spl_table传入的是表名,只能读取一个表格,接收的数据无sql类型; pandas共有3个数据读写函数,分别是read_sql(既能查询也能读表)、read_sql_table(只能读表)和read_sql_query(只能查询); 使用这些函数,均需要先建立数据库连接。 - ABCD
read_excel能够读取xls后缀的文件,read_sql能够读取数据库的数据,to_csv方法能够将DataFrame写入CSV,to_sql方法能够将DataFrame写入数据库。 - C
pandas常用描述性统计方法包括:min 最小值; mean 均值; std 标准差;cov 协方差;mode 众数;kurt 样本峰值;count 非空值数目;max 最大值;median 中位数;var 方差; sem 标准误差; skew 样本偏度; quantile 四分位数; mad 平均绝对误差。 - A
window接收int或offset,表示移动窗口的大小,当接收offset时,它是每个窗口的时间段,此时的索引必须为时间类型。 - A
agg方法只能返回标量值,apply才能既返回标量值也返回数组; agg方法可接收NumPy函数,可对分组的不同列指定作用的函数,可同时接收多个函数。 - ACD
GroupBy对象提供分组运算步骤中的拆分功能,groupby方法用于创建分组对象GroupBy,其中参数by被称为分组键,分组键的目的是产生一组用于拆分对象的值。 - D
使用pivot_table函数制作透视表时,index接收str或list,表示行分组值,默认为None;columns接收str或list,表示列分组键,默认为None。 - BCD
insull方法只能够识别出缺失值,返回bool; dropna通过参数控制,既可以删除观测记录,也可以删除特征; fiillna方法用于替换缺失值,特征可分为数值型和类别型,当两者出现缺失时,处理方法是不一样的; interpolate方法用于对缺失值进行插值,并提供了linear(线性插值),time(时间插值),Index、values(索引插值)多种插值方式。 - B
drop_duplicate方法去除数据中的重复记录,默认对所有特征起作用,但也能够针对某个或几个特征进行去重,只需将指定的特征名称传给subset参数即可。该方法对DataFrame和Series类型的数据有效,数据有重复时默认保留第一个数据,该函数不会改变原始数据排列。 - D
连续数据离散化的方法的处理方法包括等宽法、等频法和使用聚类算法。其中Apriori算法是一种常用的数据关联规则挖掘方法。 - 填空题
(1)read_csv函数用于设置分隔符的参数是sep
(2)使用描述性统计方法(describe)能够一次性得出DataFrame所有数值型特征的非空值数目、均值、四分位数、标准差。
(3)pivot_table函数默认的聚合函数是mean。(均值)
(4)创建交叉表的函数是crosstab。
(5)常用的哑变量处理函数是get_dummies。 - 数据离散化
# 等宽法
import pandas as pd
s = pd.cut([5,10,11,13,15,35,50,55,72,92,204,215], bins=4)
print(s)
[(4.79, 57.5], (4.79, 57.5], (4.79, 57.5], (4.79, 57.5], (4.79, 57.5], ..., (4.79, 57.5], (57.5, 110.0], (57.5, 110.0], (162.5, 215.0], (162.5, 215.0]]
Length: 12
Categories (4, interval[float64, right]): [(4.79, 57.5] < (57.5, 110.0] < (110.0, 162.5] <
(162.5, 215.0]]
- 分组
#创建DataFrame
import pandas as pd
import numpy as np
d = {'CPU':['i7', 'i5', 'i3', 'i5', 'i7','i3'],'主频':[4.2, 3.2, 2.2, 2.8, 4.0,2.8],'核心数目':[8, 4, 2, 4, 6,2],'价格':[9999,6799,3888,5799,8755,4355]}
df = pd.DataFrame(d)
print(df)
#分组聚合
df1 = df.groupby('CPU').agg(lambda x: np.max(x) if x.name =='主频' else np.min(x))
df1.columns=['最大主频','最小核心数目','最低价格']
print(df1)
CPU 主频 核心数目 价格
0 i7 4.2 8 9999
1 i5 3.2 4 6799
2 i3 2.2 2 3888
3 i5 2.8 4 5799
4 i7 4.0 6 8755
5 i3 2.8 2 4355
最大主频 最小核心数目 最低价格
CPU
i3 2.8 2 3888
i5 3.2 4 5799
i7 4.2 6 8755
- 写入文件操作
df1.to_csv('C:\\Users\\Lenovo\\Desktop\\df1.csv',encoding='gbk')