2016-04-14 37 views
0

我想繪製一個簡單的Distplot使用pandasseaborn來了解數據集的密度。Seasborn Distplot無響應

輸入

#Car,45 
#photo,4 
#movie,6 
#life,1 
#Horse,14 
#Pets,20 
#run,67 
#picture,89 

的數據集有上述10K行,no headers,我試圖用col[1]

代碼

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 


df = pd.read_csv('keyword.csv', delimiter=',', header=None, usecols=[1]) 
#print df 
sns.distplot(df) 

plt.show() 

沒有錯誤,因爲我可以打印輸入列,但distplot正在計算和凍結屏幕。任何建議加快進程。

編輯1:建議在評論下面我嘗試從pandas.read_csv更改爲np.loadtxt,現在出現錯誤。

代碼:

import numpy as np 
from numpy import log as log 
import matplotlib.pyplot as plt 
import seaborn as sns 
import pandas 

df = np.loadtxt('keyword.csv', delimiter=',', usecols=(1), unpack=True) 
sns.kdeplot(df) 
sns.distplot(df) 

plt.show() 

錯誤:

Traceback (most recent call last): 
    File "0_distplot_csv.py", line 7, in <module> 
    df = np.loadtxt('keyword.csv', delimiter=',', usecols=(1), unpack=True) 
    File "/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 726, in loadtxt 
    usecols = list(usecols) 
TypeError: 'int' object is not iterable 

編輯2:我的確從註釋部分

sns.distplot(df[1]) 

這做同樣的嘗試所提到的建議,提到原來。屏幕被凍結了很長時間。

sns.distplot(df[1].values) 

我在這種情況下看到一個奇怪的行爲。

當輸入

Car,45 
photo,4 
movie,6 
life,1 
Horse,14 
Pets,20 
run,67 
picture,89 

它確實情節,當輸入低於

#Car,45 
#photo,4 
#movie,6 
#life,1 
#Horse,14 
#Pets,20 
#run,67 
#picture,89 

這又是同樣的凍結整個屏幕,就什麼也不做。

我確實試圖把comments=None認爲它可能會閱讀他們的評論。但看起來comments未在pandas中使用。

謝謝

+1

你需要做的是重新產生問題的最小工作示例。如果這四行數據確實是文件的全部範圍,請使用'io.StringIO'將它包含在腳本中。 –

+0

當我指定列標題但代碼沒有標題時,我需要使用列號。數據是來自原始數據集的四行。它本質上不是持續的。 –

+1

嘗試傳遞一個數組然後 –

回答

1

經過多次試驗和大量的網上搜索,我終於得到了我一直在尋找。當我們沒有標題時,代碼允許加載帶有列號的數據。這也讀取#評論的行。

代碼:

import numpy as np 
import matplotlib.pyplot as plt 
from pylab import* 
import math 
from matplotlib.ticker import LogLocator 
from scipy.stats.kde import gaussian_kde 
import seaborn as sns 

data = np.genfromtxt('keyword.csv', delimiter=',', comments=None) 

d0=data[:,1] 

#Plot a simple histogram with binsize determined automatically 
sns.kdeplot(np.array(d0), color='b', bw=0.5, marker='o', label='keyword') 

plt.legend(loc='upper right') 
plt.xlabel('Freq(x)') 
plt.ylabel('pdf(x)') 
#plt.gca().set_xscale("log") 
#plt.gca().set_yscale("log") 
plt.show()