2023年12月19日工程中学到的知识整理

发布时间:2023年12月19日

(T▽T)免责声明:仅仅是个人学习总结,如有错误烦请告知

1. Pandas中的query函数

函数功能:筛选数据

df.query("等式或者不等式")
# for example
df.query("A==5")
df.query("A>=10")

2.lambda表达式

what:lambda是一个函数,可以接受参数输入

funca = lambda x: x+1 
funca(2)
out:3
funcb = lambda x:x+1 if x==1 else 0
funcb(1)
out:2
funcb(2)
out:0
# pandas使用lambda表达式
pd_1 = pd.DataFrame([round(np.random.random(),2) for _ in range(5)])
#数据长这样
      0
0  0.95
1  0.62
2  0.04
3  0.61
4  0.77
#接下来转换
pd_2 = pd_1[0].apply(lambda x: '{:.0%}'.format(x))
out:
0    95%
1    62%
2     4%
3    61%
4    77%

3.pandas中的apply函数

函数功能:对dataframe进行函数处理

DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)
"""
func 代表的是传入的函数或 lambda 表达式;
axis 参数可提供的有两个,该参数默认为0/列
	0 或者 index ,表示函数处理的是每一列;
	1 或 columns ,表示处理的是每一行;
raw ;bool 类型,默认为 False;
	False ,表示把每一行或列作为 Series 传入函数中;
	True,表示接受的是 ndarray 数据类型;
"""
>>> df  =pd.DataFrame([[4,9]]*3,columns = ['A','B'])
>>> df
   A  B
0  4  9
1  4  9
2  4  9
?
?
>>> df.apply(np.sqrt)
     A    B
0  2.0  3.0
1  2.0  3.0
2  2.0  3.0
>>> df.apply(np.mean)
A    4.0
B    9.0

4. pandas中的groupby

函数功能:将数据按照某一列进行划分
具体的在这个博客里面总结过:click here

  • 按多列分组:
df.groupby({column1, column2])
df = pd.DataFrame([['a', 'man', 120, 90],
				   ['b', 'woman', 130, 100],
				   ['a', 'man', 110, 108],
				   ['a', 'woman', 120, 118]], columns=['level', 'gender', 'math', 'chinese'])
print(df)
  level gender  math  chinese
0     a    man   120       90
1     b  woman   130      100
2     a    man   110      108
3     a  woman   120      118

group = df.groupby(['gender', 'level'])
# 先按照'gender'列的值来分组。每组内,再按'level'列来分组。也返回一个groupby对象
for key, value in group:
    print(key)
    print(value)
    print("")
('man', 'a')
  level gender  math  chinese
0     a    man   120       90
2     a    man   110      108

('woman', 'a')
  level gender  math  chinese
3     a  woman   120      118

('woman', 'b')
  level gender  math  chinese
1     b  woman   130      100

5.pandas中的to_dict

函数功能:将datadrame转换成字典的形式
{ }表示字典数据类型,字典中的数据是以 {key : value} 的形式显示,是键名和键值一一对应形成的

6.pandas中的set_index

函数功能:指定某一个列作为索引

DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
"""
keys:列标签或列标签/数组列表,需要设置为索引的列

drop:默认为True,删除用作新索引的列

append:是否将列附加到现有索引,默认为False。

inplace:输入布尔值,表示当前操作是否对原数据生效,默认为False。

verify_integrity:检查新索引的副本。否则,请将检查推迟到必要时进行。将其设置为false将提高该方法的性能,默认为false。
"""
import pandas as pd
import numpy as np
df = pd.DataFrame({'Country':['China','China', 'India', 'India', 'America', 'Japan', 'China', 'India'], 
 
                   'Income':[10000, 10000, 5000, 5002, 40000, 50000, 8000, 5000],
 
                    'Age':[50, 43, 34, 40, 25, 25, 45, 32]})
   Country  Income  Age
0    China   10000   50
1    China   10000   43
2    India    5000   34
3    India    5002   40
4  America   40000   25
5    Japan   50000   25
6    China    8000   45
7    India    5000   32        
print(df.set_index('Country'))
         Income  Age
Country             
China     10000   50
China     10000   43
India      5000   34
India      5002   40
America   40000   25
Japan     50000   25
China      8000   45
India      5000   32           

6.1 pandas.DataFrame.reset_index

函数功能:重置索引(重置成默认索引)

df = pd.DataFrame([('bird', 389.0),
 
                   ('bird', 24.0),
 
                   ('mammal', 80.5),
 
                   ('mammal', np.nan)],
 
                  index=['falcon', 'parrot', 'lion', 'monkey'],
 
                  columns=('class', 'max_speed'))
 
输出:df
         class  max_speed
falcon    bird      389.0
parrot    bird       24.0
lion    mammal       80.5
monkey  mammal        NaN
# 重置索引时,将旧索引添加为列,并使用新的顺序索引:
df.reset_index()
    index   class  max_speed
0  falcon    bird      389.0
1  parrot    bird       24.0
2    lion  mammal       80.5
3  monkey  mammal        NaN

7.Python 字典(Dictionary) get()

函数功能:返回指定key的value

get(...)
    D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.
    >>> dict = {'1':'one','2':'two','3':'three'}
>>> dict.get('2',0)
'two'
>>> dict.get('4',0)
0
>>> dict.get('4','false')
'false'

8.pandas.Index.map

函数功能:映射

Index.map(mapper, na_action=None)[source]
# for example
boolean=[True,False]
gender=["男","女"]
color=["white","black","yellow"]
data=pd.DataFrame({
    "height":np.random.randint(150,190,100),
    "weight":np.random.randint(40,90,100),
    "smoker":[boolean[x] for x in np.random.randint(0,2,100)],
    "gender":[gender[x] for x in np.random.randint(0,2,100)],
    "age":np.random.randint(15,90,100),
    "color":[color[x] for x in np.random.randint(0,len(color),100) ]
}
)

print(data.head(5))
   height  weight  smoker gender  age   color
0     185      89    True27  yellow
1     164      86    True66   black
2     169      72    True63  yellow
3     186      80   False62  yellow
4     166      45    True61   black
# how to Replace “男” with 1 and “女” with 0 in the gender column?
#①使用字典进行映射
data["gender"] = data["gender"].map({"男":1, "女":0})

#②使用函数
def gender_map(x):
    gender = 1 if x == "男" else 0
    return gender
#注意这里传入的是函数名,不带括号
data["gender"] = data["gender"].map(gender_map)
   height  weight  smoker  gender  age   color
0     159      46   False       0   85   white
1     174      83   False       1   46  yellow
2     173      49    True       1   36  yellow
3     184      74   False       1   59   black
4     189      70   False       0   72   white

9.自定义函数basic_eda(df)用于查看dataframe的详细信息

def basic_eda(df):
    print("-------------------------------TOP 5 RECORDS-----------------------------")
    print(df.head(5))
    print("-------------------------------INFO--------------------------------------")
    print(df.info())
    print("-------------------------------Describe----------------------------------")
    print(df.describe())
    print("-------------------------------Columns-----------------------------------")
    print(df.columns)
    print("-------------------------------Data Types--------------------------------")
    print(df.dtypes)
    print("----------------------------Missing Values-------------------------------")
    print(df.isnull().sum())
    print("----------------------------NULL values----------------------------------")
    print(df.isna().sum())
    print("--------------------------Shape Of Data---------------------------------")
    print(df.shape)
    print("============================================================================ \n")

10.dt.xx

链接

  • dt.date
  • dt.normalize
  • dt.year:返回日期的年份
  • dt.month
  • dt.day
  • dt.hour
  • dt.week
  • dt.quarter:返回日期的季度
  • dt.day_name:返回星期几的英文

11.pandas中的sort_values

函数功能:可根据指定列数据也可根据指定行的数据排序
在这里插入图片描述

12.TimeseriesGenerator

(1)为什么要使用TimeseriesGenerator?

在训练监督学习(深度学习)模型前,要把time series数据转化成samples的形式
那什么是sample?有一个输入组件 X X X和一个输出组件 y y y
深度学习模型就是一个映射函数: y = f ( X ) y=f(X) y=f(X)
对于一个单变量的one-step预测:输入组件就是前一个时间步的滞后数据,输出组件就是当前时间步的数据,如下:
X, y
[1, 2, 3], [4]
[2, 3, 4], [5]
[3, 4, 5], [6]

TimeseriesGenerator class就可以把手动生成samples的这个过程自动化

(2)怎么使用TimeseriesGenerator

需要两步:定义使用

a.定义
# 官方文档:
tf.keras.preprocessing.sequence.TimeseriesGenerator(
    data,
    targets,
    length,
    sampling_rate=1,
    stride=1,
    start_index=0,
    end_index=None,
    shuffle=False,
    reverse=False,
    batch_size=128
)
# load data 在大多数时间序列预测问题中,输入和输出系列将是同一time series
inputs = ...
outputs = ...
# define generator
generator = TimeseriesGenerator(inputs, outputs, ...)
  • length:在每个样本的输入部分中使用的滞后观察的数量(例如 3)
  • sampling_rate: s a m p l i n g r a t e = r samplingrate=r samplingrate=r,输入组件: d a t a [ i ] , d a t a [ i ? r ] , d a t a [ i ? 2 r ] , . . . . . . , d a t a [ i ? l e n g t h ] data[i],data[i-r],data[i-2r],......,data[i-length] data[i],data[i?r],data[i?2r],......,data[i?length]
  • stride: s t r i d e = s stride=s stride=s,输出组件: d a t a [ i ] , d a t a [ i + s ] , d a t a [ i + 2 s ] . . . . data[i],data[i+s],data[i+2s].... data[i],data[i+s],data[i+2s]....
  • start_index:在start_index前的点不使用
  • end_index:在end_index后的点不使用
  • shuffle:是否打乱数据
  • reverse:是否将输出的samples按照时间倒序排列
  • batch_size:每次迭代时返回的样本数
b.使用timeseriesgenerator训练模型

使用fit_generator()函数来训练模型model

# define generator
generator = TimeseriesGenerator(...)
# define model
model = ...
# fit model
model.fit_generator(generator, steps_per_epoch=len(generator), ...)
  • generator:TimeseriesGenerator类实例化的生成器作为fit_generator的参数(argument)
  • steps_per_epoch:一个epoch中使用的samples数量,可以设置为generator长度(len(generator))代表使用generator中的所有samples
    同样,可以使用evaluate_generator()函数来评估模型
    使用predict_generator()函数对新数据进行预测
文章来源:https://blog.csdn.net/qq_43403653/article/details/135078218
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。