python数据分析与应用

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(真实值,预测值)

你可能感兴趣的:(python,数据分析,pandas)