1. 程式人生 > 其它 >動手學資料分析-task01

動手學資料分析-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中有兩個資料型別 DateFrameSeries

  • 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()