1. 程式人生 > 其它 >動手做資料分析12.13

動手做資料分析12.13

12.13週一

在使用絕對路徑載入資料時報錯 OSError: [Errno 22] Invalid argument

解決方法是手打一遍路徑,不直接複製貼上,複製黏貼就會出現此錯誤

1 第一章:資料載入及初步觀察

1.1 載入資料

資料集下載 https://www.kaggle.com/c/titanic/overview

1.1.1 任務一:匯入numpy和pandas

In [6]:

#寫入程式碼
import numpy as np
import pandas as pd

【提示】如果載入失敗,學會如何在你的python環境下安裝numpy和pandas這兩個庫

1.1.2 任務二:載入資料

(1) 使用相對路徑載入資料 (2) 使用絕對路徑載入資料

In [28]:

#寫入程式碼
import os
os.getcwd()
data = pd.read_csv('train.csv')
data
data2 = pd.read_table('train.csv')
#data2

In [22]:

#寫入程式碼
data1=pd.read_csv('E:\\人工智慧學習\\hands-on-data-analysis-master\\第一單元專案集合\\train.csv')
data1

Out[22]:

PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0 1
0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803
53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
... ... ... ... ... ... ... ... ... ... ... ... ...
886 887 0 2 Montvila, Rev. Juozas male 27.0 0 0 211536 13.0000 NaN S
887 888 1 1 Graham, Miss. Margaret Edith female 19.0 0 0 112053 30.0000 B42 S
888 889 0 3 Johnston, Miss. Catherine Helen "Carrie" female NaN 1 2 W./C. 6607 23.4500 NaN S
889 890 1 1 Behr, Mr. Karl Howell male 26.0 0 0 111369 30.0000 C148 C
890 891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.7500 NaN Q

891 rows × 12 columns

【提示】相對路徑載入報錯時,嘗試使用os.getcwd()檢視當前工作目錄。 
【思考】知道資料載入的方法後,試試pd.read_csv()和pd.read_table()的不同,如果想讓他們效果一樣,需要怎麼做?瞭解一下'.tsv'和'.csv'的不同,如何載入這兩個資料集?
答:read_table的預設分隔符為"\t"
pd.read_csv輸出的資料是多少個特徵就多少列,而pd.read_table()是無論多少特徵只有一列
tsv用製表符"/t"分隔,csv則是用','作為字元分隔符
【總結】載入的資料是所有工作的第一步,我們的工作會接觸到不同的資料格式(eg:.csv;.tsv;.xlsx),但是載入的方法和思路都是一樣的,在以後工作和做專案的過程中,遇到之前沒有碰到的問題,要多多查資料嗎,使用google,瞭解業務邏輯,明白輸入和輸出是什麼。

1.1.3 任務三:每1000行為一個數據模組,逐塊讀取

In [33]:

#寫入程式碼
chunker = pd.read_csv('train.csv', chunksize=1000)
print(type(chunker))
for chunker in data:
print(chunker)
<class 'pandas.io.parsers.TextFileReader'>
PassengerId
Survived
Pclass
Name
Sex
Age
SibSp
Parch
Ticket
Fare
Cabin
Embarked
【思考】什麼是逐塊讀取?為什麼要逐塊讀取呢?
每次進行迭代的時候是一個DataFrame的結構,逐塊讀取可以減少資源消耗,提高效率
【提示】大家可以chunker(資料塊)是什麼型別?用`for`迴圈打印出來出處具體的樣子是什麼?
打印出來是特徵名?

1.1.4 任務四:將表頭改成中文,索引改為乘客ID [對於某些英文資料,我們可以通過翻譯來更直觀的熟悉我們的資料]

PassengerId => 乘客ID Survived => 是否倖存 Pclass => 乘客等級(1/2/3等艙位) Name => 乘客姓名 Sex => 性別 Age => 年齡 SibSp => 堂兄弟/妹個數 Parch => 父母與小孩個數 Ticket => 船票資訊 Fare => 票價 Cabin => 客艙 Embarked => 登船港口

In [43]:

#寫入程式碼
#方法1
data = pd.read_csv('train.csv', names=['乘客ID', '是否倖存', '乘客等級(1/2/3等艙位)', '乘客姓名', '性別', '年齡', '堂兄弟/妹個數', '父母與小孩個數', '船票資訊', '票價', '客艙', '登船港口'],index_col='乘客ID', header=0 )
#方法2
df1=pd.read_csv('train.csv')
df1.rename(columns={'Survived':'是否倖存', 'Pclass':'倉位等級', 'name':'姓名'}, inplace = True)#可以修改部分或者全部
#方法3
df2=pd.read_csv('train.csv')
df2.columns=['乘客ID','是否倖存','倉位等級','姓名','性別','年齡','兄弟姐妹個數','父母子女個數','船票資訊','票價','客艙','登船港口']
#該方法的新列名必須要與原列名一一對應
data
df1.head()
df2.head()

【思考】所謂將表頭改為中文其中一個思路是:將英文列名錶頭替換成中文。還有其他的方法嗎?

1.2 初步觀察

匯入資料後,你可能要對資料的整體結構和樣例進行概覽,比如說,資料大小、有多少列,各列都是什麼格式的,是否包含null等

1.2.1 任務一:檢視資料的基本資訊

In [44]:

#寫入程式碼
data.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 891 entries, 1 to 891
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 是否倖存 891 non-null int64
1 乘客等級(1/2/3等艙位) 891 non-null int64
2 乘客姓名 891 non-null object
3 性別 891 non-null object
4 年齡 714 non-null float64
5 堂兄弟/妹個數 891 non-null int64
6 父母與小孩個數 891 non-null int64
7 船票資訊 891 non-null object
8 票價 891 non-null float64
9 客艙 204 non-null object
10 登船港口 889 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 83.5+ KB

【提示】有多個函式可以這樣做,你可以做一下總結

1.2.2 任務二:觀察表格前10行的資料和後15行的資料

In [1]:

#寫入程式碼
data.head(10)

In [46]:

#寫入程式碼
data.tail(15)
data.iloc[-15:,:]

Out[46]:

是否倖存乘客等級(1/2/3等艙位)乘客姓名性別年齡堂兄弟/妹個數父母與小孩個數船票資訊票價客艙登船港口
乘客ID
877 0 3 Gustafsson, Mr. Alfred Ossian male 20.0 0 0 7534 9.8458 NaN S
878 0 3 Petroff, Mr. Nedelio male 19.0 0 0 349212 7.8958 NaN S
879 0 3 Laleff, Mr. Kristo male NaN 0 0 349217 7.8958 NaN S
880 1 1 Potter, Mrs. Thomas Jr (Lily Alexenia Wilson) female 56.0 0 1 11767 83.1583 C50 C
881 1 2 Shelley, Mrs. William (Imanita Parrish Hall) female 25.0 0 1 230433 26.0000 NaN S
882 0 3 Markun, Mr. Johann male 33.0 0 0 349257 7.8958 NaN S
883 0 3 Dahlberg, Miss. Gerda Ulrika female 22.0 0 0 7552 10.5167 NaN S
884 0 2 Banfield, Mr. Frederick James male 28.0 0 0 C.A./SOTON 34068 10.5000 NaN S
885 0 3 Sutehall, Mr. Henry Jr male 25.0 0 0 SOTON/OQ 392076 7.0500 NaN S
886 0 3 Rice, Mrs. William (Margaret Norton) female 39.0 0 5 382652 29.1250 NaN Q
887 0 2 Montvila, Rev. Juozas male 27.0 0 0 211536 13.0000 NaN S
888 1 1 Graham, Miss. Margaret Edith female 19.0 0 0 112053 30.0000 B42 S
889 0 3 Johnston, Miss. Catherine Helen "Carrie" female NaN 1 2 W./C. 6607 23.4500 NaN S
890 1 1 Behr, Mr. Karl Howell male 26.0 0 0 111369 30.0000 C148 C
891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.7500 NaN Q

1.2.4 任務三:判斷資料是否為空,為空的地方返回True,其餘地方返回False

In [47]:

#寫入程式碼
data.isnull()

Out[47]:

是否倖存乘客等級(1/2/3等艙位)乘客姓名性別年齡堂兄弟/妹個數父母與小孩個數船票資訊票價客艙登船港口
乘客ID
1 False False False False False False False False False True False
2 False False False False False False False False False False False
3 False False False False False False False False False True False
4 False False False False False False False False False False False
5 False False False False False False False False False True False
... ... ... ... ... ... ... ... ... ... ... ...
887 False False False False False False False False False True False
888 False False False False False False False False False False False
889 False False False False True False False False False True False
890 False False False False False False False False False False False
891 False False False False False False False False False True False

891 rows × 11 columns

【總結】上面的操作都是資料分析中對於資料本身的觀察

【思考】對於一個數據,還可以從哪些方面來觀察?找找答案,這個將對下面的資料分析有很大的幫助

1.3 儲存資料

1.3.1 任務一:將你載入並做出改變的資料,在工作目錄下儲存為一個新檔案train_chinese.csv

In [50]:

#寫入程式碼
# 注意:不同的作業系統儲存下來可能會有亂碼。大家可以加入`encoding='GBK' 或者 ’encoding = ’utf-8‘‘`
data.to_csv('saved_train.csv',encoding='gbk')

【總結】資料的載入以及入門,接下來就要接觸資料本身的運算,我們將主要掌握numpy和pandas在工作和專案場景的運用。