IQA实验6

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)

可能部分数据制表有问题,注意校对

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值