数据分析中部分常用分析库学习小结

目录

pandas

import pandas as pd

一、DataFrame

pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

data:数据
index:行名
columns:列名
dtype:更改数据类型
copy:复制一次原数据,更改不会改变原数据

1、属性

DataFrame.values # 提取出不含行名和列名的数据(ndarray)
DataFrame.columns # DataFrame的列名列表
DataFrame.index # DataFrame的行名类,可以进行索引
DataFrame.shape # DataFrame的数据形状

2、方法

groupby
DataFrame.groupby('column')

column:列名
该方法将原DataFrame按列名’column’分割成若干个元组
每个元组的构成为(value, df)
其中,df是column值为value的部分组成的DataFrame

apply
DataFrame.apply(f)

f:函数类型
该方法可以将f适用于DataFrame
f需有一个输入参数,在使用apply方法时,DataFrame会将values的每一列作为一个1D ndarray输入至函数,函数f所返回的值将取代原values的每一列,DEMO如下:

import pandas as pd

def f(group):
    group[1] += 1
    return group

df = pd.DataFrame({'a':[1,2,3], 'b':[2,3,4]})

# apply方法应用f后,会生成pd.DataFrame({'a':[1,3,3], 'b':[2,4,4]})
df.apply(f)

输出如下:
在这里插入图片描述
当复合使用groupby和apply方法时:

DataFrame.groupby('column').apply(f)

则输入f的不再是原DataFrame的每一列,而是以groupby生成的每一个DataFrame作为f的输入

3、索引

列索引
# 列索引的两种方式
df['name1']
df[['name1', 'name2']]
行索引
# 按行索引[n, m)
df[n:m]

# 按行索引[n, m]
df.loc[n:m]

# 按行名索引['name1', 'name2']
df.loc[['name1', 'name2']]

# 按行索引'name1',并将该行作为一列输出
df.loc['name1']

二、简单数据特征

df.describe()

生成一个含有各组数据特征的DataFrame

三、数据载入

pd.read_excel(io, sheet_name=0, header=0, names=None, usecols=None)
pd.read_csv(io, header=0, names=None, usecols=None, sep=',')

read_excel用于载入excel文件,read_csv用于载入csv、tsv、txt等文件
io:文件名
sheet_name:表序号
header:选择标题行
names:列标题重命名
usecols:列表形式(输入所在列的序号),需要调出的列
sep:数据的间隔方式,如csv文件是逗号',',tsv文件是制表符'\t'

四、数据保存

1、写入单个表格文件

DataFrame对象的下属函数

DataFrame.to_excel(excel_writer=None, sheet_name='Sheet1', na_rep="", columns=None, header=True, index=True)
DataFrame.to_csv(path_or_buf=None, sep=",", na_rep="", columns=None, header=True, index=True)

to_excel用于写入excel文件,to_csv用于写入csv、tsv、txt等文件
excel_writerpath_or_buf:文件名
sheet_name:表名
sep:数据的间隔方式,如csv文件是逗号',',tsv文件是制表符'\t'
na_rep:空值的写入方式
columns:写入的具体列
headerindex:是否写入列名和行名

2、写入多个sheet的excel文件

writer = pd.ExcelWriter('filename.xlsx')

# 将上述情况的第一个参数改为变量writer
DataFrame.to_excel(excel_writer=writer, sheet_name='Sheet1', na_rep="", columns=None, header=True, index=True)

writer.close()

参数意义同上

五、清洗数据

1、删除

DataFrame.dropna(axis=0, how='any', inplace=False, thresh=None, subset)

axis:开始进行操作的行
how:any是有空值就删除该行,all是全是空值才删除该行
inplace:是否取代原数据集
thresh:int类型,若thresh=n,则表示仅保留至少有n个非空值的行
subset:需要进行空值判断的列名

2、填充缺失值

DataFrame.fillna(value=None, limit=None)

value:用于填充的值
limit:填充缺失值的个数

3、替换

DataFrame.replace(to_place, value)

to_place:需要替换值
value:用于替换的值

六、分类变量转独热码

pd.get_dummies(DataFrame)

pandas_profiling

import pandas_profiling

一、直接查看报告

df.profile_report(title=None)

pandas_profiling.ProfileReport(df, title=None)

df:DataFrame数据类型
title:报告的题目

二、将报告保存为html文件

profile = df.profile_report(title=None)
# profile = pandas_profiling.ProfileReport(df, title=None)

profile.to_file(outputfilename)

outputfilename:html的文件名

三、解决无法显示中文的问题

在代码前加上:

from pylab import mpl
mpl.rcParams['font.sans-serif']=['字体']

‘字体’:各类中文字体的英文代码,部分如下:
'SimHei':黑体
'SimSun':宋体
'FangSong':仿宋
'NSimSun':新宋体
'KaiTi':楷体
'PMingLiU':新细明体

scikit-learn

import sklearn

一、基本方法

model = method()       #创建模型类型、定义模型参数
model.fit(data_train)  #对数据进行学习
model.score(data_test) #用数据对模型测评
model.predict(data)    #用模型预测数据
model.transform(data)  #对数据做相应变换

对于一些无predicttransform方法但需将模型反作用于自身的,可用fit_transformfit_predict方法

二、模型保存与加载

import joblib
joblib.dump(model, 'filename.pkl')    #保存模型
model = joblib.load('filename.pkl')    #加载模型

三、数据预处理

1、拆分训练集与测试集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=None, test_size=None, random_state=None)

train_size:训练集占比
test_size:测试集占比
默认情况下,训练集占75%,测试集占25%

以下在用原数据学习后还要用transform方法处理原数据

2、特征选择

(1)单变量统计

特征独立发挥作用,不需要与其他特征组合即可拥有信息量

#选择最重要的10%特征
from sklearn.feature_selection import SelectPercentile
select = SelectPercentile(percentile=10)
#选择最重要的10个特征
from sklearn.feature_selection import SelectKBest
select = SelectKBest(k=10)
(2)基于模型的特征选择
from sklearn.feature_selection import SelectFromModel
select = SelectFromModel(model, threshold=None)

threshold:阈值,可以是数字或"median""mean",默认是"mean"

(3)迭代特征选择
from sklearn.feature_selection import RFE
select = RFE(model, n_features_to_select=None)

n_features_to_select:最终保留的特征个数

3、数据缩放

from sklearn.preprocessing import StandardScaler
model = StandardScaler()
from sklearn.preprocessing import RobustScaler
model = RobustScaler()
from sklearn.preprocessing import MinMaxScaler
model = MinMaxScaler()
from sklearn.preprocessing import Normalizer
model = Normalizer()

StandarScaler:使得数据均值为0,方差为1
RobustScaler:改变数据中位数和四分位数
MinMaxScaler:投影数据到[0,1]的矩形内
Normalizer:投影数据到半径为1的圆上

4、主成分分析法(PCA)

from sklearn.decomposition import PCA
model = PCA(n_components=None, whiten=False, random_state=None)

n_components:若为大于等于1的int则便是保留n个主成分,若小于1则表明保留累计方差贡献率达到n的主成分

whiten:白化选项,即先用StandarScaler方法处理原数据后再使用PCA

random_state:随机序列种子,在数据量较大时,PCA会采用一些随机算法

属性
model.explained_variance_      #各主成分方差
model.explained_variance_ratio_ #各主成分方差贡献率

5、非负矩阵分解(NMF)

from sklearn.decomposition import NMF
model = NMF(n_components=None, random_state=None)

n_components:NMF的分量个数
random_state:随机序列种子

6、t-SNE

from sklearn.manifold import TSNE
model = TSNE(random_state=None)

random_state:随机序列种子

无transform方法,使用如下:

data_new = model.fit_transform(data)

四、分类与回归

1、k-NN

#分类
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=5)
#回归
from sklearn.neighbors import KNeighborsRegressor
model = NeighborsRegressor(n_neighbors=5)

n_neighbors:参考临近点的个数

2、线性模型

(1)线性回归
from sklearn.linear_model import LinearRegression
model = LinearRegression()

基于最小二乘法,无参数

(2)lasso回归
from sklearn.linear_model import Lasso
model = Lasso(alpha=1.0, max_iter=1000)

alpha:L1正则化惩罚系数
max_iter:最大迭代次数(一般要手动提高)

(3)岭回归
from sklearn.linear_model import Ridge
model = Ridge(alpha=1.0)

alpha:L2正则化惩罚系数

(1)(2)(3)的属性
model.coef_      #系数
model.intercept_ #截距
(4)线性支持向量机
#分类
from sklearn.svm import LinearSVC
model = LinearSVC(C=1.0)
#回归
from sklearn.svm import LinearSVR
model = LinearSVR(C=1.0)

C:L2正则化惩罚系数

3、随机森林

#分类
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators='warn', max_features=sqrt(n_features), n_jobs=None, random_state=None)
#回归
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(n_estimators='warn', max_features=n_features, n_jobs=None, random_state=None)

n_estimators:树的数目
max_features:每棵树抽取的不同样本数量最大值,一般用默认值
n_jobs:调用cpu的数目,-1表示全部调用
random_state:随机序列种子

4、核支持向量机(SVM)

#分类
from sklearn.svm import SVC
model = SVC(kernel='rbf', C=1.0, gamma=1/n_features)
#回归
from sklearn.svm import SVR
model = SVR(kernel='rbf', C=1.0, gamma=1/n_features)

kernel:核方法
Cgamma:细节参数

五、聚类

1、k均值聚类

from sklearn.cluster import KMeans
model = KMeans(n_clusters=8, n_init='auto')

n_cluster:需要的类的数量

2、DBSCAN

from sklearn.cluster import DBSCAN
model = DBSCAN(eps=0.5, min_samples=5)

eps:距离
min_samples:在eps内要求样本点的最小数量

3、公共属性

#类的中心坐标列表,DBSCAN聚类没有中心坐标
model.cluster_centers_
#类别标签列表
model.labels_

4、轮廓系数

生成每个点的轮廓系数

from sklearn.metrics import silhouette_samples

silhouette_samples(X, labels)

生成所有点的平均轮廓系数

from sklearn.metrics import silhouette_score

silhouette_score(X, labels)

X:数据
labels:数据点的聚类标签

前者生成一维数组,后者生成一个数

六、英文分词

from sklearn.feature_extraction.text import CountVectorizer
model = CountVectorizer()

model.fit()的对象是含有字符串的列表
返回的对象是字典,键名是单词,键值是出现次数

scipy

import scipy

一、科学常数

from scipy import constants as C

几个常数如下:

C.e       #元电荷
C.h       #普朗克常数
C.k       #波尔兹曼常数
C.c       #光速
C.pi      #圆周率
C.golden  #黄金比例
C.G       #万有引力常数

二、定积分

from scipy import integrate

result = integrate.quad(func, a, b, args=(), points=None)

func:函数名
ab:积分上下限
args:函数定义中的参数,元组形式
points:需要剔除的点

三、阶乘与排列组合

1、阶乘 n ! n! n!

from scipy.special import factorial
result = factorial(n)

2、排列 A m n ^{A_{m}^{n}} Amn

from scipy.special import perm
result = perm(m, n)

3、组合 C m n ^{C_{m}^{n}} Cmn

from scipy.special import comb
result = comb(m, n)

四、统计分布

from scipy.stats import norm   #正态分布
from scipy.stats import chi2   #卡方分布
from scipy.stats import t      #t分布
from scipy.stats import f      #F分布
from scipy.stats import gamma  #Γ分布

以上分布均有如下公共函数:

distribution.pdf(a,b)  #a点的概率密度
distribution.ppf(a,b)  #a点的分位数
distribution.cdf(a,b)  #小于等于a的概率
distribution.sf(a,b)   #大于等于a的概率

b:分布的自由度(对正态分布,还有参数c,b代表均值,c代表方差)

五、非线性规划

from scipy.optimize import minimize

res = minimize(fun, x0, method=None, constraints=(), tol=None)

fun:以向量为自变量的函数名
x0:初始向量
method:方法名称,可选择'Nelder-Mead''Powell''CG''BFGS''Newton-CG''L-BFGS-B''TNC''COBYLA''SLSQP''trust-constr''dogleg''trust-ncg''trust-exact''trust-krylov'

constraints:字典或字典列表类型,字典形式为

{'type':type_value, 'fun':fun_value}

type_value可选'ineq''eq''ineq'表示fun表达式大于等于0;'eq'表示fun表达式等于0
tol:误差阈值

res具有以下属性:

res.success  #显示函数运行是否成功
res.x        #函数取最小值时的自变量向量
res.fun      #函数最小值

六、一元函数最小值

from scipy.optimize import fminbound

fmin = fminbound(func, x1, x2)

func:函数表达式
x1x2:区间上下限

七、快速傅里叶变换

1、快速傅里叶变换

from scipy.fftpack import fft
# numpy也有相应模块
# from numpy.fft import fft

X = fft(x)

x:序列x[n]
定义样本点总数N;采样频率Fs:1s内的采样点个数
返回值X解释:
(1) X为一个长度为N的复数数组,当x[n]为实序列时,有
X [ k ] = X ∗ [ N − k ] X[k] = X^{*}[N-k] X[k]=X[Nk]

(2) X[k]对应频率:
f = F s N k f = \frac{F{s}}{N}k f=NFsk
对应角频率:
Ω = 2 π F s N k Ω=\frac{2 \pi F{s}}{N}k Ω=N2πFsk
(3) X[k]的模为相应的放大后的振幅,其中X[0]放大了N倍,X[1:N/2]放大了N/2倍
(4) X[k]的辐角为相应的相位信息

2、快速傅里叶逆变换

from scipy.fftpack import ifft
# numpy也有相应模块
# from numpy.fft import ifft

x = ifft(X)

八、希尔伯特变换

1、正变换

from scipy.fftpack import hilbert

y = hilbert(x)

2、逆变换

from scipy.fftpack import ihilbert

y = ihilbert(x)

九、信号包络求解

from scipy.signal import hilbert

analytic_signal = signal.hilbert(x)
amplitude_envelope = abs(analytic_signal)  #包络

十、求常微分方程数值解

from scipy.integrate import solve_ivp

result = solve_ivp(fun, t_span, y0, method='RK45', t_eval=None)

fun:函数表达式,作用形式是:
d y d t = f u n ( t , y ) \frac{dy}{dt}=fun(t, y) dtdy=fun(t,y)
t_span:元组形式,求解的自变量上下限
y0:数组形式,自变量取t_span中的初始值时的函数值
method:求解方法,可选择’RK45’、‘RK23’、‘DOP853’、‘Radau’、‘BDF’、‘LSODA’
t_eval:数组形式,结果会给出自变量取该数组每个元素的值时的数值解

求解常微分方程组

对于方程组
{ d x d t = f ( t , x , y ) d y d t = g ( t , x , y ) \left\{\begin{array}{cc} \frac{dx}{dt}= f(t, x, y) \\ \\ \frac{dy}{dt}= g(t, x, y) \\ \end{array}\right. dtdx=f(t,x,y)dtdy=g(t,x,y)
可以采用定义函数func中的y为数组形式:

def func(t, y):
    y_next = y.copy()
    y_next[0] = f(t, y[0], y[1])
    y_next[1] = g(t, y[0], y[1])
    return y_next

求解高阶常微分方程

对于方程
d 2 y d t 2 = f u n c ( t , y , y ′ ) \frac{d^{2}y}{dt^{2}}=func(t, y, y^{\prime}) dt2d2y=func(t,y,y)
可以采用换元法 x = y ′ x=y^{\prime} x=y,则原二阶常微分方程可以转换为一阶常微分方程组:
{ d x d t = f u n c ( t , y , x ) d y d t = x \left\{\begin{array}{cc} \frac{dx}{dt}= func(t, y, x) \\ \\ \frac{dy}{dt}= x\\ \end{array}\right. dtdx=func(t,y,x)dtdy=x
再采用求解常微分方程组的方法求解即可

十一、插值法

一维插值

from scipy.interpolate import interp1d

# func是函数类型,插值后的函数
func = interp1d(x, y, kind='linear')

x:一维数组,自变量
y:一维数组,自变量
kind:字符串类型或整型(当kind大于2时只能取奇数),插值阶数

二维插值

from scipy.interpolate import interp2d

# func是函数类型,插值后的函数
func = interp2d(x, y, z, kind='linear')

x:一维或二维数组,二维数组则表示网格点
y:一维或二维数组,二维数组则表示网格点
z:一维或二维数组,当z为一维数组时,x和y也须为一维数组,(x[i], y[i], z[i])形成一组点;当z为二维数组时,x和y可以是一维数组,也可以是二维数组,当x和y是一维数组时,会自动将其网格化
kind:字符串类型或整型(当kind大于2时只能取奇数),插值阶数

十二、SG滤波

from scipy.signal import savgol_filter

x_new = savgol_filter(x, window_length, polyorder)

x: 待平滑的数组。
window_length: 滑动窗口的长度,必须是正奇数,决定了平滑的范围。
polyorder: 拟合多项式的阶数,必须小于 window_length。

十三、稀疏矩阵的压缩

1、压缩

from scipy.sparse import csr_matrix

D = csr_matrix(D) #即可得到压缩后的矩阵

2、还原

D.todense() # D为压缩后的矩阵

十四、mtx文件的读取与储存

1、读取

from scipy.io import mmread

data = mmread(source)

source:mtx文件名

2、储存

from scipy.io import mmwrite

mmwrite(target, a)

target:mtx文件名
a:需要保存的数据

sympy

import sympy as sy

一、在jupyter中将结果用latex表示

sy.init_printing(use_unicode=True)

二、定义数学符号

sy.Symbol('symbol_name')

三、矩阵

1、定义矩阵

M = sy.Matrix() # 括号内输入列表

当输入一维列表时,默认为列向量

2、矩阵对象的属性和方法

转置

M.T:返回转置后的矩阵

特征值

M.eigenvals():返回一个字典,键名为矩阵特征值,键值为代数多重性

特征向量

M.eigenvects():返回一个列表,包括矩阵特征值、代数多重性、特征向量

行列式

M.det():返回行列式值

3、特殊矩阵

全零矩阵
sy.zeros(n, m) # 生成n行m列0矩阵
全一矩阵
sy.ones(n, m) # 生成n行m列1矩阵
单位矩阵
sy.eye(n) # 生成n行n列单位矩阵

os

import os

一、读取文件夹下所有文件名

file_ls = os.listdir('folder_path')

folder_path:文件夹的路径
返回的结果以列表形式储存

二、创建文件夹

os.makedirs('folder_path')

folder_path:文件夹的路径

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值