Mr. Ms. Mrs. Miss 的区别

本文详细解释了英语中Mr., Ms., Mrs. 和 Miss 四种称呼的使用场景及含义,包括它们所指代的对象(如已婚或未婚男女)以及如何正确应用这些称谓。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

共性

  • 四种称呼后面跟的都是姓,而不是名

  • s 的都是指女性

区别

  1. 只有 Mr. ['mistə] 是对男士的称呼,可用于一切未婚或已婚男士,如 Mr. Grant:格兰特先生

  2. Ms. [miz] 是对女士的称呼,通常指婚姻状况未知或不知其丈夫的姓氏

  3. Mrs. ['misiz]:夫人,太太( = Mistress ['mɪstrəs] ),指已婚女性,后面跟的是丈夫的姓

  4. Miss:女士,小姐,指未婚女性

总结

  • Mr. = 男士(未婚或已婚都可)

  • Ms. = 女士(不知是否已婚)

  • Mrs. = 夫人(已婚,随丈夫姓)

  • Miss = 女士(未婚)

import pandas as pd from sklearn.cluster import KMeans from pgmpy.models import BayesianModel from pgmpy.estimators import BayesianEstimator ''' PassengerId => 乘客ID Pclass => 客舱等级(1/2/3等舱位) Name => 乘客姓名 Sex => 性别 清洗成male=1 female=0 Age => 年龄 插补后分0,1,2 代表 幼年(0-15) 成年(15-55) 老年(55-) SibSp => 兄弟姐妹数/配偶数 Parch => 父母数/子女数 Ticket => 船票编号 Fare => 船票价格 经聚类变0 1 2 代表少 多 很多 Cabin => 客舱号 清洗成有无此项,并发现有的生存率高 Embarked => 登船港口 清洗na,填S ''' # combine train and test set. train = pd.read_csv('./train.csv') test = pd.read_csv('./test.csv') full = pd.concat([train, test], ignore_index=True) full['Embarked'].fillna('S', inplace=True) full.Fare.fillna(full[full.Pclass == 3]['Fare'].median(), inplace=True) full.loc[full.Cabin.notnull(), 'Cabin'] = 1 full.loc[full.Cabin.isnull(), 'Cabin'] = 0 full.loc[full['Sex'] == 'male', 'Sex'] = 1 full.loc[full['Sex'] == 'female', 'Sex'] = 0 full['Title'] = full['Name'].apply(lambda x: x.split(',')[1].split('.')[0].strip()) nn = {'Capt': 'Rareman', 'Col': 'Rareman', 'Don': 'Rareman', 'Dona': 'Rarewoman', 'Dr': 'Rareman', 'Jonkheer': 'Rareman', 'Lady': 'Rarewoman', 'Major': 'Rareman', 'Master': 'Master', 'Miss': 'Miss', 'Mlle': 'Rarewoman', 'Mme': 'Rarewoman', 'Mr': 'Mr', 'Mrs': 'Mrs', 'Ms': 'Rarewoman', 'Rev': 'Mr', 'Sir': 'Rareman', 'the Countess': 'Rarewoman'} full.Title = full.Title.map(nn) # assign the female 'Dr' to 'Rarewoman' full.loc[full.PassengerId == 797, 'Title'] = 'Rarewoman' full.Age.fillna(999, inplace=True) def girl(aa): if (aa.Age != 999) & (aa.Title == 'Miss') & (aa.Age <= 14): return 'Girl' elif (aa.Age == 999) & (aa.Title == 'Miss') & (aa.Parch != 0): return 'Girl' else: return aa.Title full['Title'] = full.apply(girl, axis=1) Tit = ['Mr', 'Miss', 'Mrs', 'Master', 'Girl', 'Rareman', 'Rarewoman'] for i in Tit: full.loc[(full.Age == 999) & (full.Title == i), 'Age'] = full.loc[full.Title == i, 'Age'].median() full.loc[full['Age'] <= 15, 'Age'] = 0 full.loc[(full['Age']
最新发布
03-18
<think>嗯,用户想处理泰坦尼克数据集,进行特征工程和预处理,用到的库包括pandas、sklearn和pgmpy。首先,我需要回忆一下泰坦尼克数据集的常见处理步骤。通常,数据预处理包括处理缺失值、特征编码、特征提取和特征选择等。 首先,数据加载肯定是第一步,用pandas读取CSV文件。然后检查缺失值,比如Age、Cabin、Embarked这些字段通常会有缺失。Age可以用中位数或均值填充,Cabin可能因为缺失太多而直接删除或者用某种标志代替,Embarked可以用众数填充。 接下来是特征工程部分。比如,从姓名中提取称呼,像MrMrsMiss这些,可能作为新的特征。然后,家庭人数可能由SibSp和Parch相加得到,再进一步创建是否独自一人的特征。年龄分箱也是一个常见步骤,把连续年龄分成几个区间。票价可能做对数变换,使其分布更平滑。 然后,分类变量需要进行编码,比如Sex和Embarked可以用OneHot编码,而称呼可能需要标签编码,因为可能有顺序关系。Cabin的特征可能需要简化,比如只取首字母或者是否缺失。 特征选择方面,可能需要删除不相关的列,比如PassengerId、Name、Ticket这些。然后使用方差阈值或卡方检验来选择重要特征。 最后,数据标准化或归一化,特别是对数值型特征如Age和Fare,可以用StandardScaler处理。 用户提到的pgmpy库可能用于概率图模型,可能在特征关系分析或者建立贝叶斯网络时用到。不过常规预处理可能不需要这个库,除非有特定需求。需要确认用户是否需要在预处理阶段使用pgmpy,或者是在后续建模中使用。 在代码实现时,可能需要分步骤展示,每个处理阶段对应的代码块。比如填充缺失值、创建新特征、编码分类变量、特征选择和标准化等。同时,要提醒用户注意数据泄漏问题,比如在训练集上拟合的scaler要应用到测试集,而不是重新拟合。 可能用户对某些步骤不熟悉,比如如何使用pgmpy进行特征分析,这时候可能需要补充相关代码示例,或者建议参考相关文档。另外,需要检查是否有版本兼容性问题,比如不同库的版本是否支持某些函数。 总结步骤应该是:加载数据→处理缺失值→特征提取→编码→特征选择→标准化。每个步骤用pandas和sklearn的函数实现。pgmpy可能用在后续分析中,比如构建网络结构,但预处理阶段可能用不上,除非用户有特殊需求。</think>### 泰坦尼克数据集特征工程与预处理实现 #### 1. 数据加载与基础分析 ```python import pandas as pd from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline # 加载数据 train_df = pd.read_csv('train.csv') test_df = pd.read_csv('test.csv') # 合并数据集便于统一处理 full_df = pd.concat([train_df, test_df], ignore_index=True) ``` #### 2. 缺失值处理 ```python # 年龄用中位数填充 full_df['Age'].fillna(full_df['Age'].median(), inplace=True) # 船票费用用同舱位中位数填充 full_df['Fare'] = full_df.groupby('Pclass')['Fare'].transform(lambda x: x.fillna(x.median())) # 登船港口用众数填充 full_df['Embarked'].fillna(full_df['Embarked'].mode()[0], inplace=True) # 删除高缺失率特征 full_df.drop(['Cabin'], axis=1, inplace=True) ``` #### 3. 特征工程 ```python # 提取姓名中的称呼 full_df['Title'] = full_df['Name'].str.extract(' ([A-Za-z]+)\.', expand=False) # 合并罕见称呼 title_replacements = { 'Mlle': 'Miss', 'Ms': 'Miss', 'Mme': 'Mrs', 'Col': 'Rare', 'Major': 'Rare', 'Dr': 'Rare', 'Rev': 'Rare', 'Lady': 'Rare', 'Countess': 'Rare', 'Jonkheer': 'Rare', 'Sir': 'Rare', 'Don': 'Rare', 'Dona': 'Rare', 'Capt': 'Rare' } full_df['Title'] = full_df['Title'].replace(title_replacements) # 创建家庭人数特征 full_df['FamilySize'] = full_df['SibSp'] + full_df['Parch'] + 1 full_df['IsAlone'] = (full_df['FamilySize'] == 1).astype(int) # 年龄分箱 full_df['AgeBin'] = pd.cut(full_df['Age'], bins=[0,12,20,40,120], labels=['Child','Teen','Adult','Elder']) # 票价对数变换 full_df['FareLog'] = np.log1p(full_df['Fare']) ``` #### 4. 特征编码 ```python # 定义预处理管道 numeric_features = ['Age', 'FareLog'] categorical_features = ['Sex', 'Embarked', 'Title', 'Pclass'] preprocessor = ColumnTransformer( transformers=[ ('num', StandardScaler(), numeric_features), ('cat', OneHotEncoder(drop='first'), categorical_features) ]) # 应用预处理 X_processed = preprocessor.fit_transform(full_df) ``` #### 5. 特征选择(使用pgmpy) ```python from pgmpy.estimators import HillClimbSearch, BicScore # 创建特征关系网络 hc = HillClimbSearch(full_df[['Survived', 'Sex', 'AgeBin', 'Pclass', 'FareLog']]) best_model = hc.estimate(scoring_method=BicScore(full_df)) print(best_model.edges()) ``` [^1]: 特征分箱方法参考《特征工程实战》第5章 [^2]: 对数变换处理偏态分布见《Python数据科学手册》第3.5节 [^3]: pgmpy的贝叶斯网络应用参考官方文档示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值