本文共 3690 字,大约阅读时间需要 12 分钟。
当我们需要处理结构化数据时,CSV文件是最常用的文件格式之一。以下将详细说明如何使用Python读取CSV文件并对数据进行分析与可视化操作。
CSV文件的内容通常采用一行一记录的方式,各个字段之间用特定的分隔符(如逗号、空格)分隔。例如,以下是常见的CSV文件格式:
10,张三,22,男,172,57,9511,李四,25,男,180,65,9012,王红,23,女,160,50,99
从上述数据可以看出:
在Python中,numpy.loadtxt() 是一个强大的工具,可以直接读取CSV文件并将其转换为二维数组。以下是该函数的基本用法:
import numpy as np# 读取 CSV 文件# 例如:aapl.csv 是一个包含股票数据的 CSV 文件# 逗号分隔值为默认分隔符# usecols 参数指定要读取的列索引# unpack=True 将多列数据转换为独立的数组# dtype 参数指定数据类型(缺省为浮点数)# converters 参数用于自定义字段转换函数# 读取特定列的数据dates, open_prices, high_prices, low_prices, close_prices = np.loadtxt( './aapl.csv', delimiter=',', usecols=(1, 3, 4, 5, 6), unpack=True, dtype=np.dtype('M8[D], f8, f8, f8, f8'), converters={1: dmy2ymd}) 在读取数据的同时,我们可以对特定字段进行自定义转换。例如,使用 dmy2ymd 函数将日期格式从 dd-mm-yyyy 转换为 yyyy-mm-dd 格式:
def dmy2ymd(dmy): dmy = str(dmy, encoding='utf-8') date = datetime.datetime.strptime(dmy, '%d-%m-%Y').date() ymd = date.strftime('%Y-%m-%d') return ymd 读取完成后,可以将数据进行展示。以下是一个简单的示例,使用 matplotlib 绘制股价走势图:
import matplotlib.pyplot as mpimport matplotlib.dates as md# 创建图表mp.figure('Candlestick', facecolor='lightgray')mp.title('Candlestick', fontsize=20)mp.xlabel('Date', fontsize=14)mp.ylabel('Price', fontsize=14)# 设置 x 轴格式ax = mp.gca()ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO))ax.xaxis.set_minor_locator(md.DayLocator())ax.xaxis.set_major_formatter(md.DateFormatter('%d %b %Y'))# 调整刻度样式mp.tick_params(labelsize=10)mp.grid(linestyle=':')# 读取日期数组dates = dates.astype(md.datetime.datetime)# 计算涨跌数据rise = (close_prices - open_prices) >= 0.01fall = (open_prices - close_prices) >= 0.01# 初始化颜色数组fc = np.zeros(dates.size, dtype='3f4')ec = np.zeros(dates.size, dtype='3f4')# 给涨跌数据赋予颜色fc[rise], fc[fall] = (1, 1, 1), (0, 0.5, 0)ec[rise], ec[fall] = (1, 0, 0), (0, 0.5, 0)# 绘制蜡烛图mp.bar(dates, high_prices - low_prices, 0, low_prices, color=fc, edgecolor=ec)mp.bar(dates, close_prices - open_prices, 0.8, open_prices, color=fc, edgecolor=ec)# 自动调整 x 轴格式mp.gcf().autofmt_xdate()mp.show() import numpy as npimport datetime as dtimport matplotlib.pyplot as mpimport matplotlib.dates as mddef dmy2ymd(dmy): dmy = str(dmy, encoding='utf-8') date = dt.datetime.strptime(dmy, '%d-%m-%Y').date() ymd = date.strftime('%Y-%m-%d') return ymd# 读取 CSV 文件dates, opening_prices, high_prices, low_prices, closing_prices = np.loadtxt( './aapl.csv', delimiter=',', usecols=(1, 3, 4, 5, 6), unpack=True, dtype=np.dtype('M8[D], f8, f8, f8, f8'), converters={1: dmy2ymd})# 打印日期数据print(dates)# 绘制蜡烛图mp.figure('Candlestick', facecolor='lightgray')mp.title('Candlestick', fontsize=20)mp.xlabel('Date', fontsize=14)mp.ylabel('Price', fontsize=14)ax = mp.gca()ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO))ax.xaxis.set_minor_locator(md.DayLocator())ax.xaxis.set_major_formatter(md.DateFormatter('%d %b %Y'))mp.tick_params(labelsize=10)mp.grid(linestyle=':')dates = dates.astype(md.datetime.datetime)rise = (closing_prices - opening_prices) >= 0.01fall = (opening_prices - closing_prices) >= 0.01fc = np.zeros(dates.size, dtype='3f4')ec = np.zeros(dates.size, dtype='3f4')fc[rise], fc[fall] = (1, 1, 1), (0, 0.5, 0)ec[rise], ec[fall] = (1, 0, 0), (0, 0.5, 0)mp.bar(dates, high_prices - low_prices, 0, low_prices, color=fc, edgecolor=ec)mp.bar(dates, closing_prices - opening_prices, 0.8, opening_prices, color=fc, edgecolor=ec)mp.gcf().autofmt_xdate()mp.show() 通过上述步骤,我们成功地读取了CSV文件并对数据进行了分析与可视化。这个过程包括数据读取、字段转换和可视化绘图等多个环节,每一步都需要细心处理以确保最终结果的准确性。
转载地址:http://gzofk.baihongyu.com/