Python/下载数据
Python/下载数据
- 处理CSV文件
- 分析CSV头文件
- 提取并读取数据
- 绘制气温图表
- 使用datetime模块获取日期
- 添加最低温度折线
- 给图表区域着色
- 处理JSON文件
- 下载json文件数据
- 提取相关数据
- 绘制收盘价折线图
- 数据统计分析
- 封装函数---==groupby()==
- 数据筛选
本篇将访问并可视化以两种常见格式存储的数据:CSV和JSON。将使用Python模块csv来处理CSV格式存储的天气数据,找出两个不同地区在一段时间内的最高温度和最低温度。然后,我们将使用matplotlib根据下载的数据创建一个图表,展示两个不同地区的气温变化:阿拉斯加锡特卡和加州死亡谷;将使用模块json来访问以JSON格式存储的交易收盘价数据,并使用Pygal绘制图形以探索价格变化的周期性
处理CSV文件
从书籍配套资源下载源代码,获得数据文件sitka_weather_07-2014.csv到project文件夹下
分析CSV头文件
打开srv文件,获取srv首行头文件数据,且对应其其索引打印出来
# highs_lows.py
import csvfrom sqlalchemy import columnfile_name = 'sitka_weather_07-2014.csv'
with open(file_name) as f:reader = csv.reader(f)header_row = next(reader)# 调用next()一次,因此得到的是文件的第一行数据for index, column_header in enumerate(header_row): # 使用enumerate()获得每个元素的索引及其值print(index, column_header)
提取并读取数据
获取Max temperature列的数据
# highs_lows.py--snip--with open(filename) as f:highs=[]--snip--for row in reader:highs.append(int(row[1]))# 从首行文件头可知处于第二列的 Max TemperatureF 及为高温度print(highs)
绘制气温图表
将所获取的highs利用matplotlib的pyplot模块,用plot()绘制出折线图
# highs_lows.py
--snip--
fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(highs, c='red')plt.title('Daily high temperatures, July 2014', fontsize=24)
plt.xlabel('Daily', fontsize=16)
plt.ylabel('Temperature (F)', fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)plt.show()
使用datetime模块获取日期
使用datetime模块中的datetime类,调用strptime()方法接收各种实参,并因此决定解读日期
>>>from datetime import datetime
>>>first_data = datetime.strptime('2014-7-1', '%Y-%m-%d')
>>>Xprint(first_date)
2014-07-01 00:00:00
# highs_lows.py
import csv
from matplotlib import pyplot as plt
from datetime import datetimefile_name = 'sitka_weather_07-2014.csv'
with open(file_name) as f:reader = csv.reader(f)header_row = next(reader)head_file = {}dates, highs = [], []# 调用next()一次,因此得到的是文件的第一行数据for index, column_header in enumerate(header_row):# 使用enumerate()获得每个元素的索引及其值head_file[index] = [column_header]#print(index, column_header)for row in reader:# 提取每行数据highs.append(int(row[1]))# 从首行文件头可知处于第二列的 Max TemperatureF 及为高温度current_date = datetime.strptime(row[0], "%Y-%m-%d")dates.append(current_date)# print(highs)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('Daily', fontsize=16)
fig.autofmt_xdate()
# 绘制倾斜的日期
plt.ylabel('Temperature (F)', fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)plt.show()
添加最低温度折线
新增lows列表变量,记录2014的最低温度值,用于后续plot()方法中绘制出来
# highs_lows.py
import csv
from matplotlib import pyplot as plt
from datetime import datetimefile_name = 'sitka_weather_2014.csv'
with open(file_name) as f:reader = csv.reader(f)header_row = next(reader)head_file = {}dates, highs, lows = [], [], []# 调用next()一次,因此得到的是文件的第一行数据for index, column_header in enumerate(header_row):# 使用enumerate()获得每个元素的索引及其值head_file[index] = [column_header]#print(index, column_header)for row in reader:# 提取每行数据highs.append(int(row[1]))lows.append(int(row[3]))# 从首行文件头可知处于第二列的 Max TemperatureF 及为高温度current_date = datetime.strptime(row[0], "%Y-%m-%d")dates.append(current_date)# print(highs)fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c='red')
plt.plot(dates, lows, c='blue')plt.title('Daily high temperatures, 2014', fontsize=20)
plt.xlabel('Daily', fontsize=16)
fig.autofmt_xdate()
# 绘制倾斜的日期
plt.ylabel('Temperature (F)', fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=10)plt.show()
给图表区域着色
之前的案例已经显示了最高、低温度的折线,使用fill_between()
方法,接收一个x值和两个y值,并填充两个y值系列之间的空间
# highs_lows.py
fig=plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c='red', alpha=0.5)
plt.plot(dates, lows, c='blue', alpha=0.5)
plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)
# alpha参数指定颜色的透明度,0为完全透明,1为完全不透明
处理JSON文件
本节将使用到JSON格式的交易收盘价数据,并使用json模块处理它们,对收盘价数据进行可视化,以探索价格变化的周期性
需下载btc_close_2017.json文件
这个文件里是python列表,每个元素是包含5个键值对的字典dic:日期,月份,周数,周几,收盘价
下载json文件数据
从Github上下载btc_close_2017.json数据
# btc_close_2017.py
from urllib.request import urlopen
import json
json_url = <.json文件url路径> # 'https://raw.githubsercontent.com/muxuezi/btc/master/btc_close_2017.json'
response=urlopen(json_url)
# python向Github服务器发送请求btc_close_2017.json
req=response.read()
# 读取数据
with open(<.json文件物理地址>, 'wb') as f:# 将数据写入文件f.write(req)file_urllib=json.loads(req)
# 加载json格式,将文件内容转换成python能处理的格式,与直接下载的文件内容一致
print(file_urllib)
另外可以使用requests模块get()方法获取数据
import requests
json_url = <.json文件url地址>
req=requests.get(json.url)with open (<.json文件物理地址>, 'w') as f:f.write(req.text)# req的text属性可直接读取文件数据,返回字符串
file_requests=req.json()
# 将json文件的数据转换成python列表file_requests,与此前file_urllib内容相同
提取相关数据
import json
filename='btc_close_2017.json'
with open(filename) as f:btc_data=json.load(f)for btc_dict in btc_date:date = btc_dict['date']month = int(btc_dict['month'])week = int(btc_dict['week'])weekday = btc_dict['weekday']close = float(btc_dict['close'])print(' the date is {}, the month is {}, the week is {}, the weekday is {}, the close price is {} RMB'.format(date, month, week, weekday, close))
即可打印列表中每个字典的键值对
绘制收盘价折线图
本例使用pygal来实现收盘价的折线图
# btc_close_2017.py
import json
import pygal
filename='btc_close_2017.json'
with open(filename) as f:btc_data=json.load(f)dates=[]
months=[]
weeks=[]
weekdays=[]
close=[]
for btc_dict in btc_date:dates.append(btc_dict['date'])months.append(int(btc_dict['month']))weeks.append(int(btc_dict['week']))weekdays.append(btc_dict['weekday'])close.append(float(btc_dict['close']))
print(len(dates))
line_chart = pygal.Line(x_label_rotation=20, show_minor_x_labels=False)
# x_laber_rotation=20,令x坐标标签顺时针转20,show_minor_x_laberls=False,令不用显示所有x轴标签
line_chart._title = "close price"
line_chart.x_labels = dates
N = 20
line_chart._x_labels_major = dates[::N]
# 设置_xlabels_major属性,令x轴坐标隔20个显示一次
line_chart.add('close price', close)
line_chart.render_to_file('images/close price picture.svg')
研究时间序列的趋势,周期性,噪声;一般对非线性的趋势消除,进行logtransformation对数变换
import math
-snip-
print(len(dates))
line_chart = pygal.Line(x_label_rotation=20, show_minor_x_labels=False)
# x_laber_rotation=20,令x坐标标签顺时针转20,show_minor_x_laberls=False,令不用显示所有x轴标签
line_chart._title = "close price logtransfomation"
line_chart.x_labels = dates
N = 20
line_chart.x_labels_major = dates[::N]
# 设置_xlabels_major属性,令x轴坐标隔20个显示一次
close_log=[math.log10(n) for n in close]
line_chart.add('close price logtransformation', close_log)
line_chart.render_to_file('images/close price logtransformation picture.svg')
数据统计分析
利用json文件中的数据,绘制日均值,以及每周各天的日均值。可以将之前绘图代码封装成函数draw_line(x_data, y_data, title, y_legend)
,以便重复调用
封装函数—groupby()
python中的groupby函数主要的作用是进行数据的分组以及分组后的组内运算,for key group in groupby(列表, lambda c: c.function())
,实际上挑选规则是通过函数完成的,只要作用于函数的两个元素key相同,就能被分到同一组,返回key对应的每一组group;
y_list = [v for _, v in y]
这一行代码还不理解,显然-
就是key, [ ]就是一个生成器,用于获取对应key的group中的元素
from itertools import groupby
# groupby函数的主要作用是进行数据分组以及分组后的组内运算
def draw_line(x_data, y_data, title, y_legend):xy_map = []for x, y in groupby(sorted(zip(x_data, y_data)), key=lambda _: _[0]):y_list = [v for _, v in y]xy_map.append([x, sum(y_list)/len(y_list)])x_unique, y_mean = [*zip(*xy_map)]line_chart = pygal.Line()line_chart.title = titleline_chart.x_labels = x_uniqueline_chart.add(y_legend, y_mean)line_chart.render_to_file('images/'+title+'.svg')return line_chart
数据筛选
查看月日均值
# btc_close_2017.py
-snip-
idx_month = dates.index('2017-12-01')
# index()方法用于从列表中找出某个值第一个匹配项的索引值
line_chart_month = draw_line(months[:idx_month], close[:idx_month],'close monthly average price', 'monthly average price')
line_chart_month
查看周日均值
# btc_close_2017.py
-snip-
idx_month = dates.index('2017-12-01')
# index()方法用于从列表中找出某个值第一个匹配项的索引值
line_chart_month = draw_line(weeks[1:idx_month], close[1:idx_month],'close weekly average price', 'weekly average price')
line_chart_month
Python/下载数据相关推荐
- 16 使用Python下载数据
在本章中,你将从网上下载数据,并对这些数据进行可视化.网上的数据多得难以置信,且大多未经过仔细检查.如果能够对这些数据进行分析,你就能发现别人没有发现的规律和关联. 我们将访问并可视化以两种常见格式存 ...
- 使用python各种方法下载数据
python下载数据的各种方法 python下载数据的各种方法 我一开始写的下载代码 带有断点续传的request库方法(不一定能行) wget方法 python下载数据的各种方法 上一篇我写了怎么去 ...
- python下载文件到本地-Python下载网络文本数据到本地内存的四种实现方法示例
本文实例讲述了Python下载网络文本数据到本地内存的四种实现方法.分享给大家供大家参考,具体如下: import urllib.request import requests from io imp ...
- python利用tushare下载数据并计算当日收益率
python利用tushare下载数据并计算当日收益率 计算股票收益率的程序主要有以下几部分构成: 1.获取股票接口数据函数:pro_daily_stock() 2.计算收益率函数:cal_stock ...
- 利用python下载fnl数据方法
(1)下载python,网上下载方法很多,此处不再赘述,记得下载和电脑系统版本匹配的就好: (2)去ncar官网注册 https://rda.ucar.edu/ 先进行注册,需要注意的是注册最好用教育 ...
- NCEP再分析数据(FNL)Python下载
NCEP再分析数据(FNL)Python下载 楼主第一次接触WRF模型,最近在摸索该如何使用WRF和相关数据如何下载,简单记录一下. 数据网址: https://rda.ucar.edu/datase ...
- python批量下载数据|工具箱
现在很多数据提供HTTPServer下载服务,在这里介绍一种普遍适用的利用URL批量下载数据的python方法 前言 很多数据支持FTP下载,也提供OPeNDAP方式下载.两者的差异是显而易见的: ( ...
- 利用python下载哨兵1号轨道数据
python下载哨兵一号轨道数据 最近因为项目需要,突然想起来自己曾写过这么一份脚本,就顺便修改了一下.首先明确一下我们的目标,根据已经下载的哨兵1号影像文件,下载哨兵1号对应的精密轨道数据.哨兵轨道 ...
- python下载所有股票日交易数据
python下载所有股票日交易数据 一.下载 一.下载 #使用的变量a.b.c.d.e def DownStockData(StockCode):#引用 requests文件import reques ...
- 如何用python批量下载数据_Python批量下载地理空间数据云数据!Python无所不能!...
模拟登录 这里要用到两个包:requests和json.requests使用前得先安装:pip install requests. In [3]: 进群:548377875 即可获取数十套PDF哦! ...
最新文章
- 在window平台运行Dubbo的一个小demo
- 机器学习(十九)——PageRank算法, KNN, loss function详解
- flink sql 部署_在FlinkSQL中使用SQL client时,如何使用 query配置?
- 雨果vs.杰基尔:比较领先的静态网站生成器
- C++设置不定参数方法 简单示例
- 想转行数据分析,看完这篇再做决定
- 利用Python进行数据分析--数据规整化:清理、转换、合并、重塑
- BGP联邦原理及配置实例
- python异步io协程读文件_Python协程中的并行异步IO
- Ubuntu上安装gcc
- 射频电路设计——传输线理论
- 考核指标如CTR/CVR/ROI/ARPU等
- 升级计算机的图形卡和驱动程序,Win10更新显卡驱动程序后无法开机怎么办?解决方案...
- [科普] 狭义相对论
- 【Python表白小程序】七夕表白神器(赶紧收藏起来)
- python中扑克牌类设计_创建扑克牌类Python
- 李飞飞在谷歌开发者大会宣布谷歌AI中国中心正式成立
- oracle人民币大写转换
- 微信h5获取用户openid:基于vue3+springBoot
- 《红楼梦》人物关系有多复杂?一张图帮你理清楚!