Titanic--细节记录二

目录

merge、join以及concat的方法的不同以及相同

 merge

join 

concat

 stack函数

agg函数

countplot--计算条形统计图

 FacetGrid

kdeplot--核密度估计图

facet.set

 facet.add_legend()

折线图表示年龄分布情况

为什么所有的曲线都被添加到同一个图上:

填充问题


merge、join以及concat的方法的不同以及相同

相同之处:都用于合并数据。 不同之处:

  • merge主要是基于列的合并。
  • join主要是基于索引(行标签)的合并。
  • concat可以沿任意轴合并,更灵活。
import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1'], 'B': ['B0', 'B1']})
df2 = pd.DataFrame({'A': ['A2', 'A3'], 'B': ['B2', 'B3']})

                                            

 merge
result = pd.merge(df1, df2, on='A', how='outer')

join 
df1 = df1.set_index('A')
df2 = df2.set_index('A')
result = df1.join(df2, lsuffix='_df1', rsuffix='_df2')

  1. df1 = df1.set_index('A'):将df1的索引设置为"A"列,意味着后续的连接操作将基于这个列的值。
  2. df2 = df2.set_index('A'):同样地,将df2的索引设置为"A"列。
  3. result = df1.join(df2, lsuffix='_df1', rsuffix='_df2'):使用join方法将df1df2连接在一起。参数lsuffixrsuffix是必要的,因为两个DataFrame在设置索引后将具有相同的列名,这些后缀将添加到重叠列名中,以便区分来自哪个DataFrame。
  4. 如果df2中A列中的值有与df1中A的值相同的则会连接在一起,否则将会补成nan
concat
result = pd.concat([df1, df2])

 stack函数

stack的作用是重新塑造DataFrame,它将数据的列“堆叠”成行,生成一个MultiIndex Series,其中新的索引级别包括原始DataFrame的列名。这有助于将宽格式的数据转换为长格式,并常用于准备数据进行分析或可视化。

例如,如果原始DataFrame是:

   A  B
0  1  2
1  3  4

那么stack()的结果将是:

0  A    1
   B    2
1  A    3
   B    4
dtype: int64

agg函数

agg函数是Pandas库中的一个强大工具,用于聚合操作。它允许你同时对一个或多个列执行多种聚合操作。

使用agg函数,你可以一次执行例如求和、平均值、最小值和最大值等多种操作,并将结果组合成一个DataFrame。

以下是一个示例,说明如何使用agg函数:

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

# 对'A'列求和,对'B'列求最大值和最小值
result = df.agg({
    'A': 'sum',
    'B': ['max', 'min']
})

结果是:

      A    B
max NaN  6.0
min NaN  4.0
sum 6.0  NaN

也可以对整个DataFrame调用agg并应用相同的聚合函数到每一列:

result = df.agg(['sum', 'mean'])
      A    B
sum   6   15
mean  2.0  5.0

countplot--计算条形统计图

sns.countplot(x="Pclass", hue="Survived", data=text)
  • x="Pclass":设置x轴上的变量为"Pclass"列。这意味着图形将显示该列中不同类别的计数。

  • hue="Survived":使用"Survived"列为图形着色,这样你就可以看到每个"Pclass"类别中"Survived"的不同值的计数。这可以帮助你理解"Pclass"和"Survived"之间的关系。

  • data=text:设置数据源为text DataFrame。这是你之前从CSV文件读取的数据。

 FacetGrid

facet = sns.FacetGrid(text, hue="Survived",aspect=3)

FacetGrid是一个用于创建一组图形的对象,这些图形可以根据一个或多个分类变量的不同级别展示数据。

  • facet = sns.FacetGrid():创建一个FacetGrid对象并将其赋值给变量facet

  • text:第一个参数,指定要使用的DataFrame,这里是text

  • hue="Survived":设置着色变量为"Survived"列。这意味着在网格内的每个小图中,不同的"Survived"值将使用不同的颜色表示。

  • aspect=3:设置每个小图的宽高比为3。这控制了每个小图的形状。

kdeplot--核密度估计图

facet.map(sns.kdeplot,'Age',shade= True)
  • facet: 这是一个已经创建的FacetGrid对象,通常基于某个分类变量对数据进行分组。

  • .map(): 这是FacetGrid对象的方法,用于在网格的每个子集上绘制特定类型的图。

  • sns.kdeplot: 这是传递给map方法的绘图函数,用于在每个facet上绘制核密度估计图。

  • 'Age': 这是传递给kdeplot的变量名,表示要绘制KDE图的DataFrame中的列名。

  • shade=True: 这是传递给kdeplot的一个参数,表示KDE图下方的区域将被填充或"阴影",使图形更容易阅读和解释。

facet.set

facet.set(xlim=(0, text['Age'].max()))

这行代码设置了FacetGrid对象中每个子图的x轴范围。

  • facet: 这是一个已经创建的FacetGrid对象。

  • .set(): 这是FacetGrid对象的一个方法,用于设置网格属性。

  • xlim=(0, text['Age'].max()): 这是传递给set方法的一个参数,用于设置x轴的限制。

    • 0: x轴的起始值设置为0。
    • text['Age'].max(): x轴的结束值设置为text DataFrame中'Age'列的最大值。

 facet.add_legend()

facet.add_legend()

facet.add_legend()是Seaborn库中FacetGrid对象的一个方法,用于在图的一个角落添加图例。

图例是一个包含一个或多个条目的区域,每个条目由一个标记(例如颜色块或线条)和一个标签组成。图例用于解释图中的符号和颜色代表的含义。

如果之前创建的FacetGrid对象facet基于某个分类变量进行着色(例如通过hue参数指定),那么调用facet.add_legend()将添加一个图例来解释这些颜色。

图例通常自动基于hue参数所代表的数据列的名称和唯一值生成。

折线图表示年龄分布情况

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")

为什么所有的曲线都被添加到同一个图上:
  1. 没有新的图形或轴创建:如果你想在不同的图或轴上绘制,你通常会使用像plt.figure()plt.subplot()这样的函数来创建新的图或轴。在你的代码中,没有使用这些函数,所以所有的绘图都被添加到当前的图和轴上。

  2. 连续的绘图调用:当你连续调用plot函数,matplotlib会在当前活动的轴上绘制。如果没有创建新的轴或图,那么连续的绘图调用将在同一个轴上绘制。

  3. 全局状态:matplotlib有一个全局状态机制,它跟踪当前的图、轴等。当你调用像plt.plot()这样的函数时,它操作当前活动的图和轴。如果你不显式地改变活动的图或轴,连续的调用将在同一位置操作。

填充问题

具体地说,plot方法的kind='kde'选项并不直接接受shade参数。如果你想要控制阴影或填充KDE图下方的区域,你可以直接使用Seaborn的kdeplot函数,或者使用matplotlib的命令来手动填充。

import seaborn as sns
sns.kdeplot(text.Age[text.Pclass == 1], shade=True)
sns.kdeplot(text.Age[text.Pclass == 2], shade=True)
sns.kdeplot(text.Age[text.Pclass == 3], shade=True)
plt.xlabel("age")
plt.legend((1,2,3),loc="best")

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值