第二章 数据可视化
项目源码地址:https://github.com/datawhalechina/hands-on-data-analysis
前期准备
#库的导入
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#数据载入
df = pd.read_csv('result.csv')
2.7.1导引
最基本的可视化图案有哪些?分别适用于那些场景?
折线图
适合用于可视化某个属性值随着时间、数量等变化的趋势。例如,我们可以通过折线图来展示某个城市某天的温度变化,或者某股票价格随时间变化的趋势等。
柱状图
适合用于比较不同类别的属性值之间的差异。例如,我们可以通过柱状图来比较不同产品、不同地区或不同年份的销售情况、收益情况或其他相关指标。
散点图
适合用于可视化两个属性之间的关系。例如,我们可以通过散点图来展示身高与体重之间的关系、某产品价格与销量之间的关系等。
饼图
适合用于可视化各类别所占比例。例如,我们可以通过饼图来展示不同产品在销售总额中所占的比例,或者某个国家在全球经济体系中的占比等。
热力图
适合用于可视化二维表格中不同数值的差异。例如,我们可以通过热力图来展示不同国家在不同年份的 GDP 值,其中颜色的深浅代表 GDP 的大小。
2.7.2使用柱状图
1.展示泰坦尼克号数据集中男女中生存人数分布情况
sex = df.groupby('Sex')['Survived'].sum()#以性别进行分组,统计存活人数
sex.plot.bar()#进行柱状图展示
plt.title('survived_count')#标题设置
plt.show()
2.展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图
df.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')
#按照'Sex'和'Survived'两列进行分组,然后计算每个组中'Survived'列的数量
#unstack()函数是将分组后的结果进行重塑,使得每个组内的值成为新的列
#选择绘制堆叠柱形图
plt.title('survived_count')#标题设置
plt.ylabel('count')#y轴标签设置
3.展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况
pclass_sur = df.groupby(['Pclass'])['Survived'].value_counts()
#按照仓位等级进行分组,计算每个不同值有在该列中的个数
sns.countplot(x="Pclass",hue="Survived",data=df)
#用于绘制分类计数图,x为要可视化的分类变量,hue为指定分组的变量,data为数据来源
2.7.3使用折线图
1.展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况
fare = df.groupby(['Fare'])['Survived'].value_counts().sort_values(ascending=False)
#按票价进行分组,统计生存和死亡人数,并进行降序排序
fig = plt.figure(figsize=(20, 18))#设置画布大小
fare.plot(grid=True)#使用plot方法绘制折线图,并添加网格
plt.legend()#设置图例
plt.show()
2.7.4使用核密度图
1.展示泰坦尼克号数据集中不同仓位等级的人年龄分布情况
pclass = df.groupby('Pclass')['Age'].value_counts()
df.Age[df.Pclass == 1].plot(kind='kde')
df.Age[df.Pclass == 2].plot(kind='kde')
df.Age[df.Pclass == 3].plot(kind='kde')
#筛选出Pclass列值为?的所有行,然后绘制这些行的Age列的核密度估计图(Kernel Density Estimate, KDE)。
plt.xlabel('age')#x轴标签设置为age
plt.legend((1,2,3),loc='best')#添加图例,自动选择最佳位置放置图例
2.可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况
facet = sns.FacetGrid(df, hue="Survived",aspect=3)
#创建了一个FacetGrid对象,命名为facet,使用df作为数据源,并根据"Survived"列进行分组。
facet.map(sns.kdeplot,'Age',shade= True)
#绘制了年龄('Age')的核密度估计图,并设置了阴影效果。
facet.set(xlim=(0, text['Age'].max()))
#设置了x轴的范围为0到text['Age'].max(),即年龄的最大值
facet.add_legend()#添加图例