2017-01-09 159 views
2

我有一個數據集合,我從幾個Excel文件中讀取數據。我可以輕鬆地讀取,合併和分組數據與熊貓。我在數據中有兩列興趣點,「產品類型」和「測試持續時間」。熊貓集團的Excel數據按列和圖形散點圖平均值

包含從Excel文件讀取的數據的數據幀稱爲oData。

oDataGroupedByProductType = oData.groupby(['Product Type']) 

我已經使用plotly製作圖如下,但plotly不保持數據的私有性,如果我想要的數據是私有的我要付錢。支付不是一種選擇。 enter image description here 如何使用pandas和/或matplotlib製作相同的圖形,還可以顯示每種產品類型的平均值?

+0

如果你可以添加包在你的程序中使用,然後採取seaborn在那裏它被稱爲stripplot。這是分類的Scartter陰謀。這可能會花費你從示例頁面的2行代碼來重現你的截圖。 – Boud

+0

'.boxplot()'在熊貓中也適用於這類數據,如果你沒有設置這個特定的繪圖類型。 –

回答

1

作爲Bound說,你可以用stripplot(seaborn文檔頁面的例子)做幾行。

import seaborn as sns 
sns.set_style("whitegrid") 
tips = sns.load_dataset("tips") # load some sample data 
ax = sns.stripplot(x="day", y="total_bill", data=tips) 

enter image description here

0

假設你有一些數據幀:

In [4]: df.head(20) 
Out[4]: 
    product  value 
0  c 5.155740 
1  c 8.983128 
2  c 5.150390 
3  a 8.379866 
4  c 8.094536 
5  c 7.464706 
6  b 3.690430 
7  a 5.547448 
8  a 7.709569 
9  c 8.398026 
10  a 7.317957 
11  b 7.821332 
12  b 8.815495 
13  c 6.646533 
14  c 8.239603 
15  c 7.585408 
16  a 7.946760 
17  c 5.276864 
18  c 8.793054 
19  b 11.573413 

你需要有一個數值爲產品繪製,所以快速和drity,只是通過映射數值做出新的列:

In [5]: product_map = {p:r for p,r in zip(df['product'].unique(), range(1, df.values.shape[0]+1))} 

In [6]: product_map 
Out[6]: {'a': 2, 'b': 3, 'c': 1} 

當然,也有很多,你可以做到這一點的方式...

現在,做一個新的列:

In [8]: df['product_code'] = df['product'].map(product_map) 

In [9]: df.head(20) 
Out[9]: 
    product  value product_code 
0  c 5.155740    1 
1  c 8.983128    1 
2  c 5.150390    1 
3  a 8.379866    2 
4  c 8.094536    1 
5  c 7.464706    1 
6  b 3.690430    3 
7  a 5.547448    2 
8  a 7.709569    2 
9  c 8.398026    1 
10  a 7.317957    2 
11  b 7.821332    3 
12  b 8.815495    3 
13  c 6.646533    1 
14  c 8.239603    1 
15  c 7.585408    1 
16  a 7.946760    2 
17  c 5.276864    1 
18  c 8.793054    1 
19  b 11.573413    3 

現在,使用pandasplot輔助方法,這基本上是圍繞matplotlib的包裝:

In [10]: df.plot(kind='scatter', x = 'product_code', y = 'value') 
Out[10]: <matplotlib.axes._subplots.AxesSubplot at 0x12235abe0> 

和輸出:

enter image description here

很顯然,這是快速和骯髒的,但它應該讓你的方式...

0

萬一別人有一個非常類似的問題,並希望看到最後的結果,我結束了使用seaborn,如下:

import seaborn as sns 
import matplotlib.pyplot as plt 
... 
sns.set_style("whitegrid") 
sns.boxplot(x=oData['Product Type'], 
      y=oData['Test Duration?'], 
      data=oData) 
plt.savefig('Test Duration vs. Product Type.png') 

圖表來如如下。出於隱私的原因,我已經模糊了圖表上的產品標籤。

enter image description here

+0

如果無法顯示數據,請提供一些示例數據! – Lucas