資料分析之旅(四)

2021-07-26 22:57:07 字數 3801 閱讀 5763

解決資料分析中問題的步驟

1. 確定哪些資料是異常點;

2. 列印出部分的資料異常點;

3. 看看能不能發現什麼問題;

話說上一回,學員第一周的上課最長時間(10568.100867332541 minutes)超過了每週的總分鐘數(10080 minutes)

首先,要先找到這個擁有異常資料點的學生: 因為字典total_minutes_by_account 的key值是有順序的

因此我覺得可以找出該學生在字典total_minutes_by_account 的下標即可

錯誤:做到這裡,我思考時得出了乙個錯誤的結論 - -||,以為因為每個人可以上好幾節課(num_courses_visited可以為0,1,2,3……),所以有好幾節課的時間累積起來,最終導致的這個資料異常點

分析:

可以從結果看出,應該只包含一周的資料才對而實際上時間跨度從2015.1.7到了 2015.4.26。還記得之前那個within_one_week()函式嗎,可能出問題的地方就在這裡:

def

within_one_week

(join_date, engagement_date):

time_delta = engagement_date - join_date # time_delta = 參與日期 - 註冊日期

return time_delta.days < 7

在這裡只檢查了註冊日期與參與日期是否最多相差7天,那麼,如果參與日期在註冊日期之前呢?(即有這樣一種情況:學生註冊後又登出,繼而再註冊,其第一次註冊的資料都會被當做第一周的資料) ,因此需要確保註冊日期和參與日期相隔 ≥ 0

ps: 在這裡我的理解是:這種情況下,參與日期 - 註冊日期 < 0 < 7

修改within_one_week(join_date, engagement_date) 函式:

def

within_one_week

(join_date, engagement_date):

time_delta = engagement_date - join_date

return time_delta.days < 7

and time_delta.days >= 0

再從頭執行一下相關的cell ,結果最大為:3564.7332644989997 minutes ,並列印出擁有資料異常點的學生:

正常啦~

任務:利用上面的求參與度的**來看一下學生在第一周參與的課程情況,求出平均值,標準差,最大最小值

這裡只需對之前的**加以小小的修改:

from collections import defaultdict

defgroup_data

(data, key_name):

grouped_data = defaultdict(list)

for data_point in data:

key = data_point[key_name]

return grouped_data

engagement_by_account = group_data(paid_engagement_in_first_week,

'account_key')

defsum_grouped_items

(grouped_data, field_name):

summed_data = {}

for key, data_points in grouped_data.items():

total = 0

for data_point in data_points:

total += data_point[field_name]

summed_data[key] = total

return summed_data

total_minutes_by_account = sum_grouped_items(engagement_by_account,

'total_minutes_visited')

import numpy as np

defdescribe_data

(data):

data = list(data)

print('mean:', np.mean(data))

print('standard deviation:', np.std(data))

print('minimum:', np.min(data))

print('maximum:', np.max(data))

describe_data(total_minutes_by_account.values())

lessons_completed_by_account = sum_grouped_items(engagement_by_account,

'lessons_completed')

describe_data(lessons_completed_by_account.values())

問題:describe_data(data)函式裡,將data轉化為列表list,不然執行**會出現

typeerror: unsupported operand type(s) for /: 'dict_values' and 'int'
output:

mean: 306.708326753

standard deviation: 412.996933409

minimum: 0.0

maximum: 3564.7332645

mean: 1.63618090452

standard deviation: 3.00256129983

minimum: 0

maximum: 36

資料分析之旅(一)

提出問題 資料再加工 包括資料採集和資料清理 資料探索 培養直覺,找出資料模式 總結,進行 與他人交流結果 部落格 電子郵件 ppt 面談 並且所有的過程都可能回到第乙個階段 提出問題2.從api獲取資料 3.從網頁中爬取資料 4.對多種不同格式的資料進行合併 開啟乙個csv檔案 對比一下在subl...

01 開始Python資料分析之旅

序號 庫 模組 名稱說明1 numpy python數學庫 2pandas python資料分析庫 python anaylise data 3matplotlib python繪相簿 4json json格式資料處理模組 5xml xml個數資料處理模組 python是一種動態弱型別語言,變數在使...

資料分析那點事兒(四)

那麼漏斗模型用於什麼情況呢?漏斗模型廣泛應用於流量監控 產品目標轉化等日常資料運營工作中。為什麼叫做漏斗模型呢?這是因為使用者集中從業務的需求進行設定的功能點進入,可能會通過產品本身設定的流程完成操作。我們按照流程操作的使用者進行各個轉化層級上的監控,尋找每個層級的可優化點 對沒有按照流程操作的使用...