解決資料分析中問題的步驟
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()函式嗎,可能出問題的地方就在這裡:
在這裡只檢查了註冊日期與參與日期是否最多相差7天,那麼,如果參與日期在註冊日期之前呢?(即有這樣一種情況:學生註冊後又登出,繼而再註冊,其第一次註冊的資料都會被當做第一周的資料) ,因此需要確保註冊日期和參與日期相隔 ≥ 0def
within_one_week
(join_date, engagement_date):
time_delta = engagement_date - join_date # time_delta = 參與日期 - 註冊日期
return time_delta.days < 7
ps: 在這裡我的理解是:這種情況下,參與日期 - 註冊日期 < 0 < 7
修改within_one_week(join_date, engagement_date) 函式:
再從頭執行一下相關的cell ,結果最大為:3564.7332644989997 minutes ,並列印出擁有資料異常點的學生:def
within_one_week
(join_date, engagement_date):
time_delta = engagement_date - join_date
return time_delta.days < 7
and time_delta.days >= 0
正常啦~
任務:利用上面的求參與度的**來看一下學生在第一周參與的課程情況,求出平均值,標準差,最大最小值
這裡只需對之前的**加以小小的修改:
問題:describe_data(data)函式裡,將data轉化為列表list,不然執行**會出現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())
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是一種動態弱型別語言,變數在使...
資料分析那點事兒(四)
那麼漏斗模型用於什麼情況呢?漏斗模型廣泛應用於流量監控 產品目標轉化等日常資料運營工作中。為什麼叫做漏斗模型呢?這是因為使用者集中從業務的需求進行設定的功能點進入,可能會通過產品本身設定的流程完成操作。我們按照流程操作的使用者進行各個轉化層級上的監控,尋找每個層級的可優化點 對沒有按照流程操作的使用...