1. 程式人生 > 其它 >動手學資料分析系列---資料重構

動手學資料分析系列---資料重構

複習:在前面我們已經學習了Pandas基礎,第二章我們開始進入資料分析的業務部分,在第二章第一節的內容中,我們學習了資料的清洗,這一部分十分重要,只有資料變得相對乾淨,我們之後對資料的分析才可以更有力。而這一節,我們要做的是資料重構,資料重構依舊屬於資料理解(準備)的範圍。

開始之前,匯入numpy、pandas包和資料

# 匯入基本庫
import numpy as np
import pandas as pd
# 載入data檔案中的:train-left-up.csv
df = pd.read_csv('./data/train-left-up.csv')
df.head()

2.4 資料的合併

2.4.1 任務一:將data資料夾裡面的所有資料都載入,觀察資料的之間的關係
text_left_up = pd.read_csv("./data/train-left-up.csv")
text_left_down = pd.read_csv("./data/train-left-down.csv")
text_right_up = pd.read_csv("./data/train-right-up.csv")
text_right_down = pd.read_csv("./data/train-right-down.csv
")
2.4.2:任務二:使用concat方法:將資料train-left-up.csv和train-right-up.csv橫向合併為一張表,並儲存這張表為result_up
up_list = [text_left_up,text_right_up]
result_up = pd.concat(up_list, axis=1)
result_up.head()
2.4.3 任務三:使用concat方法:將train-left-down和train-right-down橫向合併為一張表,並儲存這張表為result_down。然後將上邊的result_up和result_down縱向合併為result。
down_list = [text_left_down,text_right_down]
result_down = pd.concat(down_list,axis=1)
result = pd.concat([result_up,result_down])
result.head()
2.4.4 任務四:使用DataFrame自帶的方法join方法和append:完成任務二和任務三的任務
result_up = text_left_up.join(text_right_up)
result_down = text_left_down.join(text_right_down)
result = result_up.append(result_down)
result.head()
2.4.5 任務五:使用Panads的merge方法和DataFrame的append方法:完成任務二和任務三的任務
result_up = pd.merge(text_left_up,text_right_up,left_index=True,right_index=True)
result_down = pd.merge(text_left_down,text_right_down,left_index=True,right_index=True)
result = result_up.append(result_down)
result.head()
2.4.6 任務六:完成的資料儲存為result.csv
result.to_csv('result.csv')

2.5 換一種角度看資料

2.5.1 任務一:將我們的資料變為Series型別的資料
df = pd.read_csv('result.csv')
df.head()
unit_result = df.stack()
unit_result.head()
unit_result.to_csv('unit_result.csv')
test = pd.read_csv('unit_result.csv')
test.head()

2.6 資料運用:資料聚合與運算

# 載入上一個任務人儲存的檔案中:result.csv,並檢視這個檔案
df = pd.read_csv('result.csv')
df.head()
2.6.1 任務一:通過教材《Python for Data Analysis》P303、Google or anything來學習瞭解GroupBy機制

groupby的操作可以被分為3部分:
第一步,儲存於series或DataFrame中的資料,根據不同的keys會被split(分割)為多個組。(這個分組可以按照不同的軸進行劃分,axis=0按照行;axis=1按照列)
第二步,我們可以把函式例如mean等,apply在每一個組上,產生一個新的值。
第三步,函式產生的結果被combine(結合)為一個結果物件(result object)。

2.4.2:任務二:計算泰坦尼克號男性與女性的平均票價
df1  = df['Fare'].groupby(df['Sex'])
means = df1.mean()
means
2.4.3:任務三:統計泰坦尼克號中男女的存活人數
survived_nums = df['Survived'].groupby(df['Sex']).sum()
survived_nums.head()
2.4.4:任務四:計算客艙不同等級的存活人數
survived_pclass_nums = df['Survived'].groupby(df['Pclass']).sum()
survived_pclass_nums.head()

【思考】從任務二到任務三中,這些運算可以通過agg()函式來同時計算。並且可以使用rename函式修改列名。

df.groupby('Sex').agg({'Fare': 'mean', 'Pclass': 'count'}).rename(columns=
                            {'Fare': 'mean_fare', 'Pclass': 'count_pclass'})
2.4.5:任務五:統計在不同等級的票中的不同年齡的船票花費的平均值
df.groupby(['Pclass','Age'])['Fare'].mean().head()
2.4.6:任務六:將任務二和任務三的資料合併,並儲存到sex_fare_survived.csv
result = pd.merge(means,survived_nums,on='Sex')
result
2.4.7:任務七:得出不同年齡的總的存活人數,然後找出存活人數的最高的年齡,最後計算存活人數最高的存活率(存活人數/總人數)
#不同年齡的存活人數
survived_age = df['Survived'].groupby(df['Age']).sum()
survived_age.head()
#找出最大值的年齡段
survived_age[survived_age.values==survived_age.max()]

survived_sum = df['Survived'].sum()
print(f"sum of person:{str(survived_sum)}")
percent
=survived_age.max()/survived_sum print(f"最大存活率:{str(percent)}")