pandas是python中的一个对数据结构化进行数据分析处理的一个库
导包
import pandas as pd
pandas可以读取多种不同数据源的数据
# 读写文本,sep文本分割符号,header设置第几行是列名或None,index_col指定索引列,engine指定解释器,encoding指定编码
pd.read_csv(文件路径,sep='',header=,names=,index_col,engine='python',encoding='utf-8')
# 写出文本,sep分隔符,columns写出的列名,header输出列名,index输出索引列,encoding编码
pd.to_csv(文件路径,sep='',columns=[],header=True,index=True,encoding='utf-8')
# 读取excel文件,sheetname指定工作表字符串或数字,header指定列名行,index_col指定索引
pd.read_excel(文件路径,sheet_name=0,header=,names=,index_col)
# 写出excel文件,sheetname指定工作部名称,columns指定列名,header输出列名,index输出索引,encoding编码
pd.to_excel(文件路径,sheet_name='name',columns=[],header=True,index=True,encoding=)
pandas中有两种数据结构,一个是Series一个是DataFrame
在pandas中DataFrame的每一列数据就是一个Series
Series
pd.Series([1,2,'a'],index=['a','b','c']) # 1 2 a变成一列数据,索引是对应abc
pd.Series({'a':[1,2,3],'b':["4","5","6"]}) # a和b成索引,对应结果是数组a [1,2,3] b ["4","5","6"]
DataFrame
d = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
pd.DataFrame(d,index=[],columns=[]) # 结果是里面每一个[],index指定索引columns指定列名称
d = {'color':['blue','yellow',skyblue],
'object':['ball','pen','pencil'],
'price':[1.2,1.0,1,1]
}
pd.DataFrame(d) # 通过字典来构建dataframe,key会成为列名,value成为列的值
数据框的常用属性 df为dataframe数据源
df.values # 返回每一列所有元素类型
df.index # 返回索引
df.shape # 返回元组包含几行几列
df.dtypes # 返回所有数据类型
df.size # 返回元素个数
df.columns # 返回所有列名
df.ndim # 返回维度数
数据访问
df[列名] # 访问一列数据
df[[类名,列名]] # 访问多列数据
df.head(3) # 访问前三行数据
df.tail(3) # 访问后三行数据
df.iloc[0,0] # 根据行列顺序访问
df.iloc[0:3,0] # 可以使用切片
df.loc[行名称,列名称] # 根据行列名称访问
df.loc[行名称:行名称,列名称] # 可以使用切片,左闭右闭
对列进行切片返回的是数据框而不是Series
修改数据
修改数据其实就是筛选出要修改的数据进行重新赋值
df.loc[:,'列名']=0
新增一列
df[新增列名] = 赋值
删除数据
df.drop('行名',axis=0) # 默认删除行
df.drop('列名',axis=1) # 删除列
df.drop('列名',axis=1,inplace=False) # 对原数据修改
常用属性方法
使用numpy统计分析方法进行操作
import numpy as np # 导入numpy包
np.mean(df,axis=1) # 对每一列进行操作
使用pandas的统计分析方法操作
df.mean() # 默认是对列进行操作
df.std() # 标准差
df.describe() # 返回常规统计信息
df[列名].value_counts() # 统计当前列的元素出现的个数
操作时间类型数据
pd.to_datetime(df[列名]) # 转换时间类型字符串
pd.DatetimeIndex(df[列名]) # 转换成时间类型索引
pd.PeriodIndex(df[列名],freq='H') # 精确到小时
时间类型的常用操作
df[时间列].dt.year # 获取年
df[时间列] + pd.Timedelta(days=1) # 加一天
df[时间列] - df[时间列] # 获取时间差
对一些列进行分组操作
df.groupby(by=[分组的列名]) # 根据指定列进行分组,或者根据指定函数
分组后的数据需要进行聚合操作才能正常显示
.agg(['mean','sum']) # 求分组后剩下列的分别求均值和求和
.agg({'列名':[聚合函数,聚合函数],'列名':'std'}) # 指定列进行聚合操作
创建透视表和交叉表
pd.pivot_table(data,index=,columns=,aggfunc='mean',fill_value=0)
表堆叠
pd.concat([数据1,数据2]) # 上下进行拼接
pd.concat([数据1,数据2],axis=1) # 进行左右拼接
pd.concat([数据1,数据2],join='outer') # 默认是outer取所有的列,没有的NaN填充
pd.concat([数据1,数据2],join='inner') # 只取都有的列
主键合并
merge函数,和sql语言中的join一样,也有左连接右连接内连接和外连接
pd.merge(表1,表2,how='left',on='列名') # 左连接根据on指定的列名进行合并
重叠合并
两张表结构相同,有些值一个表有一个表没有,存在互补的关系,可以使用重叠合并
df.combine_first(df1)
处理重复值
df.drop_duplicates() # 默认删除所有列的值都相同的行
df.drop_duplicates(subset=['列名'],keep='last') # 指定删除列重复值的行,保留最后一个
缺失值处理
df.isnull() # 返回每个列是否为空的布尔值
df.notnull() # 返回每个列不为空的布尔值
df.dropna(axis=0,how='all') # 根据行,全部字段都为空的删除
df.dropna(axis=0,how='any') # 根据行,有一个字段为空的都删除
df.dropna(axis=0,how='any',subset=['列名']) # 指定列为空的删除
df.fillna(1) # 填充缺失值为1
df.fillna('bfill') # 用临近值填充
异常值处理
异常值我们可以通过绘制箱线图,观察超过上线和下线的点就是异常值
定义函数置换异常值成空值
def replace(x):
QU = x.quantile(0.75)
QL = x.quantile(0.25)
IQR = QU - QL
x[(x > (QU + 1.6*IQR)) | (x < (QL - 1.5*IQR))] = np.nan
将一列传入这个函数返回的就是替换后的数据
标准化数据
标准化数据是在构建模型的时候需要进行的操作
def min_maxx_scaler(x): # 离差标准化
return (x-x.min()) / (x.man()-x.min())
def stander_scaler(x): # 标准差标准化
return (x-x.mean()) / x.std()
def decimal_scaler(x): # 小数定标标准差
import numpy as np
return x/10**(np.ceil(np.log10(x.abs().max())))
哑变量处理
数据分析模型中的算法模型大部分都要输入的特征为数值型
pd.get_dummies(data[[列名,列名]])
离散化连续型数据
将一连串数字离散化转换
pd.cut(一列数据,5) # 划分几份
cut函数也可以进行分组
pd.cut(fh_data['总无机养分百分比'],bins=10,labels=['1','2','3'])
sklearn库
是一个机器学习库,包含分类,回归,聚类,降维,模型,数据预处理
获取datasets中的数据
如果要导入其他数据集可以在官网上找到
from sklearn.datasets import load_breast_cancer # 导入癌症患者数据
cancer = load_breast_cancer() # 初始化数据
cancer.keys() # 查看数据所有的keys
cancer['data'] # 获取数据
cancer['target'] # 获取特征值
cancer['filename'] # 获取文件存放路径
在数据分析过程中,需要将样本划分为独立的三部分
sklearn有专门的划分模块
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(样本变量,样本标签,test_size=0.2,stratify=样本标签) # 将样本变量切分为训练变量,测试变量,训练标签,测试标签,stratify在分类的时候需要
sklearn转换器
对传入的numpy数组进行标准化处理,归一化处理等
主要包括三个方法: fit transform fit_transform
sklearn转换器函数:
from sklearn.preprocessing import MinMaxScaler # 离差标准化
StandardScaler # 标准差标准化
Normalizer # 归一化
Binarizer # 二值化处理
OneHotEncoder # 独热编码处理
FunctionTransformer # 自定义函数变换
实际使用
min_max_scaler = MinMaxScaler().fit(x_train) # 生成转换器
min_max_scaler.transform(x_train) # 对训练集进行转换
min_max_scaler.transform(x_test) # 对测试集进行转换,用的是训练集的因为最大值最小值可能有差异
构建和评价聚类模型
from sklearn.cluster import KMeans
k_means = KMeans(n_clusters=3) # 指定个数
k_means.fit(数据) # 进行聚类操作
k_means.labels_ # 查看聚类的标签
评价聚类模型
sklearn的metrics模块提供聚类模型评价指标
评价的结果组内的相似性越大,组间差别越大聚类效果就越好
评判标准最佳值1.0
ARI评价法 需要真实值 adjusted_rand_score
AMI评价法 需要真实值 adjusted_mutual_info_score
V-measure评分 需要真实值 completeness_score
FMI评价法 需要真实值 fowlkes_mallows_score
评判标准畸变程度最大
轮廓系数评价法 不需要真实值 silhouette_score
评判标准相较最大
Calirski-Harabasz指数评价法 不需要真实值 calineski_harabaz_score
使用评价聚类模型
使用需要真实值的,第一个参数传入真实值标签,第二个传入聚类之后的labels_
使用不需要真实值的,第一个参数传入样本的数据,第二传入聚类之后的labels_
通过循环来测试选出最优划分数量
构建和评价分类模型
sklearn库提供的分类算法很多都在sklearn.下
模块名称 函数名称 算法名称
linear_model LogisticRegression 逻辑斯蒂回归
svm SVC 支持向量机
neighbors KNeighborsClassifier K最近邻分类
naive_bayes GaussianNB 高斯朴素贝叶斯
tree DecisionTreeClassifier 分类决策树
ensemble RandomForestClassifier 随机森林分类
ensemble GradientBoostingClassifier 梯度提升分类树
clf = DecisionTreeClassifier() # 实例化决策树分类器
clf.fit(x_train,y_train) # 训练模型
clf.classes_ # 查看分类类别
clf.feature_importances_ # 查看重要性
predicted = clf.predict(x_test) # 对测试样本进行预测
from sklearn.metrics import classification_report
classification_report(y_test,predicted) # 对预测结果进行评估
构建回归模型
返回的都是连续型的
模块名称 函数名称 算法名称
linear_model LinearRegression 线性回归
svm SVC 支持向量回归
neighbors KNeighborsRegressor 最近岭回归
tree DecisionTreeRegressor 回归决策树
ensemble RandomForestRegressor 随机森林回归
ensemble GradientBoostingRegressor 梯度提升回归树
lr = LinearRegression() # 实例化线性回归
model = lr.fit(x_train,y_train) # 模型构建
model.predict(x_test) # 预测值
回归模型评价指标
最优值0.0
平均绝对误差 sklearn.metrics.mean_absolute_error
均方误差 sklearn.metrics.mean_squared_error
中值绝对误差 sklearn.metrics.median_absolute_error
最优值1.0
可解释方差值 sklearn.metrics.explained_variance_score
R方值 sklearn.metrics.metrics.r2_score
评价回归模型
比如mean_squared_error(真实值,预测值)