数据可视化_matplotlib

# 设置cell多行输出from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = 'all' #默认为'last'# 导入相关库 import numpy as np import pandas as pd import matplotlib.pyplot as plt import warnings import oswarnings.filterwarnings('ignore') os.chdir(r'E:\python_learn\data\data_for_kaggle')

file_name = 'kaggle_bike_train.csv' data = https://www.it610.com/article/pd.read_csv(file_name) data.head()

数据可视化_matplotlib
文章图片
data.isna().sum().sum()# 无缺失 data.info()

0 RangeIndex: 10886 entries, 0 to 10885 Data columns (total 12 columns): datetime10886 non-null object season10886 non-null int64 holiday10886 non-null int64 workingday10886 non-null int64 weather10886 non-null int64 temp10886 non-null float64 atemp10886 non-null float64 humidity10886 non-null int64 windspeed10886 non-null float64 casual10886 non-null int64 registered10886 non-null int64 count10886 non-null int64 dtypes: float64(3), int64(8), object(1) memory usage: 1020.6+ KB

data['datetime']=pd.to_datetime(data['datetime']) data['month'] = data['datetime'].dt.month data['weekday'] = data['datetime'].dt.weekday_name.str[:4] data.head() data.info()

数据可视化_matplotlib
文章图片
image.png 柱状图 → plt.plot(kind='bar')/plt.bar() 柱状图:是一种以长方形的长度为变量的统计图表。长条图用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。
适用场景:适用场合是二维数据集(每个数据点包括两个值x和y),但只有一个维度需要比较,用于显示一段时间内的数据变化或显示各项之间的比较情况。
优势:柱状图利用柱子的高度,反映数据的差异,肉眼对高度差异很敏感。
劣势:柱状图的局限在于只适用中小规模的数据集。
data_m = data.groupby('month').mean()['count']# 按月统计租车量

# 柱状图绘制按月统计租车量count# 单系列柱状图 data_m.plot(kind='bar',color='r',alpha=0.5,width=0.8,figsize=(12,8),rot=45)# data_m 为series,series.plot() plt.title('单系列柱状图',fontsize=18,pad=12)# 设置标题 plt.ylabel('y轴标签设置')# 设置y轴标签,x轴标签→plt.xlabel() plt.grid(True,ls='--',lw=0.8,alpha=0.5,color='gray',axis='y')# 设置网格,axis='y',只显示y轴网格,默认xy都显示 plt.ylim([0,300])# 设置y轴标尺的范围for x,y in zip(range(len(data_m)),data_m): plt.text(x,y,'%.f'%y,ha='center',va='bottom',fontsize=12)# 给柱状图添加文字注释

数据可视化_matplotlib
文章图片
output_6_16.png
# 多系列柱状图 data_m_2 = data.groupby('month',as_index=False).mean()[['casual','registered']]

data_m_2.plot(kind='bar',figsize=(12,8),width=0.8)for i,j in zip(range(len(data_m_2)),data_m_2['casual']): plt.text(i-0.2,j+3,'%.f'%j,color='black',ha='center',va='center_baseline',fontsize=12) for i,j in zip(range(len(data_m_2)),data_m_2['registered']): plt.text(i+0.2,j+2,'%.f'%j,color='black',ha='center',va='center_baseline',fontsize=12)plt.legend(loc=0) # 设置图例,loc=0自定适配位置 plt.title('多系列柱状图',fontsize=18,pad=12)

数据可视化_matplotlib
文章图片
柱状图延申图表 条形图 → plt.plot(kind='barh')
条形图:是用宽度相同的条形的高度或长短来表示数据多少的图形,与柱状图类似,条形图纵置就是柱状图
适用场景:显示各个项目之间的比较情况,和柱状图类似的作用
优势:每个条都清晰表示数据,直观;易于比较数据之间的差别
# 条形图绘制按月统计租车量count data_m.plot(kind='barh',figsize=(12,8),alpha=0.5,width=0.8,color='b') plt.xlabel('count') plt.title('柱状图延申图-条形图',fontsize=18,pad=12)# 给条形图标注文字注释略有不同 for x,y in zip(data_m,range(len(data_m))): plt.text(x,y,'%.f'%x,ha='left',va='center',fontsize=12,color='r')# 给柱状图添加文字注释

数据可视化_matplotlib
文章图片
堆叠图 → plt.plot(kind='bar/barh',stacked=True)
堆叠图:显示单个项目与整体之间的关系。
优势:堆叠图能够使人们一眼看出各个数据的大小,易于比较数据之间的差别。利用条状的长度,反映数据的差异,肉眼对长短差异很敏感,可以使得数据更加直观,且堆叠图不仅仅可以直观的看出每个系列的值,还能够反映出系列的总和,尤其是当需要看某一单位的综合以及各系列值的比重时,最适合使用堆叠图。
# 垂直堆叠 data_m_2.plot(kind='bar',stacked=True,figsize=(12,8),alpha=0.7) plt.xlabel('month') plt.ylabel('count') plt.title('柱状图延伸图-堆叠图',fontsize=18,pad=12) for i,j in zip(range(len(data_m_2)),data_m_2['casual']): plt.text(i,j,'%.f'%j,color='black',ha='center',va='top',fontsize=12) for i,j in zip(range(len(data_m_2)),data_m_2['registered']): plt.text(i,j,'%.f'%j,color='black',ha='center',va='center_baseline',fontsize=12)

数据可视化_matplotlib
文章图片
# 水平堆叠 data_m_2.plot(kind='barh',stacked=True,figsize=(12,8),alpha=0.7,width=0.7) plt.xlabel('month') plt.ylabel('count') plt.title('柱状图延伸图-堆叠图',fontsize=18,pad=12)for i,j in zip(data_m_2['casual'],range(len(data_m_2))): plt.text(i,j,'%.f'%i,color='black',ha='right',va='center',fontsize=12) for i,j in zip(data_m_2['registered'],range(len(data_m_2))): plt.text(i,j,'%.f'%i,color='black',ha='left',va='center',fontsize=12) u = data_m.mean() plt.axvline(u,ls='--',c='b',lw=1,alpha=0.8,) # 添加垂直辅助线 plt.text(u,0,'%.2f'%u,color='blue',fontsize=14,bbox=dict(facecolor='yellow', alpha=0.5))

数据可视化_matplotlib
文章图片
折线图 → plt.plot(kind='line') 折线图:折线图可以显示随时间而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势。
适用场景: 折线图适合二维的大数据集,还适合多个二维数据集的比较。
优势:容易反应出数据变化的趋势。
# 折线图绘制按月统计租车量countdata_m.plot(figsize=(8,6),style='bo--')# 设置style可同时设置线段颜色,标记,和线段样式,但必须把颜色写在最前面 u = data_m.mean() plt.xlim([1,12]) plt.axhline(u,ls='--',c='r',lw=0.8,alpha=0.5,) # 添加水平辅助线 plt.text(data_m.index[-1]+0.2,u,'%.2f'%u,color='r',fontsize=14)# 标注 plt.title('折线图',fontsize=18,pad=12)

数据可视化_matplotlib
文章图片
data_m_2.plot(figsize=(8,6),style='x--') plt.legend(loc=0) ma = data_m_2['registered'].max() plt.grid(True,linestyle='--',linewidth=0.5,color='gray',axis='y',alpha=0.5) plt.text(data_m_2.index[5],ma,'%.2f'%ma,fontsize=12,bbox=dict(facecolor='red', alpha=0.5))# 标注某个点 plt.title('折线图',fontsize=18,pad=12)

数据可视化_matplotlib
文章图片
直方图 → plt.hist() 直方图:又称质量分布图,是一种统计报告图,一般用横轴表示数据类型,纵轴表示分布情况。
适用场景:观察数据集的分布情况
优势:直观观察数据形状,突出显示数据的中心趋势,确定数据样本的分布是对称还是偏斜
# 直方图绘制temp data['temp'].hist(bins=30,figsize=(8,6),edgecolor='black') # bins,设置箱子数量 # edgecolor,设置边框颜色plt.title('直方图',fontsize=18,pad=12)

数据可视化_matplotlib
文章图片
data['temp'].hist(bins=30,figsize=(8,6),density=True) # 参数density是关键,y轴会按百分比表示 # density=False,表示决定将y轴的取值范围落在某个箱子中的元素的个数,即系y轴表示频率次数 # density=True,表示决定将y轴的取值范围落在某个箱子中的元素的个数占总体的百分比,即系y轴表示百分比 plt.grid(False) plt.title('直方图',fontsize=18,pad=12)data['temp'].plot(kind='kde',color='r')# 密度图在直方图参数density=True时,和直方图一起使用

数据可视化_matplotlib
文章图片
饼图 → plt.pie() 适用场景:显示各项的大小与各项总和的比例。适用简单的占比比例图,在不要求数据精细的情况适用。
优势:明确显示数据的比例情况,尤其合适渠道来源分析等场景。
劣势:数据类别较多时不适用
参数:
x :(每一块)的比例,如果sum(x) > 1会使用sum(x)归一化;
labels :(每一块)饼图外侧显示的说明文字;
explode :(每一块)离开中心距离;
startangle :起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起;
shadow :在饼图下面画一个阴影。默认值:False,即不画阴影;
labeldistance :label标记的绘制位置,相对于半径的比例,默认值为1.1, 如<1则绘制在饼图内侧;
autopct :控制饼图内百分比设置,可以使用format字符串或者format function
'%1.1f'指小数点前后位数(没有用空格补齐);
pctdistance :类似于labeldistance,指定autopct的位置刻度,默认值为0.6;
radius :控制饼图半径,默认值为1;
counterclock :指定指针方向;布尔值,可选参数,默认为:True,即逆时针。将值改为False即可改为顺时针。
wedgeprops :字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。例如:wedgeprops={'linewidth':3}设置wedge线宽为3。
textprops :设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。传递给text对象的字典参数。
center :浮点类型的列表,可选参数,默认值:(0,0)。图标中心位置。
frame :布尔类型,可选参数,默认值:False。如果是true,绘制带有表的轴框架。
rotatelabels :布尔类型,可选参数,默认为:False。如果为True,旋转每个label到指定的角度。

user_count = data[['casual','registered']].sum() user_count

casual392135 registered1693341 dtype: int64

plt.figure(figsize=(8,6)) explode = [0.1,0] labels = user_count.index plt.pie(user_count,explode=explode,autopct='%.2f%%',labels=labels,pctdistance=1.3,labeldistance=0.5,) # explode,距离圆中心的距离 # labels,(每一块)饼图外侧显示的说明文字 # autopct在饼图中,显示百分数 plt.title('饼图',fontsize=18,pad=12)

数据可视化_matplotlib
文章图片
面积图 → plt.stackplot() 适用场景:强调数量随时间而变化的程度,也可用于引起人们对总值趋势的注意
data_stack = data.groupby('month').mean()[['casual','registered','count']] x = data_stack.index y = data_stack['casual'] y1 = data_stack['registered'] y2 = data_stack['count'] plt.figure(figsize=(12,6)) plt.stackplot(x,y,y1,y2,alpha=0.6,labels=data_stack.columns) plt.xlim([1,12]) plt.title('面积图',fontsize=18,pad=12) plt.legend(loc=0)

数据可视化_matplotlib
文章图片
散点图 → plt.scatter(x,y) 【数据可视化_matplotlib】适用场景:显示若干数据系列中各数值之间的关系,类似XY轴,判断两变量之间是否存在某种关联。散点图适用于三维数据集,但其中只有两维需要比较。
优势:对于处理值的分布和数据点的分簇,散点图都很理想。如果数据集中包含非常多的点,那么散点图便是最佳图表类型。
劣势:在点状图中显示多个序列看上去非常混乱。
x = np.random.rand(1000) y = np.random.randn(1000)*10 plt.figure(figsize=(8,6)) plt.scatter(x,y,color='r',alpha=0.5) plt.title('散点图',fontsize=18,pad=12)

数据可视化_matplotlib
文章图片
散点图延伸图 气泡图 → plt.scatter(x,y,s)
气泡图:是可用于展示四个变量之间的关系。它与散点图类似,绘制时将一个变量放在横轴,另一个变量放在纵轴,而第三个变量则用气泡的大小来表示,第四个变量用气泡颜色深浅来表示。气泡图与散点图相似,不同之处在于:气泡图允许在图表中额外加入一个表示大小的变量进行对比。
plt.scatter(x,y,s)的参数:
x,y 输入数据
s,用于调整点的大小,形成气泡图
c,用于调整颜色的深浅

x = np.random.randn(1000) y = np.random.randn(1000) plt.figure(figsize=(12,8)) plt.scatter(x,y,s=np.random.randn(1000)*100,c=y,cmap='Blues',edgecolor='black',alpha=0.5) plt.title('气泡图',fontsize=18,pad=12)

数据可视化_matplotlib
文章图片
散点矩阵图 → pd.scatter_matrix()
df = pd.DataFrame(np.random.randn(100,4),columns=list('ABCD')) pd.scatter_matrix(df,figsize=(12,12),marker='o',diagonal='kde',range_padding=0.1) # diagonal='hist' 设置对角线图表形式,默认直方图hist,kde为密度图 # range_padding=0.1,图像在x轴、y轴原点附近的留白(padding),该值越大,留白距离越大,图像远离坐标原点

数据可视化_matplotlib
文章图片
箱线图 → plt.boxplot()/plt.plot.box() 箱型图:是一种用作显示一组数据分散情况资料的统计图。主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。箱线图作用非常广泛,可检测异常值以及用于观察数据形状、偏态和尾重。
# plt.boxplot() df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E']) plt.figure(figsize=(10,4)) # 创建图表、数据f = df.boxplot(sym = 'o',# 异常点形状,参考marker vert = True,# 是否垂直 whis = 1.5,# IQR,默认1.5,也可以设置区间比如[5,95],代表强制上下边缘为数据95%和5%位置 patch_artist = True,# 上下四分位框内是否填充,True为填充 meanline = False,showmeans=True,# 是否有均值线及其形状 showbox = True,# 是否显示箱线 showcaps = True,# 是否显示边缘线 showfliers = True,# 是否显示异常值 notch = False,# 中间箱体是否缺口 return_type='dict'# 返回类型为字典 ) plt.title('箱线图A',fontsize=18,pad=12)

数据可视化_matplotlib
文章图片
# plt.boxplot()箱线图分组汇总 season = data[['season','casual','registered']] season.boxplot(by='season',figsize=(12,12),sym='+')

数据可视化_matplotlib
文章图片
# plt.plot.box() df.plot.box(figsize=(8,6),sym='+') plt.title('箱线图B',fontsize=18,pad=12)

数据可视化_matplotlib
文章图片

    推荐阅读