Python的pandas模块的运用之数据可视化

pandas之数据可视化

  • 一、散点图
  • 二、矩阵图
  • 三、折线图
  • 四、饼图
  • 五、柱形图与条形图

data都为数据框

一、散点图

import matplotlib
import matplotlib.pyplot as plt
# 配置主题颜色,注意RGB颜色范围为【0,1】
mainColor = (91/255, 155/255, 213/255, 1)
# 使用scatter绘制散点图
plt.scatter(
	data['广告费'],
	data['购买用户数'],
	# 点的颜色设置
	c = mainColor
)
# 通过字体路径和文字大小,生成字体属性,赋值给font变量
font = matplotlib.font_manager.FontProperties(
	fname='D:/1.otf',size=30
)

# 散点样式设置
# 打开一个新的绘图窗口
plt.figure()
# 粉色,作为不促销的点的颜色
pinlColor=(255/255,0/255,102/255,1)
# 蓝色,作为促销的点的颜色
blueColor= (91/255,155/255,213/255,1)
# 使用条件抽取的方法,把促销为是的数据过滤出来,把广告费用作为x轴
# 把购买的用户数作为Y轴绘制散点图,使用‘o’作为标记绘制的促销点,o表示实心点
plt.scatter(
	data[data['促销']=='是']['广告费用'],
	data[data['促销']=='是']['购买用户数'],
	c=pinkColor,
	marker='o',
	# 因为在设置渠道数的时候,直接设置,存在值太小点太小的情况,所以进行放大
	s=data[data['促销']=='是']['渠道数']*80
)
# 使用使用‘x’作为标记绘制的不促销点
plt.scatter(
	data[data['促销']=='否']['广告费用'],
	data[data['促销']=='否']['购买用户数'],
	c=pinkColor,
	marker='x',
	s=data[data['促销']=='否']['渠道数']*80
)
# 设置坐标轴标签及颜色和字体
plt.xlabel(
	'广告费用', 
	color=mainColor,
fontproperties=font
)
plt.ylabel(
	'购买用户数',
 	color=mainColor,
 	fontproperties=font
)
# 设置坐标轴的刻度样式,改变字体和颜色
plt.xticks(
	color=mainColor,
	fontproperties=font
)
plt.yticks(
	color=mainColor,
	fontproperties=font
)
# 为图像增加图例
legend = plt.legend(labels=['促销','不促销'],prop=font)

二、矩阵图

# 按照省份分组,对月消费进行均值统计
costAgg = data.groupby(
	by = '省份',
	as_index=False,
)['月消费'].agg('mean')
# 按照省份分组,对月流量进行均值统计
dataAgg = data.groupby(
	by = '省份',
	as_index=False,
)['月流量'].agg('mean')
# 把2个统计结果合并起来
addData = costAgg.merge(dataAgg)
import matplotlib
import matplotlib.pyplot as plt
# 用于点的标签的字体属性
font = matplotlib.font_manager.FontProperties(
	fname='D:/1.otf',size=20
)
# 生成字体属性,赋值给labelFont变量,用于坐标轴的标签
labelFont=matplotlib.font_manager.FontProperties(
	fname='D:/1.otf',size=35
)
# 蓝色,作为点的颜色
mainColor = (91/255,155/255,213/255,1)
# 灰色,作为文本的颜色
fontColor = (110/255,110/255,110/255,1)
# 创建一个绘图窗口
fig=plt.figure()
gap = 0.01
# 计算x轴的范围,预留出百分之1的空间,便于美观
xMin = aggData['月消费'].min()*(1-gap)
xMax = aggData['月消费'].max()*(1+gap)
# 计算y轴的范围,预留出百分之1的空间,便于美观
yMin = aggData['月流量'].min()*(1-gap)
yMax = aggData['月流量'].max()*(1+gap)
# 设置x轴和和y轴的坐标轴的范围
plt.xlim(xMin,xMax)
plt.ylim(yMin,yMax)
# 设置x轴和y轴的坐标轴的刻度,本例抹去所以的刻度
plt.xticks([])
plt.xticks([])
# 绘制散点
plt.scatter(
	aggData['月消费'],
	aggData['月流量'],
	s=90,marker = 'o',color=mainColor
)
# 设置坐标轴的标签
plt.xlabel(
	'人均月消费(元)',
	color=fontColor,
	fontproperties=labelFont
)
plt.ylabel(
	'人均月流量(MB)',
	color=fontColor,
	fontproperties=labelFont
)
# 绘制均值线
plt.vlines(
	x=data['月消费'].mean(),
	ymin=yMin,ymax=yMax,
	linewidth=1,color=mainColor
)
plt.vlines(
	y=data['月流量'].mean(),
	xmin=xMin,xmax=xMax,
	linewidth=1,color=mainColor
)
# 标准四个象限,分辨率不同,位置不同
plt.text(
	xMax - 0.5,yMax-5,
	'一',color=fontColor,fontsize=50
)
plt.text(
	xMin ,yMax-5,
	'二',color=fontColor,fontsize=50
)
plt.text(
	xMin,yMin,
	'三',color=fontColor,fontsize=50
)
plt.text(
	xMax - 0.5,yMin,
	'四',color=fontColor,fontsize=50
)

# 给点添加上标签
# 画标签,遍历数据的每一行
# 根据列名获取到数据对应的x轴和y轴的位置已经要绘制的省份
for i,r in aggData.iterrows():
	plt.text(
		# 前2个是x,y的位置,第三个是text
		r['月消费']+0.25,
		r['月流量']-1,
		r['省份'],
		color=fontColor,
		fontsize=30
	)

三、折线图

# 对日期格式进行转换
data['reg_date'] = pandas.to_datetime(
	data['reg_date']
)
# 按照注册日期列分组,按照ID列进行计数统计
ga = data.groupby(
	by=['reg_date'],as_index=False
)['id'].agg['count']
# 对数据库的列重命名
ga.columns = ['注册日期','注册用户数']

# 然后使用注册日期作为横轴,注册用户作为y轴,进行绘制折线图
import matplotlib
import matplotlib.pyplot as plt
mainColor=(91/255,155/255,213/255,1)
# 坐标轴刻度的字体
font = matplotlib.font_manager.FontProperties(
	fname='D:/1.otf',size=25
)
# 坐标轴标签的字体
labelFont = matplotlib.font_manager.FontProperties(
	fname='D:/1.otf',size=35
)
# 设置y轴的显示的范围
plt.ylim(0,500)
# 设置标题
plt.title('注册用户数', color=mainColor,fontproperties=labelFont)
# 设置坐标轴的标签
plt.xlabel('注册日期', color=mainColor,fontproperties=labelFont)
plt.ylabel('注册用户数', color=mainColor,fontproperties=labelFont)
# 设置坐标轴的刻度样式
plt.xticks(color=mainColor,fontproperties=font)
plt.yticks(color=mainColor,fontproperties=font)
# 绘制折线图,lw表示曲线的宽度
plt.plot(ga['注册日期'],ga['注册用户数'],'-',lw=8,color=mainColor)

四、饼图

ga = data.groupby(
	by=['gender']
)['id'].agg('count')
import matplotlib
import matplotlib.pyplot as plt
# 设置男性用户颜色
maleColor=(91/255,155/255,213/255,1)
# 设置女性用户颜色
female = (91/255,155/255,213/255,05)

font = matplotlib.font_manager.FontProperties(
	fname='D:/1.otf',size=25
)
# 设置横轴与纵轴等长的饼图
plt.axis('equql')
# 设置百分数的显示为保留一位小数,因为百分号已经被用于占位符
# 所以得用两个百分号来表示一个百分号
plt.pie(
	ga,
	labels=['女','男'],
	colors=[femaleColor,maleColor],
	autopct='%.2f%%'
	textprops={'fontproperties':font}
)

五、柱形图与条形图

result=data.groupby(
	by=['手机品牌'],as_index=False
)['月消费'],sum()
import matplotlib
import matplotlib.pyplot as plt
# 绘制一个新窗口
plt.figure()
# 生成x轴的位置,赋值给index
index = [1,2,3,4,5,6,7,8]
# 配置颜色
mainColor=(91/255,155/255,213/255,1)

font = matplotlib.font_manager.FontProperties(
	fname='D:/1.otf',size=20
)
# 对数据进行排序
sgb = result.sort_values(
	by='月消费',
	ascending=False
)
# 绘制柱形图
plt.bar(index,
	sgb['月消费']
	color=mainColor
	)
'''
# 对数据进行排序
sgb = result.sort_values(
	by='月消费',
	ascending=True
)
# 绘制条形图
plt.barh(
	sgb['月消费']
	color=mainColor
)
# 配置y轴刻度
plt.yticks(index,sgb.手机品牌,fontproperties=font)
'''
# # 配置x轴刻度
plt.xticks(index,sgb.手机品牌,fontproperties=font)


你可能感兴趣的:(python)