前言
数据可视化是数据分析必不可少的方法之一,这种方法让无聊的数据“活”了起来,非常鲜明地表达出数据的变化规律、分布情况等等。
现在我提供一个数据,是某个地区的六千条销售数据。
数据链接:pan.baidu.com/s/1lAT99Dqx… 提取码:rwgy
接下来根据此数据介绍常用的的几种图,包括柱状图、折线图、饼状图、气泡图、热力图、词云图。
一、绘制柱状图
柱状图可以对比不同物质的数据量的大小。
绘图使用的是python中常用的matplotlib包,编写简单,绘图比较方便。
现针对数据提出要求:绘制3月份销量前5的商品销量柱状图。
- 加载必要的包
import pandas as pd #用于读取数据
import matplotlib.pyplot as plt #用于绘图
- 读取数据
path='../data/数据.csv'
f=open(path)
data=pd.read_csv(f)
为什么先用open函数打开,再用pd.read_csv再打开一遍?是不是浪费?其实单是其中一种方法即可读取数据,但是使用其中一种方法经常出现读取不了数据的问题,二者结合不会再出现问题。
- 获取3月份的数据
data['支付时间'] = pd.to_datetime(data['支付时间']) #转化时间格式
month3_data=data[data['支付时间'].dt.month==3] #3月份整体数据 #产生的数据为series类型,包含两列信息
首先是将表格中的时间格式由原来的文本格式转化为可以直接使用的date格式,然后获取3月份整体数据
- 获取销量前5的商品
amount=month3_data['商品'].value_counts() #统计所有商品销量,统计完成后自动按数据大小排序
#amount.index代表存储商品名称,amount.values代表商品销量
name=amount.index[0:5] #销量前五的商品名称
TopFive_count=amount.values[0:5] #销量前五的商品对应的销量
- 绘制柱状图
x=range(0,5) #分别代表5个商品
plt.bar(x,TopFive_count,width=0.6) #柱状图
plt.xticks(x, name) #使用商品名称替换x轴标签
plt.xlabel("商品") #X轴标签
plt.ylabel("销量") #Y轴标签
plt.ylim(0,150) #限制y轴范围
plt.title("3月份销量前5的商品销量") #标题
plt.show() #绘制图像
f.close() #待所有完成后,关闭f
绘制的柱状图如下:
plt.xticks(x, name)表示使用使用商品名称替换x轴标签,第一个参数代表应当放置刻度的位置列表,第二个参数表示放置在指定位置的标签列表。如果我们去除这一行代码,看看原始图形是什么样的。
现在我们把数据添加到柱状图中。
#在柱状图上方添加数值
for x, y in enumerate(TopFive_count):
plt.text(x, y + 3, '%s' % y,horizontalalignment='center' ) #前两个参数表示放置文本的位置,第三个参数表示文本(即数据),第四个参数表示放置在轴中心
到现在,绘制的柱状图就很完美了。
代码汇总
import pandas as pd
import matplotlib.pyplot as plt
path='../data/数据.csv'
f=open(path)
data=pd.read_csv(f)
data['支付时间'] = pd.to_datetime(data['支付时间']) #转化时间格式
month3_data=data[data['支付时间'].dt.month==3] #3月份整体数据 #产生的数据为series类型,包含两列信息
amount=month3_data['商品'].value_counts() #统计所有商品销量
#amount.index代表存储商品名称,amount.values代表存储销量
#销量前五的商品名称
name=amount.index[0:5]
#销量前五的商品对应的销量
TopFive_count=amount.values[0:5]
x=range(0,5)
plt.subplots(figsize = (8,4))
plt.bar(x,TopFive_count,width=0.6)
plt.xticks(x, name)
#在柱状图上方添加数值
for x, y in enumerate(TopFive_count):
plt.text(x, y + 3, '%s' % y,horizontalalignment='center' )
plt.xlabel("商品") #X轴标签
plt.ylabel("销量") #Y轴标签
plt.ylim(0,150)
plt.title("3月份销量前5的商品销量") #标题
plt.show()
f.close() #关闭f