如何利用维基百科的数据可视化当代音乐史
荐文计划:
你的工作是否和数据有关?
又或者是否大数据爱好者?
如果你经常发现好文章并期望与读者分享,
欢迎点击文末“阅读原文”,加入我们!
荐文一旦采纳,我们会在文章开头致谢并宣传。
本期荐文:
翻译校对:丁雪吴怡雯程序验证修改:李小帅
“我相信马塞勒斯·华莱士,我的丈夫,你的老板吩咐你带我出门做我想做的任何事。现在,我想跳舞,我要赢,我想得到那个奖杯,把舞跳好来!”
《黑色追缉令》是我一直以来最喜欢的电影。令人惊奇的故事情节、演员、表演以及导演会让我想要前去影院观看,当别人问起“你看过这部电影吗?”,我可以打破僵局。电影中最具标志性的场景可能是乌玛?瑟曼和约翰?特拉沃尔塔在杰克兔子餐厅的舞池跳扭扭舞的那段。虽然这可能是乌玛?瑟曼最经典的舞蹈场景,但约翰?特拉沃尔塔似乎根本停不下来,在电影《迈克》、《发胶》、《黑色追缉令》、《油脂》、《周末夜狂热》和《都市牛郎》中约翰所饰演的角色总是梳着锃亮的大背头、乌黑的头发、极富本性地跳着舞。
虽然很多人可能会笑约翰在舞池中央跟着迪斯科音乐跳舞的场景,但扪心自问,所有酷酷的舞蹈电影是否都注定是相同的。随着时间流逝我们是否还会被《魅力四射》(BringitOn,美国系列青春校园电影——译者注)和《街舞少年》(StomptheYard)中的音乐所感动?如果看一看这些年最流行音乐风格的变化趋势(如下图),大众对流行乐偏好的变化似乎没有迪斯科的节奏那么快。
◆◆◆可视化
通过分析Billboard年终榜单中前首歌曲,我们可以根据每年Billboard上最流行歌曲所代表的音乐风格的份额来量化现代音乐的走向。图中我们可以看出,迪斯科(Disco)只有短短十几年的光辉,从90年代以来饶舌(Rap)和嘻哈(Hip-Hop)音乐风格才持续出现。有趣的是,本世纪初随着历史的重复,饶舌和嘻哈音乐处于巅峰,迪斯科的变动与流行音乐中一些最低份额的流派保持一致。慢摇滚(SoftRock)和硬摇滚(HardRock)的光景甚至比迪斯科更糟糕,在年完全灭绝。相反的是,麦当娜在年的复兴单曲继续延续了迪斯科的影响力,在年后,我们被火星哥(BrunoMars)和魔力红(Maroon5)的歌洗脑。
这一可视化视图是如何绘制而成的?
维基百科是一座金矿,里面有列表,列表里面套着列表,甚至被套着的列表里面还套着列表。其中一个列表恰巧是Billboard最热门的首单曲,它使我们能够很容易地浏览维基百科的数据。在快速查看网址后,我们能够简单地生成页面,从中爬取数据,这样更简单。我们从为程序加载必要的模块和参数开始。
#iPython内联查看画图并导入必要的包
importnumpyasnp
importpandasaspd
importseabornassns
importpylabaspylab
importmatplotlib.pyplotasplt
importrequests,cPickle,sys,re,os
frombs4importBeautifulSoupasbs
importlogging
logging.basicConfig(format=%(asctime)s:%(levelname)s:%(message)s,level=logging.INFO)
requests=requests.Session()
#设置画板大小
pylab.rcParams[figure.figsize]=32,16
接着程序脚本利用我们在网址中找到的模式,尝试从页面中提取所有可能存在的链接。
#定义一个从维基百科表格中抓取相关信息的函数,
如果没有返回NaN
deftryInstance(td,choice):
try:
#歌曲只有一个维基百科链接,但是歌手可能有许多链接。
我们创建一个选择标志,#用来决定抓取文本信息还是链接信息
if(choice==0):
returntd.text
elif(choice==1):
links=[x[href]forxintd.findAll(a)]
if(len(links)!=0):
returnlinks
else:
returnfloat(NaN)
except:
returnfloat(NaN)
#找到页面的第一个table,尽量抓取所有表格行的信息
pandaTableHeaders=[year,pos,song,artists,song_links,artist_links]
headers={User-Agent:Mozilla/5.0(X11;Linuxx86_64)AppleWebKit/.36(KHTML,likeGecko)Chrome/48.0..Safari/.36}
cookies={cookie:CP=H2;WMF-Last-Access=16-Apr-;GeoIP=CN:01:Xuancheng:30.95:
.76:v4;enwikimwuser-sessionId=fa}
defscrapeTable(year):
#创建url路径,用BeautifulSoup解析页面内容,创建列表用来存储表数据
url=北京治疗白癜风一般多少钱北京治疗白癜风一般下来得多少钱
转载请注明:http://www.yuncaibanjia.com/fjff/6301.html