网页“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()
**
使用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)
使用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()