文章目录
1、python中axis=0 axis=1的理解
-
1、根据官方的说法,1表示横轴,方向从左到右;0表示纵轴,方向从上到下。
axis=1时,数组的变化是横向的,而体现出来的是列的增加或者减少。 -
2、其实axis的重点在于方向,而不是行和列。具体到各种用法而言也是如此。
当axis=1时,如果是求平均,那么是从左到右横向求平均;如果是拼接,那么也是左右横向拼接;如果是drop,那么也是横向发生变化,体现为列的减少。
2、%%time 、%time
%%time打印整个单元格的壁时间,而%time只提供第一行的时间
- 使用%%time或%time打印2个值:
- 1.CPU时间
- 2.壁厚时间
1.%%time
将会给出cell的代码运行一次所花费的时间。
%%time
li = []
for i in range(1000):
li.append(i ** 2)
#输出
Wall time: 0 ns
2.%time
将会给出当前行的代码运行一次所花费的时间。
%time [x for x in range(1000)]
Wall time: 0 ns
Out[22]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
12345
3.%timeit
使用Python的timeit模块,它将会执行一个语句100,000次(默认情况下),然后给出运行最快3次的平均值。
%%timeit
li = []
for i in range(1000):
li.append(i ** 2)
321 µs ± 2.03 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
3、pd.read_csv()
pd.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=False, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False, as_recarray=False, compact_ints=False, use_unsigned=False, low_memory=True, buffer_lines=None, memory_map=False, float_precision=None)
1.filepath_or_buffer:(这是唯一一个必须有的参数,其它都是按需求选用的)
文件所在处的路径
import pandas as pd
data1 = pd.read_csv('rating.csv')
1 258 5
0 2 4081 4
1 2 260 5
2 2 9296 5
3 2 2318 3
4 2 26 4
5 2 315 3
6 2 33 4
7 2 301 5
4、pandas中的 .isin()
**例如 a.isin(b) ,意思就是:b中有的元素在a中也有的有多少个
5.pd.merge()
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False,
validate=None)
-
left: 拼接的左侧DataFrame对象
-
right: 拼接的右侧DataFrame对象
-
on: 要加入的列或索引级别名称。 必须在左侧和右侧DataFrame对象中找到。 如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。
-
left_on:左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
-
right_on: 左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
-
left_index: 如果为True,则使用左侧DataFrame中的索引(行标签)作为其连接键。 对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。
-
right_index: 与left_index功能相似。
-
how: One of ‘left’, ‘right’, ‘outer’, ‘inner’. 默认inner。inner是取交集,outer取并集。比如left:[‘A’,‘B’,‘C’];right[’'A,‘C’,‘D’];inner取交集的话,left中出现的A会和right中出现的买一个A进行匹配拼接,如果没有是B,在right中没有匹配到,则会丢失。'outer’取并集,出现的A会进行一一匹配,没有同时出现的会将缺失的部分添加缺失值。
-
sort: 按字典顺序通过连接键对结果DataFrame进行排序。 默认为True,设置为False将在很多情况下显着提高性能。
-
suffixes: 用于重叠列的字符串后缀元组。 默认为(‘x’,’ y’)。
-
copy: 始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此。
-
indicator:将一列添加到名为_merge的输出DataFrame,其中包含有关每行源的信息。 _merge是分类类型,并且对于其合并键仅出现在“左”DataFrame中的观察值,取得值为left_only,对于其合并键仅出现在“右”DataFrame中的观察值为right_only,并且如果在两者中都找到观察点的合并键,则为left_only。
6、.iloc()
iloc[ : , : ] 前面的冒号就是取行数,后面的冒号是取列数,索引为左闭右开
这里train_feature = 10
5. KFold, StratifiedKFold,StratifiedShuffleSplit, GroupKFold区别以及Stratified Group KFold 实现
在机器学习,一般不能直接拿整个数据集取训练,而采用cross-validation方法来训练。增强随机性减小噪声等,来减少过拟合,从而有限的数据中获取学习到更全面的信息,让模型泛化能力强。在sklearn中,经常使用的有:KFold, StratifiedKFold,StratifiedShuffleSplit, GroupKFold。逐一解释使用区别,使用一个简单的df。(一般情况下, n_splits=5/10)
1. KFold 使用
注意划分后得到的是针对数据的索引。我们现在只关注其test index,可以发现每次划分得到的索引不是按照class对应的类别均匀划分的,如第一次[2,4,7]对应类别是1,1,0. 其实 train index也一样,2,0,1,2,2,0.这在很多时候是不满足要求的,因为我们很多时候希望每次划分得到的train dataset / valid dataset其中对应的target类别是均匀的。
- random_state int,RandomState实例或无,默认=无
当shuffle为True时,random_state会影响索引的顺序,从而控制每个类别的每个折叠的随机性。否则,保留random_state为None。为多个函数调用传递可重复输出的int值
2. StratifiedKFold使用
现在我们知道,KFold不能按照target类别来均匀划分,如果数据集必须按target类别来划分呢?那就要用到 StratifiedKFold。
3. GroupKFold使用
6、np.random.RandomState()
当给定一个数字作为参数传入时,他会生成一个随机数生成器,生成器.rand()即可获得随机数