首席数据官

Hi, 请登录

Python数据分析可视化–Titanic

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

9月2日更:中国大学MOOC课程信息之数据分析可视化二

  • 写在前面

上一篇我的博客:中国大学MOOC课程信息爬取与数据存储于8月24日爬取并存储了中国大学MOOC的各个学科的课程信息。如下:

今天我就来简单做一哈MOOC课程信息的数据分析及可视化。

PS:初入茅庐,参考了网上很多大佬的文章,特别感谢!

Python数据可视化-seaborn

6 种 Python 数据可视化工具

『数据可视化』基于Python的数据可视化工具

Python数据分析可视化Seaborn实例讲解

Python数据可视化:饼状图

  • 环境配置与安装

运行环境:Python3.6 Spyder

依赖模块:scipy、matplotlib、pymysql、 jieba、re、collections、wordcloud 、pandas、seaborn、numpy、PIL、pyecharts等

注:部分模块的安装比较麻烦,可以网上查询相关方法。

  • 开始工作

1、从Mysql 中获取数据

比较简单,我就直接贴代码了。

def get_mysql(): 
    kc_info=[]
    db = pymysql.connect(host='localhost',user='root',passwd='root',db='mooc_courses_info',charset='utf8')
    cur = db.cursor()
    sql = '''SHOW TABLES'''
    cur.execute(sql)
    tables= cur.fetchall()
    for subject in tables:
        cur.execute("select * from %s"% subject)  
        results=cur.fetchall()
        kc_info.append(results)
    return tables,kc_info
tables,kc_info=get_mysql()

2、课程名做词云

我现将全部的课程名提取出来并连接在一起。

courses_text=''
for kc in kc_info[0]:
    course_text=kc[1]
    courses_text=courses_text+' '+course_text

再用jieba分词,Counter计数,导出前100个高频词汇

courses_jieba = list(jieba.cut(courses_text))
# 使用 counter 做词频统计,选取出现频率前 100 的词汇
c = Counter(courses_jieba)
common_c = c.most_common(100)
print(common_c)

结果是这样的:

x

显然,“与”、“一”、“上”、标题符号等都不是我们所期待的,必须将其去掉。关于这一点,网上的方法是要利用停用词表去掉这些字词符号,参考这篇:python结巴分词、jieba加载停用词表。由于我所处理的精度以及量不算太多,我直接采用re去除。

courses_text= re.sub("[\“\”\《\》\(\)\,\——\:\、\-\(\)一二三上下与的及之和中 ]", "",courses_text )

处理后的结果是这样的:

x

看着还算可以吧。

接下来数据可视化论文,就要做词云啦。参考我以前做过的词云,稍微修改一哈就可以啦。特别心酸的是:字体的正确选择,花了我好长时间。

大数据可视化效果图_数据可视化论文_数据新闻可视化

def word_cloud(common_c):
    # 读入词云模板
    bg_pic = imread('D:\\python_data\\词云模板\\29.jpg')  #一张枫叶图片
    # 配置词云参数
    wc = WordCloud(
            # 设置字体  
            font_path ='C:\\windows\\Fonts\\STSONG.TTF',
			  # 设置背景色
            background_color='white',
            # 允许最大词汇
            max_words=200,
            # 词云形状
            mask=bg_pic,
            # 最大号字体
            max_font_size=50,
            random_state=100,
            )
    # 生成词云
    wc.generate_from_frequencies(dict(common_c))
    # 生成图片并显示
    plt.figure()
    plt.imshow(wc)
    plt.axis('off')
    plt.show()
    # 保存图片
    wc.to_file('D:\\python_data\\词云图片\\2.jpg')

x

3.大学开课数统计

创建一个数组,记录开课数前20个的大学,并用柱形图表示出来。

def bar_plot(datas):   
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体设置-黑体
    plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
    sns.set(font='SimHei')  # 解决Seaborn中文显示问题
    datas=pd.DataFrame(datas[0:20],columns=['大学','开课数'])
    sns.barplot(x=datas['大学'],y=datas['开课数'],palette="muted")
    plt.xticks(rotation=90)
    plt.show()
#大学开课数统计
uni_courses_num={}
for kc in kc_info[0]:
    uni_courses_num[kc[2]] = uni_courses_num.get(kc[2],0) + 1
items = list(uni_courses_num.items())
items.sort(key=lambda x:x[1], reverse=True)
bar_plot(items)

得到的结果如下:

x

可以看出,哈工以巨大优势问鼎,电科、东北大学紧追其后。开心的是,母校也榜上有名!母校加油!

4.课程热度分析

这里我是在全部课程里统计课程热度的,如果有兴趣的话,你也可以选取你感兴趣的学科进行热度统计。

def bar_plot2(datas):
    f, ax=plt.subplots(figsize=(8,12))
    datas=pd.DataFrame(datas[0:20],columns=['课程名称','热度'])    
    #orient='h'表示是水平展示的,alpha表示颜色的深浅程度
    sns.barplot(y=datas['课程名称'], x=datas['热度'],orient='h', alpha=0.8, color='red')
    #sns.barplot(y=datas['课程名称'], x=datas['热度'],palette="muted")
    #设置X轴的各列下标字体是水平的
    plt.xticks(rotation='horizontal')
    #设置Y轴下标的字体大小
    plt.yticks(fontsize=10)
    plt.show()
#课程热度统计
courses_hot=[]
for kc in kc_info[0]:
    courses_hot.append((kc[1],kc[5]))
courses_hot.sort(key=lambda x:x[1], reverse=True)
bar_plot2(courses_hot)

运行结果如下:

x

大数据可视化效果图_数据可视化论文_数据新闻可视化

可以看出,财务管理最受欢迎,达到18万之多。另外,高数、编程类、英语口语类、财务类受欢迎度远超其他学科门类。

5、学科开课数统计

先统计各个学科的课程数量,为了绘图更简洁美观,有些课程少的我打包放进了“其它”。

num=5
subject_courses=[]
for i in range(1,len(tables)):
    subject_courses.append((tables[i][0],len(kc_info[i])))
subject_courses.sort(key=lambda x:x[1], reverse=True)
left_courses=0
for i in range(num):
    print(subject_courses[-i-1][1])
    left_courses+=subject_courses[-i-1][1]
deal_subject_courses=subject_courses[0:len(subject_courses)-num]
deal_subject_courses.append(('others',left_courses))

参考了网上一些代码,做了一些修改,如下:

def pie_plot(datas):
    # # 饼状图
    labels,sizes=
试看结束,如继续查看请付费↓↓↓↓
打赏0.5元才能查看本内容,立即打赏

来源【首席数据官】,更多内容/合作请关注「辉声辉语」公众号,送10G营销资料!

版权声明:本文内容来源互联网整理,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 jkhui22@126.com举报,一经查实,本站将立刻删除。

相关推荐

二维码
评论