任务1:数据采集

网页“http://pm25.in/beijing”中包含北京12个监测点的空气质量监测数据,请编写程序抓取网页(网页样本保存在源素材文件夹下src1目录中)上的监测点、AQI、空气质量指数类别,如表H2-1-1所示。将抓取的数据保存,以bj20200721.csv文件命名。
表H2-1-1 北京空气质量监测数据
监测点 AQI 空气质量指数类别
万寿西宫 57 良
…… …… ……
1)使用Pycharm在考生文件夹下创建项目task030101,在项目下创建python文件,命名为task1.py。将源素材文件夹下的src1目录复制到项目task030101下。
2)根据实际项目需求进行问题分析,书写注释。
3)编写程序,正确爬取网页中的数据,运行程序并显示“已爬取”。
4)编写程序,将抓取的数据保存在项目task030101下,以bj20200721.csv文件命名,分隔符为tab键,运行程序并显示“已保存”。
5)将运行结果截图,保存在考生文件夹下,以task1.jpg文件命名。
**

答案:

import bs4
from bs4 import BeautifulSoup
from urllib import request
import pandas
## 解析网页内容
# ulist:保存解析后的网页内容,  html:传入的网页内容
def jiexi(ulist,html):
    soup = BeautifulSoup(html, 'html.parser') ##创建BeautifulSoup对象,并指定BeautifulSoup中TreeBuilder的解析器为html.parser
    for tr in soup.find('tbody').children: ## 循环标签tbody下的所有tr标签,一个迭代对象
        if isinstance(tr,bs4.element.Tag): ## 判断是否bs4.element.Tag类型
            tds = tr('td')  ## 得到这一行中的数据
            ulist.append([tds[0].string,tds[1].string,tds[2].string]) ## 添加到三个

## 分析数据,等到二维表格
def tofile(ulist):
    data = pandas.DataFrame(ulist)  ##数据框架,制作二维表
    data.columns =['监测点','AQI','空气质量指数类别']  ## 设置列名
    data.to_csv('./bj20200721.csv',header=True,sep='\t',index=False)  ## 写入csv
## 主函数
def main():
    uinfo=[]
    url='http://pm25.in/beijing' ##得到网页地址
    html = request.urlopen(url).read().decode('utf-8') ##打开网页,并读取网页,设置编码格式
    jiexi(uinfo,html) ## 调用jiexi函数
    print("已爬取")
    tofile(uinfo)   ##调用tofile函数
    print('已保存')
#     主接口
if __name__ == '__main__':
    main()

任务2:数据处理和分析

**
使用Python的pandas读取bj20200721.csv文件(bj20200721.csv文件保存在源素材文件夹下task030102\src2目录中),完成数据处理和分析。
1)将源素材文件夹下task030102项目复制到考生文件夹下,使用Pycharm打开项目task030102,打开task2.py。
2)根据实际项目需求进行问题分析,书写注释。
3)编写程序,完成readFile(filename)函数的定义,使用pandas读取bj20200721.csv文件中的数据,返回值类型为DataFrame。
4)编写程序,完成printInfo(filename)函数定义,显示bj20200721.csv文件中的内容,如图H2-1-1所示。

图H2-1-1显示bj20200721.csv文件中的内容
5)编写程序,完成insertDate(filename)函数的定义,将2020-07-21日期数据作为新的一列添加到Excel文件中,列名称为“监测日期”,保存在项目task030102下,文件命名为bj20200721.xlsx。
6)编写程序,完成aqi(filename)函数的定义,显示空气质量指数类别为优的记录。
7)编写程序,导入模块,调用自定义的readFile、printInfo、insertDate、aqi函数,实现上述功能,注意参数的正确设置。
8)将运行结果截图,保存在考生文件夹下,以task2.jpg文件命名。

答案:

import pandas  ## pandas 提供了大连能使我们快速便捷的处理数据的函数和方法

# 读取数据
def readFile(filename):
    file = pandas.read_csv(filename, sep='\t', encoding='utf-8') ##读取csv文件
    return file


# 显示内容
def printInfo(filename):
    file = readFile(filename)  ## 读取数据
    print(file)

# 插入数据
def insertDate(filename):
   file = readFile(filename)
   file['监测日期'] = pandas.to_datetime('2021-09-10') ##插入列
   file.to_excel('./bj20200721.xlsx') ## 写入excel格式文件中

# 筛选数据
def aqi(filename):
    file = readFile(filename)
    print(file.loc[file['空气质量指数类别'] == '优'])  ## 筛选空气质量指数类别为优的数据


if __name__ == '__main__':
    filename = './bj20200721.csv'
    readFile(filename)
    printInfo(filename)
    print('----------------------------------------')
    insertDate(filename)
    print('插入时间成功')
    print('-----------------------------------')
    aqi(filename)

任务3:数据可视化

使用Python读取bj20200721.csv文件(bj20200721.csv文件保存在源素材文件夹下src3目录中)中的数据,使用matplotlib绘制直方图,显示aqi最少的4个监测点。
1)使用Pycharm在考生文件夹下创建项目task030103,在项目下创建python文件,命名为task3.py。将源素材文件夹下的src3目录复制到项目task030103下。
2)根据实际项目需求进行问题分析,书写注释。
3)编写程序,使用pandas读取bj20200721.csv文件中的数据。使用matplotlib绘制直方图,显示AQI最少的4个监测点,如图H2-1-2所示。生成的文件保存在项目task030103下,文件命名为aqi.png。
答案:

import pandas as pd
import matplotlib.pyplot as plt
# 设置格式显示中文,显示正负号
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = 'False'
# 读取文件
data = pd.read_csv('./src3/bj20200721.csv', sep='\t', encoding='utf-8')
# 设置画布大小,清晰度
plt.figure(figsize=(8, 7), dpi=100)
# 设置标题
plt.title('20200721北京AQI最少的4个监测点')
# 给读取的文件按值排序  by:排序类别   ascending:是否升序  选取前4个
file = data.sort_values(by='AQI', ascending=True)[:4]
print(file)
# 绘制直方图,设置横纵坐标,宽度
plt.bar(file['监测点'], file['AQI'], width=0.8)
plt.xlabel('监测点')  # 添加x轴名称
plt.ylabel('AQI')    # 添加y轴名称
plt.savefig('./api.png')  # 图形保存到本地
plt.show()