<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 seaborn的绘图函数练习
处理一组数据时，首先要做的第一件事是了解变量是如何分布的
Step1:  核密度KDE的估计是对每个rug进行估计，然后把所有的KDE曲线加起来，之后进行归一化，得到所有的数据的平均KDE曲线
Step2:  还可以使用distplot()拟合参数分布到数据集，并直观地评估它与观察数据的对应关系
Step3:  可视化数据集中的成对关系¶
要在数据集中绘制多个成对的双变量分布，可以使用该pairplot()函数。
这将创建一个轴矩阵并显示DataFrame中每对列的关系。默认情况下，它也绘制每个变量在对角轴上的单变量分布
Step4:  用分类数据绘图
Step5:  在一个条形图中，散点图通常会重叠。这使得很难看到数据的完整分布。一个简单的解决方案是使用一些随机的“抖动”来调整位置（仅沿分类轴）
Step6:  一种不同的方法是使用函数swarmplot()，该函数将分类轴上的每个散点图点与避免重叠点的算法对齐
Step7:  类别内观察变量的分布
Step8:  Violinplots
A different approach is a violinplot(), which combines a boxplot with the kernel density estimation procedure described
Step9:  类别内的统计估计
A special case for the bar plot is when you want to show the number of observations in each category rather than computing a statistic for a second variable. This is similar to a histogram over a categorical, rather than quantitative, variable. In seaborn, it’s easy to do so with the countplot() function
Step10:  绘制“宽格式”数据
虽然使用“长格式”或“整洁”数据是优选的，但是这些功能也可以应用于各种格式的“宽格式”数据，
包括pandas DataFrame或二维numpy数组阵列。这些对象应该直接传递给数据参数
Step11:  绘制多层面板分类图
<ASSISTANT_TASK:>
Python Code:
import numpy as np
import pandas as pd
from scipy import stats, integrate
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(color_codes=True)
np.random.seed(sum(map(ord, "distributions")))
x = np.random.normal(size=100) # 单变量分布将绘制 直方图，并绘制 KDE （核心密度函数）
sns.distplot(x) # 分布绘制
plt.show()
sns.distplot(x, kde=False, rug=True) # 去除密度曲线并在每个观测点绘制一个小的垂直刻度
# 可以使用该rugplot()功能制作地毯本身，但它也可用于distplot()
plt.show()
sns.distplot(x, bins=20, kde=False, rug=True) # 一共可以分为20个段
plt.show()
Explanation: seaborn的绘图函数练习
处理一组数据时，首先要做的第一件事是了解变量是如何分布的
End of explanation
sns.kdeplot(x, shade=True) # KDE曲线绘制
plt.show()
Explanation: 核密度KDE的估计是对每个rug进行估计，然后把所有的KDE曲线加起来，之后进行归一化，得到所有的数据的平均KDE曲线
End of explanation
sns.set_style("whitegrid")
x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma)
plt.show()
# 使双变量分布可视化的最熟悉的方法是散点图，其中每个观察点都以x和y值的点显示。这对于两个方面的rug是分不开的。
# 您可以使用matplotlib plt.scatter函数绘制一个散点图，它也是该jointplot()函数显示的默认类型：
sns.set()
mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
print(df)
sns.jointplot(x="x", y="y", data=df)
plt.show()
# The bivariate analogue of a histogram is known as a “hexbin” plot, because it shows the counts 
# of observations that fall within hexagonal bins. This plot works best with relatively large datasets. 
# It’s available through the matplotlib plt.hexbin function and as a style in jointplot(). It looks best with a white background:
# 直方图的二元绘制，在数据量大的时候更有效
x, y = np.random.multivariate_normal(mean, cov, 1000).T
with sns.axes_style("white"):
    sns.jointplot(x=x, y=y, kind="hex", color="k")
plt.show()
sns.jointplot(x="x", y="y", data=df, kind="kde") # 高维的同样可以绘制 KDE
plt.show()
Explanation: 还可以使用distplot()拟合参数分布到数据集，并直观地评估它与观察数据的对应关系
End of explanation
iris = sns.load_dataset("iris")
sns.pairplot(iris)
plt.show()
Explanation: 可视化数据集中的成对关系¶
要在数据集中绘制多个成对的双变量分布，可以使用该pairplot()函数。
这将创建一个轴矩阵并显示DataFrame中每对列的关系。默认情况下，它也绘制每个变量在对角轴上的单变量分布
End of explanation
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
titanic = sns.load_dataset("titanic")
tips = sns.load_dataset("tips")
iris = sns.load_dataset("iris")
sns.stripplot(x="day", y="total_bill", data=tips) # 分类散点图
plt.show()
Explanation: 用分类数据绘图
End of explanation
sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)
plt.show()
Explanation: 在一个条形图中，散点图通常会重叠。这使得很难看到数据的完整分布。一个简单的解决方案是使用一些随机的“抖动”来调整位置（仅沿分类轴）
End of explanation
sns.swarmplot(x="day", y="total_bill", data=tips) # 尽量分散的方式绘制
plt.show()
# 添加一个新的分类变量
sns.swarmplot(x="day", y="total_bill", hue="sex", data=tips) # hue 参数新增一个分类变量
plt.show()
# In general, the seaborn categorical plotting functions try to infer the order of categories from the data.
# If your data have a pandas Categorical datatype, then the default order of the categories can be set there.
# For other datatypes, string-typed categories will be plotted in the order they appear in the DataFrame,
# but categories that look numerical will be sorted
sns.swarmplot(x="size", y="total_bill", hue="sex", data=tips)
plt.show()
# 可以调整方向
sns.swarmplot(y="day", x="total_bill", hue="sex", data=tips)
plt.show()
Explanation: 一种不同的方法是使用函数swarmplot()，该函数将分类轴上的每个散点图点与避免重叠点的算法对齐
End of explanation
sns.boxplot(x="day", y="total_bill", hue="time", data=tips) # 箱线图
plt.show()
Explanation: 类别内观察变量的分布
End of explanation
sns.violinplot(x="total_bill", y="day", hue="time", data=tips)
plt.show()
sns.violinplot(y="total_bill", x="day", hue="time", data=tips,split=True)
plt.show()
sns.violinplot(x="day", y="total_bill", hue="sex", data=tips,
               split=True, inner="stick", palette="Set3") # 画直方图而不是箱线图
plt.show()
# 可以相互结合
sns.violinplot(x="day", y="total_bill", data=tips, inner=None) # 默认的inner 是箱线图
sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.5)
plt.show()
Explanation: Violinplots
A different approach is a violinplot(), which combines a boxplot with the kernel density estimation procedure described
End of explanation
sns.countplot(x="deck", data=titanic, palette="Greens_d")
plt.show()
sns.pointplot(x="sex", y="survived", hue="class", data=titanic) # 竖线表示 置信区间
plt.show()
sns.pointplot(x="class", y="survived", hue="sex", data=titanic,
              palette={"male": "g", "female": "m"},
              markers=["^", "o"], linestyles=["-", "--"])
plt.show()
Explanation: 类别内的统计估计
A special case for the bar plot is when you want to show the number of observations in each category rather than computing a statistic for a second variable. This is similar to a histogram over a categorical, rather than quantitative, variable. In seaborn, it’s easy to do so with the countplot() function:
End of explanation
sns.boxplot(data=iris, orient="h")
plt.show()
Explanation: 绘制“宽格式”数据
虽然使用“长格式”或“整洁”数据是优选的，但是这些功能也可以应用于各种格式的“宽格式”数据，
包括pandas DataFrame或二维numpy数组阵列。这些对象应该直接传递给数据参数
End of explanation
sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips, kind="bar") # 带有误差线
tips = sns.load_dataset("tips")
print(tips.describe())
plt.show()
sns.factorplot(x="day", y="total_bill", hue="smoker", #　绘制多列数据
               col="time", data=tips, kind="swarm")
plt.show()
Explanation: 绘制多层面板分类图
End of explanation
<END_TASK>