나는 종종 아래 그림과 같은 복잡한 네트워크에서 긴 꼬리도 분포/히스토그램을 만나고 만들었습니다. 그들은 많은 관찰에서 매우 무겁고 혼잡, 이러한 꼬리의 무거운 말을 잘 :로그 - 비닝 된 네트워크 학위 분포도 표시하기
그러나
, 내가 읽은 많은 출판물의 끝이 clumpiness이없는 많은 청소기도 분포를 분포와 관측치가보다 균등하게 분포되어있다.
!
NetworkX
과 matplotlib
을 어떻게 사용하여 차트를 만드나요?
나는 종종 아래 그림과 같은 복잡한 네트워크에서 긴 꼬리도 분포/히스토그램을 만나고 만들었습니다. 그들은 많은 관찰에서 매우 무겁고 혼잡, 이러한 꼬리의 무거운 말을 잘 :로그 - 비닝 된 네트워크 학위 분포도 표시하기
그러나
, 내가 읽은 많은 출판물의 끝이 clumpiness이없는 많은 청소기도 분포를 분포와 관측치가보다 균등하게 분포되어있다.
!
NetworkX
과 matplotlib
을 어떻게 사용하여 차트를 만드나요?
log binning (see also)을 사용하십시오. 다음은 학위 값의 히스토그램을 나타내는 Counter
객체를 취하고 로그 분배를 통해 분산을 더 부드럽게 분배하는 코드입니다.
import numpy as np
def drop_zeros(a_list):
return [i for i in a_list if i>0]
def log_binning(counter_dict,bin_count=35):
max_x = log10(max(counter_dict.keys()))
max_y = log10(max(counter_dict.values()))
max_base = max([max_x,max_y])
min_x = log10(min(drop_zeros(counter_dict.keys())))
bins = np.logspace(min_x,max_base,num=bin_count)
# Based off of: http://stackoverflow.com/questions/6163334/binning-data-in-python-with-scipy-numpy
bin_means_y = (np.histogram(counter_dict.keys(),bins,weights=counter_dict.values())[0]/np.histogram(counter_dict.keys(),bins)[0])
bin_means_x = (np.histogram(counter_dict.keys(),bins,weights=counter_dict.keys())[0]/np.histogram(counter_dict.keys(),bins)[0])
return bin_means_x,bin_means_y
NetworkX
의 고전 척도없는 네트워크를 생성 한 다음이 음모를 꾸미고 :
import networkx as nx
ba_g = nx.barabasi_albert_graph(10000,2)
ba_c = nx.degree_centrality(ba_g)
# To convert normalized degrees to raw degrees
#ba_c = {k:int(v*(len(ba_g)-1)) for k,v in ba_c.iteritems()}
ba_c2 = dict(Counter(ba_c.values()))
ba_x,ba_y = log_binning(ba_c2,50)
plt.xscale('log')
plt.yscale('log')
plt.scatter(ba_x,ba_y,c='r',marker='s',s=50)
plt.scatter(ba_c2.keys(),ba_c2.values(),c='b',marker='x')
plt.xlim((1e-4,1e-1))
plt.ylim((.9,1e4))
plt.xlabel('Connections (normalized)')
plt.ylabel('Frequency')
plt.show()
은 파란색의 "원시"분포와 "비닝"분포 사이의 중복을 보여주는 다음과 같은 플롯을 생성합니다 빨간. 내가 뭔가를 분명 누락 한 경우이 방법 또는 피드백을 개선하는 방법에 대한
생각을 환영합니다.
여기서 정확히 질문은 무엇입니까? 이미 원하는 결과를 얻은 것 같습니다. "더 나아지기"보다는 구체적이어야합니다. – Hooked
아무런 문제가 없으며 문제 해결 방법을 공유하고 다른 방법으로 의견을 찾지 못하면 다른 사람들의 의견을 열어 놓을 수 있습니다. –
이렇게하는 것이 더 좋은 방법입니다. 그렇지 않으면 닫을 수 있습니다.이 질문을 해독하여 직접 대답하는 것입니다. http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – Hooked