我正在对几个网络博客进行文本内容分析,现在专注于发现新兴趋势。为了对一个博客这样做,我编写了一个多步骤的过程:
这很好,除了我在一个图中得到1000个图表,而我只关心那些达到某个阈值的峰值。 这意味着它们应该具有不同的颜色集或者可以通过其他方式轻松识别,并且它们应该出现在图例中 - 其余部分不会出现。 任何想法如何做到这一点?
这是我现在使用的代码,它产生了一个不可读的情节:
from pattern.db import Database
import pandas as pd
import matplotlib.pyplot as plt
def plot_trends(keywords_and_date_list):
d1 = pd.DataFrame(keywords_and_date_list)
d1.sort(inplace=True)
grouped = d1.groupby(pd.Grouper(freq='1M', key="date")).mean()
plt.style.use("ggplot")
fig = plt.figure(figsize=(25,6))
for i in d1.columns:
if i == 'date':
continue
plt.plot(grouped.index, grouped[i], lw=2, label="monthly average " + i)
plt.ylim(0,0.015)
plt.legend(prop={'size':7})
plt.title("Occurence of various words in blogs")
plt.xlabel("Post publication date")
plt.ylabel("Term Frequency")
plt.show()
你们是否有任何关于如何可行地区分高峰图表的想法,比如0.004,并为它们分配不同的颜色集和标签?
为了用熊猫的最大功能来实现这个目的,我玩了一个小数据集,但是我没有让它起作用。
import pandas as pd
import numpy as np
from pattern.db import date
import matplotlib.pyplot as plt
l = [dict(date=date('2015-01-02'), one=0.1, two=0.2)]
l.append(dict(date=date('2014-01-01'), one=0.2, two=0.5))
l.append(dict(date=date('2014-02-01'), one=0.5, two=0.6))
l.append(dict(date=date('2014-03-01'), one=0.1, two=0.7))
d1 = pd.DataFrame(l)
d2 = d1.set_index('date')
plt.style.use("ggplot")
fig = plt.figure(figsize=(10,6))
for i in d1.columns:
if d1.max() >= 0.6:
plt.plot(d1.index, d1[i], lw=2, label="monthly average " + i)
else:
plt.plot(d1.index, d1[i], lw=2)
plt.ylim(0,1)
plt.legend(prop={'size':10})
plt.title("Occurence of various words in Naoki's blog")
plt.xlabel("Post publication date")
plt.ylabel("Term Frequency")
plt.show()
我希望看到的结果是一张带有标签的图表,一张没有标签的图表。我使用不同的语法,但要么是我得到两个标记的图形,要么是值错误,或者是datetype和float无法比较的错误。
答案 0 :(得分:0)
您的小型数据集脚本基本上是正确的,但有一些小错误。
if i=='date': continue
行。 (您的'不具有可比性'错误的来源)。else
行错误缩进。plt.hold(True)
以阻止创建新图表。这是我修改过的脚本版本。我为db.pattern.date
换了pd.to_datetime
,添加了更多随机列,并使用alpha
和linewidth
import pandas as pd
import numpy as np
# from pattern.db import date
import matplotlib.pyplot as plt
l = [dict(date=pd.to_datetime('2015-01-02'), one=0.1, two=0.2)]
l.append(dict(date=pd.to_datetime('2014-01-01'), one=0.2, two=0.5))
l.append(dict(date=pd.to_datetime('2014-02-01'), one=0.5, two=0.6))
l.append(dict(date=pd.to_datetime('2014-03-01'), one=0.1, two=0.7))
d1 = pd.DataFrame(l)
for i in range(100):
d1['s%i'%i] = np.random.uniform(0,.5,4)
for i in range(10):
d1['s%i'%i] = np.random.uniform(0,.7,4)
d2 = d1.set_index('date')
plt.style.use("ggplot")
fig = plt.figure(figsize=(10,6))
for i in d1.columns:
if i=='date':
continue
if d1[i].max() >= 0.6:
plt.plot(d1.index, d1[i], lw=2, label="monthly average " + i)
plt.hold(True)
else:
plt.plot(d1.index, d1[i], lw=2, alpha=0.7, linewidth=0.3)
plt.hold(True)
plt.ylim(0,1)
plt.legend(prop={'size':10})
plt.title("Occurence of various words in Naoki's blog")
plt.xlabel("Post publication date")
plt.ylabel("Term Frequency")
plt.show()