datawhale組對學習——pandas基礎下——分類數據

學習資源鏈接分類數據

一、總覽

在這裏插入圖片描述

二、疑問

1.不懂下面的這個是怎麼創建出來的,創建出來之後是用來幹什麼的。在這裏插入圖片描述
2.在這裏爲什麼更改類型之後裏面的元素值是改變了的,並且爲什麼只改變了這裏面abca中的aba,沒有改變那個c。在這裏插入圖片描述
解答:因爲他在這裏更改了類型,但是c的類型還是沒有變,所以前面的那個c就不會變成nan,其他的就會變成nan,因爲原先的類型變了。
3.這裏前面的abca是指元素值,後面的那個abcd是指元素類型嗎?並且後面的那個abcd可不可以寫成efgh之類的,只是一個類型的名稱而已?在這裏插入圖片描述
對於上面的解答:如果後面沒有前面相應的值,就不會被創建出來。
在這裏插入圖片描述

4.對於前面提到的分類數據類型被分爲有序和無序,這非常好理解,例如分數區間的高低是有序變量,考試科目的類別一般看做無序變量。

5.不懂這裏爲什麼要用cat,難道cat在這裏的作用就是把abc鏈接起來,然後排序的時候就好排序是嗎?我猜大概就是這樣的。在這裏插入圖片描述
6.在這裏插入圖片描述

三、思考題

【問題一】 如何使用union_categoricals方法?它的作用是什麼?

【問題二】 利用concat方法將兩個序列縱向拼接,它的結果一定是分類變量嗎?什麼情況下不是?

【問題三】 當使用groupby方法或者value_counts方法時,分類變量的統計結果和普通變量有什麼區別?

【問題四】 下面的代碼說明了Series創建分類變量的什麼“缺陷”?如何避免?(提示:使用Series中的copy參數)

在這裏插入圖片描述

四、練習題

【練習一】 現繼續使用第四章中的地震數據集,請解決以下問題:

(a)現在將深度分爲七個等級:[0,5,10,15,20,30,50,np.inf],請以深度等級Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ爲索引並按照由淺到深的順序進行排序。
(b)在(a)的基礎上,將烈度分爲4個等級:[0,3,4,5,np.inf],依次對南部地區的深度和烈度等級建立多級索引排序。
這裏用到的應該是對dataframe的處理,然後再用pandas上裏面的排序來進行操作。

df = pd.read_csv('F:/program study/python/joyful-pandas-master/data/Earthquake.csv')
df.head()

df_a = df.copy()
df_a['深度'] = pd.cut(df_a['深度'], [0,5,10,15,20,30,50,np.inf],labels=['Ⅰ','Ⅱ','Ⅲ','Ⅳ','Ⅴ','Ⅵ','Ⅶ'])
df_a.set_index('深度').sort_index().head()

df_a['烈度'] = pd.cut(df_a['烈度'], [-1e-10,3,4,5,np.inf],labels=['Ⅰ','Ⅱ','Ⅲ','Ⅳ'])
df_a.set_index(['深度','烈度']).sort_index().head()

【練習二】 對於分類變量而言,調用第4章中的變形函數會出現一個BUG(目前的版本下還未修復):例如對於crosstab函數,按照官方文檔的說法,即使沒有出現的變量也會在變形後的彙總結果中出現,但事實上並不是這樣,比如下面的例子就缺少了原本應該出現的行’c’和列’f’。基於這一問題,請嘗試設計my_crosstab函數,在功能上能夠返回正確的結果。

這個真不會,不會Python呀,直接拿來了參考答案。

foo = pd.Categorical(['a', 'b'], categories=['a', 'b', 'c'])
bar = pd.Categorical(['d', 'e'], categories=['d', 'e', 'f'])
pd.crosstab(foo, bar)


def my_crosstab(foo,bar):
    num = len(foo)
    s1 = pd.Series([i for i in list(foo.categories.union(set(foo)))],name='1nd var')
    s2 = [i for i in list(bar.categories.union(set(bar)))]
    df = pd.DataFrame({i:[0]*len(s1) for i in s2},index=s1)
    for i in range(num):
        df.at[foo[i],bar[i]] += 1
    return df.rename_axis('2st var',axis=1)
my_crosstab(foo,bar)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章