import requests as re def getText(url): r=re.get(url) r.raise_for_status() #r.encoding=r.apparent_encoding return r.text from bs4 import BeautifulSoup #import json def parsePage(txt): soup=BeautifulSoup(txt,'html.parser') month=[] for line in soup.find_all('tr'): #print(line) td=line.find_all('td') td=td[:3] day=[] for every in td: every=str(every.string).strip() #print(every) day.append(every+',') month.append(day) month=month[1:] #print(month) return month def lister(): list=[] for j in range(2020,2023): year=[] for i in range(1,13): month=[] if i<10: i='0'+str(i) else: i=str(i) url=r'http://tianqihoubao.com/aqi/beijing-'+str(j)+i+'.html' txt=getText(url) month=parsePage(txt) #print(month) #break print('{}{}is finished'.format(j,i)) year.append(month) list.append(year) print('\n') with open('数据.csv','w',encoding='UTF-8') as f: f.writelines(['日期,','质量等级,','AQI指数,\n']) for list in year: for month in year: #print(month) #break for day in month: day.append('\n') f.writelines(day) import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 def Isee(name,values): #饼图 labels = name sizes = values explode = (0,0,0,0.2,0) plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150) plt.title("环境饼图") plt.show() def point(date,IQA): #月折线图 names =date x = range(len(names)) #y = [0.855, 0.84, 0.835, 0.815, 0.81] y1=IQA #plt.plot(x, y, 'ro-') #plt.plot(x, y1, 'bo-') #pl.xlim(-1, 11) # 限定横轴的范围 #pl.ylim(-1, 110) # 限定纵轴的范围 plt.plot(x, y1, marker='o', mec='r', mfc='w',label=u'IQA') #plt.plot(x, y1, marker='*', ms=10,label=u'y=x^3曲线图') plt.legend() # 让图例生效 plt.xticks(x, names, rotation=45) plt.margins(0) plt.subplots_adjust(bottom=0.15) plt.xlabel(u"日期") #X轴标签 plt.ylabel("IQA指数") #Y轴标签 plt.title("该月IQA") #标题 plt.show() from pyecharts.charts import Bar from pyecharts import options as opts def touch(date,IQA): bar = Bar() bar.add_xaxis(date) bar.add_yaxis('IQA',IQA) bar.set_global_opts( title_opts=opts.TitleOpts(title="月柱状图"), datazoom_opts=[opts.DataZoomOpts()], ) bar.render() def everyYear(): #总折线图 pass import pandas as pd def readtxt(): df=pd.read_csv('数据.csv') return df if __name__=='__main__': lister() df=readtxt() dict=df['质量等级'].value_counts().to_dict() name=dict.keys() for n in name: dict[n]=dict[n]/5 values=dict.values() #print(name,values) Isee(name,values) date=df['日期'].to_list()[:30] IQA=df['AQI指数'].to_list()[:30] #print(date) #print(IQA) point(date,IQA) touch(date,IQA)
可能部分数据制表有问题,注意校对
IQA实验6
最新推荐文章于 2024-10-03 09:00:56 发布