大数据可视化大作业

大学生活“劳逸结合”数据可视化

  要:刚进入大学时,眼中的大学生活是充满神秘与未知的,不知道如何在没有父母的荫蔽下独立生活,不知道如何处理同学老师间的人际关系。在这样谨小慎微地摸索中,转眼两年半过去了,心中满是感慨,两年半的大学生活,辛苦过、安逸过、开心过、郁闷过、笑过、哭过。本文首先对大数据可视化概念进行解读、辨析。随后,以数据可视化的方法将大学前四个学期的“劳逸结合”数据进行可视化。对于“逸”:本文编写python爬虫代码在微博上爬取大学期间去过的三个地点——洪崖洞、李子坝和鹅岭二厂的评论,采用绘制词云图等方法进行可视化;对于“劳”:本文使用tableau可视化软件和excel数据透视表等方法将大学前四个学期的成绩与排名、学分和课程数进行可视化。

关键词:数据可视化;爬虫;词云图;结巴分词;全模式分词;停用词

Absrtact: When I first entered the university, my college life was full of mystery and unknowns. I didn't know how to live independently without the shadow of my parents, and I didn't know how to deal with the interpersonal relationship between my classmates and teachers. In this cautious exploration, two and a half years have passed in a blink of an eye, and my heart is full of emotion. I have worked hard, lived comfortably, been happy, depressed, laughed and cried during my two and a half years of college life. This paper first interprets and discriminates the concept of big data visualization. Then, the "work-rest combination" data of the first four semesters of the university are visualized by data visualization method. As for "Yi", this paper compiles python crawler code to crawl the comments of three places visited during the university in Weibo-Hongyadong, Liziba and Erling No.2 Factory, and uses methods such as drawing word cloud pictures to visualize them. For "Lao", this paper uses tableau visualization software and excel pivot table to visualize the scores and rankings, credits and the number of courses in the first four semesters of the university.

Keywords: data visualization; Reptiles; Word cloud map; Stuttering word segmentation; Full mode word segmentation; stop words

_Toc166982463

1     引言... 3

1.1      大数据的含义... 3

1.2      数据可视化... 3

2     地点评论可视化... 4

2.1      数据获取... 4

2.2      数据分析... 8

2.3      实验过程分析... 8

2.3.1 结巴分词... 8

2.3.2 初始词云图绘制.. 9

2.3.3 改良的词云图绘制... 10

2.4      结果分析... 11

4     排名可视化... 14

4.1      数据获取... 14

4.2      数据分析... 14

4.3      实验过程分析... 15

4.3.1 tableau条形图绘制... 15

4.3.2 excel折线图绘制.. 15

4.3.3 excel簇状条形图绘制.. 16

4.3      结果分析... 16

4.    总结与心得体会... 17

4.1      总结... 17

4.2      心得体会... 17

 

参考文献... 19

  1. 引言

数据信息可视化是近年来不断发展的交叉学科,是艺术和科技的融合。在如今信息爆炸的时代,人们接受数据的要求是快速、高效、准确的。设计师在设计一个好的数据可视化时,在符合信息真实性的同时,将大量的数据通过图像等手段将抽象难以理解的数据整理成受众方便理解的形式,涉及到计算机科学、统计学、艺术设计等各种学科领域[1]。

1.1  大数据的含义

数据(Data),是用来描述科学现象和客观世界的符号记录,是构成信息和知识的基本单元。数据是没有进行加工处理的事实,也就是说单个数据之间互不相关,独立存在,人们用一定的方式将其排列或表达就是之间有了意义,供专业人员进行交流、描述、解读。

大数据(Big Data)是具有4V特性的数据——数据量大(Volume)、变化速度快(Velocity)、数据类型多样化(Variety)与价值密度低(Value)。从计算机技术的角度说,大数据是结构复杂、数据庞大、类型众多的数据集合。通俗来讲,大数据就是海量资料。在效率至上的时代,其规模巨大而人工无法在较短时间内采集、管理、处理、分析并整理出通俗易懂的内容。从而有孕育出大数据技术——处理、管理大数据技术。

图1 大数据的4V特性

Fig.1 4V characteristics of big data

1.2  数据可视化

数据可视化(Data Visualization),是近年来大数据领域各界关注的热点,属于人机交互、图形学、统计分析、地理信息等多种学科的交叉学科,综合数据处理、算法设计、软件开发、人机交互等多种知识和技能,通过图像、图表、动画等形式展现数据,诠释数据见的关系与趋势,提高阅读和理解数据的效率。就数据类型而言,当前的可视化研究逐渐聚焦于多维数据、时序数据、网络数据和层次化数据等领域[2-6]。

随着时代与技术等发展,可视化是一个高度综合的交叉型领域,深度和广度都在不断的扩展。大量的研究专注于搜集和分析过去和现在的事件,研究如何利用现在科技更好的展示数据,优化人机的互动,较少有利用这些信息,来寻找未来可能发生的事情。除了让用户获取已有的信息,帮助用户及时发现之后发生的事情,对未来事件的识别和描述,让用户未雨绸缪,及时准备,应该是一个新的研究方向。

2    地点评论可视化

本章是“大学生活‘劳逸结合’数据可视化”中的“逸”可视化,将选择三个在大学期间去过的地点——洪崖洞、李子坝和鹅岭二厂,在微博上搜索该地点相关文章,爬取这些文章的评论,并进行结巴分词、词云图绘制,并可视化展示。

2.1  数据获取

选择三个在大学期间去过的地点:洪崖洞、李子坝和鹅岭二厂,在微博搜索相关文章,并爬取下面的评论,每个地点选择的微博如下表所示:

表1 爬虫微博文章

Tab.1 Weibo reptile article

地点

微博文章

评论数

洪崖洞

【#重庆洪崖洞又现封... - @西部决策的微博 - 微博 (weibo.com)

126

感受一下五一假期第一... - @重庆市文化旅游委的微博 - 微博 (weibo.com)

50

#重庆洪崖洞# 洪崖... - @微驴友约旅游的微博 - 微博 (weibo.com)

202

李子坝

重庆李子坝那个轻轨进... - @君君的旅行日记的微博 - 微博 (weibo.com)

105

当家人在重庆以为是一... - @Rachele瑞丽的微博 - 微博 (weibo.com)

116

特種兵 沉浸式闖重慶... - @蔡依林的微博 - 微博 (weibo.com)

2440

鹅岭二厂

【直播!#夜游美丽中... - @央视新闻的微博 - 微博 (weibo.com)

266

#起猛了在重庆看到百... - @秒观视频的微博 - 微博 (weibo.com)

421

重庆.李子坝

重庆.洪崖洞

重庆.鹅岭二厂

爬虫的部分代码如下表:

表2 爬虫部分代码

Tab.2 Crawler part code

import os
import re
import requests
import pandas as pd
import datetime
from time import sleep
import random
from  fake_useragent import UserAgent

def trans_time(v_str):
    GMT_FORMAT = '%a %b %d %H:%M:%S +0800 %Y'
   
timeArray = datetime.datetime.strptime(v_str, GMT_FORMAT)
    ret_time = timeArray.strftime("%Y-%m-%d %H:%M:%S")
    return ret_time


def tran_gender(gender_tag):
    if gender_tag == 'm':
        return ''
   
elif gender_tag == 'f':
        return ''
   
else:
        return "未知"


def get_comments(v_weibo_ids, v_comment_file, v_max_page):
    //此处删减了核心代码

            headers = {
                "user-agent": ua.random,
                #如果cookie失效,会返回-100响应码,需要更换新的cookie
               
"cookie":"WEIBOCN_FROM=1110006030; BAIDU_SSP_lcr=https://cn.bing.com/; loginScene=102003; geetest_token=05ebf32988775e9351a7876761bf431b; SUB=_2A25I_We1DeRhGeNH6FUW9SjNyj-IHXVoc-V9rDV6PUJbkdANLWzMkW1NSqofF5wPpTwEeoF_0vSr9YCPgbI2gji5; _T_WM=34726679972; XSRF-TOKEN=fc7787; MLOGIN=1; M_WEIBOCN_PARAMS=oid%3D5013569941537429%26luicode%3D20000061%26lfid%3D5013569941537429%26uicode%3D20000061%26fid%3D5013569941537429; mweibo_short_token=d375d8653d",
                "accept":"application/json, text/plain, */*",
                "accept-encoding": "gzip, deflate, br",
                "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
                "referer": "https://m.weibo.cn/detail/{}".format(weibo_id),
                "x-requested-with":"XMLHttpRequest",
                "mweibo-pwa":"1",
            }
            r = requests.get(url, headers = headers)
            print(r.status_code)#查看响应码
            print(r.json())#查看响应内容
            try:
                max_id = r.json()['data']['max_id'] #获取max_id给下页请求
                datas = r.json()['data']['data']
                max_id_type = r.json()['data']['max_id_type']
            except Exception as e:
                print('except: ' + str(e))
                continue
           
page_list = [] #评论页码
            id_list = [] #评论id
           
text_list = [] #评论内容
            time_list = [] #评论时间
            like_count_list = [] #评论点赞数
            source_list = [] #评论者ip归属
            user_name_list = [] #评论者昵称
            user_id_list = [] #评论者id
           
user_gender_list = [] #评论者性别
            follow_count_list = [] #评论者关注数
            followers_count_list = [] #评论者粉丝数
            max_id_list = []
            for data in datas:
                page_list.append(page)
                id_list.append(data['id'])
                dr = re.compile(r'<[^>]+>', re.S) #用正则表达式清洗评论数据
                text2 =dr.sub('', data['text'])
                text_list.append(text2)
                time_list.append(trans_time(v_str=data['created_at']))
                like_count_list.append(data['like_count'])
                source_list.append(data['source'])
                user_name_list.append(data['user']['screen_name'])
                user_id_list.append(data['user']['id'])
                user_gender_list.append(tran_gender(data['user']['gender']))
                follow_count_list.append(data['user']['follow_count'])
                followers_count_list.append(data['user']['followers_count'])
                max_id_list.append(max_id)
            df = pd.DataFrame(
                {
                '微博id':[weibo_id]*len(time_list),
                '评论页码':page_list,
                '评论id':id_list,
                '评论时间':time_list,
                '评论点赞数':like_count_list,
                '评论者IP属地':source_list,
                '评论者昵称':user_name_list,
                '评论者id':user_id_list,
                '评论者性别':user_gender_list,
                '评论者关注数':follow_count_list,
                '评论者粉丝数':followers_count_list,
                '评论内容': text_list,
                'max_id':max_id_list
                 }
        )
            if os.path.exists(v_comment_file):#不再设置表头
                header = False
            else
:
                header = True
           
#保存csv
           
df.to_csv(v_comment_file, mode='a+', index=False,header=header, encoding='utf_8_sig')
            print('结果保存成功:{}'.format(v_comment_file))


if __name__ == '__main__':
    #
    weibo_id_list = ['4512919477642540']
    max_page = 85
   
comment_file = 'xxx.csv'

   
if
os.path.exists(comment_file):
        print('文件存在,请删除:',comment_file)
        os.remove(comment_file)

    get_comments(v_weibo_ids=weibo_id_list,v_comment_file=comment_file,v_max_page=max_page)

爬取的文件如下图:

图2 爬取的评论

Fig.2 crawling comments

2.2  数据分析

爬取的评论字段包括:微博id、评论页码、评论id、评论时间、评论点赞数、评论者IP属地、评论者昵称、评论者id、评论者性别、评论者关注数、评论者粉丝数、评论内容。由于绘制词云图仅需要评论文本,对评论者的昵称以及评论点赞数不感兴趣,因此将评论内容复制到txt文件中进行后续分词操作。

2.3  实验过程分析

2.3.1 结巴分词

编写代码如下,导入评论文本并输出。

#词云
from wordcloud import WordCloud
#中文结巴分词
import jieba
jieba.setLogLevel(jieba.logging.INFO)


import matplotlib.pyplot as plt

with open(r'.\1.txt','r',encoding = 'utf-8') as f:
    text = f.read()


print(text)

运行结果如下:

对评论进行结巴分词,编写代码如下,注意不能写成“cut_text = "/".join(jieba.cut(text, cut_all = True))”,因为这样写就是把分词结果重新合并成一个字符串了,这样绘制词云图结果会错误。必须用空格才可以分成列表:

#全模式分词
cut_text = " ".join(jieba.cut(text, cut_all = True))
print(cut_text)

运行输出结果如下,可以看到成功将评论分成了词的列表:

2.3.2 初始词云图绘制

对于分好了的词,绘制词云图,首先定义词云图的参数,编写如下代码设置参数,并保存一个词云图的结果:

cloud = WordCloud(
   
#设置字体,中文不设置会乱码
    font_path = "C:\Windows\Fonts\stxingka.ttf",
   
#设置背景色
    background_color = 'white',
   
#词云形状
    max_words = 4000,
   
#最大号字体
    max_font_size = 60
)
#导入分词
wCloud = cloud.generate(cut_text)
#生成词云图文件
wCloud.to_file('cloud1.jpg')

plt.imshow(wCloud, interpolation = 'bilinear')
plt.axis(
'off')
plt.show()

运行结果如下:

2.3.3 改良的词云图绘制

观察初始的词云图可以发现有许多无用的单字词,例如:“有”、“了”、“是”、“就”、“我”等。另外有些无用的词也需要删除,例如:“我们”、“就是”等。因此需要删除这些停用词,编写代码如下:

#删除停用词
cut_words = cut_text.split()
#去除单个字的无用词
filtered_words1 = [word for word in cut_words if len(word) >1]

#根据第一次词云结果设置停用词
stop_words = ['我们','就是']
#去除停用词
filtered_words2 = [word for word in filtered_words1 if word not in stop_words]

filtered_text =
' '.join(filtered_words2)
#导入分词
wCloud = cloud.generate(filtered_text)
#生成词云图文件
wCloud.to_file('cloud2.jpg')
plt.imshow(wCloud,
interpolation = 'bilinear')
plt.axis(
'off')
plt.show()

运行结果如下,可以发现单字的词已经被删除,以及自定义的停用词已经被删除:

2.4  结果分析

综上所述,三个地点的词云图绘制结果如下图所示,可以得出评论中出现频率最高的词是“重庆”,并且大多数的词都是“有意思”、“想去”、“开心”和“哈哈”,可以看出人们对这三个地点的情感态度是积极的,也间接说明了重庆的旅游行业发展较好,深受各地人民的喜爱:

图3 “鹅岭二厂”评论词云图绘制

Fig.3 Cloud Map Drawing of Comments on "No.2 Factory in Erling"

 

图4 “洪崖洞”评论词云图绘制

Fig.4 Cloud drawing of "Hongyadong" commentary

图5 “李子坝”评论词云图绘制

Fig.5 Cloud drawing of "Liziba" commentary

4.   总结与心得体会

4.1  总结

本文通过数据可视化技术,对大学生活的"劳逸结合"进行了深入分析和展示。文章首先对大数据可视化的概念进行了详细解释和分析,为读者提供了理论基础。然后,本文运用数据可视化方法,将大学前四个学期的"劳逸结合"数据进行了可视化处理。

在"逸"的方面,本文编写了Python爬虫程序,在微博平台上收集了大学期间去过的三个地点(洪崖洞、李子坝和鹅岭二厂)的评论数据。通过绘制词云图等可视化手段,直观地展示了这些地点的网络评价和情感倾向。

在"劳"的方面,本文使用了Tableau可视化软件和Excel数据透视表等工具,对大学前四个学期的成绩、排名、学分和课程数量等数据进行了可视化展示。这不仅直观地反映了本文的学业表现,也体现了数据可视化在教育领域的巨大应用潜力。

总的来说,本文巧妙地将数据可视化技术应用于大学生活的记录和分析中,既展示了本文的编程和数据分析能力,也为我们提供了一个全新的视角来审视和理解大学生活。通过本文,我们可以更加直观地感受到大学生活的丰富多彩和"劳逸结合"的重要性。

4.2  心得体会

本次实验心得体会如下:

掌握了jieba分词的原理,将字符串分解为一个列表,因此在分词时必须采用“ ”.join(xxx)语句,不能使用“/”,因为斜杠会将结果重新组成一个字符串,这样后期绘制词云图会出现错误;

在分词时,cut_all = True语句可以进行“全模式”分词,该模式可以自动进行组词,而不是简单的分割词;

由于本实验是进行的中文分词,因此在定义词云参数时必须指定字体,否则会出现乱码;

可以扫描分词结果的列表,删除长度小于2的词,因为这些词包含的信息几乎为0,过滤代码:filtered_words1 = [word for word in cut_words if len(word) >1];

自定义停用词扫描分词结果删除停用词:

stop_words = ['我们','就是',]

filtered_words2 = [word for word in filtered_words1 if word not in stop_words];

分词出现警告:

解决办法:添加语句:jieba.setLogLevel(jieba.logging.INFO)

参考文献

  1. 王怡人.大数据与信息可视化文献综述[J].工业设计,2018,(04):121-122.
  2. DOU Hui, XU Baile, SHEN Furao, et al. V-SOINN: A topology preserving visualization method for multidimensional data [J]. Neurocomputing, 2021, 449: 280-289.
  3. EADIE A, VÁSQUEZ I C, LIANG Xuefeng, et al. Transcriptome network data in larval zebrafish (Danio rerio) following exposure to the phenylpyrazole fipronil [J]. Data in Brief, 2020, 33: 106413.
  4. WANG Qiyao, FARAHATA, GUPTA C, et al. Deep time series models for scarce data [J]. Neurocomputing, 2021, 456: 504-518.
  5. PASPATIS I, TSOHOU A, KOKOLAKIS S. AppAware: A policy visualization model for Mobile applications [J]. Information and Computer Security, 2020, 28(1): 116-132.
  6. 任磊, 杜一, 马帅, 等. 大数据可视分析综述 [J]. 软件学报, 2014, 25(9): 1909-1936.
  • 33
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值