日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python数据科学-单变量数据分析

發(fā)布時間:2023/12/19 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python数据科学-单变量数据分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

總第85篇

01|背景:

我們在做機器學習之前,需要自己先對數(shù)據(jù)進行深入的了解(這些數(shù)據(jù)是什么類型,總共有多少數(shù)據(jù),有沒有缺失值,均值是多少之類的),只有自己對數(shù)據(jù)足夠了解了,才能夠更好地利用機器學習。我們把在正式開始機器學習之前對數(shù)據(jù)的了解過程成為探索性分析 , 簡稱 EDA。

02|單變量數(shù)據(jù)分析:

單邊量數(shù)據(jù)是指數(shù)據(jù)集中只有一個變量 ,也可以是多列中的某一列(可以理解成是某一個指標)。比如一個班的體測成績表是一個數(shù)據(jù)集(包含身高、體重、1000 米用時之類的各種指標),那么該數(shù)據(jù)集里面的某一個指標就可以看作是一個單變量數(shù)據(jù)。

我們本篇以美國總統(tǒng)歷年在國情咨詢中對國會提起的訴求數(shù)量作為實例。

2.1數(shù)據(jù)整體情況了解:

我們在拿到一批/列數(shù)據(jù)時,第一件事就是看一下這批數(shù)據(jù)的一個整體分布情況,而要看分布情況最好的方法就是繪制該批數(shù)據(jù)的散點圖。

#加載需要的庫%matplotlib inline import numpy as np plt.style.use("ggplot") from matplotlib.pylab import frange import matplotlib.pyplot as plt#導入相應的數(shù)據(jù) fill_data=lambda x:int(x.strip() or 0)#用來處理缺失值,如果缺失,用0填充 data=np.genfromtxt("D:\\Data-Science\\Exercisedata\\python數(shù)據(jù)科學指南配套文件\\president.csv",\dtype=(int,int),delimiter=",",converters={1:fill_data}) x=data[:,0] y=data[:,1]#繪制數(shù)據(jù)圖表以觀察趨勢 ax1=plt.subplot(1,1,1) ax1.set_title("All data") ax1.scatter(x,y,c="r") ax1.set_xlabel("year") ax1.set_ylabel("No presdential Request")

通過上圖我們可以看出,大部分數(shù)據(jù)分布還是相對比較集中,但是這是主觀上感覺,我們需要采用更科學的方法來進行衡量,這里采用分位數(shù)去衡量。

分位數(shù)是指在統(tǒng)計學中把所有數(shù)值由小到大排列按所處的位置進行分割,一般會把所有的數(shù)據(jù)用三個點(25、50、75位置的)分成四份。

#計算數(shù)據(jù)的百分位數(shù)(第25、50、75位數(shù))以了解數(shù)據(jù)分布 perc_25=np.percentile(y,25) perc_50=np.percentile(y,50) perc_75=np.percentile(y,75) print("25th Percentile=%0.2f"%(perc_25)) print("50th Percentile=%0.2f"%(perc_50)) print("75th Percentile=%0.2f"%(perc_75))

在得到相應的分位數(shù)以后,我們將分位數(shù)對應的圖表繪制到散點圖中。

#將這些百分位數(shù)添加到之前繪制的圖表中作為參考 ax1=plt.subplot(1,1,1) ax1.set_title("All data") ax1.scatter(x,y,c="r") ax1.set_xlabel("year") ax1.set_ylabel("No presdential Request") ax1.axhline(perc_25,label="25th",c="y") ax1.axhline(perc_50,label="50th",c="g") ax1.axhline(perc_75,label="75th",c="m") ax1.legend(loc="best")

現(xiàn)在可以看到,大部分數(shù)據(jù)確實是分布在 50 分位數(shù)(中間值)的兩側,只有左上角和右下角的幾個點離 50 分位數(shù)比較遠,,這里把他們當作異常值來看待。

異常值的處理方式可以直接刪除,也可以把異常值當作缺失值對待進行值替換,具體選擇哪種根據(jù)不同情況來定,我們這里選擇把異常值刪除掉。

#在圖形中查找是否存在異常值 #使用mask函數(shù)刪除異常值 #刪除異常值0和54 y_masked=np.ma.masked_where(y==0,y) y_masked=np.ma.masked_where(y==54,y_masked)

重新繪制圖表,并將對應的分位數(shù)線也繪制進去。

#在圖中添加25、50、75分位數(shù)線 ax2=plt.subplot(1,1,1) ax2.scatter(x,y_masked,c="r") ax2.set_title("Masked data") ax2.set_xlabel("year") ax2.set_ylabel("No Presedential Request") ax2.set_ylim(0,60) ax2.axhline(perc_25,label="25th perc",c="y") ax2.axhline(perc_50,label="50th perc",c="g") ax2.axhline(perc_75,label="75th perc",c="m") ax2.legend(loc="best")

現(xiàn)在看起來是不是就順眼很多了哈。通過上表我們可以看出,該批數(shù)據(jù)大部分還是集中 50 分位數(shù)(中間位置數(shù))附近,絕對值大小為 20 左右。散點圖能幫我們對數(shù)據(jù)有一個大概的認識,但是還不夠具體,我們接下來通過其他幾個角度繼續(xù)對該批數(shù)據(jù)集進行探索。

2.2對單變量數(shù)據(jù)進一步分析:

看了整體數(shù)據(jù)分布以后我們還想看得更具體一點,比如:哪一年的訴求量最多?哪個量級的訴求量最多之類的。

對訴求數(shù)量的絕對量級進行分析:

#對數(shù)據(jù)出現(xiàn)的頻率進行統(tǒng)計 x_freq=Counter(y) x_=list(x_freq.keys())#某一個量級訴求數(shù)量出現(xiàn)的次數(shù) y_=list(x_freq.values())#訴求數(shù)量絕對值#繪制分組數(shù)據(jù)的點陣圖 plt.subplot(111) plt.title("Dot Plot by Frequency")#繪制頻率plt.plot(y_,x_,"yo") plt.xlabel("Count") plt.ylabel("Presdential Request")#設置x軸的最小值和最大值 plt.xlim(min(y_)-1,max(y_)+1) plt.ylim(-5,60)

通過上圖可以看出,超過30的訴求數(shù)量只出現(xiàn)一次,出現(xiàn)2次,3次的訴求數(shù)量均低于30,說明生活還是很穩(wěn)定,人們的訴求并不是那么多。(我瞎說的)

對不同年份的訴求數(shù)量分析:

#采用年份范圍進行分組 x_group=collections.OrderedDict() group=5group_count=1 keys=[] values=[] for i,xx in enumerate(x):keys.append(xx)values.append(y[i]) ? ?if group_count==group:x_group[tuple(keys)]=valueskeys=[]values=[]group_count=0group_count+=1x_group[tuple(keys)]=values print(x_group) #繪制散點圖plt.subplot(111) ? ? x_vals=[] x_labels=[] y_vals=[] x_tick=1 for k,v in x_group.items(): ? ?for i in range(len(k)):x_vals.append(x_tick)x_label="-".join([str(kk) if not i else str(kk)[-2:] for i ,kk in enumerate(k)])x_labels.append(x_label)y_vals.extend(list(v))x_tick+=1plt.title("Dot Plot by Year Grouping") plt.xlabel("Year Group") plt.ylabel("No Presedential Request")try:plt.plot(x_vals,y_vals,"co")except ValueError:print(len(x_vals),len(y_vals))plt.xticks(x_vals,x_labels,rotation=-50) plt.ylim(-5,60)

年份分析里面我們以5年為一個界限進行分組,通過圖表我們可以看出1961-1965的訴求數(shù)量最低,且均低于20,1986-1990年的訴求數(shù)量較分散,且訴求數(shù)量的絕對值在該范圍內,1981-1985年之間的訴求數(shù)量較平穩(wěn),且5年中有4年的訴求數(shù)量是低于10的。

涉及的知識點總結:

  • np.genfromtxt()#numpy庫中用來讀取文件的,相當于pandas中的read_csv()。

  • np.percentile()#用來計算一批數(shù)據(jù)的分位數(shù)。

  • np.ma.masked_where()#用來屏蔽滿足某一條件的數(shù)值,常用來處理缺失數(shù)據(jù)。

  • Collections.OrderedDict()#用來創(chuàng)建一個有序字典。

  • Counter()#用于統(tǒng)計一批數(shù)據(jù)中不同點出現(xiàn)的次數(shù),返回一個字典,鍵為值,值為鍵在該批數(shù)據(jù)中出現(xiàn)的次數(shù)。

  • enumerate()#用于返回一個值在一批數(shù)據(jù)中出現(xiàn)的順序。

  • np.repeat()#用于重復某一個序列數(shù)據(jù)。

總結

以上是生活随笔為你收集整理的python数据科学-单变量数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。