動手學數(shù)據(jù)分析之數(shù)據(jù)加載
1.1 載入數(shù)據(jù)
1.1.1 導入numpy和pandas
import numpy as np
import pandas as pd
1.1.2 :載入數(shù)據(jù)
(1)
使用相對路徑載入數(shù)據(jù)
df=pd.read_csv("train.csv")
打印載入數(shù)據(jù)前4行
df.head(4)
結(jié)果:
注意:df.head()會將表格中的第一行看作列名,并默認輸出之后的五行,在head后面的括號里面直接寫你想要輸出的行數(shù)也行逼友,比如6拇惋,8之類的
(2)
【思考】知道數(shù)據(jù)加載的方法后,試試pd.read_csv()和pd.read_table()的不同陶舞,如果想讓他們效果一樣嗽测,需要怎么做?了解一下'.tsv'和'.csv'的不同肿孵,如何加載這兩個數(shù)據(jù)集唠粥?
df=pd.read_table('train.csv')
df.head(3)
結(jié)果:
通過查閱資料得知:read_csv和read_table的區(qū)別在于separator分隔符疏魏。
read_csv是逗號分隔值,僅能正確讀入以 “,” 分割的數(shù)據(jù)厅贪。read_table的分隔符是tab蠢护。如果想讓pd.read_csv()和pd.read_table()打印的效果一樣,可以通過參數(shù)(sep或delimiter)設置區(qū)分符养涮。
df=pd.read_table('train.tsv',sep=',')
df.head(4)
結(jié)果:
1.1.3 每1000行為一個數(shù)據(jù)模塊葵硕,逐塊讀取
chunker=pd.read_csv('train.csv',chunksize=1000)
結(jié)論:當文件太大時,可用chunksize指定大小逐塊讀取文件贯吓,返回的是一個可迭代的對象TextFileReader
1.1.4 :將表頭改成中文酌壕,索引改為乘客ID [對于某些英文資料,我們可以通過翻譯來更直觀的熟悉我們的數(shù)據(jù)
df=pd.read_csv('train.csv',names=['乘客ID','是否幸存','乘客等級','乘客姓名','性別','年齡','堂兄弟/妹個數(shù)','父母與小孩個數(shù)','船票信息','票價','客艙','登船港口'],index_col=0,header=0)
df.head()
結(jié)果:
1.2 初步觀察
1.2.1 查看數(shù)據(jù)的基本信息
df.info()
結(jié)果:
1.2.2 觀察表格前10行的數(shù)據(jù)和后15行的數(shù)據(jù)
(1)表格前10行的數(shù)據(jù)
df.head(10)
表格后15行的數(shù)據(jù)
df.tail(15)
1.2.4 判斷數(shù)據(jù)是否為空驻售,為空的地方返回True矢空,其余地方返回False
df.isnull().head()
1.3 保存數(shù)據(jù)
1.3.1 將你加載并做出改變的數(shù)據(jù),在工作目錄下保存為一個新文件train_chinese.csv
df.to_csv('train_chinese.csv')
結(jié)果:
2 數(shù)據(jù)載入及初步觀察
2.1.1 任務一:pandas中有兩個數(shù)據(jù)類型DataFrame和Series爬舰,通過查找簡單了解他們们陆。然后自己寫一個關于這兩個數(shù)據(jù)類型的小例子
(1)Series相當于數(shù)組numpy.array類似
import pandas as df
array=df.Series([1,2,3,4,5])
結(jié)果:
(2) DataFrame相當于有表格,有行表頭和列表頭
import numpy as np
import pandas as df
array=df.DataFrame(np.random.rand(4,5),index=list("ABCD"),columns=list('abcde'))
結(jié)果
2.1.2 載入"train.csv"文件
import numpy as np
import pandas as pd
df = pd.read_csv('train.csv')
結(jié)果
2.1.3 查看DataFrame數(shù)據(jù)的每列的項
df.columns
結(jié)果:
2.1.4 查看"cabin"這列的項
(1)
df['Cabin'].head()
(2)
df.Cabin.head()
2.1.5 加載文件"test_1.csv"情屹,然后對比"train.csv"坪仇,看看有哪些多出的列,然后將多出的列刪除
test_1 = pd.read_csv('test_1.csv')
test_1.head()
結(jié)果
刪除多出列
del test_1['a']
test_1.head()
結(jié)果
2.1.6 將['PassengerId','Name','Age','Ticket']這幾個列元素隱藏垃你,只觀察其他幾個列元素
df.drop(['PassengerId','Name','Age','Ticket'],axis=1).head(3)
2.2 篩選的邏輯
2.2.1 我們以"Age"為篩選條件椅文,顯示年齡在10歲以下的乘客信息。
df[df["Age"]<10].head()
結(jié)果
2.2.2 以"Age"為條件惜颇,將年齡在10歲以上和50歲以下的乘客信息顯示出來皆刺,并將這個數(shù)據(jù)命名為midage
midage = df[(df["Age"]>10)& (df["Age"]<50)]
midage.head(3)
結(jié)果
2.2.3 將midage的數(shù)據(jù)中第100行的"Pclass"和"Sex"的數(shù)據(jù)顯示出來
midage = midage.reset_index(drop=True)
midage.head(3)
midage.loc[[100],['Pclass','Sex']]
結(jié)果
2.2.4:使用loc方法將midage的數(shù)據(jù)中第100,105凌摄,108行的"Pclass"羡蛾,"Name"和"Sex"的數(shù)據(jù)顯示出來
midage.loc[[100,105,108],['Pclass','Name','Sex']]
結(jié)果
2.2.5使用iloc方法將midage的數(shù)據(jù)中第100,105望伦,108行的"Pclass"林说,"Name"和"Sex"的數(shù)據(jù)顯示出來
midage.iloc[[100,105,108],[2,3,4]]
3 探索性數(shù)據(jù)分析
3.1.1 :利用Pandas對示例數(shù)據(jù)進行排序,要求升序
text = pd.read_csv('train_chinese.csv')
text.head()
frame = pd.DataFrame(np.arange(8).reshape((2, 4)),
index=['2', '1'],
columns=['d', 'a', 'b', 'c'])
3.1.2:對泰坦尼克號數(shù)據(jù)(trian.csv)按票價和年齡兩列進行綜合排序(降序排列)
text.sort_values(by=['票價', '年齡'], ascending=False).head(3)
3.1.3利用Pandas進行算術計算屯伞,計算兩個DataFrame數(shù)據(jù)相加結(jié)果
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'])
frame1_a
frame1_b
frame1_a+frame1_b
3.1.4通過泰坦尼克號數(shù)據(jù)如何計算出在船上最大的家族有多少人
text = pd.read_csv('train_chinese.csv')
text.sort_values(by=['堂兄弟/妹個數(shù)','父母與小孩個數(shù)'],ascending=False).head()
text.sort_values(by=['父母與小孩個數(shù)','堂兄弟/妹個數(shù)'],ascending=False).head()
3.1.5:學會使用Pandas describe()函數(shù)查看數(shù)據(jù)基本統(tǒng)計信息
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.describe()
frame2.describe()
3.1.6:分別看看泰坦尼克號數(shù)據(jù)集中 票價腿箩、父母子女 這列數(shù)據(jù)的基本統(tǒng)計數(shù)據(jù),你能發(fā)現(xiàn)什么劣摇?
text['父母與小孩個數(shù)'].describe()
count : 樣本數(shù)據(jù)大小
mean : 樣本數(shù)據(jù)的平均值
std : 樣本數(shù)據(jù)的標準差
min : 樣本數(shù)據(jù)的最小值
25% : 樣本數(shù)據(jù)25%的時候的值
50% : 樣本數(shù)據(jù)50%的時候的值
75% : 樣本數(shù)據(jù)75%的時候的值
max : 樣本數(shù)據(jù)的最大值