数据可视化是数据分析的重要任务之一。
之前有获取到亚马逊销售飙升榜的数据,但是排名只是按列表顺序排序,销售排名上升的幅度只有数字的变化,体现的不是很直观。
所以使用python的matplotlib实现对数据的可视化,能直观的看出来数据的对比和变化。
Matplotlib 是 Python 的绘图库,可以用来绘制各种静态,动态,交互式的图表。
python3 -m pip install -U matplotlib
安装完成之后,写一个简单的小测试:
import matplotlib.pyplot as plt
data = [1,2,2,5,8,1,2]
plt.plot(data)
plt.show()
先自定义一个list生成图表,若配置正确的话就能生成如下简单的线型图:
在pandas中有很多方法可以实现对Dataframe和Series的可视化。
Dataframe和Series都有一个plot属性绘制基本的图形,但是默认情况下polt生成的都是折线图。
所以我们需要用polt绘制不同图标的其他方法,比如柱状图的polt.bar()方法可以绘制垂直的柱状图,plot.barh()用于绘制水平的柱状图。
dataframe = pd.DataFrame([1,2,2,5,8,1,2],index=["a","b","c","d","e","f","g"])
print(dataframe)
dataframe.plot.bar()
plt.show()
默认情况下,在绘制柱状图时,Series和Dataframe的索引会成为x轴(bar())或者y(barh())轴的刻度。
结合上次的亚马逊销售飙升榜,来做一个电子区的热销榜销售上升幅度的柱状图。
我这里使用的是ipidea的代理,因为亚马逊在国内还是无法正常访问的,好的代理能帮助你更好的获取数据,高质量低延迟,而且新用户可以白嫖哦!
http://www.ipidea.net/?utm-source=csdn&utm-keyword=?wb
那个up箭头就是销售量涨幅。不知道为什么榜一居然没有,取数据的时候就把他忽略掉。
testUrl = "https://www.amazon.com/gp/movers-and-shakers/electronics/ref=zg_bsms_nav_0"
headers = {
"authority":"www.amazon.com",
"accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"user-agent":f"{UserAgent}",
}
res = requests.get(testUrl, headers=headers, proxies=proxies,verify=False)
content = res.content.decode("utf-8")
sel = Selector(text=content)
nodes = sel.css("#gridItemRoot")
indexList = []
upgradeList = []
for node in nodes[1:]:
itemName = node.css(".zg-grid-general-faceout a span div::text").extract_first()
ranks = node.css(".aok-inline-block")
upgrade = ranks.css(".zg-grid-pct-change::text").extract_first().replace("%","").replace(",","")
indexList.append(itemName)
upgradeList.append(int(upgrade))
获取到商品名和商品销售涨幅之后将数据存入两个list中,一个作为图标数据,将商品名作为x轴的刻度。
dataframe = pd.DataFrame(upgradeList,index=indexList)
dataframe.plot.bar()
plt.show()
目前,最基础的数据可视化就完成了。