大家好!这里是记录一个非专业的小白学习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()
运行结果及效果:
如果想了解更多知识点请关注作者,并多多点赞支持,您的观看点赞是对我最大回礼,最大的动力,谢谢。



