pythoncsv讲解_《Python编程:从入门到实践》学习记录(16)项目-解析CSV与JSON;matplotlib, pygal绘图...

# 解析CSV天气数据并使用matplotlib将数据绘制成折线图

数据

image.png

解析数据与绘图

import csv

from matplotlib import pyplot as plt

from datetime import datetime

def read_data_from_csv():

"""

从CSV文件中读取日期/最高温/最低温数据

:return:

"""

# file_path = 'data/sitka_weather_07-2014.csv'

file_path = 'data/sitka_weather_2014.csv'

# file_path = 'data/death_valley_2014.csv'

with open(file_path) as csv_file:

csv_reader = csv.reader(csv_file)

# enumerate(iterable)可用来获取每个元素的索引

for index, item in enumerate(next(csv_reader)):

print(index, item)

# 日期

dates = []

# 用于保存每天的最高气温

highs = []

# 最低温

lows = []

for row in csv_reader:

# 将字符串转换为指定格式的datetime

dates.append(datetime.strptime(row[0], '%Y-%m-%d'))

# 最最高温数据

highs.append(int(row[1]))

# 最低温数据

lows.append(int(row[3]))

return [dates, highs, lows]

def draw(data):

"""

绘图

:param data: 日期与温度

:return:

"""

plt.figure(dpi=128, figsize=(10, 6))

# 绘制最高温

plt.plot(data[0], data[1], c='red')

# 绘制最低温

plt.plot(data[0], data[2], c='blue')

# 填充温度之间的区域

plt.fill_between(data[0], data[1], data[2], facecolor='blue', alpha=0.1)

plt.show()

draw(read_data_from_csv())

结果:

image.png

日期参数

image.png

# 解析股价走势json数据并使用pygal绘制折线图

数据

image.png

代码

import json

import pygal

def read_json_data_from_file(file_path: str):

"""

读取json文件数据

:param file_path:

:return: 解析的字典

"""

date = "date"

month = "month"

week = "week"

weekday = "weekday"

close = "close"

# 打开文件

with open(file_path) as json_file:

# 解析为json

json_data = json.load(json_file)

# 存储数据集

dates, months, weeks, weekdays, closes = [], [], [], [], []

# 遍历json数组

for json_obj in json_data:

# 每个json对象都是一个dict,取到json的每个属性值

dates.append(json_obj[date])

months.append(json_obj[month])

weeks.append(json_obj[week])

weekdays.append(json_obj[weekday])

closes.append(float(json_obj[close]))

return {"dates": dates, "months": months, "weeks": weeks, "weekdays": weekdays, "closes": closes}

def draw(data: dict):

"""绘图"""

line_chart = pygal.Line(x_label_rotation=20, show_minor_x_labels=False)

line_chart.title = "收盘价折线图"

line_chart.x_labels = data["dates"]

# X轴每隔20天显示一次

N = 20

line_chart.x_labels_major = data["dates"][::N]

line_chart.add("收盘价", data["closes"])

line_chart.render_to_file('收盘价折线图.svg')

json_file_path = "btc/btc_close_2017.json"

draw(read_json_data_from_file(json_file_path))

结果

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值