美文网首页
Python可视化: D3.js呈现的大学排行榜

Python可视化: D3.js呈现的大学排行榜

作者: 泡泡坪 | 来源:发表于2018-12-13 23:15 被阅读31次

    最近在公众号看到用python呈现,新中国成立后各省GDP的发展历程,于是照葫芦画瓢也写了一个,用的最多的应该是用大佬造的轮子,基于D3.js的数据可视化项目。
    附上大佬的GitHub地址,有兴趣的小伙伴可以自行去围观
    https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js
    这是作者的B站主页,发现了更多有意思的动态视频:


    这些作品的作者是:@Jannchie见齐,他的主页:https://space.bilibili.com/1850091/#/video
    实现这种效果的关键点是要有数据。观察一下上面的作品可以看到,横向柱状图中的数据要满足两个条件:一是要有多个对比的对象,二是要在时间上连续。这样才可以做出动态效果来。

    数据来源

    http://www.zuihaodaxue.com/ARWU2018.html


    只需要for循环改变网址年份即可循环抓取数据
    数据
    def getData(year):
        headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:63.0) Gecko/20100101 Firefox/63.0'}
        url = 'http://www.zuihaodaxue.com/ARWU%s.html' % (str(year))
        response = requests.get(url,headers = headers)
        if response.status_code == 200:
            return response.content
        return None
    
    def parseData(html, year):
        df = pd.read_html(html)[0]
        result = df.drop(df.columns[[2,3,5]], axis = 1)
        result.columns = ['world rank','university','score']
        result.fillna(0,inplace = True)
        result['index_rank'] = result.index.astype(int) + 1
        result['year'] = year
        result['country'] = get_country(html)
        return result
    

    但是国家地区一栏是空的,所以我们得另想办法



    可以看到国家是用英文表示的,这里得需要用Beautiful配合正则提取出国家名

    def get_country(html):
        soup = BeautifulSoup(html,'html.parser')
        countries = soup.select('td > a > img')
    
        lst = []
        for i in countries:
            src = i['src']
            req = 'flag.*\/(.*?).png'
            country = re.findall(req, src)[0]
            lst.append(country)
        return lst
    
    最终数据图
    根据作者的那个框架的要求,把数据整理成以下作为D3.js的导入文件

    到作者的github主页:
    https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js
    下载他的项目
    关于这个项目的教程
    https://www.bilibili.com/video/av28087807
    最终完成图如下

    相关文章

      网友评论

          本文标题:Python可视化: D3.js呈现的大学排行榜

          本文链接:https://www.haomeiwen.com/subject/wjbihqtx.html