動手學資料分析-task01
第一章 資料載入
第一節 資料載入以及初步觀察
1、 載入資料
資料集下載:Titanic - Machine Learning from Disaster | Kaggle
1.1 匯入 numpy 和 pandas
import numpy as np
import pandas as pd
1.2 載入資料
(1) 使用相對路徑載入資料
【提示】相對路徑載入報錯時,嘗試使用 os.getcwd() 檢視當前工作目錄。
df = pd.read_csv('data/train.csv')
df.head(3)
(2) 使用絕對路徑載入資料
df = pd.read_csv('E:/pytorch practice/data/train.csv') df.head(3)
tips: 什麼是相對路徑?什麼是絕對路徑?
-
絕對路徑:目標檔案在硬碟上的真實路徑(最精確路徑)
舉個栗子:找到檔案,右鍵點選後開啟屬性,可以看到我把喜歡的封面'cover1.jpg'儲存在了路徑_C:\Users\80975\OneDrive\Desktop\cover_
那麼_C:\Users\80975\OneDrive\Desktop\cover\cover1.jpg _就是絕對路徑 -
相對路徑: 相對於當前檔案位置的路徑
等級概念,目錄(資料夾)的上級(父級),同級,下級(子級)
- 引用上級檔案: ../cover1.jpg
- 引用同級檔案: cover1.jpg
- 引用下級檔案: cover/cover1.jpg
- 引用上上級檔案: ../../cover1.jpg
1.3 每1000行為一個數據模組,逐塊讀取
chunker = pd.read_csv('data\train.csv', chunksize=1000)
1.4將表頭改成中文
對於某些英文資料,我們可以通過翻譯來更直觀的熟悉我們的資料
df = pd.read_csv('data\train.csv', names=['乘客ID','是否倖存','倉位等級','姓名','性別','年齡','兄弟姐妹個數','父母子女個數','船票資訊','票價','客艙','登船港口'],index_col='乘客ID',header=0) df.head()
2、 初步觀察
匯入資料後,你可能要對資料的整體結構和樣例進行概覽,比如說,資料大小、有多少列,各列都是什麼格式的,是否包含null等
2.1 檢視資料的基本資訊
df.info()
df.head() #檢視資料前5行
df.tail() #檢視資料後行
df.index #檢視下標屬性
df.columus #檢視列標屬性
df.values #檢視資料值
2.2 觀察表格前10行的資料和後15行的資料
df.head(10)
df.tail(15)
2.3 判斷資料是否為空,為空的地方返回True,其餘地方返回False
df.isnull().head()
3、 儲存資料
將載入並做出改變的資料,在工作目錄下儲存為一個新檔案train_chinese.csv
# 注意:不同的作業系統儲存下來可能會有亂碼。大家可以加入`encoding='GBK' 或者 ’encoding = ’utf-8‘‘`
df.to_csv('data\train_chinese.csv')
第二節 pandas基礎
1、 資料型別
1.1 DateFrame 和 Series
pandas中有兩個資料型別 DateFrame 和 Series :
-
DateFrame:二維的表格型資料結構,可以將DataFrame 理解為Series的容器。
-
Series:一維陣列,與Numpy中的一維array類似;二者與Python基本的資料結構List也很相近。Series能儲存不同種資料型別,字串、Boolean值、數字等。
1.2 檢視某一列的值
df['Cabin'].head(3) # 方式一
df.Cabin.head(3) # 方式二
1.3 對比兩個‘.CSV’檔案
載入檔案"test_1.csv",然後對比"train.csv",看看有哪些多出的列,然後將多出的列刪除。
# 刪除多餘的列
del test_1['a']
將['PassengerId', 'Name','Age', 'Ticket']這幾個列元素隱藏,只觀察其他幾個列元素。(如果想要完全的刪除這個資料結構,使用inplace=True,但是使用inplace 就將原資料覆蓋了)
df.drop(['PassengerId','Name','Age','Ticket'],axis=1).head(3)
1.4 篩選
表格資料中,最重要的一個功能就是要具有可篩選的能力,選出我所需要的資訊,丟棄無用的資訊。
【提示】瞭解pandas的條件篩選方式以及如何使用交集和並集操作
例一:以"Age"為篩選條件,顯示年齡在10歲以下的乘客資訊。
df[df["Age"]<10].head(3)
例二: 以"Age"為條件,將年齡在10歲以上和50歲以下的乘客資訊顯示出來,並將這個資料命名為midage。
midage = df[(df["Age"]>10)& (df["Age"]<50)]
midage.head(3)
例三:將midage的資料中第100行的"Pclass"和"Sex"的資料顯示出來
midage = midage.reset_index(drop=True)
midage.head(3)
midage.loc[[100],['Pclass','Sex']]
例四:使用loc方法將midage的資料中第100,105,108行的"Pclass","Name"和"Sex"的資料顯示出來
midage.loc[[100,105,108],['Pclass','Name','Sex']]
例五:使用iloc方法將midage的資料中第100,105,108行的"Pclass","Name"和"Sex"的資料顯示出來
midage.iloc[[100,105,108],[2,3,4]]
第三節 探索性資料分析
1. 1 利用Pandas對示例資料進行排序,要求升序
#自己構建一個都為數字的DataFrame資料
frame = pd.DataFrame(np.arange(8).reshape((2, 4)),
index=['2', '1'],
columns=['d', 'a', 'b', 'c'])
frame
-
pd.DataFrame() :建立一個 DataFrame 物件
-
index=['2, 1] :DataFrame 物件的索引列
-
columns=['d', 'a', 'b', 'c'] :DataFrame 物件的索引行
# 大多數時候我們都是想根據列的值來排序,所以,將你構建的DataFrame中的資料根據某一列,升序排列
frame.sort_values(by='c', ascending=True)
可以看到sort_values這個函式中by引數指向要排列的列,ascending引數指向排序的方式(升序還是降序)
【總結】下面將不同的排序方式做一個小總結
# 讓行索引升序排序
frame.sort_index()
# 讓列索引升序排序
frame.sort_index(axis=1)
# 讓列索引降序排序
frame.sort_index(axis=1, ascending=False)
# 讓任選兩列資料同時降序排序
frame.sort_values(by=['a', 'c'], ascending=False)
1.2 對泰坦尼克號資料(trian.csv)按票價和年齡兩列進行綜合排序(降序排列)
text = pd.read_csv('data/train_chinese.csv')
text.head()
text.sort_values(by=['票價', '年齡'], ascending=False).head(3)
【思考】排序後,如果我們僅僅關注年齡和票價兩列。根據常識我知道發現票價越高的應該客艙越好,所以我們會明顯看出,票價前20的乘客中存活的有14人,這是相當高的一個比例,那麼我們後面是不是可以進一步分析一下票價和存活之間的關係,年齡和存活之間的關係呢?當你開始發現數據之間的關係了,資料分析就開始了。
1.3 利用Pandas進行算術計算,計算兩個DataFrame資料相加結果
#建立一個例子
frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
columns=['a', 'b', 'c'],
index=['one', 'two', 'three'])
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
columns=['a', 'e', 'c'],
index=['first', 'one', 'two', 'second'])
#將frame_a和frame_b進行相加
frame1_a + frame1_b
【提醒】兩個DataFrame相加後,會返回一個新的DataFrame,對應的行和列的值會相加,沒有對應的會變成空值NaN
1.4 通過泰坦尼克號資料如何計算出在船上最大的家族有多少人?
max(text['兄弟姐妹個數'] + text['父母子女個數'])
如上,很簡單,我們只需找出兄弟姐妹個數和父母子女個數之和最大的數就行,先讓這兩列相加返回一個DataFrame,然後用max函式求出最大值。
1.5 學會使用Pandas describe()函式檢視資料基本統計資訊
通過describe()函式可以檢視資料的各種資訊。
#建立一個例子
frame2 = pd.DataFrame([[1.4, np.nan],
[7.1, -4.5],
[np.nan, np.nan],
[0.75, -1.3]
], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
frame2
frame2.describe()