我想绘制用户输入中单词的使用时间。例如。用户输入“begab,social,demokrat”。这些术语存储在变量u_input
中。我想使用startswith()
方法在使用“社交”等词语时加入“社交,社会主义,社会改革”等词语。
作为准备,我将历史普鲁士报纸语料库的2300 xml文件合并为csv文件,其中包含“年,字,计数”的信息:
year| word | count
----|-------------|----
1864|befürchtete |1
1864|befürchtungen|1
1864|begab |1
1864|begab |2
1864|begab |3
1864|begab |5
1864|begaben |1
1864|begaben |3
1865|begab |2
1865|begab |2
然后我使用Pandas对数据进行分组,以便每年可以获得一个单词的总计数,并将数据保存为新的csv文件“pandas_dict.csv”:
year| word | count
----|-------------|----
1864|befürchtete |1
1864|befürchtungen|1
1864|begab |11
1864|begaben |4
1865|begab |4
我现在想用plotly(离线)绘制一个图形,显示样本术语“social,conserv,kommuni”的单词用法图。 (理由:在这个例子中,我想比较社会党,保守派和共产党人的报纸报道,更具体地说是与党派相关的词语的一般突出性,因此一切都是“社会”或“k [c] ommunist”。 )
不幸的是,我阅读的所有示例中的代码都不起作用,因为我找不到的任何代码都包含任何类型的机制,只显示u_input
中的术语图。
import plotly as py
import plotly.graph_objs as go
import pandas as pd
# Create DataFrame from prepared csv
df = pd.read_csv(self.dir + self.dict_dir + 'pandas_dict.csv', header=None, names=['year', 'word', 'count'])
# define data for plotting - how do I incorporate u_input?
trace1 = go.Scatter(x=df['year'], y=df['count'], mode='lines', name='test')
layout = go.Layout(title='Word usage over time', plot_bgcolor='rgb(230, 230,230)')
fig = go.Figure(data=[trace1], layout=layout)
# Plot data
py.offline.plot(fig)
答案 0 :(得分:1)
df[df['word'].str.contains(word)]
contains
)
groupby
['count'].aggregate(sum)
)u_input
中迭代你的单词并为每个单词添加一个跟踪,import pandas as pd
import plotly
import io
txt="""year|word|count
1864|befürchtete|1
1864|befürchtungen|1
1864|begab|11
1864|begaben|4
1865|begab|4
1864|kommuni|3
1864|social|2
1864|conserv|5
1865|kommuni|6
1865|social|3
1865|conserv|4
1866|kommuni|8
1866|social|2
1866|conserv|6
1867|conservativ|4
1867|conservative|1
1867|socialist|1
1867|socialisti|2
1867|nonsense|99
1867|kommunist|4
1867|kommuni|2
"""
u_input = ['kommuni', 'social', 'conserv']
df = pd.read_csv(io.StringIO(txt), sep='|')
#filter the dataframe according to u_input
df = df[df['word'].str.contains('|'.join(u_input))]
traces = [plotly.graph_objs.Scatter(x=df['year'][df['word'].str.contains(word)],
y=df[df['word'].str.contains(word)].groupby(['year'])['count'].aggregate(sum),
name=word, mode='lines') for word in u_input]
layout = plotly.graph_objs.Layout(xaxis=dict(tickvals=df['year'].unique()))
fig = plotly.graph_objs.Figure(data=traces, layout=layout)
plotly.offline.plot(fig)