- ๐Ÿ“•PYTHON

9-2. ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ (dt)

shoo. 2023. 8. 13. 18:59

dt ํ™œ์šฉํ•˜๊ธฐ

3) ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์— ์ถ”์ถœํ•œ ์›”(month)๋งŒ ์žˆ๋Š” ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ

In [11]: air_quality["month"] = air_quality["datetime"].dt.month

In [12]: air_quality.head()
Out[12]: 
    city country                  datetime  ... value   unit  month
0  Paris      FR 2019-06-21 00:00:00+00:00  ...  20.0  µg/m³      6
1  Paris      FR 2019-06-20 23:00:00+00:00  ...  21.8  µg/m³      6
2  Paris      FR 2019-06-20 22:00:00+00:00  ...  26.5  µg/m³      6
3  Paris      FR 2019-06-20 21:00:00+00:00  ...  24.9  µg/m³      6
4  Paris      FR 2019-06-20 20:00:00+00:00  ...  21.4  µg/m³      6

[5 rows x 8 columns]

Timestamp ๊ฐ์ฒด๋ฅผ ๋‚ ์งœ์— ์‚ฌ์šฉํ•˜๋ฉด, Pandas์—์„œ ๋งŽ์€ ์‹œ๊ฐ„ ๊ด€๋ จ ์†์„ฑ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์›”, ์—ฐ๋„, ๋ถ„๊ธฐ ๋“ฑ  ์ด๋Ÿฌํ•œ ์†์„ฑ๋“ค์€ ๋ชจ๋‘ dt ๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

4)  ๊ฐ ์ธก์ • ์œ„์น˜์— ๋Œ€ํ•ด์„œ ์š”์ผ๋ณ„๋กœ ํ‰๊ท  ๋†๋„ ๊ตฌํ•˜๊ธฐ

In [13]: air_quality.groupby(
   ....:     [air_quality["datetime"].dt.weekday, "location"])["value"].mean()
   ....: 
Out[13]: 
datetime  location          
0         BETR801               27.875000
          FR04014               24.856250
          London Westminster    23.969697
1         BETR801               22.214286
          FR04014               30.999359
                                  ...    
5         FR04014               25.266154
          London Westminster    24.977612
6         BETR801               21.896552
          FR04014               23.274306
          London Westminster    24.859155
Name: value, Length: 21, dtype: float64
  • weekday(์›”์š”์ผ=0, ์ผ์š”์ผ=6)

5) ํ•˜๋ฃจ ๋™์•ˆ์˜ ์ „์ฒด ๊ธฐ์ƒ ๊ด€์ธก์†Œ์—์„œ ์‹œ๊ฐ„๋ณ„ ํ‰๊ท  ๋†๋„ ํŒจํ„ด์„ ๊ทธ๋ฆฌ๊ธฐ

      ์ฆ‰, ํ•˜๋ฃจ ์ค‘ ๊ฐ ์‹œ๊ฐ„๋ณ„ ํ‰๊ท  ๊ฐ’

In [14]: fig, axs = plt.subplots(figsize=(12, 4))

In [15]: air_quality.groupby(air_quality["datetime"].dt.hour)["value"].mean().plot(
   ....:     kind='bar', rot=0, ax=axs
   ....: )
   ....: 
Out[15]: <AxesSubplot: xlabel='datetime'>

In [16]: plt.xlabel("Hour of the day");  # custom x label using Matplotlib

In [17]: plt.ylabel("$NO_2 (µg/m^3)$");

  • kind='bar' : ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„
  • rot=0 : x์ถ• ๋ผ๋ฒจ์˜ ํšŒ์ „ ๊ฐ๋„๋ฅผ 0๋„๋กœ ์„ค์ •ํ•˜์—ฌ ๋ผ๋ฒจ์ด ์ˆ˜ํ‰์œผ๋กœ ํ‘œ์‹œ๋˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 90๋„๋กœ ๋ผ๋ฒจ์ด ์ˆ˜์ง์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ax=axs :๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆด ๋•Œ ์‚ฌ์šฉํ•  Axes ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„๋ฅผ ์„œ๋ธŒํ”Œ๋กฏ์— ๊ทธ๋ฆด ๊ฒฝ์šฐ ax ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ์„œ๋ธŒํ”Œ๋กฏ ์œ„์น˜๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. axs๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ matplotlib์—์„œ ์„œ๋ธŒํ”Œ๋กฏ์˜ ๋ฐฐ์—ด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

 

๋ณธ ๋‚ด์šฉ์€ ๊ณต๋ถ€ ๊ธฐ๋ก์šฉ์œผ๋กœ ์ถœ์ฒ˜๋Š” ํŒ๋‹ค์Šค์˜ ๊ณต์‹๋ฌธ์„œ(How to handle time series data with ease) ์ž…๋‹ˆ๋‹ค