数据可视化_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()
文章图片
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()
文章图片
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)# 给柱状图添加文字注释
文章图片
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)
文章图片
柱状图延申图表 条形图 → 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')# 给柱状图添加文字注释
文章图片
堆叠图 → 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)
文章图片
# 水平堆叠
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))
文章图片
折线图 → 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)
文章图片
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)
文章图片
直方图 → plt.hist() 直方图:又称质量分布图,是一种统计报告图,一般用横轴表示数据类型,纵轴表示分布情况。
适用场景:观察数据集的分布情况
优势:直观观察数据形状,突出显示数据的中心趋势,确定数据样本的分布是对称还是偏斜
# 直方图绘制temp
data['temp'].hist(bins=30,figsize=(8,6),edgecolor='black')
# bins,设置箱子数量
# edgecolor,设置边框颜色plt.title('直方图',fontsize=18,pad=12)
文章图片
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时,和直方图一起使用
文章图片
饼图 → 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)
文章图片
面积图 → 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)
文章图片
散点图 → 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)
文章图片
散点图延伸图 气泡图 → 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)
文章图片
散点矩阵图 → 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),该值越大,留白距离越大,图像远离坐标原点
文章图片
箱线图 → 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)
文章图片
# plt.boxplot()箱线图分组汇总
season = data[['season','casual','registered']]
season.boxplot(by='season',figsize=(12,12),sym='+')
文章图片
# plt.plot.box()
df.plot.box(figsize=(8,6),sym='+')
plt.title('箱线图B',fontsize=18,pad=12)
文章图片
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 为什么孩子一定要学会可视化思维!
- 使用协程爬取网页,计算网页数据大小
- Java|Java基础——数组
- Python数据分析(一)(Matplotlib使用)
- Jsr303做前端数据校验
- Spark|Spark 数据倾斜及其解决方案
- 数据库设计与优化
- 爬虫数据处理HTML转义字符
- 数据库总结语句