本文来自这里
幂律分布
- 在我们的日常生活中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()