Python中的數(shù)據(jù)分析詳解
數(shù)據(jù)分析概述
python在數(shù)據(jù)分析方面有哪些優(yōu)勢
- Python不受數(shù)據(jù)規(guī)模的約束,能夠處理大規(guī)模數(shù)據(jù)。
- Python的sklearn庫提供了豐富的數(shù)據(jù)挖掘和人工智能方法,為使用者分析各種場景提供方法支持。
- Python的自動數(shù)據(jù)分析能夠顯著提升工作效率。
- Python能夠繪制各種前沿的數(shù)據(jù)圖表。
- Python在海量數(shù)據(jù)采集方面也有獨特的優(yōu)勢。
數(shù)據(jù)分析的流程是什么?
- 數(shù)據(jù)采集
- 數(shù)據(jù)整理和存儲
- 數(shù)據(jù)分析和可視化
- 數(shù)據(jù)報表和總結(jié)
數(shù)據(jù)的導入和導出
導入數(shù)據(jù)
Excel格式
#excel有xls,xlsx兩種格式,都可以使用read_excel #read_excel方法返回的結(jié)果是DataFrame,DataFrame的一列對應著Excel的一列。 import pandas as pd data = pd.read_excel(path) """ 參數(shù)含義: (1)sheet_name參數(shù):該參數(shù)用于指定導入Excel文件中的哪一個sheet,如果不填寫這個參數(shù),則默認導入第一個sheet。 (2) index_col參數(shù):該參數(shù)用于指定表格的哪一列作為DataFrame的行索引,從0開始計數(shù)。 (3)nrows參數(shù):該參數(shù)可以控制導入的行數(shù),該參數(shù)在導入文件體積較大時比較有用。 (4)skipfooter參數(shù):該參數(shù)可以在導入數(shù)據(jù)時,跳過表格底部的若干行。 (5)header參數(shù):當使用Pandas的read_excel方法導入Excel文件時,默認表格的第一行為字段名。如果表格的第一段不是字段名,則需要使用該參數(shù)設置字段名。 (6)usecols參數(shù):該參數(shù)可以控制導入Excel表格中的哪些列。 (7)names參數(shù):該參數(shù)可以對導入數(shù)據(jù)的列名進行重命名。 """
csv格式
#CSV是一種用分隔符分割的文件格式。由于Excel文件在存放巨量數(shù)據(jù)時會占用極大空間,且導入時也存在占用極大內(nèi)存的缺點,因此,巨量數(shù)據(jù)常采用CSV格式。 import pandas as pd data = pd.read_csv(path,encoding="utf-8") #sep參數(shù)表示要導入的csv文件的分隔符,默認值是半角逗號 data = pd.read_csv(path,sep=',',encoding="utf-8")
json格式
#用Pandas模塊的read_json方法導入JSON數(shù)據(jù),其中的參數(shù)為JSON文件的路徑。 import pandas as pd data = pd.read_json(path)
txt格式
#需要導入存在于txt文件中的數(shù)據(jù)時,可以使用pandas模塊中的read_table方法。它的參數(shù)和用法與read_csv方法類似。 import pandas as pd data = pd.read_table(path)
導出數(shù)據(jù)
CSV格式數(shù)據(jù)輸出
import pandas as pd
data = pd.read_csv(path,sep=",",encoding="utf-8",nrows=10)
data.to_csv("test.csv",nrows=10)
"""
1、CSV格式數(shù)據(jù)輸出
對于pandas庫的to_csv方法,有下列參數(shù)說明:
path_or_buf:要保存的路徑及文件名。
sep:分割符,默認為“,”。
columns:指定要輸出的列,用列名,列表表示,默認值為None。
header:是否輸出列名,默認值為True。
index:是否輸出索引,默認值為True。
encoding:編碼方式,默認值為“utf-8”。
"""xlsx格式數(shù)據(jù)輸出
import pandas as pd
data = pd.read_excel(path)
data.to_excel(path,encoding='gbk')
"""
sheet_name:字符串,默認值為“Sheet1”,指包含DataFrame數(shù)據(jù)的表的名稱。
np_rep:字符串,默認值為 ‘ '。指缺失數(shù)據(jù)的表示方式
columes:序列,可選參數(shù),要編輯的列
header:布爾型或字符串列表,默認值為True。如果給定字符串列表,則表示它是列名稱的別名。
index:布爾型,默認值為True,行名(索引)
index_label:字符串或序列,默認值為None。如果文件數(shù)據(jù)使用多索引,則需使用序列。
encoding:指定Excel文件的編碼方式,默認值為None。
"""
data2 = pd.read_excel(path)
work = pd.ExcelWriter('path')
data.to_excel(work,sheet_name='data')
data2.to_excel(work,sheet_name="data2")數(shù)據(jù)預處理
熟悉數(shù)據(jù)
import pandas as pd data = pd.read_csv(path) #使用info()方法查看數(shù)據(jù)基本類型 data.info() #查看數(shù)據(jù)表的大小 d = data.shape[0] w = data.shape[1] #數(shù)據(jù)格式的查看 type(data) #series的查看 data.dtype #dataframe的查看 data.dtypes #查看具體的數(shù)據(jù)分布在進行數(shù)據(jù)分析時,常常需要對對數(shù)據(jù)的分布進行初步分析,包括統(tǒng)計數(shù)據(jù)中各元素的個數(shù),均值、方差、最小值、最大值和分位數(shù) data.describe()
缺失值處理
import pandas as pd data = pd.read_csv(path) #缺失值檢查 #isnull()方法。isnull()函數(shù)返回值為布爾值,如果數(shù)據(jù)存在缺失值,返回True;否則,返回False。 data.isnull() #缺失值刪除 #dropna()方法用于刪除含有缺失值的行。 data.dropna() #當某行或某列值都為NaN時,才刪除整行或整列。這種情況該如何處理? data.dropna(how='all',axis=0)#當整行都是None時,刪除整行 #當某行有一個數(shù)據(jù)為NaN時,就刪除整行和當某列有一個數(shù)據(jù)為NaN時, data.dropna(how='any',axis=0) data.dropna(how='any',axis=1) #缺失值替換/填充 #在data數(shù)據(jù)中,利用各列值的均值填補缺失數(shù)據(jù),該如何用Python實現(xiàn)? data.fillna(data.mean()) #使用近鄰填補法,即利用缺失值最近鄰居的值來填補數(shù)據(jù),對df數(shù)據(jù)中的缺失值進行填補,這種情況該如何實現(xiàn)? data.fillna(method='bfill')#在本案例中,可以將fillna()方法的method參數(shù)設置為bfill,來使用缺失值后面的數(shù)據(jù)進行填充。 #若使用缺失值前面的值進行填充來填補數(shù)據(jù),這種情況又該如何實現(xiàn)? data.fillna(method='ffill') #請利用二次多項式插值法對df數(shù)據(jù)中A列的缺失值進行填充。 data['A'].fillna(method='polynomial',order=2) #請使用Python完成對df數(shù)據(jù)中A列的三次樣條插值填充。 data['A'].fillna(method='spline',order=3)
重復值處理
""" 利用duplicated()方法檢測冗余的行或列,默認是判斷全部列中的值是否全部重復,并返回布爾類型的結(jié)果。對于完全沒有重復的行,返回值為False。對于有重復值的行,第一次出現(xiàn)重復的那一行返回False,其余的返回True。 """ import pandas as pd data = pd.read_csv(path) data.duplicated() #drop_duplicates()方法。,利用duplicates()方法去除冗余數(shù)據(jù),即刪除冗余的所有行,默認是判斷全部列 data.drop_duplicates()
檢測異常值
#query方法和boxplot方法。首先使用pandas庫中的query方法查詢數(shù)據(jù)中是否有異常值。然后通過boxplot方法檢測異常值。
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv(path)
#假設B列大于1000
data.query('B<1000')
#畫圖
plt.boxplot(df['B'])
"""
處理異常值的方法
(1)最常用的方式是刪除。
(2)將異常值當缺失值處理,以某個值填充。
(3)將異常值當特殊情況進行分析,研究異常值出現(xiàn)的原因。
"""數(shù)據(jù)類型檢查
#利用numpy庫的arange函數(shù)創(chuàng)建一維整數(shù)數(shù)組,并查看數(shù)據(jù)類型。 import numpy as np arr = np.arange(0,10) arr.dtype #利用numpy庫的arange函數(shù)創(chuàng)建一維浮點數(shù)數(shù)組arr1,然后將arr1數(shù)組的數(shù)據(jù)類型轉(zhuǎn)換為整型。 arr1 = np.arange(1,5,0.5) arr1.astype(np.int)
索引設置
"""
pandas中索引的作用
(1)更方便地查詢數(shù)據(jù)。
(2)使用索引可以提升查詢性能。
"""
#1、添加索引
import pandas as pd
import numpy as np
data = pd.Series([i for i in range(1,6)],['a','b','c','d','e'])
#某公司銷售數(shù)據(jù)集“work.csv”內(nèi)容如下,請設定日期為索引,并用Python實現(xiàn)。
#set_index()函數(shù),可以指定某一字段為索引
data = pd.read_csv("work.csv")
data1 = data.set_index('date')
#更改索引在該案例中,除了可以用set_index方法重置索引外,還可以在導入csv文件的過程中,設置index_col參數(shù)重置索引,代碼及結(jié)果如下:
data2 = pd.read_csv("work.csv",sep=",",encoding="gbk",index_col="日期")
#重建索引
data3 = data.reindex([....])
#重建行和列
data4 = data.reindex(index=new_index,columns=new_columns)其他
#大小寫轉(zhuǎn)換 lower()#大變小 upper()#小變大 #按列增加數(shù)據(jù) import pandas as pd import numpy as np data = pd.read_csv(path) data.insert(num,'name',value)#num是第幾列,name是列名,value是值 data.loc[:,'name'] = value #按行增加數(shù)據(jù) data.append(new_data) data.loc['index'] = value data.iloc[num,:] = value#num是第幾行 #數(shù)據(jù)刪除 """ 關鍵技術(shù):該案例中,使用DataFrame的drop()方法,刪除數(shù)據(jù)中某一列。drop()方法的參數(shù)說明如下: labels:表示行標簽或列標簽。 axis:axis=0,表示按行刪除,axis=1,表示按列刪除。默認值為0。 index:刪除行,默認為None。 columns:刪除列,默認為None。 inplace:可選參數(shù),對原數(shù)組作出修改并返回一個新數(shù)組。默認是False,如果為True,那么原數(shù)組直接被替換。 """
數(shù)據(jù)的選擇和運算
數(shù)據(jù)的索引和切片
a[m:n:p],m開始,n結(jié)束,p步長 a[:,0]#第一列 #布爾索引 import numpy as np arr = np.arange(3) bool1 = np.array(True,False,True) arr[bool1]#arr([0,1]) #花式索引 arr[arr>value] arr[arr<=value]=0 #series可以用索引數(shù)值來選取 #切片 #[下界 :上界 :步長] #loc中橫向索引是確定的 #loc中可以加條件條件使用法語法為df.loc[進行篩選的條件],如果條件為真,則選出符合條件的結(jié)果。復合條件包括: &(且 = 與), |(或), ~(取反 = 非),通過篩選函數(shù)進行篩選,常見的函數(shù)式有 isin(), where() 等。 #iloc 的使用與 loc 完全類似,只不過是針對“位置( = 第幾個 )”進行篩選。函數(shù)語法為:.iloc[整數(shù)、整數(shù)列表、整數(shù)切片、布爾列表以及函數(shù)] #①函數(shù) = 自定義函數(shù) (函數(shù)的返回值需要是合法對象 (= 整數(shù)、整數(shù)列表、整數(shù)切片、布爾列表)) #②匿名函數(shù) lambda :使用方法 #語法:lambda 自變量: slice(start = 下界, stop = 上界, step = 步長)。
多表合并
import pandas as pd import numpy as np pd.merage(data1,data2,on=index)#index可以是一個鍵,也可以是一個列表 #參數(shù)how,left用data1的鍵,right用data2的,outer使用并集,inner使用交集 #使用join()方法合并數(shù)據(jù)集 #DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False) #使用concat()方法合并數(shù)據(jù)集 pd.concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False) #可以利用count()方法進行計算非空個數(shù),并利用參數(shù)axis來控制行列的計算 #quantile() data.quantile(0.35)#淘汰35%的人 data.sort_values()#sort_values()方法可以根據(jù)指定行/列進行排序。 #參數(shù) #by:要排序的名稱列表 #axis:軸,0代表行,1代表列,默認是0 #按照數(shù)據(jù)進行排序,首先按照C列進行降序排序,在C列相同的情況下,按照B列進行升序排序。 data.sort_values(by=['c','b'],ascending=[False,True])
數(shù)據(jù)分類匯總和統(tǒng)計
Groupby分類統(tǒng)計
Hadley Wickham創(chuàng)造了一個用于表示分組運算的術(shù)語“split-apply-combine”(拆分-應用-合并)。第一個階段,pandas對象中的數(shù)據(jù)會根據(jù)你所提供的一個或多個鍵被拆分(split)為多組。拆分操作是在對象的特定軸上執(zhí)行的。例如,DataFrame可以在其行(axis=0)或列(axis=1)上進行分組。然后,將一個函數(shù)應用(apply)到各個分組并產(chǎn)生一個新值。最后,所有這些函數(shù)的執(zhí)行結(jié)果會被合并(combine)到最終的結(jié)果對象中。結(jié)果對象的形式一般取決于數(shù)據(jù)上所執(zhí)行的操作。下圖大致說明了一個簡單的分組聚合過程。
按列分組
按列分組分為以下三種模式:
第一種:df.groupby(col),返回一個按列進行分組的groupby對象;
第二種:df.groupby([col1,col2]),返回一個按多列進行分組的groupby對象;
第三種:df.groupby(col1)[col2] 或者 df[col2].groupby(col1),兩者含義相同,返回按列col1進行分組后,col2的值;
時間序列
Datetime 模塊
Python標準庫中包含了datetime模塊,該模塊提供了非常強大的功能來處理日期和時間。
datatime模塊是在time模塊的基礎上做了封裝,提供了更多更好用的類,常用的類有date、time、datetime、timedelta、tzinfo。
"""
請利用Python獲取當前日期。
關鍵技術(shù):可以利用datetime模塊date類的today()方法將當前日期保存在變量中。
通過使用date.today(),可以創(chuàng)建一個date類對象,其中包含了日期元素,如年、月、日,但不包含時間元素,比如時、分、秒。最后,可以使用year、month和day來捕獲具體的日期元素
"""
import datetime
date = datetime.date.today()
print(date)
print(date.year)
print(date.month)
print(date.day)
"""
利用Python獲取當前日期和時間。
關鍵技術(shù):可以利用datetime模塊datetime類的today()方法將當前日期和時間保存在變量中。
"""
import datetime
date = datetime.datetime.today()
print(date)
print(date.year)
print(date.month)
print(date.day)
"""
請利用Python獲取當前時間。
關鍵技術(shù):可以利用datetime模塊datetime類的now()方法將當前日期和時間保存在變量中
date = datetime.datetime.now()
date
"""
"""
時間戳與time模塊
時間戳是以格林威治時間1970年01月01日00時00分00秒為基準計算所經(jīng)過時間的秒數(shù),是一個浮點數(shù)。Python的內(nèi)置模塊time和datetime都可以對時間格式數(shù)據(jù)進行轉(zhuǎn)換,如時間戳和時間字符串的相互轉(zhuǎn)換。
"""
import time
time.mktime(time.localtime())
"""
請利用Python將時間戳數(shù)據(jù)轉(zhuǎn)換成系統(tǒng)時間。
關鍵技術(shù):可以利用time模塊的strftime()函數(shù)可以將時間戳轉(zhuǎn)換成系統(tǒng)時間。
"""
import pandas as pd
import time
time = time.strftime(("%Y-%m-%d %H:%M:%S"),time.localtime(time.mktime(time.localtime())))
"""
請利用Python將字符串'2022-01-15'轉(zhuǎn)換成時間類型的數(shù)據(jù)格式。
關鍵技術(shù):在可以用strptime函數(shù)將日期字符串轉(zhuǎn)換為datetime數(shù)據(jù)類型,可以用Pandas的to_datetime()函數(shù)將日期字符串轉(zhuǎn)換為datetime數(shù)據(jù)類型。to_datetime()函數(shù)轉(zhuǎn)化后的時間是精準到時分秒精度的。
"""
import datetime
datestr = "2022-01-15"
datetime.datetime.strptime(datestr,"%Y-%m-%d")
#字符串和時間轉(zhuǎn)換
import pnadas as pd
datestrs = "2022/01/15"
pd.to_datetime(datestrs)
"""
給定兩個時間類型的數(shù)據(jù),計算兩個時間的不同之處。
關鍵技術(shù):利用datetime將時間類型數(shù)據(jù)進行轉(zhuǎn)換,然后利用減法運算計算時間的不同之處,默認輸出結(jié)果轉(zhuǎn)換為用(“天”,“秒”)表達。
"""
import datetime
delta = datetime.datetime(2022,1,16) - datetime.datetime(2022,1,11,1,12)
"""
如果要將輸出結(jié)果轉(zhuǎn)換以“天”為單位,此時應該如何處理?
關鍵技術(shù):針對上例中的delta變量,利用delta.days可以將輸出結(jié)果轉(zhuǎn)換以“天”為單位。
"""
delta.days
"""
【例】如果要將輸出結(jié)果轉(zhuǎn)換以“秒”為單位,此時應該如何處理?
關鍵技術(shù):針對上例中的delta變量,利用delta.seconds可以將輸出結(jié)果轉(zhuǎn)換以“秒”為單位
"""
delta.seconds數(shù)據(jù)可視化
例1 繪制帶有中文標題、標簽和圖例的正弦和余弦圖像。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
t = np.arange(0.0,2.0*np.pi,0.01)
s = np.sin(t)
c = np.cos(t)
plt.plot(t,s,label='正弦',color='red')
plt.plot(t,c,label='余弦',color='blue')
plt.xlabel("x-變量")
plt.ylabel("y")
plt.xlabel('x-變量', #標簽文本
fontproperties='STKAITI', #字體
fontsize=18) #字號
plt.ylabel('y-正弦余弦函數(shù)值', fontproperties='simhei', fontsize=18)
plt.title('sin-cos函數(shù)圖像', #標題文本
fontproperties='STLITI', #字體
fontsize=24) #字號例2 繪制余弦曲線散點圖。
import numpy as np from matplotlib import * t = np.arange(0.0,np.pi*2,0.01) c = np.cos(t) plt.scatter(t,c)
到此這篇關于Python中的數(shù)據(jù)分析詳解的文章就介紹到這了,更多相關Python數(shù)據(jù)分析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
pytorch加載自定義網(wǎng)絡權(quán)重的實現(xiàn)
今天小編就為大家分享一篇pytorch加載自定義網(wǎng)絡權(quán)重的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python利用Django如何寫restful api接口詳解
這篇文章主要給大家介紹了關于Python利用Django如何寫restful api接口的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-06-06
Python中的xml與dict的轉(zhuǎn)換方法詳解
這篇文章主要介紹了Python中的xml與dict的轉(zhuǎn)換方法詳解,xml 是指可擴展標記語言,一種標記語言類似html,作用是傳輸數(shù)據(jù),而且不是顯示數(shù)據(jù)??梢宰远x標簽,需要的朋友可以參考下2023-07-07
Python實現(xiàn)將MySQL中所有表的數(shù)據(jù)都導出為CSV文件并壓縮
這篇文章主要為大家詳細介紹了如何使用Python將MySQL數(shù)據(jù)庫中所有表的數(shù)據(jù)都導出為CSV文件到一個目錄,并壓縮為zip文件到另一個目錄下,需要的可以了解下2025-03-03
使用python搭建Django應用程序步驟及版本沖突問題解決
這篇文章主要介紹了使用python搭建Django應用程序的步驟,最近還解決了因版本沖突出現(xiàn)的錯誤2013-11-11

