import urllib # 将数据从GitHub下载到笔记本电脑的本地磁盘 url = "https://raw.githubusercontent.com/LisonEvf/practicalAI-cn/master/data/titanic.csv" response = urllib.request.urlopen(url) html = response.read() with open('titanic.csv', 'wb') as f: f.write(html) # 检查数据是否已下载成功 !ls -l import pandas as pd # 从CSV读取到Pandas DataFrame df = pd.read_csv("titanic.csv", header=0) # 前五项 df.head() # 描述性统计 df.describe() # 直方图 df["age"].hist() # 唯一值 df["embarked"].unique() # 根据特征选择数据 df["name"].head() # 筛选 df[df["sex"]=="female"].head() # 只有女性数据出现 # 排序 df.sort_values("age", ascending=False).head() # Grouping(数据聚合与分组运算) sex_group = df.groupby("survived") sex_group.mean() # iloc根据位置的索引来访问 df.iloc[0, :] # iloc在索引中的特定位置获取行(或列)(因此它只需要整数) # 获取指定位置的数据 df.iloc[0, 1] # loc根据标签的索引来访问 df.loc[0] # loc从索引中获取具有特定标签的行(或列) # 具有至少一个NaN值的行 df[pd.isnull(df).any(axis=1)].head() # 删除具有Nan值的行 df = df.dropna() # 删除具有NaN值的行 df = df.reset_index() # 重置行索引 df.head() # 删除多行 df = df.drop(["name", "cabin", "ticket"], axis=1) # we won't use text features for our initial basic models df.head() # 映射特征值 df['sex'] = df['sex'].map( {'female': 0, 'male': 1} ).astype(int) df["embarked"] = df['embarked'].dropna().map( {'S':0, 'C':1, 'Q':2} ).astype(int) df.head() # lambda表达式创建新特征 def get_family_size(sibsp, parch): family_size = sibsp + parch return family_size df["family_size"] = df[["sibsp", "parch"]].apply(lambda x: get_family_size(x["sibsp"], x["parch"]), axis=1) df.head() # 重新组织标题 df = df[['pclass', 'sex', 'age', 'sibsp', 'parch', 'family_size', 'fare', 'embarked', 'survived']] df.head() # 保存数据帧(dataframe)到 CSV df.to_csv("processed_titanic.csv", index=False) # 看你一下你保持的文件 !ls -l