python資料分析(文本版)

2021-10-21 03:30:07 字數 4788 閱讀 3327

一、numpy資料處理庫

import numpy as np

1.建立陣列

方法1:np.array(元素列表) #括號中是乙個可迭代物件,元組列表都可

如,arr_v1=np.array([1,2,3,4,5,6]) 這是一維陣列;

arr_v2=np.array([[1,2,3,4],[3,4,5,6],[5,6,7,8]]) 這是乙個3行4列的二維陣列,列表套列表,注意要框起來變成乙個總體

方法2:np.arange(初始值,終止值,步長值)

np.linspace(初始值,終止值,資料個數) #從初始值到終止值間均等的取n個值

方法3:np.random.randint(初始值,終止值,size=(m,n)) #從初始值和終止值之間隨機的選取整數,組成m行n列的陣列

可以給個隨機種子,則每次產生一樣 np.random.seed(25)

np.random.random(100) #作用:產生0-1之間的100個小數

2.陣列的屬性

.屬性 #不用加括號,加括號就是方法

ndim: 陣列的維度

size: 元素個數

shape: 陣列的形狀(m行n列) #返回乙個元組

dtype: 陣列的型別

3.陣列的操作

訪問元素,改變形狀

3.1.訪問元素

方法1:索引切片 原則:先行後列,下標從0開始

e.g. arr_v1[0,0] 訪問第0行第0列的元素

arr_v1[0,:] 訪問陣列的第一行的所有列

arr_v1[:3,2] 訪問前三行的第3列元素

方法2:使用布林值訪問陣列

e.g. arr_bool = np.array([1,0,1],dtype = np.bool) #建立乙個陣列,改變型別為布林型

arr_v1[arr_bool,2] #訪問第3列中,為true的行的值

注:arr_bool可以按照自己的要求建立,比如: arr_bool = arr_v1[1,:]>17 表示只要第一行中所有大於17的值

3.2.改變形狀

方法1:陣列名2 = 陣列名1.reshape(m,n) 不會對原陣列產生影響

方法2:陣列名.shape = m,n 改變陣列的原有屬性。

改變形狀的函式:

1.陣列的展平(即多維到1維)

陣列名.flatten() #橫向展平

陣列名.flatten('f') #縱向展平

2.陣列的分隔和組合

組合命令:np.concatenate((陣列名1,陣列名2...),axis = 1或者0)#axis為1時,表示橫向操作。為0時,表示縱向操作

分隔命令:np.split(陣列名,n,axis=1/0) #將陣列均等的分隔成n個陣列

4.陣列中資料的統計

常用的統計函式:

sum() 求和

np.sum(arr_v1) #陣列中所有加總

分別求每一列的和,

用函式做:np.sum(arr_v1,axis=0)

用方法做:arr_v1.sum(axis=0)

max() 求最大值

min() 求最小值

mean() 求均值

std() 求標準差

var() 求方差

二、pandas資料分析庫

import pandas as pd

1.建立pandas資料和讀取本地磁碟檔案

1、建立pandas中的資料

資料型別1:series資料(一維陣列)#注意:它相當於excel**中的一列

語法:pd.series(陣列/字典)

資料型別2:dataframe資料(二維陣列)#注意:它相當於excel中的乙個**

語法:pd.dataframe(陣列/字典,columns=,index=) #columns設定列標題,index 設定行索引

形式1建立datafrmae:給定乙個陣列,給陣列指定乙個列名

df_v1 = pd.dataframe(arr_v11,columns = [『語文』,『數學』,『英語』])

形式2建立dataframe:給定乙個字典,鍵作為列名,值作為每一列的值,index設定行縮影

df_v2 = pd.dataframe(,index=[『張三』,『李四』,『王五』,『趙六』])

後續爬蟲時,從網路上爬取下來的資料就可以放入字典中,然後形成dataframe再進行後續的資料分析

2、讀取來自本地磁碟的檔案資料

需要先將檔案上傳

1)來自csv格式的資料

import pandas as pd

語法1:如下

pd.read_table(「表名.csv」,sep=分隔符,encoding=「utf-8」) #分隔符預設為逗號,encoding指定編碼格式

語法2:如下

pd.read_csv(「表名.csv」,sep=分隔符,encoding="")

2)來自excle檔案的資料

語法如下:

pd.read_excel("表名.xlsx",sheet_name=0,usecols=) #sheetname用來指定讀那個**,預設的是第1個**,usecols表示讀取哪幾列

3.1 查

使查出來的列對齊:

pd.set_option(『display.unicode.ambiguous_as_wide』,true)

pd.set_option(『display.unicode.east_asian_width』,true)

#方法1:直接用列名查詢

print(df_excel.columns) #顯示全部列名

print(df_excel.[[「姓名」,「交易額」]][:10]) #顯示指定列的指定行

#方法2:使用loc查詢

print(df_excel.loc[:,[「姓名」,「交易額」]])

print(df_excel.loc[df_excel[「交易額」]<1000,[「姓名」,「交易額」]])

這裡可以使用布林值,因為用的是行索引(逗號前)和列索引(逗號後)

#方法3:使用iloc查詢

loc:必須使用列名或行索引

iloc:使用的是列索引,行索引

df_excel.iloc[:,[1,4]] #1表示姓名列即第1列,4表示交易額列即第4列(從0開始)

這裡不能像上面一樣用布林值代替,因為這裡用的是序號,指第幾行第幾行,可以寫成:

df_excel.iloc[(df_excel[「交易額」]<1000).values,[1,4]]

df_excel.iloc[[3,4,10],[0,1,4]] #查詢行下標為[3,4,10],列下標為[0,1,4]的資料

3.2 改

找到要找的值後,賦值

df_excel.loc[df_excel[「姓名」]==「張三」,「交易額」]+10

4.簡單的描述性統計分析

print(「返回交易總額\n」,df_excel[『交易額』].sum())

print(「張三的交易總額\n」,df_excel.loc[df_excel[「姓名」]==「張三」,「交易額」].sum()

print(「找出交易額最小的3個資訊\n」,df_excel.nsmallest(3,『交易額』))

df_excel.loc[:,『交易額』].nsmallest(3) 這是直接出來最小的三個交易額,而沒有全部資訊

print(「找出交易額最大的5個\n」,df_excel.nlargest(5,『交易額』))

print(「輸出交易額的描述性統計\n」,df_excel[『交易額』].describe())

df_excel[『日期』] = pd.to_datetime(df_excel[『日期』]) #轉換為日期

df_excel1=df_excel.set_index(「日期」) #重新設定索引,將日期作為dataframe中資料的索引

df_excel1.loc[:,「交易額」].resample(「5d」).聚合函式 #按5天為間隔重取樣,聚合函式:sum(),max(),min()等,只對數值起作用

注意:使用resample的前提把日期作為索引,再對索引進行重取樣

例:data = pd.series(index=pd.date_range(start=「20200601」,end=「20200701」,freq=「d」),data=range(31))

data.resample(『5d』).sum()

5.2日期計算

日期+pd.timedelta(days=1) 給日期加1天

日期+pd.timedelta(weeks=1) 給日期加1周

6.資料的排序

6.1排序

df_excel[「姓名」].unique() #顯示所有不同列名

sort_values(by=[「列名」,「列名」],ascending=true,axis=0,inplace=false)#ascending =true是公升序,inplace表示是否對原表進行操作,=false 返回乙個新的dataframe表,不對原表操作,axis表示對行或列進行操作,一般都是對列進行操作, = 0

6.2、分組聚合

df_group = df.groupby(by=『姓名』)[「交易額」] #生成的是乙個分組物件,接下來再用聚合函式等對物件進行操作 。指按姓名分組,分組後對其交易額計算

df_group.聚合函式() #對每1組進行的聚合操作

其他高階操作:

資料清洗

異常值,空值,重複值

標準化資料

python程式設計基礎(文本版)

1.數值型別 1.1字元型 八進位制 0o234 十六進製制 0x234 測試型別函式 print type 234.67 1.2字串 三引號的定界符可以換行書寫 1 字串的連線和拆分 連線語法 連線符 join 列表 拆分語法 字串.split 分隔符 會將字串的值拆分後,依次放入乙個列表中,可以...

Python文字資料分析與處理

分詞 過濾停用詞 tf idf得到摘要資訊或者使用lda主題模型 與其他的鐵達尼號遇難 等案例不同,文字處理需要自己在預處理時構建出資料表.沒有後者每乙個提供表 不使用第三方庫實現的思路 過濾停用詞得到去掉停用詞的集合data 對data進行去重 現在使用的演算法不需要單詞出現的數量,如果換作其他演...

Python資料分析 文字相似度

文字相似度 向量間相似度 nltk實現詞頻統計 import nltk from nltk import freqdist text1 i like the movie so much text2 that is a good movie text3 this is a great one text...