DATAWHALE学习笔记2-数据分析

Name特征中提取Title特征

  1. 字符串操作

    • str.extract()利用正则表达式从字符串中提取匹配的子串
    • replace()对字符串中的特定模式进行替换
  2. 正则表达式

    • ([A-Za-z]+)\.匹配标题(如Mr., Mrs., Miss.等)中的字母部分和后面的.号
  3. pandas数据框操作

    • df['新列名'] = df['原列名'].apply(函数)应用函数到DataFrame的某一列
    • pd.concat()在轴向连接多个DataFrame
  4. 数据预处理

    • 处理异常值/罕见类别值
    • 特征编码(数值编码和One-Hot编码)
  5. 导入模块

    • import pandas as pd
    • from sklearn.preprocessing import LabelEncoder
  6. 实例化对象

    • le = LabelEncoder()

核心代码段:

# 提取Title
df['Title'] = df['Name'].str.extract('([A-Za-z]+)\.', expand=False)

# 处理罕见Title
df['Title'] = df['Title'].replace(['Lady','Countess','Capt','Col','Don','Dr','Major','Rev','Sir','Jonkheer','Dona'], 'Rare')
df['Title'] = df['Title'].replace(['Mlle','Ms'], 'Miss')
df['Title'] = df['Title'].replace('Mme', 'Mrs')

# 数值编码
le = LabelEncoder()
df['Title_Code'] = le.fit_transform(df['Title']) 

# One-Hot编码
title_dummies = pd.get_dummies(df['Title'], prefix='Title')
df = pd.concat([df, title_dummies], axis=1)

使用pandas进行数据合并和重塑

  1. 导入pandas库
import pandas as pd
  1. 读取多个CSV文件
text_left_up = pd.read_csv("data/train-left-up.csv")
text_left_down = pd.read_csv("data/train-left-down.csv")
text_right_up = pd.read_csv("data/train-right-up.csv")  
text_right_down = pd.read_csv("data/train-right-down.csv")
  1. 横向合并DataFrame

    • 使用concat
    result_up = pd.concat([text_left_up, text_right_up], axis=1)
    result_down = pd.concat([text_left_down, text_right_down], axis=1)
    
    • 使用join
    result_up = text_left_up.join(text_right_up)
    result_down = text_left_down.join(text_right_down)
    
  2. 纵向合并DataFrame

    • 使用concat
    result = pd.concat([result_up, result_down])
    
    • 使用append
    result = result_up.append(result_down)
    
  3. 使用merge合并

result_up = pd.merge(text_left_up, text_right_up, left_index=True, right_index=True)
result_down = pd.merge(text_left_down, text_right_down, left_index=True, right_index=True)
result = result_up.append(result_down)
  1. 保存DataFrame为CSV
result.to_csv('result.csv')
  1. 将DataFrame重塑为Series
unit_result = text.stack()
  1. Series另存为CSV
unit_result.to_csv('unit_result.csv')

可视化

  1. 导入相关库
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

这里导入了numpy、pandas数据分析库,matplotlib和seaborn可视化库。%matplotlib inline是jupyter环境下的魔法命令,用于在notebook中直接显示图像。

  1. 读取数据
text = pd.read_csv('result.csv')

从result.csv文件中读取数据,赋值给text DataFrame

  1. 男女生存人数可视化(柱状图)
sex = text.groupby('Sex')['Survived'].sum()
sex.plot.bar()
plt.title('survived_count')
plt.show()

这里先根据性别分组,计算出生存人数的sum值。然后调用Series的plot.bar方法直接生成柱状图,再加上标题。

柱状图适合对比不同类别的数据统计值,这里一眼可以看出男性和女性的生存人数差异情况。

  1. 男女生存/死亡人数比例可视化(堆积柱状图)
text.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked=True)
plt.title('survived_count')
plt.ylabel('count')

先按性别和生存情况分组,计算出各组的人数count值。unstack()方法可以将分组的行/列索引进行多级拆分。再用plot的kind='bar’生成柱状图,stacked=True使柱状图堆积在一起,从而可以看出各组占比情况。

这种堆积柱状图非常适合查看不同类别的构成比例。

  1. 不同票价生存情况可视化(折线图)
fare_sur = text.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)
fare_sur.plot(grid=True)

fare_sur1 = text.groupby(['Fare'])['Survived'].value_counts()  
fare_sur1.plot(grid=True)

先按票价分组,计算出各票价下生存/死亡人数的频数,分别对结果进行降序/不排序。然后直接调用plot方法绘制折线图。

折线图适合展示数据随变量的变化趋势,可以看出在生存/死亡人数随票价的变化情况,以及数据是否有序等。

  1. 不同仓位等级生存情况可视化(柱状图)
pclass_sur = text.groupby(['Pclass'])['Survived'].value_counts()
sns.countplot(x="Pclass", hue="Survived", data=text)

先按仓位分组,计算生存/死亡人数频数。然后用seaborn的countplot绘制分组计数的柱状图,x="Pclass"为坐标轴,hue="Survived"为分组条件。

这种分组柱状图清晰地展示了不同类别下两种分组的数据情况。

  1. 年龄生存情况可视化(核密度曲线)
facet = sns.FacetGrid(text, hue="Survived",aspect=3)
facet.map(sns.kdeplot,'Age',shade=True)
facet.set(xlim=(0, text['Age'].max()))
facet.add_legend()

首先利用FacetGrid创建一个多面板子图,按survived进行分面。map方法应用每个子图的数据。kdeplot绘制核密度估计曲线,可视化出每个年龄下生存/死亡的概率密度曲线。

这种可视化方式适合对比不同组别下单变量的分布情况,可以一眼看出生存组和死亡组在各个年龄段的差异。

  1. 不同仓位年龄分布可视化(折线图)
text.Age[text.Pclass == 1].plot(kind='kde')
text.Age[text.Pclass == 2].plot(kind='kde')
text.Age[text.Pclass == 3].plot(kind='kde')
plt.xlabel("age")
plt.legend((1,2,3),loc="best")

按仓位等级对年龄进行分组,利用plot的kind='kde’参数分别绘制出核密度估计曲线。

使用折线图可以在同一张图中对比不同类别下数据的分布情况,查看是否存在明显差异等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值