zoukankan      html  css  js  c++  java
  • 全国最气温统计及气温排名

                                                          一个完整的大作业

    1.选择一个自己感兴趣的问题

           我选取的是一个中国天气预报网站,爬去‘’ http://www.weather.com.cn/textFC/hb.shtml‘’的内容。

           全球气候变暖是一种和自然有关的现象,是由于温室效应不断积累,导致地气系统吸收与发射的能量不平衡,能量不断在地气系统累积,从而导致温度上升,造成全球气候变暖。在人类近代历史中才有一些温度记录。这些记录的来源不同,精确度和可靠性也参差不齐。在1850年前的一两千年中,虽然曾经出现中世纪温暖时期与小冰河时期,但是大众一直相信全球温度是相对稳定的。在1860年才有类似全球温度的仪器记录,当年的记录很少考虑的城市热岛效应的影响。但是根据仪器记录,1860~1900年期间,全球陆地与海洋的平均温度上升了0.75℃;自1979年开始,陆地温度上升幅度约为海洋温度上升幅度的一倍(陆地温度上升了0.25℃,而海洋温度上升了0.13℃)。同年,人类开始利用卫星温度测量来量度对流层的温度,发现对流层的温度每十年上升0.12℃至0.22℃。2000年之后,多方组织对过去1000年的全球温度进行了研究,对这些研究成果进行对比和讨论后发现,自1979年开始的气候转变的过程是十分清晰。此外,其他的研究报告显示,从20世纪初开始至今,地球表面的平均温度增加了约1.1f(0.6℃);在过去的40年中,平均气温上升约0.5f(0.2-0.3℃);在20世纪,全球变暖的程度是更超过在过去400-600年中任何一段时间.。

     2.网络上爬取相关的数据。

    源代码如下:
    import time
    from echarts import Echart, Bar, Axis
    from bs4 import BeautifulSoup  # 网络分析
    
    # pip install echarts-python 百度开源的做图标的库
    # 定义全局列表
    TEMPERAUTE_LIST = []
    CITY_LIST = []
    MIN_LIST = []
    MAX_LIST = []
    
    
    # 定义获取并过滤数据函数
    def get_temperature(url):
        res = requests.get(url)
        res.encoding = 'utf-8'
        soup = BeautifulSoup(res.text, 'html.parser')
        conMidtab = soup.find('div', class_='conMidtab')
        conMidtab2_list = conMidtab.find_all('div', class_='conMidtab2')
        for x in conMidtab2_list:
            tr_list = x.find_all('tr')[2:]
            province = ''
            min = 0
            for index, tr in enumerate(tr_list):
                # 如果是第0个tr标签,那么城市名名和省份是放在同一行tr的,省份名放在td[0],城市名放在td[1]
                if index == 0:
                    td_list = tr.find_all('td')
                    province = td_list[0].text.replace('
    ', '')
                    city = td_list[1].text.replace('
    ', '')
                    max = td_list[4].text.replace('
    ', '')
                    min = td_list[7].text.replace('
    ', '')
                else:
                    # 如果不是第0个tr标签,那么在这个tr标签中只存放城市名,城市名放在td[0]
                    td_list = tr.find_all('td')
                    city = td_list[0].text.replace('
    ', '')
                    max = td_list[3].text.replace('
    ', '')
                    min = td_list[6].text.replace('
    ', '')
                # print(province + '省  ' + city + '市', max + '℃', min + '℃')
                TEMPERAUTE_LIST.append({
                    'city': province + city,
                    'min': min
                })
                CITY_LIST.append(province + city)
                MIN_LIST.append(min)
    
    
    def main():
        urls = ['http://www.weather.com.cn/textFC/hb.shtml ',
                'http://www.weather.com.cn/textFC/db.shtml ',
                'http://www.weather.com.cn/textFC/hd.shtml ',
                'http://www.weather.com.cn/textFC/hz.shtml ',
                'http://www.weather.com.cn/textFC/hn.shtml ',
                'http://www.weather.com.cn/textFC/xb.shtml ',
                'http://www.weather.com.cn/textFC/xn.shtml ',
                ]
        for url in urls:
            get_temperature(url)
            time.sleep(2)
    
        SORTED_TOP20_TEMPERATURE_LIST=sorted(TEMPERAUTE_LIST,lambda
            x,y:cmp(int(x['min']),int(y['min'])))
        TOP20_TEMPERATURE_LIST =SORTED_TOP20_TEMPERATURE_LIST[0:20]
        TOP20_CITY_LIST =[]
        TOP20_MIN_LIST =[]
        for city_min in TOP20_TEMPERATURE_LIST:
            TOP20_CITY_LIST.append(city_min['city'])
            TOP20_MIN_LIST.append(city_min['min'])
    
    
        echart = Echart(u'全国最低温度排名', u'气温统计')
        bar = Bar(u'最低温度', TOP20_MIN_LIST)  # 纵坐标
        axis = Axis('category', 'bottom', data=TOP20_CITY_LIST)  # 横坐标
        echart.use(bar)  # 画布画纵坐标
        echart.use(axis)  # 画布画横坐标
        echart.plot()
    
    
    if __name__ == '__main__':
        main()
    

    3、运行结果:  

    全国最高最低气温统计表

    全国最低气温排名

  • 相关阅读:
    随笔
    转:windows 下 netsh 实现 端口映射(端口转发)
    2015年01月01日:新年第一天:happy new year to myself
    谨记一次问题排查经历
    新机器,分区为NTFS, 安装 Windows XP、Windows Server 2003 时蓝屏问题,修改为 FAT32 即可
    Oracle 11g 的bug?: aix 上,expdp 11.2.0.1 导出,impdp 11.2.0.3 导入,Interval 分区的 【Interval】 分区属性成了【N】
    Cursor for loop in Oracle
    Oracle date 详解
    oracle中to_timestamp和to_date什么区别
    Oracle FM FM09999999 确保8位数字 即使全是0
  • 原文地址:https://www.cnblogs.com/garxiu/p/7716205.html
Copyright © 2011-2022 走看看