很久以前接的单子,分享一下(挺水的,将就着看吧)
作业要求
《Python与数据分析》期末大作业要求(2020-2021学年第2学期) 一、期末作业要求: 1、在前期作业爬取的数据基础上,用Python编写代码对爬取的数据进行全面数据分析并可视化,鼓励建立计量模型进行分析; 2、写作期末大作业文档:整体思路,对爬取网站的分析,对数据进行哪些方面的数据分析及数据的可视化,结论。 3、必须自己编写爬虫程序,不允许使用爬虫框架(如scrapy) 爬取数据,严禁抄袭。 二、提交: 1、爬虫程序代码(前期作业)文件 (.ipynb),加, 上必要的注释或笔记说明; 2、数据分析、可视化代码文件(.ipynb) ,加上必要的注释或笔记说明; 3、抓取的数据文件及数据分析和可视化产生的中间文件; 4、期末作业文档。
数据爬取
import requests
from bs4 import BeautifulSoup
import re
import csv
fp = open("data.csv", "a+", newline="")
csv_fp = csv.writer(fp)
head = ['日期', '最高气温', '最低气温']
csv_fp.writerow(head)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
}
data = []
for i in range(2011, 2021):
for j in range(1, 13):
i = str(i)
if j < 10:
j = "0" + str(j)
else:
j = str(j)
url = "http://www.tianqihoubao.com/lishi/beijing/month/" + i + j + ".html"
response = requests.get(url=url, headers=headers)
response.encoding = 'gbk'
page = response.text
soup = BeautifulSoup(page, 'lxml')
tr_list = soup.find_all('tr')
for tr in tr_list:
one_day = []
tr = str(tr)
tr = tr.replace(" ", "")
date = re.findall(r'title="(.*?)北京天气预报">', tr)
if date:
one_day.append(date[0])
tem = re.findall(r'(.*?)℃', tr)
if tem:
one_day.append(tem[0])
one_day.append(tem[1])
if len(one_day) == 3:
data.append(one_day)
print(one_day)
csv_fp.writerow(one_day)
fp.close()
爬取结果
数据处理
import csv
from matplotlib import pyplot as plt
x = []
h = []
l = []
with open("data.csv") as f:
reader = csv.reader(f)
j = 1
for i, rows in enumerate(reader):
if i:
row = rows
print(row)
x.append(rows[0])
h.append(int(rows[1]))
l.append(int(rows[2]))
fig = plt.figure(dpi=128, figsize=(20, 6))
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.plot(x, h, c="red", alpha=0.5)
plt.plot(x, l, c="blue", alpha=0.5)
plt.fill_between(x, h, l, facecolor="blue", alpha=0.2)
plt.title("北京市过去3658天的气温变化")
plt.ylabel("气温")
plt.xlabel("日期")
plt.xticks(x[::300])
plt.show()
数据可视化
大作业文档
整体思路 爬取天气后保网站北京市过去9年(3658天)的最高温度和最低温度,并运用matplotlib绘制折线图进而分析天气变化趋势 网站分析 1.该网站单次只能查询一个月的天气情况,所以通过拼接url的方式依次查询 2.查询数据位于table表单中,tr标签没有属性,所有用正则匹配处理每个tr时需要判断有没有取到数据,日期,最高气温,最低气温都查询到时视为成功并存入总数据的列表 数据分析 1.通过过去3658天的气温变化,可以看出北京市每年的寒暑气温温差基本稳定在50度左右,而2015年寒暑温差超过60度 结论 1.北京市温度变化基本符合规律
|