大数据技术原理与应用之可视化实训

这篇具有很好参考价值的文章主要介绍了大数据技术原理与应用之可视化实训。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

第一部分 实训题目与要求

1 问题提出

1.1实训任务1

1.2实训任务2

2功能要求

2.1实训任务1

2.2实训任务2

第二部分 设计实训题目功能

1 总体设计

1.1实训任务1

1.2实训任务2

2主要函数设计

2.1实训任务1

2.2实训任务2

3 问题与改进

第三部分 实训效果

一、实训任务1

二、实训任务2

第四部分 实训总结

1 结束语

附录A 程序清单

参考文献


《大数据技术原理与应用》实训报告

2020/2021 学年第一学期

目录

                                                      

第一部分 实训题目与要求……………………………………………………………………….. 4

1 问题提出………………………………………………………………………………….. 4

2 功能要求………………………………………………………………………………….. 4

第二部分 设计实训题目功能…………………………………………………………………… 4

1 总体设计………………………………………………………………………………….. 4

2主要函数设计………………………………………………………………………………   5

3 问题与改进………………………………………………………………………………... 6

第三部分 实训效果………………………………………………………………………………. 7

一、实训任务1………………………………………………………………………………   7

二、实训任务2………………………………………………………………………………   7

第四部分 实训总结………………………………………………………………………………. 7

1 结束语……………………………………………………………………………………... 7

附录A 程序清单…………………………………………………………………………………. 8

参考文献…………………………………………………………………………………………. 28

                                                                               

第一部分 实训题目与要求

1 问题提出

1.1实训任务1

对2017南京某几个月的天气分析,并能够使用合适的图例展示相关的数据

1.2实训任务2

利用爬虫技术爬取天气预报网并对爬取出来的数据进行可视化分析

2功能要求

2.1实训任务1

  1. 五月份南京最高温最大值、最低温最小值和最大温差及对应的日期。
  2. 五月份不同天气对应的天数和雨天的百分比。
  3. 五月份不同风向对应的天数和出现最多的风向。
  4. 五月份风力超过3级的天数。
  5. 绘制五月份南京高温、低温(柱状)及温差(折线)示意图,并标注温差最大的点。
  6. 绘制五月份南京天气情况分布饼图。
  7. 作柱状图比较5月、6月、7月三个月的最高温度和最低温度。

2.2实训任务2

从天气后报网(http://www.tianqihoubao.com/)爬取自己家乡所属城市过去一个月每天的最高温度和最低温度,并绘制一个月内最高温度和最低温度的走势比较图。

第二部分 设计实训题目功能

1 总体设计

1.1实训任务1

在对天气数据的分析过程中,需要有些python基础,需要用到的库有csv库,numpy库以及matplotlib库。

首先是先对给出的天气数据进行分析,根据任务需求进行程序代码的编写分析完天气数据,根据分析后的数据进行绘图。

1.2实训任务2

爬虫需有html,js以及css基础以及会一些爬虫相关库和绘图库的使用。首先获取url网站源码,将获取到的网页进行分析将抓取到的数据以csv文件保存在本地上,之后根据所需要的数据需求进行编写程序代码最后对文件数据进行分析绘图。

2主要函数设计

2.1实训任务1

对2017南京某几个月的天气分析,并能够使用合适的图例展示相关的数据

  1. 五月份南京最高温最大值、最低温最小值和最大温差及对应的日期。
  2. 五月份不同天气对应的天数和雨天的百分比。
  3. 五月份不同风向对应的天数和出现最多的风向。
  4. 五月份风力超过3级的天数。
  5. 绘制五月份南京高温、低温(柱状)及温差(折线)示意图,并标注温差最大的点。
  6. 绘制五月份南京天气情况分布饼图。
  7. 作柱状图比较5月、6月、7月三个月的最高温度和最低温度。

设计思路:

数据分析-绘制图形

已知给出2017年五月,六月,七月三个月的天气情况的csv文件,首先要先用到csv库,进行对csv文件读取,然后开始对数据进行分析处理。分析小任务1到6都是分析五月份的数据,所以说前面6个小任务首先就是要把五月这其中的一个月单 独取出来放在一个集合中,从csv文件中的数据分析中,可以知道每列分别代表着日期,最高温,最低温,天气,风向,风力,所对应的下标就分别为[0],[1] ,[2],[3],[4],[5],之后进行程序代码的编写,分别计算出相应结果。数据分析之后就进行绘图,利用matplotlib库进行绘 制对应的图形,最后以plt.show()将图形展示出来结束程序。

南京天气csv文件如下:

大数据技术原理与应用之可视化实训

绘制出的图形如下

大数据技术原理与应用之可视化实训

2.2实训任务2

从天气后报网(http://www.tianqihoubao.com/)爬取自己家乡所属城市过去一个月每天的最高温度和最低温度,并 绘制一个月内最高温度和最低温度的走势比较图。

设计思路:

爬虫(获取数据-解析数据-保存数据) 绘图(分析数据-进行绘图)

先分析任务要求,这次任务是为了爬取天气后报网中所在家乡城市的过去一个月天气情况。我的家乡在江西上饶,首先要先进入网站,地址url为: “http://www.tianqihoubao.com/" ,进入http://www.tianqihoubao.com/这个网站,然后选择要爬取的城市,选择江西[1]上饶,然后再选择2020年12月的天气历史情况

具体步骤如下操作

进入天气后报官网

大数据技术原理与应用之可视化实训

进入我所在的地区--江西上饶的12月历史天气网址

大数据技术原理与应用之可视化实训

获取并分析网站源码

大数据技术原理与应用之可视化实训

通过对html代码分析发现,过去一个月的天气情况都是在“tr”元素之中

大数据技术原理与应用之可视化实训

注:完整程序请参见附录A。

3 问题与改进

3.1实训任务1

问题:python基础没有学扎实牢固,写的代码过于繁琐冗余,没有进行好的算法处理导致一个简单的任务需要用到许多步骤 以及代码才能完成,代码书写规范也有欠缺,变量命名不规范,不会命名的都以中文拼音进行命名有损代码美观性以及 可读性。

改进: 实训结束后加强对python基础的学习,将基础学好,也养成一个规范书写代码的好习惯

3.2实训任务2

问题:前端知识尚欠缺,要用到的HTML,JavaScript以及CSS都没有进行较为深入的学习,还有需要用的到爬虫库也没有 学习,导致在完成任务2过程中出现了许许多多大大小小的改进: 简要学习前端(HTML,JavaScript,CSS)的一些知识内容,了解常用的一些爬虫框架以及相关库的使用。

第三部分 实训效果

一、实训任务1

1. 五月份南京最高温最大值、最低温最小值和最大温差及对应的日期。

大数据技术原理与应用之可视化实训

2. 五月份不同天气对应的天数和雨天的百分比。 

大数据技术原理与应用之可视化实训

大数据技术原理与应用之可视化实训 3. 五月份不同风向对应的天数和出现最多的风向。

 大数据技术原理与应用之可视化实训

4. 五月份风力超过3级的天数。

大数据技术原理与应用之可视化实训

5. 绘制五月份南京高温、低温(柱状)及温差(折线)示意图,并标注温差最大的点。

法一: ⮚ 出现的问题:y轴的刻度问题

 大数据技术原理与应用之可视化实训

大数据技术原理与应用之可视化实训

法二:

大数据技术原理与应用之可视化实训

大数据技术原理与应用之可视化实训

6.绘制五月份南京天气情况分布饼图。 

大数据技术原理与应用之可视化实训

 大数据技术原理与应用之可视化实训

7.作柱状图比较5月、6月、7月三个月的最高温度和最低温度。 

大数据技术原理与应用之可视化实训

大数据技术原理与应用之可视化实训

二、实训任务2

 从天气后报网(http://www.tianqihoubao.com/)爬取自己家乡所属城市过去一个月每天的最高温度和最低温度, 并绘制一个月内最高温度和最低温度的走势比较图。

大数据技术原理与应用之可视化实训

大数据技术原理与应用之可视化实训

大数据技术原理与应用之可视化实训

大数据技术原理与应用之可视化实训

大数据技术原理与应用之可视化实训

第四部分 实训总结

1 结束语

        通过这次的实训周的学习,收获了许多。这周的实训任务是对天气情况进行数据可视化操作,这不乏就用到了python语言。鉴于此前学过Java语言和自学了python语言自然就得心应手,也更能检验自己之前学的如何,以及将所学的运用到项目开发实践中。之后还有个扩展题,是运用到了爬虫技术,先爬取网页上的天气数据,将网页上爬取出来的数据进行可视化分析,这也就增加了一些难度。经过对爬虫的初步学习了解,大致能够了解爬虫的一些原理,并能够爬取部分一些简单的网页。总结一下这次的实训,收获如下:

        通过对python的再学习,更发现了python语言的优势。除了简单易读,python最大的特点就是具有丰富强大的库,因此常常被人称为“胶水语言”。比如,读取csv文件用到csv库,对数据可视化需要用到的库就有matplotlib库,对数据处理分析用到numpy库等,对于爬虫,就有用到requests库,也知道了r equests主要是构造网络请求,获取网页内容,后续的解析、存储都要另行解决。scrapy 是框架,可以说是爬虫的打包方案,除了上述构造请求、拿内容、解析、存储外,还可以做分布式爬虫,挂代理,等等一大堆功能。BeautifulSoup是一个解析库,它也可以很好地从URL中获取内容,并且可以毫无麻烦地解析它们中的某些部分。它只会提取您给出的URL的内容,然后停止。它不会抓取,除非您手动将其放入具有特定条件的无限循环中。

        这次实训不仅检验了我此前对专业知识学习的能力,也巩固了学的知识并能够学以致用,还找出了学习过程中以及开发中出现的问题。比如说Python基础没有学的深入,对一些函数,字典等基础理解不够透彻,导致在编写程序代码中遇到各种大大小小的问题,即使如此,通过老师的指导,百度及CSDN的查找和自我的思考,最终基本都解决了出现的问题,并加深了印象。

        结束了这次的实训周的学习,完成了本次的实训任务,到这里就结束啦,总的来说,比较顺利的完成了这次的实训任务,学习到了很多专业上的新知识,积累了项目开发的经验和提高自身编写代码的能力,通过之前的理论真正的运用到现在的实操上,编写开发出真正有用的程序。这次实训结束之后,我也领悟到了“学以致用”,“学无止境”的含义,在今后的学习中不断加强自我学习能力,提高自己的专业能力,继续努力,不断提升自己!

附录A 程序清单

所需要的nanjing_weather.csv文件在:南京的天气情况的数据文件-Python文档类资源-CSDN下载

任务一:

1)五月份南京最高温最大值、最低温最小值和最大温差及对应的日期。代码如下:

# -*- codeing utf-8 -*-
# @Time : 2020/12/30 10:20
# @Author : 小刘
# @File : 第一题.py # @Software : PyCharm
import csv 
import numpy as np
#读取CSV中气象数据
#title=['日期','最高温度','最低温度','天气','风向','风力'] 
weather_nj=[]
with open("nanjing_weather.csv","r") as file:
    reader=csv.reader(file)     
    for row in reader:         
        weather_nj.append(row)
#    print(weather_nj)
#切片五月的温度列表、天气列表和风列表
#temps=[[item[0],item[1],item[2],str(eval(item[1])-eval(item[2]))] for item in weather_nj if item[0][5]=='5']
temps=[]
for item in weather_nj:     
    if item[0][5]=='5':     #判断是否为5,即五月份    
        temp=[item[0],item[1],item[2],str(eval(item[1])-eval(item[2]))]         
        temps.append(temp)
#print(temps)#打印时间,最高温,最低温,日温差
##五月的最高温集合
highs = []  #创建一个列表
for row in temps:
    high = int(row[1])  #将列表中的字符串 转换成数值型
    highs.append(high)            #获得第二行的 的数据, 即每天的最高温度 
    max = np.max(highs)
#print(temps[0])
print("五月份南京最热温度是:%d℃"%max)
#五月的最低温集合
shorts = [] 
for row in temps:
    short = int((row[2]))     
    shorts.append(short)
min = np.min(shorts)
print("五月份南京最低温度是:%d℃"%min)
#温差
temp = [] 
for row in temps:     
    t = int(int(row[1])-int(row[2]))     
    temp.append(t)
max1=np.max(temp) 
print("五月份南京的最大温差为:%d℃"%max1)
#最高气温最大值和最低气温最小值的日期
date = [] 
for row in temps:     
    date = row[0]
    #date.append(d)     
    if int(row[1])==max:
        print("日期:%s"%date,"最高气温:%d℃"%max)
    elif int(row[2])==min:         
        print("日期:%s"%date,"最低气温:%d℃"%min)
#五月份南京最大温差所对应的日期
date = [] 
for row in temps:     
    date = row [0]     
    if int (int(row[1])-int(row[2])) == max1:         
        print("日期:%s"%date,"温差最大:%d℃"%max1)

运行结果如下

大数据技术原理与应用之可视化实训

2)五月份不同天气对应的天数和雨天的百分比。代码如下:

# -*- codeing utf-8 -*-
# @Time : 2020/12/30 10:26
# @Author : 小刘
# @File : 第二题.py
# @Software : PyCharm
#引入包
import csv
nj=[] 
with open("nanjing_weather.csv",'r') as file:
    reader=csv.reader(file)      
    for row in reader:         
        nj.append(row)
#weather列表将筛选出五月的存放进来
weather=[] 
for item in(nj):
    if item[0][5]=='5':
        temp=[item[0],item[1],item[2],item[3]]      
        weather.append(temp)
cloudy = 0  #多云 
shower = 0  #阵雨 
overcast = 0  #阴天 
sun = 0  #晴
thundershower = 0  #雷阵雨 
lightrain = 0   #小到中雨
#遍历列表,if判断天气,如果true,则累加
for i in range(len(weather)):     
    if weather[i][3] =='晴':
        sun+=1     
    elif weather[i][3] =='多云':
        cloudy+=1     
    elif weather[i][3] =='阵雨':
        shower+=1     
    elif weather[i][3] =='阴':
        overcast+=1     
    elif weather[i][3] =='雷阵雨':
        thundershower+=1     
    elif weather[i][3] =='小到中雨':         
        lightrain+=1
w=[('多云',cloudy),('阵雨',shower),('阴',overcast),('晴',sun),('雷阵雨',thundershower),('小到中雨',lightrain)]
rain = shower+thundershower+lightrain   #雨天的天数 
sum=rain+cloudy+overcast+sun    #总天数
a=round((rain/sum)*100,2)       #round方法保留小数后两位 
print("南京五月份的天气情况为:\n",w,"\n其中,雨天出现的比例为:%s%%"%a)

 运行结果如下

大数据技术原理与应用之可视化实训

3)五月份不同风向对应的天数和出现最多的风向。代码如下: 

# -*- codeing utf-8 -*-
# @Time : 2020/12/30 13:54
# @Author : 小刘
# @File : 第三题.py
# @Software : PyCharm 
import csv
import numpy as np
nj=[]
with open("nanjing_weather.csv",'r') as file:
    reader=csv.reader(file)   
    for row in reader:      
        nj.append(row)
#weather列表将筛选出五月的存放进来
weather=[] 
for item in(nj):
    if item[0][5]=='5':
        temp=[item[0],item[1],item[2],item[3],item[4],item[5]]     
        weather.append(temp)
#初始化风向次数
SouthWind = 0   #南风
SouthEast = 0   #东南风
EastWind  = 0   #东风
NorthWest = 0   #西北风
NorthWind = 0   #北风
WestWind  = 0   #西风
NorthEast = 0   #东北风
SouthWest = 0   #西南风
#遍历列表,if判断风向,如果true,则累加风向次数
for i in range(len(weather)):   
    if weather[i][4] =='南风':
        SouthWind += 1    
    elif weather[i][4] =='东南风':
        SouthEast += 1    
    elif weather[i][4] =='东风':
        EastWind += 1
    elif weather[i][4] =='西北风':
        NorthWest += 1   
    elif weather[i][4] =='北风':
        NorthWind += 1    
    elif weather[i][4] =='西风':
        WestWind += 1    
    elif weather[i][4] == '东北风':
        NorthEast += 1   
    elif weather[i][4] == '西南风':
        SouthWest += 1
a=[('南风',SouthWind),('东南风',SouthEast),('东风',EastWind),('西北风',NorthWest),('北风',NorthWind),('西风',WestWind),('东北风',NorthEast),('西南风',SouthWest)] 
print("南京五月的刮风情况为:\n",a,"\n",('即:南风%d天'%SouthWind),('东南风%d天'%SouthEast),('东风%d天'%EastWind),('西北风%d天'%NorthWest),('北风%d天'%NorthWind),('西风%d天'%WestWind),('东北风%d天'%NorthEast),('西南风%d天'%SouthWest))
#求最多风向的次数以及对应的风向
windly = [] 
for i in a:
    w = int(i[1])    
    windly.append(w) 
    m = np.max(windly)
    for i in a:
        if i[1]==m:
            wind=i
print("南京五月份刮得最多的风是%s,一共刮了%d天。"%(wind[0],wind[1]))

 运行结果如下

大数据技术原理与应用之可视化实训

4)五月份风力超过3级的天数。代码如下:

# -*- codeing utf-8 -*-
# @Time : 2020/12/30 15:25
# @Author : 小刘
# @File : 第四题.py
# @Software : PyCharm import csv
#列表存放csv文件中的
nj=[]
with open("nanjing_weather.csv",'r') as file:
    reader=csv.reader(file)    
    for row in reader:    
        nj.append(row)
#weather列表将筛选出五月的存放进来
weather=[]
for item in nj:
    if item[0][5]=='5':
        temp=[item[0],item[1],item[2],item[3],item[4],item[5]]   
        weather.append(temp)
#定义一个空列表,遍历weather,将遍历后超过数字超过3的进行累加,计算风力超过三级的
WindPower=0
for item in weather:    
    if item[5][0]>'3':
        WindPower+=1
print('南京五月份共有%d天风力超过3级'%WindPower)

 运行结果:

大数据技术原理与应用之可视化实训

5)绘制五月份南京高温、低温(柱状)及温差(折线)示意图,并标注温差最大的点。代码如下:

# -*- codeing utf-8 -*-
# @Time : 2020/12/31 16:02
# @Author : 小刘
# @File : 第五题.py
# @Software : PyCharm
import csv
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
#读取CSV中气象数据
#title=['日期','最高温度','最低温度','天气','风向','风力'] 
weather_nj=[]
with open("nanjing_weather.csv","r") as file:
    reader=csv.reader(file)    
    for row in reader:      
        weather_nj.append(row)
#    print(weather_nj)
#切片五月的温度列表、天气列表和风列表
#temps=[[item[0],item[1],item[2],str(eval(item[1])-eval(item[2]))] for item in weather_nj if item[0][5]=='5']
temps=[]
for item in weather_nj:    
    if item[0][5]=='5':        
        temp=[item[0],item[1],item[2],str(eval(item[1])-eval(item[2]))]  
        temps.append(temp)
#print(temps)
##五月的最高温集合
highs = []  #创建一个列表
for row in temps:
    high = int(row[1])  #将列表中的字符串 转换成数值型
    highs.append(high)            #获得第二行的 的数据, 即每天的最高温度 max = np.max(highs)
#print(temps[0])
print("五月份南京最热温度是:%d℃"%max)
#五月的最低温集合
shorts = [] 
for row in temps:
    short = int((row[2])) 
    shorts.append(short)
min = np.min(shorts)
print("五月份南京最低温度是:%d℃"%min)
#温差
temp = [] 
for row in temps:  
    t = int(int(row[1])-int(row[2]))  
    temp.append(t)
max1=np.max(temp)
print("五月份南京的最大温差为:%d℃"%max1)
#最高气温最大值和最低气温最小值的日期
date = []
for row in temps:   
    date = row[0]
    #date.append(d)  
    if int(row[1])==max:
        print("日期:%s"%date,"最高气温:%d℃"%max)
    elif int(row[2])==min:      
        print("日期:%s"%date,"最低气温:%d℃"%min)
#五月份南京最大温差所对应的日期
date = []
for row in temps:    
    date = row [0]   
    if int (int(row[1])-int(row[2])) == max1:   
        print("日期:%s"%date,"温差最大:%d℃"%max1)
matplotlib.rcParams['font.sans-serif'] = ['SimHei']#字体 fig=plt.figure(dpi=128,figsize=(10,5))  #设置窗口大小 
x =np.arange(1,32) 
y2=highs
y1=shorts
wencha=temp
bar_width = 0.4
plt.bar(x , height=y1, label='低温', color='lightblue', alpha=0.8, width=bar_width,zorder=0) 
plt.bar(x - bar_width, height=y2, label='高温', color='red', alpha=0.3, width=bar_width,zorder=0) 
plt.plot(x,wencha,label='温差',zorder=0)
#标注
plt.scatter(26,14,s=50,color="red",label='最大温差',zorder=1)
plt.plot([26,0], [14,14],'g--',[26,26], [14,0], 'g--', lw=2)
plt.annotate("温差最大为:14",color="red",xy=(26,14),xycoords='data',xytext=(+30,-30),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle="->",connectionstyle='arc3,rad=0.9'))
plt.annotate("",color="black",xy=(28,14),xycoords='data',xytext=(+30,-30),textcoords='offset points',fontsize=10,arrowprops=dict(arrowstyle="->",connectionstyle='arc3,rad=0.9'))
plt.scatter(28,14,s=50,color="red",label='最大温差',zorder=1)
plt.plot([28,26], [14,14],'g--',[28,28], [14,0], 'g--', lw=2)
plt.title("南京五月份高低气温及温差示意图")
# 为两条坐标轴设置名称
plt.xlabel("日期/日") 
plt.ylabel("温度/摄氏度")
# 显示图例
plt.xlim(0,32) 
plt.legend() 
plt.show()

运行结果如下:

大数据技术原理与应用之可视化实训

 6)绘制五月份南京天气情况分布饼图。代码如下:

# -*- codeing utf-8 -*-
# @Time : 2020/12/30 20:51
# @Author : 小刘
# @File : 第六题.py
# @Software : PyCharm
#引入包
import matplotlib.pyplot as plt
import csv 
nj=[] 
with open("nanjing_weather.csv",'r') as file:
    reader=csv.reader(file)      
    for row in reader:         
        nj.append(row)
#weather列表将筛选出五月的存放进来
weather=[]
for item in(nj): 
    if item[0][5]=='5':
        temp=[item[0],item[1],item[2],item[3]]  
        weather.append(temp)
#定义并初始化各天气情况
cloudy = 0#多云 
shower = 0#阵雨 
overcast = 0#阴天
sun = 0#晴
thundershower = 0#雷阵雨
lightrain = 0#小到中雨
#遍历列表,if判断天气,如果true,则累加
for i in range(len(weather)):    
    if weather[i][3] =='多云':
        cloudy+=1    
    elif weather[i][3] =='阵雨':
        shower+=1     
    elif weather[i][3] == '晴':    
        sun += 1     
    elif weather[i][3] =='阴':
        overcast+=1    
    elif weather[i][3] =='雷阵雨':
        thundershower+=1     
    elif weather[i][3] =='小到中雨':   
        lightrain+=1
#将得到的天气出现的次数放进集合w中
w=[]
w=[('多云',cloudy),('阵雨',shower),('阴',overcast),('晴',sun),('雷阵雨',thundershower),('小到中雨',lightrain)]
rain = shower+thundershower+lightrain   #雨天的天数 
sum=rain+cloudy+overcast+sun    #总天数
a=round((rain/sum)*100,2)       #round方法保留小数后两位 
print("南京五月份的天气情况为:\n",w,"\n其中,雨天出现的比例为:%s%%"%a)
#计算五月份各天气情况的占比
cloudy = (cloudy/sum)*100 
shower = (shower/sum)*100 
sun = (sun/sum)*100 
overcast = (overcast/sum)*100
thundershower = (thundershower/sum)*100
lightrain = (lightrain/sum)*100
#开始画饼图
plt.rcParams['font.sans-serif']=['SimHei']#正常显示中文汉字 
plt.rcParams['figure.figsize'] = [12,8] #图的大小 
plt.rcParams['legend.fontsize'] = 15     #右下角图例大小 
labels='多云','阵雨','阴','晴','雷阵雨','小到中雨'  #每部分的标签名 
sizes=[cloudy,shower,sun,overcast,thundershower,lightrain]   #占比大小
explode=(0.1,0.1,0.1,0.1,0.1,0.1)   #分割出第二个分片,0表不分割,数值表示分割多少
fig1,ax1=plt.subplots()  #建立主画布,并在其上绘制子图 
ax1.pie(sizes,explode=explode,labels=labels,autopct='%1.2f%%', shadow=True,startangle=90,textprops={"fontsize":12,"color":"k"})  
#绘制饼状图,%1.2f%%保留百分比后的两位小数                
#textprops={"fontsize":12,"color":"k"}设置饼的字体和颜色 
ax1.axis('equal')    #等轴绘制,保证饼图绘制出来以后是圆形
plt.title("南京五月份天气情况分布图",size=20)#标题,标题大小为20
plt.legend(loc='lower right')#图例,放在右下方 
plt.show()  #显示绘制的图

运行结果如下:

大数据技术原理与应用之可视化实训

 7)作柱状图比较5月、6月、7月三个月的最高温度和最低温度。代码如下:

# -*- codeing utf-8 -*-
# @Time : 2020/12/29 20:12
# @Author : 小刘
# @File : 7.py
# @Software : PyCharm
#引入库
import csv 
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"]#显示中文标签 
plt.rcParams["axes.unicode_minus"]=False
#创建weather_nj的集合
weather_nj = []
#打开csv文件并读取,"r"表示只读,as将文件取个别名,便于写代码
with open("nanjing_weather.csv","r") as file:
    reader = csv.reader(file) 
    for i in reader:
        weather_nj.append(i)
       # print(i)        #打印遍历后的天气情况
#==========================================================
print("五月的气温:")
#创建temps集合,用于存放索引切片后的数组集合数据,切片五月份的天气情况(日期,最高温,最低温,天气,风向,风级)
temps = []                      #创建空列表temps
for item in weather_nj:         #遍历
    if item[0][5] == "5":       #五月份
        temp = [item[0],item[1],item[2],str(eval(item[1])-eval(item[2]))]#eval去引号,并将最高温和最低温相减得到温差值,即得到temp[3]为温差
        temps.append(temp)      #获得temp数据
#        print(temp)             #打印temp
#创建一个hights集合,用于存放最高气温数据 highs = []              #创建空列表hights
for h in temps:         #遍历temps列表
    Max = int(h[1])     #将第二列列表类型转换为int数值类型并存放在Max
    highs.append(Max)   #获得第二列的数据,即最高气温
max = np.max(highs)     #得到最高气温中的最大值 
#print(max)              #打印最高气温的最大值
#创建一个lows集合,用于存放最低气温数据 
lows = []               #创建空列表lows
for l in temps:         #遍历temps
    Min = int(l[2])     #将第三列列表类型转换为int数值类型  
    lows.append(Min)    #获得第三列数据,即最低气温
min = np.min(lows)      #得到最低气温的最小值
#print(min)              #打印最低气温的最小值
#根据最高气温和最低气温的最值来求出对应的日期
for row in temps:   
    date = row[0]    
    if int(row[1])== max:
        print("最高温度:",date,max)    
    elif int(row[2])==min:      
        print("最低温度:",date,min)
#==========================================================
print("六月的气温:")
#创建temps集合,用于存放索引切片后的数组集合数据,切片五月份的天气情况(日期,最高温,最低温,天气,风向,风级)
temps = []                      #创建空列表temps 
for item in weather_nj:         #遍历
    if item[0][5] == "6":       #五月份
        temp = [item[0],item[1],item[2],str(eval(item[1])-eval(item[2]))]#eval去引号,并将最高温和最低温相减得到温差值,即得到temp[3]为温差
        temps.append(temp)      #获得temp数据
#        print(temp)             #打印temp
#创建一个hights集合,用于存放最高气温数据
highs = []              #创建空列表hights
for h in temps:         #遍历temps列表
    Max = int(h[1])     #将第二列列表类型转换为int数值类型并存放在Max  
    highs.append(Max)   #获得第二列的数据,即最高气温
max = np.max(highs)     #得到最高气温中的最大值 
#print(max)              #打印最高气温的最大值
#创建一个lows集合,用于存放最低气温数据
lows = []               #创建空列表lows
for l in temps:         #遍历temps
    Min = int(l[2])     #将第三列列表类型转换为int数值类型
    lows.append(Min)    #获得第三列数据,即最低气温
min = np.min(lows)      #得到最低气温的最小值
#print(min)              #打印最低气温的最小值
#根据最高气温和最低气温的最值来求出对应的日期
for row in temps:    
    date = row[0]    
    if int(row[1])== max:
        print("最高温度:",date,max)  
    elif int(row[2])==min:     
        print("最低温度:",date,min)
#==========================================================
print("七月的气温:")
#创建temps集合,用于存放索引切片后的数组集合数据,切片五月份的天气情况(日期,最高温,最低温,天气,风向,风级)
temps = []                      #创建空列表temps 
for item in weather_nj:         #遍历  
    if item[0][5] == "7":       #五月份
        temp = [item[0],item[1],item[2],str(eval(item[1])-eval(item[2]))]#eval去引号,并将最高温和最低温相减得到温差值,即得到temp[3]为温差
        temps.append(temp)      #获得temp数据
#        print(temp)             #打印temp
#创建一个hights集合,用于存放最高气温数据 
highs = []              #创建空列表hights 
for h in temps:         #遍历temps列表
    Max = int(h[1])     #将第二列列表类型转换为int数值类型并存放在Max     
    highs.append(Max)   #获得第二列的数据,即最高气温
max = np.max(highs)     #得到最高气温中的最大值 
#print(max)              #打印最高气温的最大值
#创建一个lows集合,用于存放最低气温数据
lows = []               #创建空列表lows 
for l in temps:         #遍历temps
    Min = int(l[2])     #将第三列列表类型转换为int数值类型   
    lows.append(Min)    #获得第三列数据,即最低气温
min = np.min(lows)      #得到最低气温的最小值
#print(min)              #打印最低气温的最小值
#根据最高气温和最低气温的最值来求出对应的日期
for row in temps:     
    date = row[0]   
    if int(row[1])== max:
        print("最高温度:",date,max)    
    elif int(row[2])==min:   
        print("最低温度:",date,min)
#==========================================================
x0=[5,6,7] 
x1=[5,6,7]
x2 = [5,6,7] 
x1=[i - 0.2 for i in x1] 
x2=[i + 0.4 for i in x1]
y1=[14,18,23]
y2=[34,33,40]
plt.bar(x1 ,y1,width=0.3,alpha=0.3) 
plt.bar(x2,y2,width=0.3,alpha=0.3)
#最低温度标注
plt.text(x1[0], y1[0], y1[0], ha='center', va='bottom', fontsize=10)#设置标注
plt.text(x1[1], y1[1], y1[1], ha='center', va='bottom', fontsize=10)#设置标注 
plt.text(x1[2], y1[2], y1[2], ha='center', va='bottom', fontsize=10)#设置标注
#最大温度标注
plt.text(x2[0], y2[0], y2[0], ha='center', va='bottom', fontsize=10)#设置标注
plt.text(x2[1], y2[1], y2[1], ha='center', va='bottom', fontsize=10)#设置标注 
plt.text(x2[2], y2[2], y2[2], ha='center', va='bottom', fontsize=10)#设置标注
#标题
plt.title("五,六,七三个月的最高温和最低温比较",size=20) 
plt.xlabel("月份/月",size=18)#size设置字体大小 
plt.ylabel("温度/℃",size=18)
#设置x刻度名称
tick_label = ["五月","六月","七月"]
plt.xticks(x0, tick_label,size=10)
#结束画图,将图显示出来
plt.show()

运行结果如下:大数据技术原理与应用之可视化实训

 任务二:

爬取家乡2020年12月一整月的天气预报情况

# -*- codeing utf-8 -*-
# @Time : 2020/12/31 18:57
# @Author : 小刘
# @File : 上饶天气.py
# @Software : PyCharm
#爬取网页进行获取数据,网址:http://www.tianqihoubao.com/lishi/shangrao/month/202012.html
#源码分析
#导入所需要的库
import requests
from bs4 import BeautifulSoup 
import pandas as pd
def get_data(url):
    resp = requests.get(url)     
    html = resp.content.decode('gbk')
    soup = BeautifulSoup(html,'html.parser')   
    tr_list = soup.find_all('tr')
    dates,condition,temp =[],[],[]    
    for data in tr_list[1:]:
        sub_data = data.text.split()    #删除空格  
        dates.append(sub_data[0])
        condition.append(''.join(sub_data[1:3]))       
        temp.append(''.join(sub_data[3:6]))
    _data = pd.DataFrame()
    _data['日期'] = dates
    _data['天气状况'] = condition
    _data['气温'] = temp
    _data = _data.drop_duplicates()   # 去重
    return _data
# city = input("请输入要查询的城市拼音:")
# year = input("请输入要查询的年份")
# month = input("请输入要查询的月份:")
# print(f"{city}{year}年{month}月的历史天气情况:")
# url = f'http://www.tianqihoubao.com/lishi/{city}/month/{year}+{month}.html'
url = 'http://www.tianqihoubao.com/lishi/shangrao/month/202012.html'
data_1_month = get_data(url)
#data_2_month = get_data('http://www.tianqihoubao.com/lishi/shangrao/mouth/202010.html')
#data_3_month = get_data('http://www.tianqihoubao.com/lishi/shangrao/mouth/202011.html')
data = pd.concat([data_1_month]).reset_index()
data.index += 1 
#print("序号",end="") 
print("***上饶的2020年12月天气情况***\n",data) 
data.to_csv('shangrao.csv',index=False,encoding='utf-8')   # 保存文件

 运行结果如下:

大数据技术原理与应用之可视化实训

可视化代码:

# -*- codeing utf-8 -*-
# @Time : 2021/1/1 12:47
# @Author : 小刘
# @File : 天气可视化.py
# @Software : PyCharm
#引入包
import csv
import matplotlib 
import numpy as np 
import matplotlib.pyplot as plt
#读取CSV中气象数据
weather_sr=[]
with open("shangrao.csv","r",encoding="utf-8") as file:
    next(file)  #跳过第一行     
    reader=csv.reader(file)    
    for row in reader:       
        weather_sr.append(row)
print(weather_sr)
#将最高温和最低温筛选出来
weather=[] 
for item in(weather_sr):   
    temp=item[3]     
    weather.append(temp)
print(weather)
#温度
h,l = [],[]
for i in weather:
    h.append(int(i.split('℃')[0]))
    l.append(int(i.split('℃')[1][1:]))
print(h)
#日期
date = np.arange(1,len(h)+1,1)
#开始绘图
plt.figure(dpi=128,figsize=(10,6))  #设置窗口大小
#画出l1,l2折线图
l1,=plt.plot(date,h,color='red',label="最高温度",alpha=0.5) 
l2,=plt.plot(date,l,color='lightblue',label="最低温度")
#x轴和y轴的取值范围
plt.xlim(0,32)
plt.ylim(-10,20)
#显示中文标签
plt.rcParams["font.sans-serif"]=["SimHei"] 
plt.rcParams["axes.unicode_minus"]=False
#标注最高温
for i in range(0,len(h)):
    plt.text(date[i], h[i], h[i], ha='center', va='bottom', fontsize=10)
#标注最低温
for j in range(0,len(l)):
    plt.text(date[j], l[j], l[j], ha='center', va='bottom', fontsize=10)
plt.title("上饶12月的天气最高温和最低温的趋势图",size=14)
plt.xlabel("日期/日",size=14) 
plt.ylabel("温度/摄氏度",size=14)
#plt.legend(l1,"最高温度")
#plt.legend(l2,"最低温度") 
plt.legend()
plt.show()

运行结果:

大数据技术原理与应用之可视化实训文章来源地址https://www.toymoban.com/news/detail-482946.html

参考文献

到了这里,关于大数据技术原理与应用之可视化实训的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用

     随着航空、航天、近地空间等多个遥感平台的不断发展,近年来遥感技术突飞猛进。由此,遥感数据的空间、时间、光谱分辨率不断提高,数据量也大幅增长,使其越来越具有大数据特征。对于相关研究而言,遥感大数据的出现为其提供了前所未有的机遇,但同时也提出了

    2023年04月23日
    浏览(48)
  • 三维重建 阈值分割 3D可视化 医学图像分割 CT图像分割及重建系统 可视化编程技术及应用

    此系统实现了常见的VTK四视图,实现了很好的CT图像分割,可以用于骨骼,头部,肺部,脂肪等分割,,并且通过三维重建实现可视化。使用了第三方库 VTK,ITK 实现分割和生不重建。 窗口分为 (横断面)、冠状面、矢状面,和3D窗口;包含了体绘制和面绘制; 效果: CT分割

    2024年02月08日
    浏览(57)
  • 【数据挖掘与人工智能可视化分析】可视化分析:如何通过可视化技术进行数据挖掘和发现

    作者:禅与计算机程序设计艺术 数据挖掘(Data Mining)和人工智能(Artificial Intelligence,AI)已经成为当今社会热点话题。这两者之间的结合也带来了很多挑战。作为数据科学家、机器学习工程师、深度学习研究员等,掌握了数据的获取、清洗、处理、建模、应用这些技术的前提下,

    2024年02月07日
    浏览(78)
  • 数字孪生3D可视化技术在数字化水利行业中的应用

    城市供水数字孪生系统是一种基于web3d开发和数字孪生技术构建的智能运维系统,它可以将实际设备与虚拟模型相结合,实现对城市供水系统的实时监测、预测和优化。 智慧供水系统是智慧水务建设的新目标与新高度,能够实现城市内部原水供水以及污水处理中水务流程的可

    2024年02月07日
    浏览(69)
  • 利用Python进行数据可视化Plotly与Dash的应用【第157篇—数据可视化】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 数据可视化是数据分析中至关重要的一环,它能够帮助我们更直观地理解数据并发现隐藏的模式和趋势。在Python中,有许多强大的工具可以用

    2024年04月14日
    浏览(71)
  • WebGL开发数据可视化应用

    使用WebGL进行数据可视化可以创造出令人印象深刻的交互式和动态图形。以下是一些在WebGL中开发数据可视化应用时需要考虑的步骤和技术,希望对大家有所帮助。 1.选择合适的WebGL框架或库: 使用现有的WebGL框架或库,如Three.js、Babylon.js、regl等,以简化开发过程并提供强大的

    2024年02月20日
    浏览(84)
  • 数据可视化高级技术Echarts(堆叠柱状图)

    目录 一.如何实现 二.代码展示 1.stack名称相同(直接堆叠) 2. stack名称不相同(相同的堆叠,不同的新生成一列) 数据堆叠,同个类目轴上系列配置相同的  stack  值可以堆叠放置。即在series中将设置stack即可。其他设置与普通柱状图相同, 参考文章: 数据可视化高级技术

    2024年04月10日
    浏览(46)
  • 数据的语言:学习数据可视化的实际应用

    数据可视化应该学什么?这是一个在信息时代越来越重要的问题。随着数据不断增长和积累,从社交媒体到企业业务,从科学研究到医疗健康,我们都面临着海量的数据。然而,数据本身往往是冰冷、抽象的数字,对于大多数人而言,很难从中获得实质性的信息。这时,数据

    2024年02月11日
    浏览(37)
  • Python应用实例(二)数据可视化(一)

    数据可视化指的是通过可视化表示来探索数据。它与数据分析紧密相关,而数据分析指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表示的小型数字列表,也可以是数千兆字节的数据。 漂亮地呈现数据并非仅仅关乎漂亮的图片。通过以引人注目的简

    2024年02月16日
    浏览(44)
  • Python应用实例(二)数据可视化(三)

    本节将使用Python包Plotly来生成交互式图表。需要创建在浏览器中显示的图表时,Plotly很有用,因为它生成的图表将自动缩放以适合观看者的屏幕。Plotly生成的图表还是交互式的:用户将鼠标指向特定元素时,将突出显示有关该元素的信息。 在这个项目中,我们将对掷骰子的结

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包