20193415 实验四《Python程序设计》实验报告

20193415 2020-2021-2 《Python程序设计》实验四报告

课程:《Python程序设计》
班级: 1934
姓名: 简文翔
学号: 20193415
实验教师:王志强
实验日期:2021年6月15日
必修/选修:公选课

1. 实验内容

  • 完成Python综合实践任务,有关爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等

    经过反复思考,我决定结合最后几节课介绍的有关网络爬虫的内容,使用第三方库GoPUP来爬取百度指数的游戏关键词指数,并利用第三方库pyecharts制作柱状图,实现游戏热度可视化。

2. 实验过程及结果

(1) 安装第三方库

  1. 安装GoPUP

    打开命令提示符,输入pip install gopup

  2. 安装pyecharts 1.1.0

    打开命令提示符,输入pip install pyecharts==1.1.0

(2) 使用GoPUP来爬取百度指数的游戏关键词指数

  1. 初步爬取

    将登录百度指数后的cookie填入单引号中,设置关键词为“王者荣耀”,爬取2021年6月1日至2021年6月10日间的指数数据,如图所示:

    爬取结果如下:

  2. 提取数据

    根据初步爬取的结果易知,GoPUP将爬取到的数据类型为“dataframe”类型,无法直接使用
    利用iterrows迭代器,每次只提取一天的数据,分别输出“item[1][0]”,这样就实现了数据的提取:

  3. 存入字典

    新建一个列表name_list用于存放游戏关键词

    新建一个字典data_baidu,用于存放6月1日至6月10日间10个游戏关键词的百度指数数据

    对上述程序进行如下修改

    成功将数据存入字典

(3) 利用Pyecharts制作柱状图实现可视化

  1. 调用所需要的库

    import pyecharts.options as opts
    from pyecharts.charts import Timeline, Bar
    
  2. 将data_baidu中的数据格式化

    def format_data(data: dict) -> dict:
        for year in range(1, 11):
            max_data, sum_data = 0, 0
            temp = data[year]
            max_data = max(temp)
            for i in range(len(temp)):
                sum_data += temp[i]
                data[year][i] = {"name": name_list[i], "value": temp[i]}
            data[str(year) + "max"] = int(max_data / 100) * 100
            data[str(year) + "sum"] = sum_data
        return data
    
  3. 绘制柱状图

    def get_year_overlap_chart(year: int) -> Bar:
        bar = (
            Bar()
                .add_xaxis(xaxis_data=name_list)
                .add_yaxis(
                series_name="百度热度",
                yaxis_data=total_data["dataBAIDU"][year],
                category_gap=50,
                label_opts=opts.LabelOpts(is_show=False),
                itemstyle_opts=opts.ItemStyleOpts(color='LightSeaGreen')
            )
                .set_global_opts(
                title_opts=opts.TitleOpts(
                    title="6月{}日游戏热度可视化".format(year), subtitle="数据由GoPUP获取"
                ),
                xaxis_opts=opts.AxisOpts(
                    axislabel_opts={"interval": "0"}
                ),
                tooltip_opts=opts.TooltipOpts(
                    is_show=True, trigger="axis", axis_pointer_type="shadow"
                ),
                legend_opts=opts.LegendOpts(
                    is_show=False,
                ),
            )
                .set_series_opts(
                label_opts=opts.LabelOpts(is_show=False),
                # 设置最大值、最小值、平均值的标记线
                markline_opts=opts.MarkLineOpts(
                    data=[
                        opts.MarkLineItem(type_="min", name="最小值"),
                        opts.MarkLineItem(type_="max", name="最大值"),
                        opts.MarkLineItem(type_="average", name="平均值"),
                    ]
                ),
            )
        )
        return bar
    
  4. 生成时间轴实现轮播

    timeline = Timeline(init_opts=opts.InitOpts(width="1600px", height="800px"))
    for y in range(1, 11):
        timeline.add(get_year_overlap_chart(year=y), time_point="6月{}日".format(y))
    timeline.add_schema(is_auto_play=True, play_interval=1000)
    # 生成html文件,用于在浏览器中查看效果图
    timeline.render("game.html")
    
  5. 效果图

    数据的柱状图在6月1日至6月10日间自动跳变,可暂停,点击日期对应的圆圈可查看当日数据。纵坐标随数据大小自行变化。

  6. 程序代码托管到码云

    Gitee代码页面

3. 课程总结

(1) 知识小结

  课程学习中,我们主要接触了如下Python知识:流程控制语句、序列、字符串、正则表达式、函数、面向对象程序设计、文件操作及异常处理、网络爬虫等。
  通过学习,我得知了Python这门语言的定义:Python是一种高级动态、完全面向对象的语言,函数、模块、数字、字符串都是对象,并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性,具有代码少、简单、运行速度慢的特点。
  Python具有如下数据类型:整数、浮点数、字符串、布尔值、空值(None)。
  序列包含可变、可重复、有序的列表,不可变、可重复、有序、元素不能删除的元祖,键值对组成的字典,可以去重的集合。序列可以进行索引与切片操作。
  字符串可以进行拼接、截断、分割、检索、格式化等操作;正则表达式则较为复杂,它描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
  Python中的函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,我们也可以自己创建用户自定义函数。
  Python的类与对象由三个关键词组成:封装+继承+多态,类又等于属性+方法。
  Python的模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用python标准库的方法。
  而关于Python的网络编程技术,我了解到了Socket套接字技术,即端口+IP地址,这也是我其他课程所涉及到的知识。
  最重要的网络爬虫,它就是一个探测机器。它的基本操作就是模拟人的行为去各个网站溜达,点点按钮,查查数据,或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。简单来讲,就是通过程序去获取web页面上自己想要的数据,也就是自动抓取数据。关于爬虫,我只学到一点皮毛,希望以后有机会还能继续深入学习。

(2) 感想与建议

  首先很庆幸自己选到了这门选修课。在王志强老师的Python程序设计这门选修课中,我第一次接触Python这门编程语言,以前对Python的了解仅限于道听途说,只知道这是一门上手简单、功能强大的语言,但其中蕴含的奥秘在我上课之后才得以深入了解。我个人认为这门课程所用的语言很特别很奇妙,老师也很风趣很有个性,能够帮助我们更好的了解Python这门语言真正的用途。在整个课程学习的过程中,我最大的感触就是,老师不仅是在教我们学Python,更多是把我们向“程序猿”的方向培养。
  在学习Python这门课程的这段时间以来,我认识到并且学习到了很多知识。不仅如此,做Python实验的过程也是一个学习的过程,从激活专业版Pycharm到配置Gitee再到在博客园用Markdown写实验报告,全是个人经历上的第一次,能够利用的只有搜索引擎、云班课中的链接与老师的只言片语,所有东西都需要自己去搜索去学习。对于一个完美主义者与强迫症患者,写一篇实验报告往往要用不下十个小时的时间,一遍遍地编辑博客后台一遍遍地预览、调整图片尺寸、缩进段落,才能修改出勉强令自己满意的博客。
  而对于王老师的这门课程,我有一点小小的建议,那就是老师现场编写代码的时候有时会写错,跟着思路走的初学者(比如我们)很容易被绕晕,要是老师的备课能更加充分、少一些报错就更完美了。
  至此,Python程序设计这门课程已经圆满结束了。在这个过程之中,我交出了一份还算满意的答卷,也在多次失败的教训之中收获了许多宝贵的经验:做好提前预习,亲自动手实践,及时查漏补缺……这些经验对我将来的学习都有着很大的帮助。
  最后,感谢老师的惇惇教导!您辛苦了!

参考资料

posted @ 2021-06-25 15:42  Lezs  阅读(638)  评论(0编辑  收藏  举报