[英]How to plot a time-series to study frequency of items?
我需要繪制時間相同的值以查看頻率如何變化。 特別是隨着時間從不同用戶生成的帖子。 我有一個如下所示的數據集:
GENDER POST DATE COUNTER
0 men (post 103) 36 43
1 men (post 109) 38 2
2 men (post 116) 41 12
3 men (post 119) 42 32
4 men (post 124) 44 2
.. ... ... ... ...
82 women (post 83) 29 34
83 women (post 86) 30 2
84 women (post 86) 65 9
85 women (post 91) 32 5
86 women (post 99) 35 5
其中 DATE 是數字(順序數字而不是日期格式)我最初的想法是通過使用 seaborn 來選擇我感興趣的列:
from matplotlib import pyplot
import seaborn
fg = seaborn.FacetGrid(data=df_, hue='GENDER', aspect=1.61)
fg.map(pyplot.scatter, 'DATE', 'COUNTER').add_legend()
但為了有如下圖所示的情節:
我想我應該考慮一個時間序列,以便通過時間跟蹤帖子。 在每個圖的 x 軸上會有日期( DATE
),在 y 軸上會有帖子的頻率( COUNTER
)。
我正在考慮用於此分析的文件 csv 包括以下列:
file = '...'
with open(file, newline='') as csvfile:
df = csv.reader(csvfile, delimiter=';', quotechar='|')
for row in df:
print(' '.join(row))
df = pd.read_csv(file, sep=';') # or your sep in file
df.columns = [' ', 'GENDER', 'POST', 'DATE', 'COUNTER',' ']
非常感謝您抽出時間幫助我。
更新:
GENDER POST DATE COUNTER
0 (man 8) (post 4) 0 0 NaN
1 (woman 13) (post 1) 2 0 NaN
2 (man 14) (post 7) 2 2 NaN
3 (man 8) (post 4) 4 1 NaN
4 (woman 19) (post 12) 4 1 NaN
首先,讓我們過濾您的數據框,以便您只有少數帖子:
import seaborn as sns
post_list = ['(post 103)','(post 109)','(post 116)']
df2 = df[df.POST.isin(post_list)]
然后,這樣的事情應該做:
for post in df2.POST.unique():
sns.lineplot(x='DATE',y='COUNTER', hue='GENDER', data=df2[df2.POST==post])
plt.show()
如果您不關心置信區間,您可以在sns
調用中添加ci=None
,這將使代碼運行得更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.