Time series Plotting

visualization
pandas
matplotlib

#1

Chào mọi người!

Mình là newbie đang tập tành Data analytic. Nay mình đang có thắc mắc chỗ này chưa giải quyết được. Mình có 1 dataset mẫu dựa theo Time series có thể download tại : https://data.melbourne.vic.gov.au/api/views/ez6b-syvw/rows.csv?accessType=DOWNLOAD Vấn đề mình muốn hỏi là cáhc để Plot dataset này theo Time series = thư viện Seaborn hoặc Matplotlib. Ví dụ mình chỉ cần plot cột Temp_avg theo cột Timestamp Mong mọi người giúp. MÌnh cảm ơn nhiều.


Lỗi ảnh trên forum
#2

Trong matplotlib, để vẽ một plot của y theo x bạn chỉ cần làm như sau:

from matplotlib import pyplot as plt
plt.plot(x, y)
plt.show()

với x, y là các mảng một chiều có cùng length. Bạn chỉ cần dùng pandas để tách cột bạn muốn vẽ ra là sẽ vẽ được. Ở đây mình hiểu x chính là cột đầu tiên, y là cột muốn vẽ.


#3

Hoặc bạn cũng có thể vẽ trực tiếp từ pandas cho nhanh:

%matplotlib inline

import pandas as pd
import matplotlib
import seaborn as sns

sns.set()

df = pd.read_csv("rows.csv")
df["timestamp"] = pd.to_datetime(df["timestamp"])
df[["timestamp", "temp_avg"]].plot(x="timestamp", figsize=(20, 6))


#4

Thêm thư viện

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

Đọc file

df = pd.read_csv('data.csv')
df.head()

Set index cho trường timestamp

df['timestamp'] = pd.to_datetime(df['timestamp'])
df.set_index("timestamp",inplace=True)

Xem danh sách các mac

list_mac = df['mac'].unique().tolist()

Plot 1 mac theo time series

plt.figure(figsize=(20,10))
df[df['mac']==list_mac[0]]['temp_avg'].plot(kind='line')

Plot nhiều mac

def plot_(group):
    group.plot(kind='line')
plt.figure(figsize=(20,10))
df.groupby('mac')["temp_avg"].agg(plot_)

Plot 1 mac theo thời gian khác nhau

#Plot theo giờ
plt.figure(figsize=(20,10))
df[df['mac']==list_mac[0]]['temp_avg'].resample('H').sum().plot(kind='line')

#Plot theo ngày
plt.figure(figsize=(20,10))
df[df['mac']==list_mac[0]]['temp_avg'].resample('D').sum().plot(kind='line')

Hy vọng sẽ giúp được bạn :grin::grin:


[09/12/2018 19:42] Hello. Từ topic này: https://forum.machinelearningcoban.com/t/time-series-plotting/1332/4 Mình có ý tưởng làm 1 . . .
[09/12/2018 11:03] Hướng dẫn đọc dữ liệu từ file csv và minh . . .
#5

Chắc làm luôn series hướng dẫn em ơi. Chất quá.


#6

Phần time series em còn chưa rành lắm ạ :sweat_smile::sweat_smile:


#7

Matplotlib thôi cũng ổn rồi.


#8

Để em đọc thêm về các loại chart rồi mới dám viết ạ. Mỗi chart có 1 ý nghĩa khác nhau và dữ liệu nào thì nên plot như nào nữa.


#9

Chia làm nhiều phần cũng được em ạ. Nếu cần hỗ trợ thì anh em mình viết chung :D.


#10

Anh Tiệp chia sẻ thêm 1 số phương pháp đánh giá data đầu vào, để tìm noise, tìm trending các thứ không ạ.


#11
data = [go.Scattermapbox(
            lat= df['latitude'] ,
            lon= df['longitude'],
            mode='markers',
            marker=dict(
                size= 10,
                color = 'red',
                opacity = .8,
            ),
          )]
layout = go.Layout(autosize=False,
                   mapbox= dict(accesstoken="pk.eyJ1Ijoidnl0aGFuaDE1NiIsImEiOiJjamx2NHZkc2QwczY1M3dxcGhycHYzY2o3In0.gaZL343YTQZqk1WuGdfGXw",
                                bearing=10,
                                pitch=60,
                                zoom=13,
                                center= dict(
                                         lat=-37.8136,
                                         lon=144.9631),
                                ),
                    width=900,
                    height=600, title = " Sensors Locations in Melbourne")

fig = dict(data=data, layout=layout)
iplot(fig)

GeoPlot code của mình. Bạn có thể thử với các dữ liệu có longitude và latitude. Plot.ly mình sẽ update sau. Plot đẹp hơn Matplot tỉ lần nhưng đang có vấn đề về memory usage quá lớn .


#12

Bạn có thể chỉnh màu trên matplotlib hoặc seaborn mà :D. Mình để ví dụ mặc định thôi


#13

Nếu bạn sn94 thì để mình xưng anh nhé :3 Ý a là cái matplot nó render trên mấy cái máy màn hình hi-res bị bể tùm lum. Export ra gửi sếp dùng macbook retina cũng k xem được nên a cực chẳng đã mới phải ngâm cứu plot.ly/bokeh chứ k chê matplot.

Em plot thêm với seaborn đi rồi tổng hợp thành topic Visualization luôn :smiley:


#14

nghe như bạn đang dùng BI để báo cáo nhỉ Vậy dùng D3js cho đẹp


#15

Nhìn biểu đồ khó hiểu nội dung nó mô tả. làm cách nào để nắm bắt được nội dung của biểu đồ ạ?


#16

Chào bạn @hieu mình là Cao Thanh Hà (admin của forum), do quá trình setup có sự cố nên bị mất ảnh đính trong bài này của bạn. Xin được bạn giúp đỡ bằng cách upload lại các ảnh bị mất trong bài viết này. Xin cảm ơn bạn rất nhiều!