美文网首页
《Python编程:从入门到实践》学习记录(16)项目-解析CS

《Python编程:从入门到实践》学习记录(16)项目-解析CS

作者: 垃圾简书_吃枣药丸 | 来源:发表于2020-08-19 14:04 被阅读0次

    # 解析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

    相关文章

      网友评论

          本文标题:《Python编程:从入门到实践》学习记录(16)项目-解析CS

          本文链接:https://www.haomeiwen.com/subject/bedrjktx.html