大師兄的數(shù)據(jù)分析學習筆記(三):探索性數(shù)據(jù)分析(二)
大師兄的數(shù)據(jù)分析學習筆記(五):探索性數(shù)據(jù)分析(四)
三施逾、單因子與可視化
6. 數(shù)據(jù)分類
數(shù)據(jù)類型 |
描述 |
案例 |
定類數(shù)據(jù) |
根據(jù)事務離散、無差別屬性進行的分類榜配。 |
民族儿奶、性別 |
定序數(shù)據(jù) |
可以界定數(shù)據(jù)的大小丁眼,但不能測定差值。 |
職稱等級 |
定距數(shù)據(jù) |
可以界定數(shù)據(jù)大小的同時,可測定差值将宪,無絕對零點(乘除無意義)。 |
溫度 |
定比數(shù)據(jù) |
可以界定數(shù)據(jù)大小橡庞,可測定差值较坛、有絕對零點。 |
身高體重 |
7. 異常值分析
-
異常值是指與其他觀測值有顯著差異的數(shù)據(jù)點扒最。
-
異常值的存在可能會導致數(shù)據(jù)無效丑勤。
7.1 連續(xù)異常值
- 在一組數(shù)據(jù)中的上四分位數(shù)向上取k倍(k通常取1.5-3)為上界,下四分位數(shù)向下取k倍為下界,上/下界以外的值稱為異常值吧趣。
- 通常k取1.5時為中等異常法竞、取3時為非常異常。
- 連續(xù)異常值可以根據(jù)實際情況舍棄或用上/下界替代强挫。
>>>import numpy as np
>>>k = 1.5
>>>data = np.append(np.random.rand(100),(np.random.rand(10)*10))
>>>Q_L = np.quantile(data,0.25,interpolation='lower')
>>>Q_U = np.quantile(data,0.75,interpolation='higher')
>>>IQR = Q_U - Q_L
>>>outlier_step = k*IQR
>>>abnormal = data[(data>Q_U+outlier_step)|(data<Q_L-outlier_step)]
>>>print(f"上界:{Q_U+outlier_step} 下界:{Q_L-outlier_step}")
上界:1.5504747843883402 下界:-0.3883817114860346
>>>print(f"異常值:{abnormal}")
異常值:[8.17103381 8.41505442 1.88209875 2.42209849 6.89254331 4.46870627
3.74401613 5.98124444 9.12398726]
7.2 離散異常值
- 離散屬性定義范圍外的所有值均為異常值岔霸,比如空值。
-
離散異常值可以直接舍棄或當做單獨的值來處理俯渤。
>>>import numpy as np
>>>values = ["A","B","C",None]
>>>data = np.random.choice(values,size=100)
>>>print(f"100個數(shù)據(jù)中的異常值為{len([x for x in data if not x])}")
100個數(shù)據(jù)中的異常值為26
7.3 知識異常值
- 限制知識以外的異常值為**知識異常值呆细,比如身高超過10米。
8. 對比分析
-
對比分析是通過比較的方式達到認識與了解事實與數(shù)據(jù)的分析方法稠诲。
8.1 對比內(nèi)容
- 絕對數(shù)比較:數(shù)字比較侦鹏,比如收入、身高臀叙、面積的比較略水。
- 相對數(shù)比較:把幾個有聯(lián)系的指標進行聯(lián)合構(gòu)成相對數(shù)比較,常見以下相對數(shù):
相對數(shù) |
描述 |
結(jié)構(gòu)相對數(shù) |
部分與整體進行相比劝萤,比如用產(chǎn)品合格率評價產(chǎn)品質(zhì)量渊涝。 |
比例相對數(shù) |
總體內(nèi)用不同部分的數(shù)值進行比較,比如產(chǎn)業(yè)結(jié)構(gòu)中農(nóng)業(yè)床嫌、重工業(yè)和服務業(yè)之間的占比變化跨释。 |
比較相對數(shù) |
同一時空下的相似或同質(zhì)的指標進行對比,比如不同時期下商品的價格厌处。 |
動態(tài)相對數(shù) |
時間概念的相對數(shù)鳖谈,比如用戶數(shù)量的增速。 |
強度相對數(shù) |
性質(zhì)不同阔涉,擔憂相互聯(lián)系的屬性及其聯(lián)合缆娃,比如gdp和人均gdp的比較捷绒。 |
8.2 對比方法
- 時間維度:根據(jù)不同的時間進行比較,比如同比贯要、環(huán)比等暖侨。
- 空間維度:根據(jù)現(xiàn)實方位不同的空間,比如不同城市崇渗;或邏輯上的空間進行比較字逗,比如公司內(nèi)不同的部門。
- 經(jīng)驗與計劃維度:比如計劃排期與進度進行比較等宅广。
9. 結(jié)構(gòu)分析
- 結(jié)構(gòu)分析可以看做對比分析中的比例相對數(shù)的比較葫掉,重點研究整體組成結(jié)構(gòu)方面的差異與相關(guān)性。
- 結(jié)構(gòu)分析可以分為靜態(tài)結(jié)構(gòu)分析與動態(tài)結(jié)構(gòu)分析乘碑。
9.1 靜態(tài)結(jié)構(gòu)分析
-
靜態(tài)結(jié)構(gòu)分析是直接分析總體的組成挖息。
>>>import matplotlib.pyplot as plt
>>>import pandas as pd
>>>plt.rcParams['font.sans-serif']=['SimHei']
>>>data = {
>>> "A班":{"男生":34,"女生":17},
>>> "B班":{"男生":26,"女生":44},
>>> "C班":{"男生":42,"女生":8},
>>>}
>>>data = pd.DataFrame.from_dict(data)
>>>fig,(ax1,ax2,ax3) = plt.subplots(1,3)
>>>ax1.pie(data.A班,labels=data.index)
>>>ax2.pie(data.B班,labels=data.index)
>>>ax3.pie(data.C班,labels=data.index)
>>>ax1.set_title("A班")
>>>ax2.set_title("B班")
>>>ax3.set_title("C班")
>>>plt.show()
9.2 動態(tài)結(jié)構(gòu)分析
-
動態(tài)結(jié)構(gòu)分析是以時間為軸,分析結(jié)構(gòu)變化的趨勢兽肤。
>>>import pandas as pd
>>>import matplotlib.pyplot as plt
>>>data = {
>>> "2022-2":{"男生":21,"女生":16},
>>> "2022-3":{"男生":25,"女生":14},
>>> "2022-4":{"男生":20,"女生":22},
>>>}
>>>data = pd.DataFrame.from_dict(data,orient="index")
>>>data['男生比例'] = data['男生']/(data['男生']+data['女生'])
>>>data['女生比例'] = data['女生']/(data['男生']+data['女生'])
>>>x = data.index
>>>plt.plot(x,data['男生比例'])
>>>plt.plot(x,data['女生比例'])
>>>plt.legend()
>>>plt.show()
10. 分布分析
10.1 直接獲得概率分布
- 將得到的數(shù)字排列励负。
- 如果是離散的是鬼,就講離散值數(shù)出來,并將其排列边篮。
- 直接獲得的概率分布幢码,有可能有意義的笤休,有可能需要經(jīng)過比對才有意義,也有可能是沒有意義的症副。
10.2 判斷是不是正態(tài)分布
- 如果一個分布屬于正態(tài)分布店雅,就可以用均值、方差等性質(zhì)來快速定位某具體值相對于整體的位置贞铣。
- 判斷數(shù)據(jù)是正態(tài)分布闹啦,需要用到假設檢驗的方法。
- 判斷數(shù)據(jù)不是正態(tài)分布辕坝,可以看數(shù)據(jù)的偏態(tài)和峰態(tài)窍奋,如果偏態(tài)和峰態(tài)過大,則不是正態(tài)分布酱畅。
10.3 極大似然
-
極大似然就是極大相似的樣子琳袄,是相似程度的衡量,用于比較一組數(shù)據(jù)和已知的分布有多像纺酸。
- 如果一份數(shù)據(jù)屬于正態(tài)分布窖逗,就一定可以確定一個均值和一個方差;
- 使該均值和方差確定的正態(tài)分布下的數(shù)據(jù)點在這個確定的分布的取值是它們的概率;
- 這些值的和或者集在剛剛確定的均值和方差下是最大的;
- 取這些值的和或者集的對數(shù)餐蔬,這個對數(shù)就叫極大似然碎紊。
- 對比數(shù)據(jù)在比如正態(tài)分布在张、t分布或f分布下的極大似然,哪個極大似然越大矮慕,就越接近哪種分布帮匾。
>>>import matplotlib.pyplot as plt
>>>import numpy as np
>>>import pandas as pd
>>>from scipy.stats import norm
>>>u = 30
>>>d = 2
>>>x = pd.DataFrame(u+d*np.random.randn(5000))
>>>print(f"均值:{x.mean().values}")
>>>print(f"中位數(shù):{x.median().values}")
>>>print(f"峰度:{x.kurt().values}")
>>>print(f"偏度:{x.skew().values}")
>>>print(f"正態(tài)分布極大似然估計:{norm.fit(x)}")
>>>print(f"t分布極大似然估計:{t.fit(x)}")
>>>plt.hist(x,bins=100)
>>>plt.show()
均值:[30.01113002]
中位數(shù):[29.99309605]
峰度:[-0.02476348]
偏度:[0.0575392]
正態(tài)分布極大似然估計:(30.011130016680593, 1.9851376026711942)
t分布極大似然估計:(44.04636433569924, 30.009866284533302, 1.9221391065961893)