栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

练习题15-10,csv文件--10.3学习日记

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

练习题15-10,csv文件--10.3学习日记

大家好!这里是记录一个非专业的小白学习python的路径,完全是零基础自学。由于作者刚刚大学毕业所学专业找到的工作不太喜欢,工作空闲时间长,在职学习python语言,想借助这个平台记录一下自己学习的路径,文章有什么错误也希望大佬们积极指出,万分感谢!希望同大家一起学习,一起进步,谢谢。内容基于书籍python编程:从入门到实践    作者:Eric Matthes [美]
 

一、复习昨日之学习

昨天主要学习的内容是复习第十五章的内容,下面已练习15-10作为这一章节的结束。

练习15-10:尝试使用 matplotlib 通过可视化来模拟掷骰子 的情况,并尝试使用 Pygal 通过可视化来模拟随机漫步的情况。

掷骰子:

#coding=gbk
#die.py 文件名为die
from random import randint
from random import choice
import matplotlib.pyplot as plt
import pygal



class Die():
	#表示一个骰子的类
	def __init__(self,num_sides=6):
		#骰子数默认为6
		self.num_sides = num_sides
	def roll(self):
		#返回一个位于1和骰子面数之间的值
		return randint(1,self.num_sides)

#创建两个个D6的骰子实例
die_1=Die()
die_2=Die()
results= [] #将掷骰子结果存储到列表中
for roll_num in range(1000):#掷1000次
	result = die_1.roll()+die_2.roll()
	results.append(result)



#分析结果
frequencies =[]
max_result=die_1.num_sides*2
for value in range(2,max_result+1):#遍历1-36
	frequency = results.count(value)#计数results列表中出现value次数
	frequencies.append(frequency)
x=list(set(results))

plt.bar(x,frequencies)
plt.xticks(x)#设置x坐标的值
plt.xlabel("Reault")
plt.ylabel("Frequency of result")
plt.show()

运行效果:

 随机漫步:

#coding=gbk
from random_walk import RandomWalk #引进RandomWalk 类

import pygal

rw =RandomWalk(5000)
rw.fill_walk()

chart =pygal.XY(stroke = False)#不连线
chart.title="RandomWalk"
xy_list=[]
for (x,y) in zip(rw.x_values,rw.y_values):
	xy_list.append((x,y))
chart.add('data',xy_list)
chart.render_to_file("RandomWalk.svg")

效果图:

 二、今日新学习

第十六章下载数据

1.从网上下载数据,基于本书是有配套源代码的所以下载本书配套文件打开源代码文件16章中下面代码所有用到的文件都在其中。如果没有找到本书的配套文件可以关注作者私聊可以发送给您。

2.首先引csv库,用open() 的方式打开文件并阅读它,获得其中想要的文件数据所在的列以及索引,由于scv文件是由一系列字符串组成个字符串中间用逗号隔开。所以需要将获取的数据数字化。

#coding=gbk


#highs_lows.py
import csv #引入库


#从文件中获取最高气温
filename = 'sitka_weather_07-2018_simple.csv'
with open(filename) as f:
	reader = csv.reader(f) #创建相关联的阅读器
	header_row = next(reader)
#	for index, column_header in enumerate(header_row):#获取每个元素的索引和值
#		print(index,column_header)#得到日期和最高气温的索引为2和5
	
	
	highs = []
	for row in reader:
		high = int(row[5])#将获取的字符串变为整数(数字化)
		highs.append(high)
	print(highs)

运行结果:[62, 58, 70, 70, 67, 59, 58, 62, 66, 59, 56, 63, 65, 58, 56, 59, 64, 60, 60, 61, 65, 65, 63, 59, 64, 65, 68, 66, 64, 67, 65]

同理获取时间数据也是一样的原理,可以使用datetime库中的strptime()函数,使用原理见下段代码。

 3.绘制气温图表,引进matplotlab 库使用plot()函数,matplotlab绘图的使用方法详情可以关注作者并翻阅9.30号的学习日记。前面获取了最高温度和时间,可以在获取最低温度的数据将它们绘制在同一个图中,为了方便观看最低与最高的区间将它们之间填充起来。在获取数据过程中,有可能从网上下载过来的文件不完整,导致一部分数据丢失而造成程序运行值错误,可以使用测试文件的方式来避免错误,其完整源代码如下:

#coding=gbk


#highs_lows.py
import csv #引入库
from matplotlib import pyplot as plt 
from datetime import datetime #引进datetime库


#从文件中获取日期、最高气温和最低气温
filename = 'sitka_weather_07-2018_simple.csv'
with open(filename) as f:
	reader = csv.reader(f) #创建相关联的阅读器
	header_row = next(reader)
	for index, column_header in enumerate(header_row):#获取每个元素的索引和值
		print(index,column_header)#得到日期和最高气温的索引为2和5,6为最低气温
	
	
	dates,highs,lows = [],[],[]
	for row in reader:
		try:#避免数据有误
			current_date = datetime.strptime(row[2],'%Y-%m-%d')#将日期字符串转变为数字
			dates.append(current_date)
			high = int(row[5])#将获取的字符串变为整数(数字化)
			highs.append(high)
		except ValueError:
			print(current_date,'missing date')
			
		else:
			low = int(row[6])
			lows.append(low)
	print(highs,lows)
			
#根据数据绘制图像
fig = plt.figure(dpi=128,figsize=(10,6))
plt.plot(dates,highs,c='red',alpha=0.5)#指定颜色透明度为0.5
plt.plot(dates,lows,c='blue',alpha=0.5)
plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.1)#调用函数将最高温度与最低温度之间填充


#设置图形格式
plt.title("Daily high and temperatures temperatures, July 2018",fontsize=24)
plt.xlabel("",fontsize=16)
fig.autofmt_xdate()#绘制斜的日期标签,避免重叠
plt.ylabel("Temperature(F)",fontsize=16)
plt.tick_params(axis='both',which='major',labelsize=16)
plt.show()

运行结果及效果:

 

 如果想了解更多知识点请关注作者,并多多点赞支持,您的观看点赞是对我最大回礼,最大的动力,谢谢。

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/286639.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号