python数据预处理

PYTHON 最流行库:Numpy、Matplotlib 和 Pandas。Numpy 是满足所有数学运算所需要的库,由于代码是基于数学公式运行的,因此就会使用到它。Maplotlib(具体而言,Matplotlib.pyplot)则是满足绘图所需要的库。Pandas 则是最好的导入并处理数据集的一个库。对于数据预处理而言,Pandas 和 Numpy 基本是必需的。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

创建保存自变量的矩阵

X = dataset.iloc[:, :-1].values

第一个冒号表示提取数据集的全部行,「:-1」则表示提取除最后一列以外的所有列。最后的「.values」表示希望提取所有的值;

创建保存因变量的向量,取数据的最后一列

y = dataset.iloc[:, 3].values

一、数据描述

1.1 info()函数

info()函数用于打印DataFrame的简要摘要,显示有关DataFrame的信息,包括索引的数据类型dtype和列的数据类型dtype,非空值的数量和内存使用情况。

#(1)定义一个Dataframe
int_values = [1, 2, 3, 4, 5]
text_values = ['alpha', 'beta', 'gamma', 'delta', 'epsilon']
float_values = [0.0, 0.25, 0.5, 0.75, 1.0]
df = pd.DataFrame({"int_col": int_values, "text_col": text_values,
                  "float_col": float_values})
df

'''
int_col text_col  float_col
0        1    alpha       0.00
1        2     beta       0.25
2        3    gamma       0.50
3        4    delta       0.75
4        5  epsilon       1.00

'''
df.info(verbose=True)
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 3 columns):
int_col      5 non-null int64
text_col     5 non-null object
float_col    5 non-null float64
dtypes: float64(1), int64(1), object(1)
memory usage: 248.0+ bytes
'''

1.2 describe()函数

describe()函数用于生成描述性统计信息。 描述性统计数据:数值类型的包括均值,标准差,最大值,最小值,分位数等;类别的包括个数,类别的数目,最高数量的类别及出现次数等;输出将根据提供的内容而有所不同。

df.describe()
'''
		float_col	int_col
count	5.000000	5.000000
mean	0.500000	3.000000
std		0.395285	1.581139
min		0.000000	1.000000
25%		0.250000	2.000000
50%		0.500000	3.000000
75%		0.750000	4.000000
max		1.000000	5.000000
'''

二、缺失值处理

类型描述
缺失值类型1) na.nan ,float类型 ,它不等于任何值,连自己都不相等。如果用nan和任何其它值比较都会返回nan,因为nan在Numpy中的类型是浮点,因此整型列会转为浮点;而字符型由于无法转化为浮点型,只能归并为object类型(‘O’),原来是浮点型的则类型不变。
2)none,与自己相等。None == None>> True
3)pd.NA 不改变原有数据类型,它代表空整数、空布尔值、空字符
缺失值判断1)isnull() ; 2)isna() ; 3)notna();
缺失值统计1)列缺失:isnull().sum(axis=0) ;2)行缺失:isnull().sum(axis=1);3)缺失率:isnull().mean();
缺失值筛选1)行筛选:df.loc[df.isnull().any(1)];2)列筛选:df.loc[:,df.isnull().any()]
缺失值填充1)全部填充:fillna();2)向前填充:ffill();3)向后填充:dfill();4)填充平均值:df.D.fillna(df.D.mean())
缺失值删除1)全部删除:df.dropna();2)行删除:df.dropna(axis = 0);3)列删除:df.dropna(axis = 1);按缺失率删除:df.loc[:,df.isnull().mean(axis=0)<0.1]
缺失值参与计算1)加法:加法会忽略缺失值;2)累加:cumsum累加会忽略NA,但值会保留在列中,可以使用skipna=False跳过有缺失值的计算并返回缺失值。;3)计数:缺失值不进入计数范围里;4)聚合分组

pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。

方法说明
dropna根据各标签的值中是否存在缺失值对轴标签进行过滤,可通过阈值调节对缺失值的容忍度
fillna用指定值或插值方法(如ffill或bfill)填充缺失数据
isnull返回一个含有布尔值的对象,这些布尔值表示哪些值是缺失值/NA,该对象的类型与源类型一样
notnullisnull的否定式

isna/isnull/info()

判断是不是缺失值:

df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                   [3, 4, np.nan, 1],
                   [np.nan, np.nan, np.nan, 5],
                   [np.nan, 3, np.nan, 4]],
                  columns=list('ABCD'))

print(df)
'''
     A    B   C  D
0  NaN  2.0 NaN  0
1  3.0  4.0 NaN  1
2  NaN  NaN NaN  5
3  NaN  3.0 NaN  4
'''
df.isna()    ##df.isnull()
'''
A	B	C	D
0	True	False	True	False
1	False	False	True	False
2	True	True	True	False
3	True	False	True	False
'''
df.isna().sum()    ##df.isnull().sum()   df.isnull().mean()  缺失率
'''
A    3
B    0
C    4
D    0
dtype: int64
'''
df.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
A    1 non-null float64
B    4 non-null object
C    0 non-null float64
D    4 non-null int64
dtypes: float64(2), int64(1), object(1)
memory usage: 208.0+ bytes
'''
#可以看到一共有4行,但是有两列的非空值都不到4行

dropna

DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
函数作用:删除含有空值的行或列

  • axis:维度,axis=0表示index行,axis=1表示columns列,默认为0
  • how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列
  • thresh:一行或一列中至少出现了thresh个才删除。
  • subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)
  • inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。
df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
                   "toy": [np.nan, 'Batmobile', 'Bullwhip'],
                   "born": [pd.NaT, pd.Timestamp("1940-04-25"), pd.NaT]})

# print(df)
'''
       name        toy       born
0    Alfred        NaN        NaT
1    Batman  Batmobile 1940-04-25
2  Catwoman   Bullwhip        NaT
'''

print(df.dropna())
'''
     name        toy       born
1  Batman  Batmobile 1940-04-25
'''

print(df)
'''
       name        toy       born
0    Alfred        NaN        NaT
1    Batman  Batmobile 1940-04-25
2  Catwoman   Bullwhip        NaT
'''

#delete colums
print(df.dropna(axis=1) )#delete co
'''
       name
0    Alfred
1    Batman
2  Catwoman
'''

#"所有值全为缺失值才删除"
print(df.dropna(how='all'))
'''
       name        toy       born
0    Alfred        NaN        NaT
1    Batman  Batmobile 1940-04-25
2  Catwoman   Bullwhip        NaT
'''

#"至少出现过两个缺失值才删除"
print(df.dropna(thresh=2))
'''
       name        toy       born
1    Batman  Batmobile 1940-04-25
2  Catwoman   Bullwhip        NaT
'''

#"删除这个subset中的含有缺失值的行或列"
print (df.dropna(subset=['name', 'born']))
'''
     name        toy       born
1  Batman  Batmobile 1940-04-25
'''

fillna

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
函数作用:填充缺失值

  • value:需要用什么值去填充缺失值
  • axis:确定填充维度,从行开始或是从列开始
  • method:ffill:用缺失值前面的一个值代替缺失值,如果axis =1,那么就是横向的前面的值替换后面的缺失值,如果axis=0,那么则是上面的值替换下面的缺失值。backfill/bfill,缺失值后面的一个值代替前面的缺失值。注意这个参数不能与value同时出现
  • limit:确定填充的个数,如果limit=2,则只填充两个缺失值。

df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                   [3, 4, np.nan, 1],
                   [np.nan, np.nan, np.nan, 5],
                   [np.nan, 3, np.nan, 4]],
                  columns=list('ABCD'))

print(df)
'''
     A    B   C  D
0  NaN  2.0 NaN  0
1  3.0  4.0 NaN  1
2  NaN  NaN NaN  5
3  NaN  3.0 NaN  4
'''

#"横向用缺失值前面的值替换缺失值"
print(df.fillna(axis=1, method='ffill'))
'''
     A    B    C    D
0  NaN  2.0  2.0  0.0
1  3.0  4.0  4.0  1.0
2  NaN  NaN  NaN  5.0
3  NaN  3.0  3.0  4.0
'''


#"纵向用缺失值上面的值替换缺失值"
print(df.fillna(axis=0,method='ffill'))
'''
     A    B   C  D
0  NaN  2.0 NaN  0
1  3.0  4.0 NaN  1
2  3.0  4.0 NaN  5
3  3.0  3.0 NaN  4
'''

print(df.fillna(0))
##df['A'] = df['A'].fillna(111)  针对某一列替换缺失值;
##df['A'] = df['A'].fillna(df['A'].mean())  使用均值替换缺失值
##df['A'] = df['A'].fillna(df['A'].interpolate()) 使用插值函数来填写数字的缺失值,默认为‘linear’使用插值方法。
'''
     A    B    C  D
0  0.0  2.0  0.0  0
1  3.0  4.0  0.0  1
2  0.0  0.0  0.0  5
3  0.0  3.0  0.0  4
'''

#不同的列用不同的值填充:
values={'A':0,'B':1,'C':2,'D':3}
print(df.fillna(value=values))
'''
     A    B    C  D
0  0.0  2.0  2.0  0
1  3.0  4.0  2.0  1
2  0.0  1.0  2.0  5
3  0.0  3.0  2.0  4
'''
#对每列出现的替换值有次数限制,此处限制为一次
values={'A':0,'B':1,'C':2,'D':3}
print(df.fillna(value=values,limit=1))
'''
     A    B    C  D
0  0.0  2.0  2.0  0
1  3.0  4.0  NaN  1
2  NaN  1.0  NaN  5
3  NaN  3.0  NaN  4
'''

SimpleImputer

参数详解

class sklearn.impute.SimpleImputer(*, missing_values=nan, strategy=‘mean’, fill_value=None, verbose=0, copy=True, add_indicator=False)

  • missing_values:int, float, str, (默认)np.nan或是None, 即缺失值是什么。
  • strategy:空值填充的策略,共四种选择mean(默认,均值)、median(中位数)、most_frequent(众数)、constant(自定义的值,通过fill_value来定义)。
  • fill_value:str或数值,默认为Zone。当strategy =="constant"时,fill_value被用来替换所有出现的缺失值(missing_values)。fill_value为Zone,当处理的是数值数据时,缺失值(missing_values)会替换为0,对于字符串或对象数据类型则替换为"missing_value"这一字符串。
  • verbose:int,(默认)0,控制imputer的冗长。
  • copy:boolean,(默认)True,表示对数据的副本进行处理,False对数据原地修改。
  • add_indicator:boolean,(默认)False,True则会在数据后面加入n列由0和1构成的同样大小的数据,0表示所在位置非缺失值,1表示所在位置为缺失值。

常用方法

fit(X)

返回值为SimpleImputer()类,通过fit(X)方法可以计算X矩阵的相关值的大小,以便填充其他缺失数据矩阵时进行使用。

transform(X)

填补缺失值,一般使用该方法前要先用fit()方法对矩阵进行处理。

from sklearn.impute import SimpleImputer
import numpy as np
X = np.array([[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]])
X1 = np.array([[1, 2, np.nan],
               [4, np.nan, 6],
               [np.nan, 8, 9]])
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
imp.fit(X)
print(imp.transform(X1))
'''
# 运行结果
[[1. 2. 6.]
 [4. 5. 6.]
 [4. 8. 9.]]
 '''

由于fit(X)和strategy=‘mean’,所以填补值为X矩阵各列的均值。

fit_transform(X)

相当于fit() + transform(),一般使用的较多。

X1 = np.array([[1, 2, np.nan],
               [4, np.nan, 6],
               [np.nan, 8, 9]])
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
print(imp.fit_transform(X1))
'''
# 运行结果
[[1.  2.  7.5]
 [4.  5.  6. ]
 [2.5 8.  9. ]]
'''
自定义填补值
X = np.array([[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]])

imp = SimpleImputer(missing_values=1, strategy='constant', fill_value=666)
print(imp.fit_transform(X))
'''
# 运行结果
[[666 2 3]
 [4 5 6]
 [7 8 9]]
'''

interpolate

interpolate可以用在DataFrame对象上,也可以用在Series对象上。

pandas.DataFrame.interpolate()?
DataFrame.interpolate(method=‘linear’, axis=0, limit=None, inplace=False, limit_direction=None, limit_area=None, downcast=None, **kwargs)

  • method : str,默认为‘linear’使用插值方法。 可用的插值方法:
    ‘linear’:忽略索引,线性等距插值。这是MultiIndexes支持的唯一方法。
    ‘time’:在以天或者更高频率的数据上插入给定的时间间隔长度数据。
    ‘index’, ‘values’: 使用索引的实际数值。
    ‘pad’:使用现有值填写NaN。 ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’,
    ‘spline’, ‘barycentric’, ‘polynomial’: 传递给
    scipy.interpolate.interp1d。这些方法使用索引的数值。‘polynomial’ 和 ‘spline’
    都要求您还指定一个顺序(int),例如 ,df.interpolate(method=‘polynomial’, order=5)
    ‘krogh’,‘piecewise_polynomial’,‘spline’,‘pchip’,‘akima’:包括类似名称的SciPy插值方法。
    ‘from_derivatives’:指
    scipy.interpolate.BPoly.from_derivatives,它替换了scipy
    0.18中的’piecewise_polynomial’插值方法。
  • axis : {0或’index’,1或’columns’,None},默认为None;沿轴进行interpolate。
  • limit: int;要填充的连续NaN的最大数量。必须大于0。
  • inplace : bool,默认为False;如果可以,更新现有数据。
  • limit_direction :
    {‘forward’,‘backward’,‘both’},默认为’forward’;如果指定了限制,则将沿该方向填充连续的NaN。
  • limit_area : {None, ‘inside’, ‘outside’},
    默认为None;如果指定了限制,则连续的NaN将填充此限制。 None:无填充限制。 ‘inside’:仅填充有效值包围的NaN。
    ‘outside’: 仅在有效值之外填充NaN。
import pandas as pd
import numpy as np

data = pd.Series([1,2,3,np.nan,np.nan,6,np.nan])
data
'''
0    1.0
1    2.0
2    3.0
3    NaN
4    NaN
5    6.0
6    NaN
dtype: float64
'''
data.interpolate()    ## 不设置任何参数
'''
0    1.0
1    2.0
2    3.0
3    4.0
4    5.0
5    6.0
6    6.0
dtype: float64
'''
data.interpolate(method='pad', limit=1)     ####使用‘pad’方法,limit设置为1
'''
0    1.0
1    2.0
2    3.0
3    3.0
4    NaN
5    6.0
6    6.0
dtype: float64
'''

df = pd.DataFrame([(0.0, np.nan, -1.0, 1.0),
                   (np.nan, 2.0, np.nan, np.nan),
                   (2.0, 3.0, np.nan, 9.0),
                   (np.nan, 4.0, -4.0, 16.0)],
                   columns=list('abcd'))
print(df)            
'''
    a    b    c     d
0  0.0  NaN -1.0   1.0
1  NaN  2.0  NaN   NaN
2  2.0  3.0  NaN   9.0
3  NaN  4.0 -4.0  16.0
'''
df.interpolate(method='linear', limit_direction='backward', axis=0)
'''
	a 	b  	c	   d
0	0.0	2.0	-1.0	1.0
1	1.0	2.0	-2.0	5.0
2	2.0	3.0	-3.0	9.0
3	NaN	4.0	-4.0	16.0
'''
#最后一行中的值无法填充,因为值的填充方向为backward并且没有可用于插值的后续值。

替换空值

需要把含有空值的那一列提出来单独处理,然后在放进去就好。

df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                   [3, 4, "", 1],
                   [np.nan, np.nan, np.nan, 5],
                   [np.nan, 3, "", 4]],
                  columns=list('ABCD'))

print(df)
'''
     A    B    C  D
0  NaN  2.0  NaN  0
1  3.0  4.0       1
2  NaN  NaN  NaN  5
3  NaN  3.0       4
'''
clean_z = df['C'].fillna(0)
clean_z[clean_z==''] = 'hello'
df['C'] = clean_z
print(df)
'''
     A    B      C  D
0  NaN  2.0      0  0
1  3.0  4.0  hello  1
2  NaN  NaN      0  5
3  NaN  3.0  hello  4
'''

三、重复值处理

duplicated()方法判断是否有重复值

DataFrame.duplicated(subset=None, keep=‘first’)

  • subset 表示识别重复项的列索引或列索引序列。默认标识所有的列索引
  • keep 表示采用哪种方式保留重复项。
    1)‘first’,默认值,删除重复项,仅保留第一次出现的数据项。
    2)‘last’,删除重复项,仅保留最后一次出现的数据项。
    3)‘False’,表示将所有相同的数据都标记为重复项。
import pandas as pd
import numpy as np 
stu_info=pd.DataFrame({'序号':['S1','S2','S1','S4','S4'],
                '姓名':['张三','李四','张三','赵六','赵六'],
                '性别':['女','男','女','男','男'],
                '年龄':[15,16,15,14,14],
                '住址':['苏州','南京','苏州',np.nan,np.nan]})
stu_info
'''
	住址	姓名	年龄	序号	性别
0	苏州	张三	15	S1	女
1	南京	李四	16	S2	男
2	苏州	张三	15	S1	女
3	NaN	赵六	14	S4	男
4	NaN	赵六	14	S4	男
'''
# 检测stu_info对象中的重复值
stu_info.duplicated()
'''
0    False
1    False
2     True
3    False
4     True
dtype: bool
'''
# 筛选stu_info中重复值标记为True的数据记录
stu_info[stu_info.duplicated()]
'''
	住址	姓名	年龄	序号	性别
2	苏州	张三	15		S1		女
4	NaN		赵六	14		S4		男
'''

duplicates方法删除重复行

DataFrame.drop_duplicates(subset=None, keep=‘first’, inplace=False, ignore_index=False)

  • subset 表示删除重复项的列索引或列索引序列,默认删除所有的列索引。
  • keep 表示采用哪种方式保留重复项。 ‘first’,默认值,删除重复项,仅保留第一次出现的数据项。‘last’,删除重复项,仅保留最后一次出现的数据项。‘False’,表示将所有相同的数据都标记为重复项。
  • inplace 表示是否放弃副本数据,返回新的数据,默认为False True:放弃副本,更新原数据。False:不更新原数据。
  • ignore_index 表示是否对删除重复值后的对象的行索引重新排序,默认为False。 True:重新排序。False:不重新排序。
# 删除stu_info对象中的重复值
stu_info.drop_duplicates()
'''	
	住址	姓名	年龄	序号	性别
0	苏州	张三	15		S1		女
1	南京	李四	16		S2		男
3	NaN		赵六	14		S4		男
'''

异常值

异常值查找

describe进行描述性分析

仅能进行连续变量的处理

import pandas as pd  # 导入数据分析库Pandas
outputPath = 'tmp/result.xls'  # 输出数据路径
data.describe().to_excel(outputPath, index=True)

根据最大值、最小值等判断异常值

箱型图

四分位距(IQR)就是上四分位与下四分位的差值。而我们通过IQR的1.5倍为标准,规定:超过上四分位+1.5倍IQR距离,或者下四分位-1.5倍IQR距离的点为异常值。

import pandas as pd
import numpy as np 
import matplotlib.pyplot as plt  # 导入图像库
stu_info=pd.DataFrame({'序号':['S1','S2','S1','S4','S4'],
                '姓名':['张三','李四','张三','赵六','赵六'],
                '性别':['女','男','女','男','男'],
                '年龄':[15,16,15,14,14],
                '分数':[24,52,53,215,35],
                '住址':['苏州','南京','苏州',np.nan,np.nan]})

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

plt.subplot(1,2,1)
stu_info[["年龄"]].boxplot(return_type='dict')
plt.subplot(1,2,2)
stu_info[["分数"]].boxplot(return_type='dict')
plt.show()

在这里插入图片描述

异常值处理

删除、替换

先将异常值替换为na,然后用dropna() 删除或进行替换

a = stu_info["分数"].quantile(0.75)
b = stu_info["分数"].quantile(0.25)
c = stu_info["分数"]
c[(c>=(a-b)*1.5+a)|(c<=b-(a-b)*1.5)]=np.nan
stu_info[["分数"]] = c
stu_info_1 = stu_info.dropna(how='any', axis=0,subset = ['分数'])
stu_info_1
'''
	住址	分数	姓名	年龄	序号	性别
0	苏州	24.0	张三	15		S1		女
1	南京	52.0	李四	16		S2		男
2	苏州	53.0	张三	15		S1		女
4	NaN		35.0	赵六	14		S4		男
'''

a = stu_info["分数"].mean()+stu_info["分数"].std()*4
b = stu_info["分数"].mean()-stu_info["分数"].std()*4
c = stu_info["分数"]
c[(c >= a) | (c <= b)] = np.nan
stu_info[["分数"]] = c
stu_info_1 = stu_info.dropna(how='any', axis=0,subset = ['分数'])
stu_info_1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/673128.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创建一个支持切换阅读模式和答题模式的Anki问答题模板

为了备考某个需要默写的科目&#xff0c;做了个问答题笔记模板&#xff0c;如下&#xff1a; 在上图的回答栏填写答案后&#xff0c;点击显示答案按钮转到背面&#xff1a; 只实现上面的功能是很简单的&#xff0c;直接基于Anki自带的问答题模板添加自己需要的字段即可。问题…

嵌入式工程师人生提质的十大成长型思维分享

大家好,作为一名嵌入式开发者,很多时候,需要考虑个人未来的发展,人生旅途复杂多变,时常面临各种各样的挑战。如何在这个复杂多变的社会中稳步向前,不断成长,成为每个人都应该思考的问题。实际上,思维方式的差异决定我们应对挑战的能力与成长的速度。 第一:寻找自我坐…

Linux CPU占用高问题

1、top命令和历史系统监控找出持续占用CPU的top5进程。 # top -c 依次按键盘键b->x&#xff0c;按照CPU由高到底排序。shiftP和shiftM切换使用CPU和内存的排序 # top -Hp pid 查看进程中所有线程的占用情况 # top -Hp 1124 -n 1 -b | awk {print $NF} | sort | uniq -c |…

Python | 自动探索性数据分析(EDA)库SweetViz

SweetViz是一个开放源代码Python库&#xff0c;主要用于生成精美的高密度可视化文件&#xff0c;启动探索性数据分析&#xff08;EDA&#xff09;&#xff0c;输出为完全独立的HTML应用程序。 探索性数据分析&#xff08;EDA&#xff09;是分析和总结数据集主要特征的过程&…

pytorch学习笔记5

transform 本质上作用是将图片通过transform这个这个工具箱获取想要的结果 tensor就是一个包含神经网络需要的一些理论基础的参数 from torch.utils.tensorboard import SummaryWriter from torchvision import transforms from PIL import Image #tensor数据类型 #通过tra…

Linux系统上的磁盘扩展总结

目录 一、前言 二、相关基础知识 &#xff08;1&#xff09;术语理解 &#xff08;2&#xff09;相关命令学习 1、磁盘管理相关命令 2、LVM管理相关命令 三、磁盘操作场景汇总 &#xff08;1&#xff09;添加新硬盘后挂载到已有目录进行扩容 &#xff08;2&#xff09…

Python 二叉数的实例化及遍历

首先创建一个这样的二叉树&#xff0c;作为我们今天的实例。实例代码在下方。 #创建1个树类型 class TreeNode:def __init__(self,val,leftNone,rightNone):self.valvalself.leftleftself.rightright #实例化类 node1TreeNode(5) node2TreeNode(6) node3TreeNode(7) node4Tre…

【数据结构与算法】七大排序算法(下)

【数据结构与算法】七大排序算法(下) &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;数据结构与算法&#x1f345; &#x1f33c;文章目录&#x1f33c; 2.3 交换排序 2.3.1 冒泡排序 2.3.2 快速排序 2.3.3 快速排序(非递归) 2.4 归并…

【一刷《剑指Offer》】面试题 30:最小的 k 个数

牛客对应题目链接&#xff1a;最小的K个数_牛客题霸_牛客网 (nowcoder.com) 力扣对应题目链接&#xff1a;LCR 159. 库存管理 III - 力扣&#xff08;LeetCode&#xff09; 核心考点 &#xff1a; topK 问题。 一、《剑指Offer》内容 二、分析题目 1、排序&#xff08;O(Nlo…

数据结构之二叉搜索树(TreeSetTreeMap)

目录 一.搜索树 1.1概念 1.2适用场景 2.二叉搜索树的基本操作 2.1二叉搜索树的定义 2.2查找 2.1.1基本思路 2.3插入 2.3.1基本思路 2.4删除 2.4.1基本思路 2.5遍历 2.6性能分析 二.TreeSet Map和Set 1.概念 2.模型 1.定义 2.基本操作 三.TreeMap 1.定义 2.基…

C语言笔记第9篇:字符函数和字符串函数

在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了方便操作字符和字符串&#xff0c;C语言标准库中提供了一系列库函数&#xff0c;接下来我们就学习一下这些函数。 一、字符函数 1、字符分类函数 C语言中有一系列的函数是专门做字符分类的&#xff0c;…

MyBatis一、MyBatis简介

MyBatis一、MyBatis简介 MyBatis 简介MyBatis 定义MyBatis 历史MyBatis 特性1. 灵活性和易用性2. 性能优化3. 易于集成4. 支持多种数据库5. 插件机制6. 其他特性 MyBatis 下载和其他持久化层技术对比 MyBatis 简介 MyBatis 定义 MyBatis 是一个优秀的持久层框架&#xff0c;它…

240602-通过命令行实现HuggingFace文件上传

A. 登录显示 A.1 MacOS A.2 Windows B. 操作步骤 B.1 操作细节 要通过命令行将文件上传到 Hugging Face&#xff0c;可以使用 huggingface-cli 工具。以下是详细步骤&#xff1a; 安装 huggingface_hub 包&#xff1a; 首先&#xff0c;确保已经安装了 huggingface_hub 包。可…

MySQL—函数—数值函数(基础)

一、引言 首先了解一下常见的数值函数哪些&#xff1f;并且直到它们的作用&#xff0c;并且演示这些函数的使用。 二、数值函数 常见的数值函数如下&#xff1a; 注意&#xff1a; 1、ceil(x)、floor(x) &#xff1a;向上、向下取整。 2、mod(x,y)&#xff1a;模运算&#x…

Wpf 使用 Prism 开发MyToDo应用程序

MyToDo 是使用 WPF &#xff0c;并且塔配Prism 框架进行开发的项目。项目中进行了前后端分离设计&#xff0c;客户端所有的数据均通过API接口获取。适合新手入门学习WPF以及Prism 框架使用。 首页统计以及点击导航到相关模块功能待办事项增删改查功能备忘录增删改查功能登录注册…

跨模型知识融合:大语言模型的知识融合

大语言模型&#xff08;LLMs&#xff09;在多个领域的应用日益广泛&#xff0c;但确保它们的行为与人类价值观和意图一致却充满挑战。传统对齐方法&#xff0c;例如基于人类反馈的强化学习&#xff08;RLHF&#xff09;&#xff0c;虽取得一定进展&#xff0c;仍面临诸多难题&a…

7-18 对象关系映射(orm_name)---PTA实验C++

一、题目描述 一开始看到对象关系映射&#xff0c;其实我是拒绝的。这三个词凑一块&#xff0c;能是给C初学者的题吗&#xff1f; 再仔细读需求&#xff0c;才发现在课设项目已经用过这功能。Object Relational Mapping&#xff08;ORM&#xff09;就是面向对象&#xff08;O…

大降分!重邮计算机专硕复试线大降50分!重庆邮电计算机考研考情分析!

重庆邮电大学&#xff08;Chongqing University of Posts and Telecommunications&#xff09;简称重邮&#xff0c;坐落于中国重庆市主城区南山风景区内&#xff0c;是中华人民共和国工业和信息化部与重庆市人民政府共建的教学研究型大学&#xff0c;入选国家“中西部高校基础…

【30天精通Prometheus:一站式监控实战指南】第13天:graphite_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们&#x1f44b;   欢迎加入【30天精通Prometheus】专栏&#xff01;&#x1f4da; 在这里&#xff0c;我们将探索Prometheus的强大功能&#xff0c;并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。&#x1f680;   Prometheus是云原生和DevOps的…

企业im即时通讯WorkPlus私有化部署适配国产信创环境

在信息化时代&#xff0c;高效的沟通和协作对于企业的运营至关重要。企业IM即时通讯平台提供了一种便捷、实时的沟通工具&#xff0c;旨在改善企业的内部和外部沟通效率。然而&#xff0c;随着企业对数据安全性和隐私保护的要求不断提高&#xff0c;许多企业开始选择私有化部署…