zoukankan      html  css  js  c++  java
  • 中国大学MOOC课程信息之数据分析可视化二

    版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/82318571

    - 写在前面


      本篇博客继续对中国大学MOOC课程信息进行数据分析,主要是利用pyecharts针对MOOC上开课的大学信息的分析。
      前两次博客内容:
        1. 中国大学MOOC课程信息爬取与数据存储
        2. 中国大学MOOC课程信息之数据分析可视化一

    - 环境配置安装


      运行环境:Python3.6、Spyder
      依赖的模块:pyecharts以及一些地图模块

    - 开始工作


    1. 获取数据

      首先从网上下载大学信息数据,我找了好久,也花费了不少积分,才找到比较不错的数据。下面是下载链接:最新全国高校数据库信息(包含2854所高校)
      接下来打开mysql,新建数据库univ_info,再将下载的MS EXCEL数据导入到该数据库中。
      导入后的结果如下:
       x
      编写代码获取MOOC上的大学列表

    '''获得MOOC上开课大学信息'''
    universities=[]
    for kc in kc_info[0]:
        if kc[2] not in universities: 
            universities.append(kc[2])
    

      便可以得到MOOC上已开课的大学名称的列表,我们可以根据这个查询数据库相应字段的数据,从而得到所需要的大学信息了。
      这里值得注意的是先前得到的大学名称中含有“微软”、”爱课程“等非院校单位,在数据库查询时会出现空值,此时应将其去除掉。

    def mysql_univ_info(univs):
        results=[]
        db = pymysql.connect(host='localhost',user='root',passwd='root',db='univ_info',charset='utf8')
        cur = db.cursor()
        for univ in univs:
            cur.execute("select * from univ_info where 院校名称='%s'"% univ)  
            result=cur.fetchall()
            if result!=():
                result=result[0]          
                results.append(result)
        return results  
    

      调用前面函数,便可以得到所需要的院校信息了。

    ![](https://i.imgur.com/9WjTmy9.png)

    2. 大学所在城市

      由于数据库表中所在城市有些为空,观察可知其为直辖市,因此不妨用所在地区替代。

    '''大学城市'''
    univ_cities=[]
    for univ_info in univ_infos:
        if univ_info[4]==None:
            univ_cities.append((univ_info[1],univ_info[3]))
        else:
            univ_cities.append((univ_info[1],univ_info[4]))
    univ_city_num={}
    for univ_city in univ_cities:
        univ_city_num[univ_city[1]]=univ_city_num.get(univ_city[1],0)+1
    univ_city_items = list(univ_city_num.items())
    univ_city_items.sort(key=lambda x:x[1], reverse=True)
    

      参考pyecharts官网提供的示例,便可以根据需求做出自己想要的图表,链接:图表详情
      代码如下:

    def pyecharts_geo_city(datas):
        geo = Geo("中国城市所拥有的已在MOOC开课的大学数",title_color="#fff",
                  title_pos="center",width=1200,height=600,background_color="#404a59"
        )
        attr, value = geo.cast(datas)
        geo.add("",attr,value,visual_range=[0, 30],visual_text_color="#fff",
                symbol_size=15,is_visualmap=True
                )
        geo.render("中国城市所拥有的已在MOOC开课的大学数.html")
    

      打开生成的网页,可以看到:

      在网页上你可以滑动左下角的标签,查看大学数量的某些区间下城市分布,比如:

      这个是大学数在8以上的城市,这在一定程度上也反映出城市的大学教育的发展情况。

    3.大学所在省份

      同上,可以做类似的分析。

    '''大学省份'''
    univ_provinces=[]
    for univ_info in univ_infos:
        if univ_info[2]==None:
            univ_provinces.append((univ_info[1],univ_info[3][0:2]))
        else:
            univ_provinces.append((univ_info[1],univ_info[2]))
    univ_province_num={}
    for univ_province in univ_provinces:
        univ_province_num[univ_province[1]]=univ_province_num.get(univ_province[1],0)+1
    univ_province_items = list(univ_province_num.items())
    univ_province_items.sort(key=lambda x:x[1], reverse=True)
    

      调用的函数为:

    def pyecharts_geo_province(datas):
        maps = Map("中国省份所拥有的已在MOOC开课的大学数", width=1200, height=600)
        labels,sizes=[],[]
        labels,sizes= maps.cast(datas)
        maps.add("",labels,sizes,maptype="china",visual_range=[0, 30],is_visualmap=True,visual_text_color="#000")
        maps.render("中国省份所拥有的已在MOOC开课的大学数.html")
    

      运行结果如下:

    4.大学等级

      这里主要是简单统计MOOC上开课的大学院校中有多少985或者211或者其它之类的。

    '''大学等级'''
    univ_rating=[]
    _985,_211,_others=0,0,0
    for univ_info in univ_infos:
        univ_rating.append((univ_info[1],univ_info[5],univ_info[6]))
        if univ_info[5]=='211':
            _211+=1
            if univ_info[6]=='985':
                _985+=1
        else:
            _others+=1
    univ_rating_num=[('985',_985),('211',_211),('others',_others)]
    pyecharts_rosepie_rating(univ_rating_num)
    

      用圆饼-玫瑰图绘出结果:

    def pyecharts_rosepie_rating(datas):
        pie = Pie("MOOC开课大学等级", title_pos='center', width=900)
        attr,v1=pie.cast(datas)
        pie.add("",attr,v1,center=[25, 50],is_random=True,radius=[30, 75],rosetype="radius",#rosetype="area"
                is_legend_show=False,is_label_show=True
                )
        pie.render("MOOC开课大学等级.html")
    

      运行结果:

    5.大学类型

      这里主要是统计的在MOOC上开课的大学类型:

    '''大学类型'''
    univ_kinds={}
    for univ_info in univ_infos:
        kind=univ_info[8][0:3]
        univ_kinds[kind]=univ_kinds.get(kind,0)+1
    univ_kind_items = list(univ_kinds.items())
    univ_kind_items.sort(key=lambda x:x[1], reverse=True)
    

      采用条形图绘制:

    def pyecharts_bar_kinds(datas): 
        bar = Bar("MOOC开课大学类型")
        attr,v=bar.cast(datas)
        bar.add("", attr, v,mark_point=["average"],mark_line=["min", "max"],is_more_utils=True)
        bar.render("MOOC开课大学类型.html")
    

      运行结果:

      由图知,平均数为10,最大值为48,最小值为1,一共有11种院校类型,综合类大学、工科类大学、远超其他类型的大学,这与当前教育背景密不可分的。

    - 结语

      其实可以做的不仅限于此。如果感兴趣,可以访问:pyecharts官网多多学习。
      另外,第一次用Markdown写博客,诸多不习惯,如果文章中有错误,请指正哈。

  • 相关阅读:
    sql语句的删除
    JDK 11中的ZGC-一种可扩展的低延迟垃圾收集器
    强大的IDEA开发工具
    微信H5支付证书过滤
    statusText 报错parsererror
    python 爬取页面数据,生成词云和网络图
    springboot 跳转页面
    org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'xxx' is not present 报错解决
    airtest 中报错 'gbk' codec can't encode character 'xa5' in position 170: illegal multibyte sequence
    Error:(5, 45) java: 程序包org.springframework.boot.test.context不存在 解决
  • 原文地址:https://www.cnblogs.com/sc340/p/11870818.html
Copyright © 2011-2022 走看看