[Python舆情分析] 二.时间间隔分布研究及幂律分布图绘制

本文来自这里

幂律分布

  • 在我们的日常生活中Power Law(幂次分布,Power-law Distributions)是常见的一个数学模型,如二八原则。这个世界上是20%的人掌握80%的人的金钱去经营,20%的人口拥有80%的财富,20%的上市公司创造了80%的价值,80%的收入来自20%的商品,80%的利润来自20%的顾客等等。

为什么会有这样的差别呢?

  • 这是因为时间的乘积效应,智力上的微弱优势,乘以时间,就会得到价值(财富)几何级的增长。经济学财富分布满足Pareto Power law tail分布,语言中有词频的幂律分布,城市规模和数量满足幂律分布,音乐中有f分之1噪音(幂律分布)。通常人们理解幂律分布就是所谓的马太效应,二八原则,即少数人聚集了大量的财富,而大多数人的财富数量都很小,因为胜者通吃的原则。

时间间隔分布胖尾图

核心步骤如下

  • 收集数据,我还是用的excel
  • 对评论时间数组进行排序,然后依次获取两两评论时间的时间间隔
  • 通过函数计算myset内容的无重复项,并统计每个时间间隔出现的频次
  • 最后绘制Pow-low幂律分布图

代码

# -*- coding: utf-8 -*-
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
import matplotlib.font_manager

# 读取数据
df = pd.read_csv("data1.csv", encoding='GB18030')
# 处理数据
t = df.values.tolist()
PLTimeList = []  # 评论时间列表
Period = []  # 时间间隔
PeriodSeconds = []  # 时间间隔秒
for i in t:
    PLTimeList.append(datetime.strptime(i[5], "%Y-%m-%d %H:%M:%S"))
PLTimeList.sort()  # 时间排序
PLTimeList.reverse()  # 列表中元素反向

# 获取时间间隔再赋值给列表
for i in range(0, len(PLTimeList) - 1):
    # print(PLTimeList[i])
    cnt = (PLTimeList[i] - PLTimeList[i + 1])
    Period.append(cnt)
# 获取秒
for i in Period:
    PeriodSeconds.append(i.seconds)

# myset是另外一个列表,里面的内容是mylist里面的无重复项
x = []
y = []
myset = set(PeriodSeconds)
for item in myset:
    x.append(item)
    y.append(PeriodSeconds.count(item))  # 通过已过滤的时间统计之前PeriodSeconds中的出现次数作为y,为数量总数量

# 绘图显示中文字体和负号
plt.rcParams['font.sans-serif'] = ['SimHei']
myfont = matplotlib.font_manager.FontProperties(fname='C:/Windows/Fonts/msyh.ttf')
plt.rcParams['axes.unicode_minus'] = False
font1 = {'family': 'Times New Roman', 'weight': 'normal', 'size': 26}

# plt.subplot(111)
plt.plot(x, y, 'ko')
plt.yscale('log')
plt.ylabel('P', font1)
plt.xlabel('timespan', font1)
plt.xscale('log')
plt.ylim(0.5, 20)
plt.show()

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容