前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。
点击跳转:人工智能从入门到精通教程
本文电子版获取方式:
「Python入门笔记(七).pdf」,复制整段内容,打开最新版「夸克APP」即可获取。
链接:https://pan.quark.cn/s/28f5fc0cfd49
第十五章. 下载数据
15.1 csv文件
例1:分析CSV文件头
CSV文件其文件以纯文本的形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。
next()返回文件的下一行
import csv # 用于分析CSV文件中的数据行
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f: # 打开文件,并将结果文件对象存储在f中
reader = csv.reader(f) # 创建与该文件相关联的阅读器对象,并存储在reader中
header_row = next(reader) # 第一行
print(header_row) # 输出显示第一行
数据太多这里剪切一部分
reader处理文件以逗号分隔第一行数据,并存储在列表中。
例2:打印文件头及其位置
为让文件头数据更容易理解,将列表中的每个文件头及其位置打印出来。
调用enumerate()来获取每个元素的索引及其值
import csv # 用于分析CSV文件中的数据行
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f: # 打开文件,并将结果文件对象存储在f中
reader = csv.reader(f) # 创建与该文件相关联的阅读器对象,并存储在reader中
header_row = next(reader) # 第一行
for index, column_header in enumerate(header_row): # 调用enumerate()来获取每个元素的索引及其值
print(index, column_header)
这里截取一部分图
例3:提取并读取数据
阅读器对象从其停留的地方继续往下读取CSV文件,每次都自动返回当前所处位置的下一行,由于我们已经读取了文件头行,这个循环将从第二行开始,这行便是数据。
import csv # 用于分析CSV文件中的数据行
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f: # 打开文件,并将结果文件对象存储在f中
reader = csv.reader(f) # 创建与该文件相关联的阅读器对象,并存储在reader中
header_row = next(reader) # 第一行
highs = [] # 空列表
for row in reader: # 遍历每行
high = int(row[1]) # str转int
highs.append(high) # 每行的第1个元素,从第0个开始
print(highs)
例:绘制气温图表
import csv # 用于分析CSV文件中的数据行
from matplotlib import pyplot as plt # 画图需要
# 从文件中获取最高气温
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f: # 打开文件,并将结果文件对象存储在f中
reader = csv.reader(f) # 创建与该文件相关联的阅读器对象,并存储在reader中
header_row = next(reader) # 第一行
highs = [] # 空列表
for row in reader: # 遍历每行
high = int(row[1])
highs.append(high) # 每行的第1个元素,从第0个开始
print(highs)
# 根据数据绘制图像
fig = plt.figure(dpi=128, figsize=(10, 6)) #设置图像大小尺寸
plt.plot(highs, c='red')
# 设置图形的格式
plt.title("Daily high temperatures, July 2014", fontsize=24) # 标题
plt.xlabel('', fontsize=16) # x轴
plt.ylabel("Temperature(F)", fontsize=16) # y轴
plt.tick_params(axis='both', which='major', labelsize=16) # 刻度标记大小
plt.show()
datetime模块
from datetime import datetime
first_date = datetime.strptime('2014-7-1', '%Y-%m-%d') # 第一个参数传入实参,第二个给设置的格式
print(first_date)
2014-07-01 00:00:00
‘%Y-’ 让python将字符串中第一个连字符前面的部分视为四位的年份;
‘%m-’ 让python将第二个连字符前面的部分视为表示月份的数字;
‘%d’ 让python将字符串的最后一部分视为月份中的一天
方法strptime()可接受各种实参,并根据它们来决定如何解读时期,下表列出这些实参:
实参 | 含义 |
---|---|
%A | 星期的名称,如Monday |
%B | 月份名,如January |
%m | 用数字表示的月份(01~12) |
%d | 用数字表示的月份的一天(01~31) |
%Y | 四位的年份,如2020 |
%y | 两位的年份,如20 |
%H | 24小时制的小时数(00~23) |
%I | 12小时制的小时数(01~12) |
%p | am或pm |
%M | 分钟数(00~59) |
%S | 秒数(00~61) |
例2:在图表中添加日期
import csv # 用于分析CSV文件中的数据行
from matplotlib import pyplot as plt # 画图需要
from datetime import datetime # 将字符串转换为对应日期需要
# 从文件中获取最高气温和日期
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f: # 打开文件,并将结果文件对象存储在f中
reader = csv.reader(f) # 创建与该文件相关联的阅读器对象,并存储在reader中
header_row = next(reader)
dates, highs = [], [] # 日期,最高温度初始化为空列表
for row in reader: # 遍历每行
current_date = datetime.strptime(row[0], "%Y-%m-%d") # 每行第零个元素
dates.append(current_date) # 添加日期
high = int(row[1]) # 最高温度转化为整型
highs.append(high) # 添加温度
# 根据数据绘制图像
fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c='red')
# 设置图形的格式
plt.title("Daily high temperatures, July 2014", fontsize=24) # 标题
plt.xlabel('', fontsize=16) # x轴
fig.autofmt_xdate() # 绘制斜的x轴标签
plt.ylabel("Temperature(F)", fontsize=16) # y轴
plt.tick_params(axis='both', which='major', labelsize=16) # 刻度标记大小
plt.show()
例3:添加更多数据,涵盖更长的时间
这里只是换了一个数据更多的文件,改了一个标题
import csv # 用于分析CSV文件中的数据行
from matplotlib import pyplot as plt # 画图需要
from datetime import datetime # 将字符串转换为对应日期需要
# 从文件中获取最高气温和日期
filename = 'sitka_weather_2014.csv'
with open(filename) as f: # 打开文件,并将结果文件对象存储在f中
reader = csv.reader(f) # 创建与该文件相关联的阅读器对象,并存储在reader中
header_row = next(reader) # 第一行
dates, highs = [], [] # 日期,最高温度初始化为空列表
for row in reader: # 遍历每行
current_date = datetime.strptime(row[0], "%Y-%m-%d") # 每行第零个元素
dates.append(current_date) # 添加日期
high = int(row[1]) # 最高温度转化为整型
highs.append(high) # 添加温度
# 根据数据绘制图像
fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c='red')
# 设置图形的格式
plt.title("Daily high temperatures - 2014", fontsize=24) # 标题
plt.xlabel('', fontsize=16) # x轴
fig.autofmt_xdate() # 绘制斜的x轴标签
plt.ylabel("Temperature(F)", fontsize=16) # y轴
plt.tick_params(axis='both', which='major', labelsize=16) # 刻度标记大小
plt.show()
例4:再绘制一个数据系列
这里多绘制了一个最低温度
import csv # 用于分析CSV文件中的数据行
from matplotlib import pyplot as plt