您的位置:首页 > 其它

跟着Datawhale动手学数据分析4

2020-08-25 19:33 155 查看

文章目录

数据可视化

最基本的可视化图案有哪些?

  1. 柱形图

展示多个分类的数据变化和同类别各变量之间的比较情况。 适用:对比分类数据。 局限:分类过多则无法展示数据特点。

  1. 条形图

类似柱状图,只不过两根轴对调了一下。

适用:类别名称过长,将有大量空白位置标示每个类别的名称。 局限:分类过多则无法展示数据特点 。

  1. 折线图

展示数据随时间或有序类别的波动情况的趋势变化。

适用:有序的类别,比如时间。 局限:无序的类别无法展示数据特点。

  1. 柱线图

结合柱状图和折线图在同一个图表展现数据。

适用:要同时展现两个项目数据的特点。 局限:有柱状图和折线图两者的缺陷。.

  1. 散点图

用于发现各变量之间的关系。

适用:存在大量数据点,结果更精准,比如回归分析。 局限:数据量小的时候会比较混乱。

  1. 饼图

用来展示各类别占比,比如男女比例。

适用:了解数据的分布情况。 缺陷:分类过多,则扇形越小,无法展现图表。

  1. 地图

用颜色的深浅来展示区域范围的数值大小。

适合:展现呈面状但属分散分布的数据,比如人口密度等。
局限:数据分布和地理区域大小的不对称。通常大量数据会集中在地理区域范围小的人口密集区,容易造成用户对数据的误解。

  1. 热力图

以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示。

适合:可以直观清楚地看到页面上每一个区域的访客兴趣焦点。 局限:不适用于数值字段是汇总值,需要连续数值数据分布。

  1. 矩形树图

展现同一层级的不同分类的占比情况,还可以同一个分类下子级的占比情况,比如商品品类等。

适用:展示父子层级占比的树形数据。 缺陷:不适合展现不同层级的数据,比如组织架构图,每个分类不适合放在一起看占比情况。

  1. 指标卡

突出显示一两个关键的数据结果,比如同比环比。

适合:展示最终结果和关键数据。 缺陷:没有分类对比,只展示单一数据。

  1. 词云

展现文本信息,对出现频率较高的“关键词”予以视觉上的突出,比如用户画像的标签。

适合:在大量文本中提取关键词。 局限:不适用于数据太少或数据区分度不大的文本。

  1. 仪表盘

展现某个指标的完成情况。

适合:展示项目进度。 局限:只适合展现数据的累计情况,不适用于数据的分布特征等。

  1. 雷达图

将多个分类的数据量映射到坐标轴上,对比某项目不同属性的特点。

适用:了解同类别的不同属性的综合情况,以及比较不同类别的相同属性差异。 局限:分类过多或变量过多,会比较混乱。

  1. 漏斗图

用梯形面积表示某个环节业务量与上一个环节之间的差异。

适用:有固定流程并且环节较多的分析,可以直观地显示转化率和流失率。 局限:无序的类别或者没有流程关系的变量。

  1. 瀑布图

采用绝对值与相对值结合的方式,展示各成分分布构成情况,比如各项生活开支的占比情况。

适合:展示数据的累计变化过程。 局限:各类别数据差别太大则难以比较。

  1. 桑葚图

一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,起始流量总和始终与结束流量总和保持平衡。比如能量流动等。

适合:用来表示数据的流向。 局限:不适用于边的起始流量和结束流量不同的场景。比如使用手机的品牌变化。

  1. 箱线图

是利用数据中的五个统计量:最小值、第一四分位数、中位数、第三四分位数与最大值来描述数据的一种方法。

适用:用来展示一组数据分散情况,特别用于对几个样本的比较。 局限:对于大数据量,反应的形状信息更加模糊。

可视化展示泰坦尼克号数据集中男女中生存人数分布情况(用柱状图试试)

sex = data.groupby('Sex')['Survived'].sum()
sex.plot.bar()
plt.title('survived_count')
plt.show()

可视化展示泰坦尼克号数据集中男女中生存人与死亡人数的比例图(用柱状图试试)

这个题目困扰了很久,没有彻底理解groupby的用法,在使用groupby时,并不有剔除多余的信息,而且对如何显示堆叠的图形不熟悉,开始做成了这样:

df2 = data.groupby(['Sex','Survived']).count().unstack()
df2.plot(kind='bar',stacked='True')


可以看到,多了许多列索引,答案则很好的解决了这个问题,但是开始我看成换行了,所以一直没发现问题所在。

data.groupby(['Sex','Survived'])['Survived'].count().unstack().plot(kind='bar',stacked='True')

可视化展示泰坦尼克号数据集中不同票价的人生存和死亡人数分布情况。(用折线图试试)

折线图是默认图表类型,因此这个任务的重点在于如何展示数据的分布情况。

pandas中的sort_values()函数原理类似于SQL中的order
by,可以将数据集依照某个字段中的数据进行排序,该函数即可根据指定列数据也可根据指定行的数据排序。

参数 说明
by 指定列名(axis=0或’index’)或索引值(axis=1或’columns’)
axis 若axis=0或’index’,则按照指定列中数据大小排序;若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0
ascending 是否按指定列的数组升序排列,默认为True,即升序排列
na_position {‘first’,‘last’},设定缺失值的显示位置
fare = data.groupby('Fare')['Survived'].value_counts().sort_values(ascending=False)
fig = plt.figure(figsize=(20, 18))
fare.plot(grid=True)
plt.legend()
plt.show()

可视化展示泰坦尼克号数据集中不同仓位等级的人生存和死亡人员的分布情况。(用柱状图试试)

假如直接用plt方法画柱状图,无法区分0,1两种状态。

pclass = data.groupby('Pclass')['Survived'].value_counts()
pclass.plot.bar()
plt.title('survived_count')
plt.show()

引入seaborn可以更好地解决这一问题。

Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。

Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。同时它能高度兼容numpy与pandas数据结构以及scipy与statsmodels等统计模式。

import seaborn as sns
sns.countplot(x="Pclass", hue="Survived", data=data)

可视化展示泰坦尼克号数据集中不同年龄的人生存与死亡人数分布情况。 ( 不限表达方式 )

使用折线图并不直观:

age = data.groupby('Age')['Survived'].value_counts().sort_values()
fig = plt.figure(figsize=(20, 18))
age.plot(grid=True)
plt.legend()
plt.show()

使用正态分布来描述:
sns.FacetGrid作用是使用数据集和用于构造网格的变量初始化对象,aspect 文档说是纵横比,是说每个小图的横轴长度和纵轴的比。
map

facet = sns.FacetGrid(data, hue="Survived",aspect=3)
facet.map(sns.kdeplot,'Age',shade= True)
facet.set(xlim=(0, data['Age'].max()))
facet.add_legend()

可视化展示泰坦尼克号数据集中不同仓位等级的人年龄分布情况

data.Age[data.Pclass == 1].plot(kind='kde')
data.Age[data.Pclass == 2].plot(kind='kde')
data.Age[data.Pclass == 3].plot(kind='kde')
plt.xlabel("age")
plt.legend((1,2,3),loc="best")

对这些数据分析结果的思考

主要针对存活情况与性别,年龄,票价,仓位等级等因素得相关性。
首先可以从数据上直观地感受到女性存活人数多于男性,然后根据存活/死亡比例,证明不是由于样本量不同引起;
从票价来看,低票价死亡人数较多,再结合仓位数据,等级3的舱位(低票价),总人数更多,其死亡比例也更高;
从年龄来看,死亡人数集中在青壮年,而乘客的年龄也是呈现出相应的趋势。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: