这个主要是学习matplotlib。
最基本的可视化图案包括散点图、柱状图、条形图、折线图、饼图、热力图和箱型图等。
1. 散点图:用于探索和展示两个或更多变量之间的关系,通过点的分布来揭示数据间的相关性或异常值。
2. 柱状图:适用于对比不同分类的数据变化,展示同一类别下各变量之间的比较情况,或者展示不同时间点的数据变化趋势。
3. 条形图:与柱状图相似,适合展示多个分类的数据变化,尤其当类别名称较长或需要排名展示时更为适用。
4. 折线图:主要用于展现数据随时间或有序类别波动的趋势变化,特别适合时序数据分析。
5. 饼图:通常用来表示不同分类在整体中的占比关系,适合于展示枚举类型字段的分类数据。
6. 热力图:以颜色深浅来表示数据量的大小或密度,常用于显示访客热衷的页面区域或地理分布。
7. 箱型图:用于展示一组数据的分散情况,尤其适合对几个样本进行比较,它可以直观地显示数据的最大值、最小值、中位数等信息。
survived这一列代表乘客是否生还,1活着,0死亡
思考问题:
计算出泰坦尼克号数据集中男女中死亡人数,并可视化展示?如何和男女生存人数可视化柱状图结合到一起?
#第一行代码是Jupyter Notebook中的一个魔法命令,
#用于在Notebook中内嵌显示matplotlib绘制的图形。
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
text = pd.read_csv(r"C:\Users\86186\数据分析、\a\result.csv")
text.head()
sex = text.groupby('Sex')['Survived'].sum()
sex.plot.bar()
plt.title('survived_count')
plt.show()
在源代码基础上加
for i in range(len(sex)):
plt.text(i, sex.iloc[i], str(sex.iloc[i]), ha='center', va='bottom')
可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图(用柱状图试试)。¶
这段代码使用了`groupby`函数来对数据进行分组,并使用`count`函数计算每个组的数量。然后使用`unstack`函数将结果转换为DataFrame格式,以便绘制堆叠柱状图。最后使用`plot`函数绘制图形,并设置标题和y轴标签。
以下是代码的解析:
text.groupby(['Sex', 'Survived'])['Survived'].count().unstack().plot(kind='bar', stacked=True)plt.title('survived_count') plt.ylabel('count')
- `text.groupby(['Sex', 'Survived'])`: 使用`groupby`函数对数据按照'Sex'和'Survived'列进行分组。
- `['Survived']`: 选择要进行计数的列。
- `count()`: 计算每个组中的数量。
- `unstack()`: 将结果转换为DataFrame格式,以便绘制堆叠柱状图。
- `plot(kind='bar', stacked=True)`: 使用`plot`函数绘制堆叠柱状图,其中`kind='bar'`表示绘制柱状图,`stacked=True`表示堆叠柱状图。
- `plt.title('survived_count')`: 设置图形的标题为'survived_count'。
- `plt.ylabel('count')`: 设置y轴标签为'count'。
任务四:可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况。(用折线图试试)(横轴是不同票价,纵轴是存活人数)
这段代码使用了`groupby`函数来对数据按照'Fare'列进行分组,并使用`value_counts`函数计算每个组中'Survived'列的频数。然后使用`sort_values`函数将结果按照降序排序。
以下是代码的解析:
fare_sur = text.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)fig = plt.figure(figsize=(20, 18)) fare_sur.plot(grid=True) plt.legend() plt.show()
- `text.groupby(['Fare'])`: 使用`groupby`函数对数据按照'Fare'列进行分组。
- `['Survived']`: 选择要进行计数的列。
- `value_counts()`: 计算每个组中'Survived'列的频数。
- `sort_values(ascending=False)`: 使用`sort_values`函数将结果按照降序排序。
- ‘plt.figure(figsize=(20, 18))`: 创建一个大小为20x18的图形对象
- `fare_sur.plot(grid=True)`: 绘制`fare_sur`数据的折线图,并添加网格线。
- `plt.legend()`: 添加图例。
- `plt.show()`: 显示图形
这段代码使用`matplotlib`库绘制了一个图形,并设置了图形的大小为20x18。然后使用`fare_sur1.plot(grid=True)`绘制了`fare_sur1`数据的折线图,并添加了网格线。接着使用`plt.legend()`添加了图例。最后使用`plt.show()`显示图形。
以下是代码的解析:
fare_sur1 = text.groupby(['Fare'])['Survived'].value_counts()fig = plt.figure(figsize=(20, 18)) fare_sur1.plot(grid=True) plt.legend() plt.show()
- `fare_sur1 = text.groupby(['Fare'])['Survived'].value_counts()`: 计算每个'Fare'组中'Survived'列的频数。
- `plt.figure(figsize=(20, 18))`: 创建一个大小为20x18的图形对象。
- `fare_sur1.plot(grid=True)`: 绘制`fare_sur1`数据的折线图,并添加网格线。
- `plt.legend()`: 添加图例。
- `plt.show()`: 显示图形。
这段代码使用了`groupby`函数对数据进行分组,并计算了每个分组中"Survived"列的频数。然后使用`seaborn`库中的`countplot`函数绘制了一个计数图,横轴为"Pclass"(船舱等级),纵轴为频数,并根据"Survived"列的值进行着色。
import seaborn as snspclass_sur = text.groupby(['Pclass'])['Survived'].value_counts() sns.countplot(x="Pclass", hue="Survived", data=text)
上述代码中的`text`是一个DataFrame对象,其中包含了数据集的信息。你需要确保在运行此代码之前已经导入了相应的库,并将数据集加载到`text`变量中。
这段代码使用了Seaborn库来绘制一个计数图,用于展示不同船舱等级(Pclass)下的生存情况(Survived)。
import seaborn as snspclass_sur = text.groupby(['Pclass'])['Survived'].value_counts() text['Survived'] = text['Survived'].astype(str) sns.countplot(x="Pclass", hue="Survived", data=text)
- `groupby(['Pclass'])['Survived'].value_counts()`对数据进行分组,统计每个船舱等级下生存和死亡的数量。
- 将'Survived'列的数据类型转换为字符串类型,以便在计数图中正确显示。
- 使用`sns.countplot()`函数绘制计数图,其中x轴表示船舱等级,hue参数表示生存状态,data参数指定数据集为text
在您提供的代码中,您正在尝试根据
Pclass
(乘客舱位等级)的不同值来绘制Age
(年龄)的核密度估计(KDE)图。然而,您直接对text.Age
进行了切片,并尝试使用.plot(kind='kde')
,但这可能不会按预期工作,因为.plot()
方法通常用于整个DataFrame
或Series
,而不是它们的子集。为了修复这个问题,您应该首先筛选出每个
Pclass
对应的Age
值,并将它们作为独立的Series
对象,然后分别绘制它们的KDE图。此外,您还需要确保为图例提供正确的标签。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# 假设 text 是您的 DataFrame
# 确保 text DataFrame 包含 'Age' 和 'Pclass' 列
# 绘制每个 Pclass 的 Age 的 KDE 图
sns.kdeplot(text['Age'][text['Pclass'] == 1], label='Pclass 1')
sns.kdeplot(text['Age'][text['Pclass'] == 2], label='Pclass 2')
sns.kdeplot(text['Age'][text['Pclass'] == 3], label='Pclass 3')
# 设置 x 轴标签
plt.xlabel("Age")
# 显示图例
plt.legend(loc="best")
# 显示图形
plt.show()
在这段代码中,我使用了
seaborn
的kdeplot
函数来绘制KDE图,因为seaborn
提供了更丰富的绘图功能和更好的可视化效果。kdeplot
函数接受一个Series
对象作为输入,并绘制其KDE图。label
参数用于在图例中为每个KDE图指定标签。请注意,我移除了
plt.legend((1,2,3),loc="best")
中的元组(1,2,3)
,因为它不会正确地设置图例的标签。相反,我直接在kdeplot
函数调用中使用了label
参数来指定每个曲线的标签。确保在运行代码之前,您的
text
DataFrame已经被正确加载并包含Age
和Pclass
列。如果您的数据是通过pandas
读取的CSV文件或其他格式,您应该使用相应的pandas
函数来加载数据。