python 绘制和密度图笔记

Python016

python 绘制和密度图笔记,第1张

import pandasas pd

import numpyas np

import seabornas sns

import matplotlib.pyplotas plt

pd.set_option('display.max_columns', 10000)

pd.set_option('display.max_rows', 10000000000)

pd.set_option('display.width', 100000)

income = pd.read_excel(r'D:\bigData\0629demo\dataSource\income.xlsx')

fill_data = income.fillna(value={'workclass': income.workclass.mode()[0], 'occupation': income.occupation.mode()[0],

                                'native-country': income['native-country'].mode()[0]}, inplace=True)

# print(income.apply(lambda x: np.sum(x.isnull())))

# print(income)

print(income.describe())

print(income.describe(include=['object']))

# 设置绘图风格

plt.style.use('ggplot')

# 设置多图形组合

fig, axes = plt.subplots(2, 1)

# 绘制不同收入水平下的年龄核密度图

# kind='kde', label='<=50K', ax=axes[0], legend=True, linestyle='-'

# kind='kde', label='>50K', ax=axes[0], legend=True, linestyle='--'

income['age'][income.income ==' <=50K'].plot(kind='kde', ax=axes[0], label='<=50K', legend=True, linestyle='-')

income['age'][income.income ==' >50K'].plot(kind='kde', ax=axes[0], label='>50K', legend=True, linestyle='--')

# 绘制不同收入水平下的周工作小时数核密度图

# kind='kde', label='<= 50K', ax=axes[1], legend=True,  linestyle='-'

# kind='kde', label='>50K', ax=axes[1], legend=True, linestyle='--'

income['hours-per-week'][income.income ==' <=50K'].plot(kind='kde', label='<= 50K', ax=axes[1], legend=True,

                                                        linestyle='-')

income['hours-per-week'][income.income ==' >50K'].plot(kind='kde', label='>50K', ax=axes[1], legend=True,

                                                        linestyle='--')

plt.show()

# 构造不同收入水平下各种族人数的数据

race = pd.DataFrame(income.groupby(by=['race', 'income']).agg(np.size).loc[:, 'age'])

# 重设行索引

race = race.reset_index()

# 变量重命名

race.rename(columns={'age':'counts'}, inplace=True)

print(race)

# 排序

race.sort_values(by=['race', 'counts'], ascending=False, inplace=True)

# 构造不同收入水平下各家庭关系人数的数据

relationship = pd.DataFrame(income.groupby(by=['relationship', 'income']).agg(np.size).loc[:, 'age'])

relationship = relationship.reset_index()

relationship.rename(columns={'age':'counts'}, inplace=True)

relationship.sort_values(by=['relationship', 'counts'], ascending=False, inplace=True)

plt.figure(figsize=(15, 10))

sns.barplot(x='race', y='counts', hue='income', data=race)

plt.show()

plt.figure(figsize=(15, 10))

sns.barplot(x='relationship', y='counts', hue='income', data=relationship)

plt.show()

制作分布图类似密度图,在python中利用pandas来提取分布数据是比较方便的。主要用到pandas的cut和groupby等函数。

官方文档链接

主要参数为x和bins。

x为数据源,数组格式的都支持,list,numpy.narray, pandas.Series。

bins可以为int,也可以为序列。

我们定义bins为一个序列,默认为左开右闭的区间:

对言值列按cats做groupby,然后调用get_stats统计函数,再用unstack函数将层次化的行索引“展开”为列。

G2在之前的文章中有介绍,文章 《python结合G2绘制精美图形》 。

一句话绘制出来,但具体的区间段难以区分出来。

bokeh是python的一个优秀的绘图工具包,与pandas结合的比较好。 bokeh文档

作者原文链接: python制作分布图

Python有很多经典的数据可视化库,比较经典的数据可视化库有下面几个。

matplotlib

是Python编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+,向应用程序嵌入式绘图提供了应用程序接口。

pyplot 是 matplotlib 的一个模块,它提供了一个类似 MATLAB 的接口。 matplotlib 被设计得用起来像 MATLAB,具有使用 Python 的能力。

优点:绘图质量高,可绘制出版物质量级别的图形。代码够简单,易于理解和扩展,使绘图变得轻松,通过Matplotlib可以很轻松地画一些或简单或复杂的图形,几行代码即可生成直方图、条形图、散点图、密度图等等,最重要的是免费和开源。

pandas

Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。需要说明的是它不是“熊猫”,名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)。

优点:是Python的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观的处理关系型、标记型数据。对于数据分析专业人士,它是数据分析及可视化的利器。

seaborn

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

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

优点:matplotlib高度封装,代码量少,图表漂亮。比起matplotlib具有更美观、更现代的调色板设计等优点。scikit-plot

这是一个跟机器学习有效结合的绘图库。想要深入学习的小伙伴参见其github仓库,这里不再赘述了。

优点:Scikit-Plot是由ReiichiroNakano创建的用在机器学习的可视化工具,能最快速简洁的画出用Matplotlib要写很多行语句才能画出的图。关键是对于机器学习相关可视化处理,该库有较好的支持。

Networkx

networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法。图是由顶点、边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系。顶点和边也可以拥有更多的属性,以存储更多的信息。

优点:用于创建、操纵和研究复杂网络的结构、以及学习复杂网络的结构、功能及其动力学。

上面是我的回答,希望对您有所帮助!