python数据分析和数据处理,用python分析数据
Python结构化数据数据处理与分析简介:我们面对的数据1。读取数据2。检查数据2.1整体2.2局部(单行、列、多行、列)3。数据类型,更改字段3.1字符类(对象)处理3.2日期时间处理3.3数据类型(float,int)处理3.4类别数据处理3.5列,索引4。缺失值处理4.1查看缺失值情况4.2删除缺失值4.3填充缺失值-简单填充4.4填充缺失值-随机森林回归填充python实例
5.重复值6。异常值6.1业务异常值6.2异常检测算法7。根据业务需求,选择一些数据8。数据采样9。数据转换9.1规范化9.2标准化9.3规则化9.4标签编码器9.5 onehotencoder 10。数据分组、排序、透视11.map、apply、Applymap数据处理技巧11.1处理系列(处理一列和一行数据)11.2处理数据框架(处理多列、多行或整个数据)
机器学习中的介绍深度学习项目、视频、图片、文本、语音、结构化数据
本文基于大量kaggle结构化数据项目,总结了在制作机器学习模型时,遇到结构化数据时,如何观察数据情况、如何处理数据、如何分析数据的一些正确流程和细节。
目的是在数据训练之前获得模型的最佳数据。
我们面对的数据在状态上定义为面板数据,其中面板数据又分为时间序列数据和横截面数据。
x轴是时间,y轴是列,z轴对应每一行的数据。
其实数据变成了三维的透视表,但是在实际的机器学习数据处理中,我们都是用二维的数据,横截面的数据。
1.读取数据实例数据处理,并对kaggle的大型数据集进行操作。
数据集
data=pd.read_csv(train.csv )
查看数据
2.1 overall data.head():检查数据集的前五行。
Data.tail():查看数据集底部的5行。
Data.shape:查看数据集维度
Data.dtypes:查看数据集的数据类型。
Data.info():查看数据集的基本信息。
Data.columns:查看数据集的列名。
Data.describe():查看数据集的统计信息。
Data.isna()。sum():检查数据集的每一列是否都有空值。
我们只需要使用data.info(),data.head(),data.describe(),data.isna()。sum(),
我们的数据无非是,int float类(数字)和object类(字符,时间)。
数据审核的核心目的是观察每个数据字段的数据类型,区分连续数据、分类数据和时间数据,看数据是否有缺失的部分。
2.2局部(单行、列、多行、列)数据。年龄,数据[年龄]:过滤指定的列。
数据。Age.unique():查看列重复数据删除的唯一值。
数据[年龄]。value _ counts (dropna=False):检查一列中值的数量。True是包含性的,值为空,false是排他性的。
Data.iloc[4],data.iloc[0:4]:筛选指定的行
Data.iloc[:0:4],data.iloc[[0,2,4]。[3,4]]:过滤指定的行和列,行在逗号之前,列在逗号之后。
Data.sort _ values (by=[age ,ascending=true]):按照列的值从小到大排序。真的是从小到大,假的是从大到小。
通过单词云,观察字符类的数据计数:
从wordcloud导入WordCloud
cloud=WordCloud(宽度=1440,高度=1080)。生成()。加入(数据。Name.astype(str)))
plt.figure(figsize=(8,8))
plt.imshow(云)
plt.axis(“关”)
3.数据类型,字段更改
3.1字符类(对象)处理在机器学习中选择特征时,往往会出现一些难以计算的离散特征。我们需要用一些数值来代替这些字符串。
例如,这里的数据集中的性别只有两个离散的特征男性和女性。
data . loc[data[ sex ]= male , sex]=0:替换为指定的数值以指定字符,
比如在性别上用0代替男性,用1代替女性。
注意,dtype仍然是原始对象,如果需要,您需要转换类型。
数据[舱]=数据[舱]。str.extract ((\ d)):提取指定列字符串中的数值。这里涉及到很多正则表达式,提取出不同的结果。
数据[票证]=数据[票证]。str.split (/,expand=true) [0]:将一列数据按照不同的字符进行划分,选择其前后的数据,其中字符为/
数据[票证]=数据[票证]。海峡。替换( . ),):替换一个字符。
3.2时间数据(datetime)处理有时候需要如何处理时间类数据,时间类的数据类型也是object。
data[ date ]=PD . date _ range( 2022-01-01 , 2023-01-01 ,freq= m ):生成一定时间范围内的数据。
data[ date ]=PD . to _ datetime(data[ date ],format=% y% m ):将时间数据设置为指定的格式。
3.3数据类型(float,int)处理数据[age]=数据[age]。as type (np.int64):更改数据类型
3.4类别数据的处理
data=pd.get_dummies(data):
3.5 colums,index change data . rename(columns={ fare : price , sex: gender}):有选择地更改列名。
涉及指数变化,我们用以下数据作为例子;
Data.set _ index (data [column])。sort _ index():将一个字段设置为索引,接受一个list参数,即设置多个索引,并根据索引大小进行排序。
Data.reset_index(drop=True):恢复索引并将其设置为0,1,2…
4.缺失值处理
4.1检查缺失值。缺失视图有两种,一种是isna,一种是isnull。
data.isna()。总和()
data.isna()。sum()。总和()
数据[年龄]。isnull()。值计数()
4.2删除缺失值对于离散类分类数据,通常无法填充,所以只能删除。只有连续的类数值数据才适合填充。
Data.dropna(how=all ):传入该参数后,只有那些所有值都缺失的行将被丢弃。
Data.dropna(axis=1):丢弃缺少值的列(通常不这样做,这会删除一个特征)
Data.dropna(axis=1,how="all 1,how="all "):丢弃所有缺少值的列。
Data.dropna (axis=0,subset=["age "," sex"]):丢弃在 age 和 sex 列中缺少值的行
4.3填写缺失值——简单填写属性类、年龄、身高等数据,只能简单填写。
Df.fillna(0):填充缺失值的单独值,如0
Df。fillna (method= bfill ,axis= columns ):在缺失值后使用有效值从后向前填充。对于数据帧,您需要指定轴。如果未指定,则在行方向填充。
Df.fillna (method= ffill ,axis= rows ):使用缺失值前面的有效值从前到后填充。对于DataFrame,您需要指定轴。
mode=data.column.mode()
数据[列]。fillna (value=mode [0],inplace=true):用列平均值或中值填充。
4.4填充缺失值——随机森林回归填充就像连续数据。它是由于其他特征数据(如天气质量指数)的影响而产生的数据。由于其他特征雨量和二氧化碳值的共同影响,可以使用算法进行填充。
森林的随机回归原理:
任何回归都是一个从特征矩阵中学习,然后求解连续标签y的过程,这个过程之所以能够实现,是因为回归算法认为特征矩阵和标签之间存在某种联系。事实上,标签和功能是可以互换的。
Python实例df=PD . data frame({ height :[1.56,1.52,1.78,1.67,1.90,1.84],
年龄:[23,20,16,18,45,24],
重量:[120,150,105,90,169,110],
身体质量指数:[3.9,4.0,4.4,np.nan,np.nan,np.nan]})
从sklearn.ensemble导入RandomForestRegressor
df_x=df.drop([身体质量指数],轴=1)
df_y=df.loc[:身体质量指数]
y_train=df_y[df_y.notnull()]
y_test=df_y[df_y.isnull()]
x _ train=df _ x . iloc[y _ train . index]
x_test=df_x.iloc[y_test.index]
RFC=RandomForestRegressor(n _ estimators=100)
rfc=rfc.fit(x_train,y_train)
y _预测=rfc.predict(x_test)
df_y[df_y.isnull()]=y_predict
df
5.重复值数据[data . duplicated(subset=[" columns "],keep= first)]:在指定列中查找重复数据。
data . drop _ duplicates(subset=[" columns "],keep= first ,inplace=false):删除指定列的重复数据。
6.离群值。通常,我们面对的异常值是连续数据或者离散数据。所以在处理离群点的时候,我们可以先通过画一张图来大致观察是否存在离群点。
1.处理只有两个连续变量的联合分布,可以用关系图表示,如:1。散点图,2。线形图。
散点图-离散数据
将numpy作为np导入
进口熊猫作为pd
将matplotlib.pyplot作为plt导入
将seaborn作为sns导入
sns.set()
tips=sns.load_dataset(tips )
技巧
ax=SNS . scatter plot(x= total _ bill ,y=tip ,data=tips)
如果有红色之类的点,肉眼就能清楚地发现异常值。
线图-连续性数据
fmri=sns.load_dataset(fmri )
ax=sns.lineplot(x=时间点,y=信号,data=fmri)
如果出现类似红线的突峰点,肉眼就能清楚地发现异常值。
2.处理多维可以通过画一个方框图来观察。
ax=sns.boxplot(x=tip ,data=tips,whis=np.inf)
ax=sns.swarmplot(x=tip ,data=tips,color=c )
6.1业务的异常价值。根据业务需求选择一些异常值。
6.2异常检测算法
还有一种处理时间序列中异常值的算法,可以通过先知库的算法实现。
7.选择一些数据数据。根据业务需求查询(年龄20和年龄40,价格10 ):多条件选择数据。
D.查询( lnummum ):您还可以在多个列中进行比较和筛选。
8.数据采样。其实在训练模型的过程中,我们经常会对数据进行采样,让我们的模型更好地学习数据的特征,从而使效果更好。但这是浅薄的理解。数据采样本质上是对随机现象的模拟,按照给定的概率分布模拟一个随机事件。另一种方法是用少量样本点近似总体分布,并描述总体分布中的不确定性。
因为在我们的现实生活中,大部分数据都是庞大的,所以整体分布可能包含无数的样本点。模型无法直接对这些海量数据建模(至少目前是这样),从效率上来说也不推荐。
因此,我们通常从总体样本中抽取一个子集来近似总体分布。这个子集叫做“训练集”,然后模型训练的目的就是最小化训练集上的损失函数。训练完成后,还需要另一个数据集来评估模型,也叫“测试集”。
采样的一些高级用途,比如对样本进行多次重采样以估计统计的偏差和方法,或者在保持目标信息不变的情况下改变样本的分布以适应模型训练和学习(经典应用比如解决样本不平衡问题)。
9.数据变换
9.1标准化
数据[ Norm _ Age ]=数据。age . transform(x:(x-x . min())/(x . max()-x . min()))
或者
从sklearn导入预处理
min_max_scaler=预处理。最小最大缩放器()
data[ Norm _ Age ]=min _ max _ scaler . fit _ transform(data。年龄)
9.2标准化
data[ Z _ Age ]=数据。age . transform(x:(x-x . mean())/x . STD())
或者
从sklearn导入预处理
Z_scaler=预处理。标准缩放器()
data[ Z _ Age ]=Z _ scaler . fit _ transform(data。年龄)
9.3来自sklearn导入预处理的正则化
normlizer=预处理。规格化器(copy=True,norm=l2 )
data[ norm _ Age ]=normalizer . fit _ transform(data。年龄)
9.4 LabelEncoderLabelEncoder将一列文本数据转换为数值。
进口熊猫作为pd
ds=pd。DataFrame({color:[red , blue , red , yellow]})
从sklearn .预处理导入LabelEncoder
le=LabelEncoder()
label _ p data[ color ]=label _ pclass
9.5 OneHotEncoderOneHotEncoder将每一类的可能特征转化为二元特征向量。每一类的特征向量只有一位是1,其余都是0。
从sklearn .预处理导入OneHotEncoder
one=OneHotEncoder()
onecolor=one.fit_transform(ds)
onecolor.toarray()
但是,不建议只使用OneHotEncoder,因为需要将转换后的数据赋给元数据。有一个更好的方法来得到_dummies函数。
ds=ds . join(PD . get _ dummies(ds . color))
10.数据分组、排序和透视数据。sort _ values (Age ,ascending=False):数据按列年龄降序排序,False为降序,True为升序。
数据。sort _ values ([col1,col2],ascending=[true,false]):首先按列col1对数据进行升序排序,然后按列col2对数据进行降序排序。
数据。Groupby(Pclass ):返回按列Pclass分组的Groupby对象。
这里返回的只是一串信息,需要如下使用来查看分组的情况。
data.groupby(Pclass )
列表(组)
Data=data [[Pclass , age , price]] data.groupby ("Pclass ")。agg (mean ):按pclass分组,根据pclass求Pclass以外的列的平均值。Agg可以接受列表参数,agg ([len .
Data.groupby (pclass) [age]。agg (np.mean):返回按列col1分组后列col2的平均值。
另一种分组方式是绘制数据透视表。
数据。pivot _ table (index= Pclass ,values=[Age , Price],aggfunc={age: np.mean, price: np.mean}):创建一个按列Pclass分组的数据透视表,并计算年龄和价格的平均值。
Data.groupby (pclass) [age]。转换(NP。mean):transform和agg的区别在于,分组后,重复的不会聚合成一个,但会保留所有数据。transform和agg的区别可以在下图中直观地看到。
11 .映射、应用、应用映射数据处理技能
1.1处理系列(处理一列和一行数据)图
boolean=[真,假]
性别=[男性,女性]
color=[白色,黑色,黄色]
数据=pd。数据帧({
height:np.random.randint(150,190,100),
weight:np.random.randint(40,90,100),
smoker :[NP . random . randint(0,2,100)中x的boolean[x]],
gender :[NP . random . randint(0,2,100)中x的gender[x]],
年龄:np.random.randint(15,90,100),
color :[color[x]for x in NP . random . randint(0,len(color),100)]))
数据["性别"]=数据["性别"]。map ({"male": 1," female": 0}):映射到其他值,类似于labelencoder。
#使用字典进行映射
数据[性别]=数据[性别]。map ({ 男性:1,女性:0})也可以使用地图映射功能
#使用函数
def gender_map(x):
如果x==男性,则性别=1,否则为0
返回性别
#注意,函数名是在这里传递的,没有括号。
数据[性别]=数据[性别]。地图(性别_地图)
应用
定义应用年龄(x,偏差):
返回x偏差
#将额外的参数作为元组传入
数据[年龄]=数据[年龄]。应用(apply_age,args=(-3,))
1.2数据帧处理(多列、多行或整体数据处理)
应用
#沿0轴求和
数据[[身高,体重,年龄]]。应用(np.sum,轴=0)
#沿0轴取对数
数据[[身高,体重,年龄]]。应用(np.log,轴=0)
应用地图
df=pd。数据帧(
{
A:np.random.randn(5),
B:np.random.randn(5),
C:np.random.randn(5),
D:np.random.randn(5),
E:np.random.randn(5),
}
)
df.applymap(lambda x:%.2f % x)
转载请联系作者获得授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。