python實(shí)現(xiàn)數(shù)據(jù)分析與建模
前言
首先我們做數(shù)據(jù)分析,想要得出最科學(xué),最真實(shí)的結(jié)論,必須要有好的數(shù)據(jù)。而實(shí)際上我們一般面對的的都是復(fù)雜,多變的數(shù)據(jù),所以必須要有強(qiáng)大的數(shù)據(jù)處理能力,接下來,我從我們面臨的最真實(shí)的情況,一步一步教會大家怎么做。
1.數(shù)據(jù)的讀取
(1)讀取模塊
Import pandas as pd
Import numpy as np
(2)讀取表格的全部數(shù)據(jù)
df = pd.read_csv(".data/HR.csv")
(3)讀取你所需要的數(shù)據(jù)
sl_s=df["sactisfaction_level"]
2. 數(shù)據(jù)的處理
2.1.異常值(空值)處理
2.1.1刪除
首先,第一步是對空值的處理。
有兩種,一種直接刪除,另一種指代。
如果數(shù)據(jù)多,想簡單一點(diǎn),就直接刪除,方法都很簡單。
首先,建立一個DataFrame表 1.為了確定是否含有空值: df.isnull() #如果含有空值,返回True 2.刪除 df.dropna() #去掉含空值的行 如果想要刪除某一個屬性含空值的行就加入subset參數(shù) df.dropna(subset=["B"]) #去掉B屬性含空值的行 判斷是否有重復(fù)的數(shù)據(jù): df.duplicated(["A"]) #A屬性中重復(fù)的數(shù)據(jù)返回True 刪除A屬性重復(fù)的行 df.drop_duplicates(["A"]) df.drop_duplicates(["A"],keep=False) #刪除A屬性全部重復(fù)的行 df.drop_duplicates(["A"],keep=first) #刪除A屬性全部重復(fù)的行,保留第一個 df.drop_duplicates(["A"],keep=last) #刪除A屬性全部重復(fù)的行,保留最后一個
2.1.2指代
有些數(shù)據(jù)非常重要,不能刪除,那我們就選擇指代,也就是替換
#含空值的數(shù)據(jù)被替換為“b*”
df.fillna("b*")
#E屬性中的含空值的數(shù)據(jù)被替換成該屬性的平均值
df.fillna(df["E"].mean())
#插值替換
如果含空值的元素為最后一個,那么空值的數(shù)據(jù)替換成和上一個數(shù)據(jù)一樣
如何含空值的元素為中間,那么空值的數(shù)據(jù)被(上+下)/2代替
df["E"].interpolate()
#3次樣條插值 order 參數(shù)就是幾次樣條插值
df["E"].interpolate(method="spline",order=3)
*函數(shù)
(4)異常值分析(含有就返回True) --isnull() sl_s.isnull() 主要表示沒有空值 (5)提取異常值的該屬性信息 sl_s[sl_s.isnull()] (6)提取異常值的表格全部信息 df[df["sactisfaction_level"].isnull()] (7)丟棄異常值 --dropna() sl_s=sl_s.dropna() 注:刪除為空的異常值 可以利用where()把異常數(shù)據(jù)賦空,然后利用dropna()刪除 (8)填充異常值 --fillna() sl_s=sl_s.fillna() (9)平均值 --mean() sl_s.mean() (10)標(biāo)準(zhǔn)差 --std() Sl_s.std() (11)最大值 --max() sl_s.max() (12)最小值 --min() sl_s.min() (13)中位數(shù) --median() sl_s.median() (14)下四分位數(shù) --quantile(q=0.25) sl_s.quantile(q=0.25) (15)上四分位數(shù) --quantile(q=0.75) sl_s.quantile(q=0.75) (16)偏度 --skew() sl_s.skew() 分析:小于0 是負(fù)偏 均值偏小,大部分?jǐn)?shù)是比他的均值大的 大于 0 稍微有些振偏 遠(yuǎn)大于0, 是極度振偏,均值要比他的大多數(shù)值大好多。 (17)峰度 --kurt() sl_s.kurt() 分析:<0 相比于正態(tài)分布,他的趨勢相對平緩 遠(yuǎn)大于0 說明他的形變是非常大的,所以是不靠譜的 (18)獲得離散化的分布(numpy模塊) --histogram() np.histogram(sl_s.values,bins = np.arange(0.0,1.1,0.1)) 結(jié)果分析: [195,1214,532,974,…] [0.0,0.1,0.2,0.3,0.4…] 代表0.0-0.1之間有195個數(shù),0.1-0.2之間有1214個數(shù),以此類推 分布間隔為0.1
3.利用四分位數(shù)來去除異常值
3.1.提取大于1的值 le_s[le_s>1] 3.2 去除大于1的異常值 le_s[le_s<=1] 3.3 提取正常值(利用四分位數(shù)) 3.3.1 下四分位 q_low=le_s.quantile(q =0.25) 3.3.2 上四分位 q_high=le_s.quantile(q=0.75) 3.3.3 四分位間距 q_interval=q_high-q_low 3.3.4 定義k的值 K=1.5~3之間 如果k=1.5,刪除的異常值是中度異常 如果k=3.0,刪除的異常值是極度異常 3.3.5 篩選 le_s=le_s[le_s<q_high+k*q_interval][le_s>q_low-k*q_interval] 3.4 數(shù)據(jù)的個數(shù) --len() len(le_s) 3.5離散分布直方圖(numpy模塊) np.histogram(le_s.values,bins=np.arange(0.0,1.1,0.1)) 3.6回顧數(shù)據(jù)的平均值,標(biāo)準(zhǔn)差,中位數(shù),最大值,最小值,偏度,峰度,確定數(shù)據(jù)的正常。
4.靜態(tài)結(jié)構(gòu)分析
4.1每個值出現(xiàn)的次數(shù) --values_counts() np_s.value_counts() 4.2獲取該數(shù)據(jù)的構(gòu)成和比例(每個值的頻率) np_s.value_counts(normalize=True) 4.3 排序 np_s.value_counts(normalize=True).sort_index()
5.數(shù)據(jù)分區(qū)間
5.1把數(shù)據(jù)分成幾份 --histogram() np.histogram(amh_s.values,bins=10) 把數(shù)據(jù)分成10份 5.2另一種方法 加了區(qū)間,計(jì)算區(qū)間的頻數(shù) (左閉右開的區(qū)間) Np.histogram(amh_s.values,bins = np.arange(amh_s.min(),amh_s.max()+10,10)) (左開右閉的區(qū)間) amh_s.value_counts(bins=np.arange (amh_s.min(),amh_s.max()+10,10))
6.英文異常值數(shù)據(jù)的處理
6.1 首先,統(tǒng)計(jì)該數(shù)據(jù)的分布頻數(shù) s_s.value_counts() 6.2確定異常值的名字。 6.3把異常值賦空(NaN) --where() s_s.where(s_s!="name") 意思是把”name”的數(shù)據(jù)賦空 6.4把賦空的異常值刪除 --dropna()刪除異常值 s_s.where(s_s!="name").dropna() 6.5 檢查刪除異常值的結(jié)果 s_s.where(s_s!="name").dropna().value_counts()
7.對比分析
7.1對表格中空值的行刪除
Df = df.dropna(axis=0,how='any')
axis =0 ,代表的是行刪除
how=‘a(chǎn)ny' 代表的是含有部分空值就執(zhí)行行刪除
how=‘a(chǎn)ll' 代表的是一行全部是空值執(zhí)行行刪除
7.2含有條件性的對異常值的刪除
df=df[df["last_evaluation"]<=1] [df["salary"]!="name"][df["department" ]!="sale"]
7.3分組(比如:把同一部門的人分為一組) --groupby()
df.groupby("department")
7.4對分組后的組取均值
df.groupby("department").mean()
7.5 取部分?jǐn)?shù)據(jù)(切片) --loc()
df.loc[:,["last_evaluation","department"]] .groupby("department")
7.6 取部分?jǐn)?shù)據(jù)求平均
df.loc[:,["last_evaluation","department"]] .groupby("department").mean()
7.7 取部分?jǐn)?shù)據(jù)求極差 --apply()
df.loc[:,["average_monthly_hours" ,"department"]].groupby ("department")[ "average_monthly_hours"]. apply(lambda x:x.max()-x.min())
總結(jié)
以上所述是小編給大家介紹的python實(shí)現(xiàn)數(shù)據(jù)分析與建模 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
- Python運(yùn)用于數(shù)據(jù)分析的簡單教程
- Python數(shù)據(jù)分析matplotlib設(shè)置多個子圖的間距方法
- Python數(shù)據(jù)分析:手把手教你用Pandas生成可視化圖表的教程
- python數(shù)據(jù)分析數(shù)據(jù)標(biāo)準(zhǔn)化及離散化詳解
- 詳解10個可以快速用Python進(jìn)行數(shù)據(jù)分析的小技巧
- Python數(shù)據(jù)分析庫pandas基本操作方法
- 利用python實(shí)現(xiàn)數(shù)據(jù)分析
- 選擇python進(jìn)行數(shù)據(jù)分析的理由和優(yōu)勢
- 簡單且有用的Python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)代碼
相關(guān)文章
Django csrf 驗(yàn)證問題的實(shí)現(xiàn)
csrf是通過偽裝來自受信任用戶的請求來利用受信任的網(wǎng)站。這篇文章主要介紹了Django csrf 驗(yàn)證問題的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10
為Python的Tornado框架配置使用Jinja2模板引擎的方法
Jinja2是人氣Web框架Flask中的內(nèi)置模板引擎,而且與Django的模板引擎比較類似,這里我們就來看一下為Python的Tornado框架配置使用Jinja2模板引擎的方法2016-06-06
jupyter notebook 添加kernel permission denied的操作
這篇文章主要介紹了jupyter notebook 添加kernel permission denied的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
PyQt5 PySide2 觸摸測試功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了PyQt5 PySide2 觸摸測試功能的實(shí)現(xiàn),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
YOLOv5車牌識別實(shí)戰(zhàn)教程(一)引言與準(zhǔn)備工作
這篇文章主要介紹了YOLOv5車牌識別實(shí)戰(zhàn)教程(一)引言與準(zhǔn)備工作,在這個教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識別,幫助你快速掌握YOLOv5車牌識別技能,需要的朋友可以參考下2023-04-04

