添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

15 Python数据可视化

'''
按照数据之间的关系,将可视化视图划分为四类:
1、比较:
    比较数据间各类别的关系,或随时间变化趋势,例如折线图
2、联系:
    变量之间的关系,例如散点图
3、构成:
    每个部分占整体的百分比,或随百分比变化,比如饼图
4、分布:
    关注单个/多个变量分布情况,比如直方图
# 1、散点图scatter plot,适合展示两个变量之间的关系。
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
# 模拟数据是1000个随机点。
N=1000
x=np.random.randn(N)
y=np.random.randn(N)
# x,y表示坐标,marker表示标记的符号样式。
# plt.scatter(x,y,marker='x')
# plt.show()  # matplotlib绘制,呈现长方形


df=pd.DataFrame({
    'x':x,
    'y':y
# sns.jointplot(x="x",
#               y="y",
#               data=df,
#               kind='scatter')  # scatter代表散点图、kde代表核密度图、hex代表Hexbin图,是直方图的二维模拟。
# plt.show() # Seaborn绘制,呈现正方形,而且给出了变量的分布情况
# 2、折线图
# 用来表示数据随着时间变化的趋势
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
x=[2010,2011,2012,2013,2014,2015,2016,2017]
y=[5,3,6,20,17,16,19,30]
# 使用matplotlib绘制:
# plt.plot(x,y)
# plt.show()
# 使用seaborn绘制
df=pd.DataFrame({
    'x':x,
    'y':y
# sns.lineplot(x="x",y="y",data=df)
# plt.show()
# 3、直方图
# 可以看到变量的数值分布
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
a=np.random.randn(100)
s=pd.Series(a)
# 使用matplotlib绘制直方图:
# plt.hist(s) # s是一维数组,bins=10代表直方图箱子数量是10,不写的话默认就是10.
# plt.show()
# 使用seaborn绘制直方图
# sns.distplot(s,bins=10,kde=True) # s是一维数组,bins是箱子数量,kde代表显示核密度估计,默认是True。
#                                  # 核密度估计是通过核函数来估计概率密度的方法。
# plt.show()
# 4、条形图
# 如果说直方图可以看到变量的数值分布,那么条形图可以帮我们查看类别的特征。
# 在条形图中,长条形的长度表示类别的频数,宽度表示类别。
import matplotlib.pyplot as plt
import seaborn as sns
x=['Cat1','Cat2','Cat3','Cat4','Cat5'] # 代表类别
y=[5,4,8,12,7] # 代表类别的频数
# 使用matplotlib绘制条形图:
# plt.bar(x,y)
# plt.show()
# 使用seaborn绘制条形图
# sns.barplot(x,y)
# plt.show()
# 5、箱线图
# 又称盒式图,由5个数值点组成:最大值max、最小值min、中位数median、上下四分位数Q3、Q1。
# 可以帮我们分析出数据的差异性、离散程度和异常值等。
data=np.random.normal(size=(10,4))  # 生成10行4列的随机数组
labels=['A','B','C','D']
# 使用matplotlib绘制条形图:
# plt.boxplot(data,labels=labels)
# plt.show()
# 使用seaborn绘制条形图
# df=pd.DataFrame(data,
#                 columns=labels)
# sns.boxplot(data=df)
# plt.show()
# 6、饼图
import matplotlib.pyplot as plt
nums=[25,37,32,27,25]
labels=['high-school',
        'Bachelor',
        'Master',
        'Ph.d',
        'Others']
# plt.pie(x=nums,
#         labels=labels)
# plt.show()
# 7、热力图
# heat map,是一种矩阵表示方法,通过颜色直观得知某个位置上数值的大小。
# 这里我们用Seaborn中的sns.heatmap(data)函数,seaborn自带了数据集flights,记录了1949年-1960年期间,每个月的航班乘客数量。
import matplotlib.pyplot as plt
import seaborn as sns
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
flights=sns.load_dataset("flights")
data=flights.pivot('year',
                   'month',
                   'passengers')
# sns.heatmap(data)
# plt.show()
# 可观察到不同年份不同月份的乘客数量变化情况,其中颜色越浅代表乘客数量越多。
# 8、蜘蛛图
# 是一种展示一对多关系的方法,在蜘蛛图中一个变量相对于另一个变量的显著性是清晰可见的。
# 以王者荣耀的玩家战力图为例。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.font_manager import FontProperties
labels=np.array([u'推进',u'KDA',u'生存',u'团战',u'发育',u'输出'])
stats=[83,61,95,67,76,88]
# 准备角度和战斗值
angles=np.linspace(0,2*np.pi,len(labels),endpoint=False)
stats=np.concatenate((stats,[stats[0]]))
angles=np.concatenate((angles,[angles[0]]))
# 使用matplotlib绘制蜘蛛图:
# fig=plt.figure()  # 创建一个空白的figure对象,相当于画了一个白板。
# ax=fig.add_subplot(111,polar=True) # 把画板划分成1行一列
# ax.plot(angles,stats,'o-',linewidth=2)   # 连线
# ax.fill(angles,stats,alpha=0.25)         # 上色
# 设置中文字体
# font=FontProperties(fname=r"/Users/dingding/Downloads/DejaVuSans-Bold.ttf",size=14)
# ax.set_thetagrids(angles*180/np.pi,labels,FontProperties=font)
# plt.show()
# 9、二元变量分布
# 看两个变量之间的关系,散点图就是一种二元变量分布。
# 这里我们使用Seaborn自带的数据集tips,这个数据集记录了不同顾客在餐厅的消费账单及消费情况。
import matplotlib.pyplot as plt
import seaborn as sns
tips=sns.load_dataset('tips')
print(tips.head(5))
# sns.jointplot(x="total_bill",y="tip",data=tips,kind="scatter")
# sns.jointplot(x="total_bill",y="tip",data=tips,kind="kde")
# sns.jointplot(x="total_bill",y="tip",data=tips,kind="hex")
# plt.show()
# 报错:
# ValueError: Could not interpret input 'tips'
# 是因为输入的数据中不包含该字段tips,应该是tip。
hex
kde
scatter
# 10、成对关系
# 如果要探索数据集中多个成对双变量的分布,可以直接采用sns.pairplot()函数,它会展示出DataFrame中每对变量的关系
# 另外在对角线上,你能看到每个变量自身作为单变量的分布情况。是探索性分析中的常用函数,可以很快帮助我们理解变量对之间的关系。
# 这里我们用Seaborn中自带的iris数据集,这个数据集也叫做鸢尾花数据集:
# 鸢尾花分成三个品种Setosa、Versicolour和Virginica,数据集中,针对每一个品种,都有50个数据,
# 每个数据中包括4个属性,分别是花萼长度、宽度、花瓣长度、宽度。通过这些数据,需要你来预测鸢尾花卉属于哪一个品种。