時間序列資料是資料分析中一類常見且重要的資料,
它們按照時間順序記錄,通常是從某些現象的觀察中收集的,比如經濟指標、氣象資料、股票價格、銷售資料等等,
時間序列資料的特點是有規律地隨著時間變化而變化,它們的變化趨勢可以被分析和預測,時間序列分析是一種用于預測未來值或評估過去值的統計方法,常常被用于預測未來趨勢、季節性變化、周期性變化、隨機波動等,
1. 日期型別
原始資料中,日期一般會存盤為各種型別字串,比如:
- 2022/5/1
- 2022-05-02
- 3/5/2022
將其統一轉換為pandas的日期型別,后續統計分析時,不僅方便計算,還可以有效避免應對各種格式帶來的麻煩,
1.1 轉換為日期型別
pandas的to_datetime函式對于資料集中各類日期字串都能有效的轉換,
df = pd.DataFrame(
{
"日期": ["2022/5/1", "2022-05-02", "3/5/2022"],
"城市": ["合肥", "合肥", "合肥"],
"平均氣溫": [28, 31, 27],
},
)
print(df)
print(df.dtypes)


可以看出,默認的日期是字串型別且格式混亂,
轉換后:
df["日期"] = pd.to_datetime(df["日期"])
print(df)
print(df.dtypes)


日期顯示起來格式統一了,型別也變為了datetime64[ns],
1.2 生成日期序列
除了將資料集讀取來的日期字串轉換為日期型別,我們也可以生成日期序列,這些生成的日期序列可以作為的資料索引,也可以用來補充資料集中缺失的日期值,
df = pd.DataFrame()
df["年"] = pd.date_range('2020-01-01', periods=3, freq='Y')
df["月"] = pd.date_range('2020-01-01', periods=3, freq='M')
df["日"] = pd.date_range('2020-01-01', periods=3, freq='D')
df["周"] = pd.date_range('2020-01-01', periods=3, freq='W')
df["季度"] = pd.date_range('2020-01-01', periods=3, freq='Q')
df

上面的示例分別以年,月,日,周,季度為間隔,生成3條連續的時間序列,
1.3 修改日期
修改日期的值,也是利用日期型別自帶的方法,不用像修改字串那樣修改,那樣極易出錯,
df = pd.DataFrame()
d = pd.date_range('2020-01-01', periods=3, freq='D')
df["原始日期"] = d
df["延遲三天"] = d.shift(3, freq="D")
df["提前三天"] = d.shift(-3, freq="D")
df

這里是按天調整的,如果要按照年,月,周,季度等調整,像上一個例子那樣設定freq引數即可,
2. 日期屬性
將資料轉換為pandas日期型別的最大好處就是可以使用日期型別特有的屬性,方便進行各個維度的分析,
常用的日期維度是年,月,日,周,季度,
2.1 年
利用日期屬性按年份統計合計值:
df = pd.DataFrame(
{
"日期": ["2020/5/1", "2021/5/1", "2021/6/3", "2022/9/4"],
"平均氣溫": [28, 31, 27, 33],
},
)
df["日期"] = pd.to_datetime(df["日期"])
df["年"] = df["日期"].dt.year
print(df)
print(df.groupby(df["年"]).sum())

兩個2021年的資料統計了合計值,
2.2 月
按月統計合計值:
df = pd.DataFrame(
{
"日期": ["2020/5/1", "2021/5/1", "2021/6/3", "2022/9/4"],
"平均氣溫": [28, 31, 27, 33],
},
)
df["日期"] = pd.to_datetime(df["日期"])
df["月"] = df["日期"].dt.month
print(df)
print(df.groupby(df["月"]).sum())

兩個5月份的資料統計了合計值,
2.3 日
按日統計合計值:
df = pd.DataFrame(
{
"日期": ["2020/5/1", "2021/5/1", "2021/6/3", "2022/9/4"],
"平均氣溫": [28, 31, 27, 33],
},
)
df["日期"] = pd.to_datetime(df["日期"])
df["日"] = df["日期"].dt.day
print(df)
print(df.groupby(df["日"]).sum())

兩個1號的資料統計了合計值,
2.4 周
按周統計合計值:
df = pd.DataFrame(
{
"日期": ["2021/5/1", "2021/5/31", "2021/6/3", "2021/9/4"],
"平均氣溫": [28, 31, 27, 33],
},
)
df["日期"] = pd.to_datetime(df["日期"])
df["周"] = df["日期"].dt.isocalendar().week
print(df)
print(df.groupby(df["周"]).sum())

上面兩個日期同屬于第22周,所以計算了合計值,
獲取周屬性與前面略有不同,不是直接獲取week,而是用isocalendar().week,
2.5 季度
按季度統計合計值:
df = pd.DataFrame(
{
"日期": ["2021/5/1", "2021/5/31", "2021/6/3", "2021/9/4"],
"平均氣溫": [28, 31, 27, 33],
},
)
df["日期"] = pd.to_datetime(df["日期"])
df["季度"] = df["日期"].dt.quarter
print(df)
print(df.groupby(df["季度"]).sum())

上面3個日期都是第二季度,所以計算了合計值,
3. 總結回顧
本篇特意將pandas中的日期型別單獨介紹,
一方面是因為日期型別與其他型別相比,多出了很多特有的屬性;
另一方面,時間序列資料和回歸分析中也會大量用到日期型別,
這里介紹了日期型別的轉換方法和常用屬性,但日期型別不僅僅限于這些屬性,其他的屬性可以參考pandas的官方檔案:Index objects — pandas 2.0.1 documentation
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/554130.html
標籤:Python
下一篇:返回列表
