16 时间序列分析

16 时间序列分析

时间序列分析是数据分析中一个重要的部分,尤其是在金融、气象和其他需要随时间变化的数据处理中。Pandas 提供了强大的工具,让我们能够轻松地处理和分析时间序列数据。下面我们将探讨一些基础的时间序列操作和分析。

时间序列的创建

Pandas 中,时间序列通常是通过 DatetimeIndex 来实现的。我们可以通过 pd.date_range() 函数快速生成一个时间序列。

1
2
3
4
5
import pandas as pd

# 创建一个包含10天的日期范围
date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')
print(date_rng)

输出:

1
2
3
4
DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04',
'2023-01-05', '2023-01-06', '2023-01-07', '2023-01-08',
'2023-01-09', '2023-01-10'],
dtype='datetime64[ns]', freq='D')

时间序列数据的创建

通常,我们会将时间序列数据与一些数值数据结合在一起,下面是一个简单的案例示范。

1
2
3
4
5
6
import numpy as np

# 创建一个时间序列数据框
data = np.random.randn(len(date_rng)) # 生成随机数
ts = pd.Series(data, index=date_rng)
print(ts)

输出将是一个带有随机数值的 Series,索引为日期。

数据的切片与索引

时间序列的一个强大之处在于可以通过时间索引进行切片。我们可以使用 .loc 方法来选择特定的日期范围。

1
2
# 选择特定日期范围的数据
print(ts['2023-01-03':'2023-01-06'])

重采样 (Resampling)

重采样是分析时间序列中举足轻重的一步,它允许用户改变数据的频率。例如,我们可以将日数据重采样为周数据。

1
2
3
# 以周为单位重采样并计算均值
weekly_mean = ts.resample('W').mean()
print(weekly_mean)

移动窗口操作

Pandas 也支持移动窗口计算。这对于计算移动平均线非常有用。

1
2
3
# 计算滚动窗口的均值
rolling_mean = ts.rolling(window=3).mean()
print(rolling_mean)

时间序列的可视化

可视化时间序列数据可以帮助我们获取数据的趋势和季节性。我们可以使用 matplotlib 库进行绘图。

1
2
3
4
5
6
import matplotlib.pyplot as plt

ts.plot(title='时间序列数据', figsize=(10, 6))
plt.xlabel('日期')
plt.ylabel('值')
plt.show()

处理缺失值

时间序列数据中常常会出现缺失值,我们可以通过插值或向后/向前填充等方法来处理这些缺失值。

1
2
3
# 向前填充缺失值
ts_filled = ts.fillna(method='ffill')
print(ts_filled)

总结

通过以上小节,我们了解了如何使用 Pandas 进行基本的时间序列分析。我们学习了如何创建时间序列、进行数据切片、重采样、移动窗口操作、可视化以及处理缺失值。这些操作能帮助我们更好地理解随时间变化的数据特性,进而进行有效的决策分析。

17 Matplotlib与Pandas结合

17 Matplotlib与Pandas结合

在数据分析过程中,数据的可视化是至关重要的。利用 MatplotlibPandas 的结合,可以轻松生成丰富多样的图表。接下来,我们将通过几个实际案例来展示如何实现这一目标。

基本框架

首先,你需要安装 MatplotlibPandas。如果还没有安装,可以使用以下命令:

1
pip install matplotlib pandas

接下来,我们导入这两个库:

1
2
import pandas as pd
import matplotlib.pyplot as plt

创建示例数据

为了进行可视化示例,我们首先创建一个简单的 DataFrame

1
2
3
4
5
6
7
data = {
'年份': [2018, 2019, 2020, 2021, 2022],
'销售额': [200, 300, 400, 500, 600],
'利润': [50, 80, 120, 180, 250]
}

df = pd.DataFrame(data)

简单折线图

我们可以使用 Matplotlib 绘制一个折线图来显示销售额和利润随年份的变化趋势:

1
2
3
4
5
6
7
8
9
plt.plot(df['年份'], df['销售额'], marker='o', label='销售额')
plt.plot(df['年份'], df['利润'], marker='o', label='利润')

plt.title('销售额与利润随年份变化图')
plt.xlabel('年份')
plt.ylabel('金额(单位:元)')
plt.legend()
plt.grid()
plt.show()

在这个例子中,marker='o' 用于在数据点处添加圆形标记。通过 plt.legend() 来显示图例。

柱状图

接下来,我们可以使用柱状图来更直观地比较销售额和利润:

1
2
3
4
5
6
7
8
9
10
11
12
bar_width = 0.35
index = range(len(df))

plt.bar(index, df['销售额'], bar_width, label='销售额', color='b')
plt.bar([i + bar_width for i in index], df['利润'], bar_width, label='利润', color='g')

plt.title('销售额与利润对比')
plt.xlabel('年份')
plt.ylabel('金额(单位:元)')
plt.xticks([i + bar_width / 2 for i in index], df['年份'])
plt.legend()
plt.show()

在这里,我们使用 plt.bar() 创建两个相邻的柱状图,bar_width 控制柱子的宽度,使它们看起来更整齐。

饼图

如果我们想要查看不同年份销售额在总销售额中的占比,可以使用饼图:

1
2
3
4
plt.pie(df['销售额'], labels=df['年份'], autopct='%1.1f%%', startangle=140)
plt.title('不同年份销售额占比')
plt.axis('equal') # 确保饼图为圆形
plt.show()

这里,autopct='%1.1f%%' 用于显示百分比,startangle=140 旋转饼图以更好地显示。

组合图

最后,我们可以将折线图和柱状图组合在一起,以便对比更为直观:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fig, ax1 = plt.subplots()

color = 'tab:blue'
ax1.set_xlabel('年份')
ax1.set_ylabel('销售额', color=color)
ax1.bar(df['年份'], df['销售额'], color=color, alpha=0.6, label='销售额')
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx() # instantiate a second axes that shares the same x-axis
color = 'tab:red'
ax2.set_ylabel('利润', color=color)
ax2.plot(df['年份'], df['利润'], color=color, marker='o', label='利润')
ax2.tick_params(axis='y', labelcolor=color)

plt.title('销售额与利润组合图')
plt.show()

通过 ax1.twinx() 来创建一个共享 x 轴的第二个 y 轴,可以在同一张图上同时显示柱状图和折线图。

总结

通过 MatplotlibPandas 的结合,我们能够快速而灵活地进行数据可视化,从简单的折线图到复杂的组合图表,帮助我们更好地理解数据。掌握这些技能,将显著提升你的数据分析能力。

18 Pandas 基本图表绘制

18 Pandas 基本图表绘制

在数据分析中,图表是可视化数据的重要手段。Pandas 提供了容易使用的方法来绘制基本图表。本文将结合几个案例,详细介绍如何使用 Pandas 绘制基本图表。

准备数据

首先,我们需要一些数据来进行绘图。以下是一个简单的示例数据集,包含公司每月的销售额和利润:

1
2
3
4
5
6
7
8
9
10
import pandas as pd

# 创建示例数据
data = {
'月份': ['一月', '二月', '三月', '四月', '五月', '六月'],
'销售额': [2000, 3000, 2500, 4000, 3500, 4500],
'利润': [500, 800, 600, 1200, 1000, 1500]
}

df = pd.DataFrame(data)

绘制折线图

折线图用于显示数据随时间变化的趋势。下面我们将绘制每月的销售额和利润的折线图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import matplotlib.pyplot as plt

# 设置图表风格
plt.style.use('seaborn-darkgrid')

# 创建折线图
plt.figure(figsize=(10, 6))
plt.plot(df['月份'], df['销售额'], marker='o', label='销售额', color='b')
plt.plot(df['月份'], df['利润'], marker='o', label='利润', color='g')

# 添加标题和标签
plt.title('每月销售额与利润', fontsize=16)
plt.xlabel('月份', fontsize=14)
plt.ylabel('金额 (元)', fontsize=14)
plt.legend()
plt.grid()

# 显示图表
plt.show()

绘制柱状图

柱状图适合用于比较不同类别的数据。我们可以绘制每月的销售额柱状图。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建柱状图
plt.figure(figsize=(10, 6))
plt.bar(df['月份'], df['销售额'], color='b', label='销售额')

# 添加标题和标签
plt.title('每月销售额柱状图', fontsize=16)
plt.xlabel('月份', fontsize=14)
plt.ylabel('金额 (元)', fontsize=14)
plt.legend()
plt.grid()

# 显示图表
plt.show()

绘制饼图

饼图用于显示各部分相对于整体的占比。我们来绘制销售额的饼图。

1
2
3
4
5
6
7
8
9
# 创建饼图
plt.figure(figsize=(8, 8))
plt.pie(df['销售额'], labels=df['月份'], autopct='%1.1f%%', startangle=140)

# 添加标题
plt.title('每月销售额占比', fontsize=16)

# 显示图表
plt.show()

小结

通过使用 Pandas 结合 matplotlib 库,我们可以很方便地绘制各种基本图表。掌握这些基本的绘图方法,可以帮助你更好地分析数据和展示结果,提升数据可视化的能力。今后可以在更复杂的项目中应用这些技能,创造更具吸引力的数据展示。