一、读取数据
1.read_csv()
函数参数:
filepath_or_buffer
:CSV文件的路径(字符串)或文件对象。sep
:字段分隔符,默认为逗号(,
)。可以使用其他字符或字符串作为分隔符,例如制表符(\t
)。header
:指定作为列名的行号,默认为'infer'
,表示使用文件中的第一行作为列名。可以使用整数值来指定特定行作为列名。index_col
:指定作为行索引的列号或列名。默认为None
,表示不使用任何列作为行索引。usecols
:指定要读取的列号或列名的列表,用于选择特定的列进行读取。dtype
:指定列的数据类型。可以是字典形式的列名和数据类型映射,也可以是一个数据类型,将应用于所有列。na_values
:将特定值解释为空值(缺失值)的列表或字典。parse_dates
:将指定的列解析为日期时间格式。可以是列号或列名的列表。nrows
:要读取的行数。默认为None
,表示读取所有行。skiprows
:要跳过的行数。可以是整数值或行号的列表。encoding
:CSV文件的编码方式。header
:指定是否存在列名行。默认为'infer'
,表示自动判断是否存在列名。skip_blank_lines
:是否跳过空白行,默认为True
。quotechar
:用于引用字段的字符,默认为双引号("
)。skipinitialspace
:是否跳过字段前面的空格,默认为False。
注:header参数,我理解的是就是第一行作为列名,seq就是一个分隔符,但是使用了这两个参数,我总是无法从数据中提取一个维度出来,删除之后,就可以了
使用read_csv读取后,数据类型是 <class 'pandas.core.frame.DataFrame'>,方便处理数据
2. with open
这种方式读取数据,可以看到创建了一个csv读取器,读取之后的数据类型是csv的。难以处理,但是可能读取较快
with open('D:\深度学习\数据集\ETDataset-main\ETT-small\ETTh1.csv', 'r') as file:
# 创建CSV读取器
datas= csv.reader(file)
二、iloc和loc用法区别:
-
iloc
(整数位置):- 语法:
dataframe.iloc[row_index, column_index]
iloc
主要用于基于整数的索引选择数据。- 您可以传递整数值或切片来指定要选择的行和列。
- 示例:从 DataFrame 中选择第 0 到 4 行(独占)和第 2 到 3 列(独占)。
dataframe.iloc[0:5, 2:4]
- 语法:
-
loc
(标签位置):- 语法:
dataframe.loc[row_label, column_label]
loc
用于根据基于标签的索引选择数据,这意味着您引用索引标签或列名,而不是整数位置。- 您可以传递标签值、切片或布尔条件来指定要选择的行和列。
- 示例:从 DataFrame 中选择索引标签为“A”到“E”(含)的行和标签为“X”到“Z”(含)的列。
dataframe.loc['A':'E', 'X':'Z']
- 语法:
重点区别是索引方式不同,iloc索引时是数字,loc索引是标签
三、画图不显示汉字问题,添加如下代码即可
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = [u'SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
四、由于数据量大,且每个字符长,占有存储空间大,所以不使用x的原有数值,使用相同大小的整数代替,下边是三种方式。
##1.列表推导式
numbers = [i for i in range(1, len(df)+1)]
##2.Python 的内置函数 range()
numbers = list(range(1, len(df)+1))
##3.循环加入列表
x=[]
for i in range(1,len(df)+1):
x.append(i)
五、颜色映射
我创建了一个包含4行1列的图形,并绘制了四条折线图。然后,我尝试使用颜色映射来为每条折线图赋予不同的颜色。配色方案多种多样,针对不同应用场景选择使用。对于数据量较少的,应该采用颜色鲜亮,对比鲜明的颜色。
-
'viridis':这是Matplotlib的默认配色方案,在视觉上具有很好的感知性,有较好的连续变化效果。它在色彩空间中变化明显,从低到高依次呈现出深绿、亮绿、黄和橙色。适用于表示渐变或连续的数据。
-
'coolwarm':这是一个双色调的配色方案,其中蓝色表示低值,红色表示高值,中间的白色表示中间值。它适用于表示正负变化或对比度。
-
'RdYlBu':这是一个红黄蓝的配色方案,适用于表示正负变化或对比度。红色表示高值,黄色表示中间值,蓝色表示低值。
-
'Set1'、'Set2'、'Set3':这些是一系列明亮且对比度较高的配色方案,每个方案包含多个不同的颜色。它们适用于分类数据,可以很好地区分不同的类别。
-
'Pastel':这个配色方案使用了一系列柔和的、带有较低饱和度的颜色。它适用于需要柔和、舒适感的可视化。
# 定义颜色映射
cmap = plt.cm.get_cmap('cool')
# 绘制折线图
axes[0].plot(x, y1,color=cmap(1.0))
axes[1].plot(x, y2,color=cmap(0.8))
axes[2].plot(x, y3,color=cmap(0.5))
axes[3].plot(x, y4,color=cmap(0.4))
# 添加颜色映射的颜色条
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=0, vmax=1))
sm.set_array([])
cbar = plt.colorbar(sm, ax=axes)
六、为显示美观
四个子图只显示最上边或最下边的坐标轴刻度,添加一个sharex参数
fig, axes = plt.subplots(4, 1, sharex=True,figsize=(90, 16),dpi=80)
# 隐藏除第一个子图外的其他子图的x轴刻度标签和标签
for ax in axes[:-1]:
plt.setp(ax.get_xticklabels(), visible=False)
ax.set_xlabel('')
完整代码如下:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('D:\深度学习\数据集\ETDataset-main\ETT-small\ETTh1.csv')
df = data.iloc[3000:8000, 0:].values
x = list(range(1, len(df) + 1))
y1 = df[:, 1]
y2 = df[:, 2]
y3 = df[:, 3]
y4 = df[:, 4]
# plt.figure(figsize=(150, 16),dpi=80)
# 创建一个包含 4 行 1 列的图形,并获取子图对象
fig, axes = plt.subplots(4, 1, sharex=True,figsize=(200, 16),dpi=80)
# 定义颜色映射
cmap = plt.cm.get_cmap('viridis')
# 绘制折线图
axes[0].plot(x, y1,color=cmap(0.9))
axes[1].plot(x, y2,color=cmap(0.7))
axes[2].plot(x, y3,color=cmap(0.4))
axes[3].plot(x, y4,color=cmap(0.2))
# 添加颜色映射的颜色条
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=0, vmax=1))
sm.set_array([])
cbar = plt.colorbar(sm, ax=axes)
# 隐藏除第一个子图外的其他子图的x轴刻度标签和标签
for ax in axes[:-1]:
plt.setp(ax.get_xticklabels(), visible=False)
ax.set_xlabel('')
plt.xlim(0,5000)
plt.xticks(range(0, 5000, 500))
plt.show()