做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。
别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。
我先来介绍一下这些东西怎么用,文末抱走。
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
(4)200多本电子书
这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。
基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。
(5)Python知识点汇总
知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。
(6)其他资料
还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。
这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化学习资料的朋友,可以戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
pvuv_daily = cal_pvuv(‘date’) # 得到按日期聚合的pv和uv数据 pvuv_daily.plot(x = ‘date’, secondary_y = ‘uv’, grid = True, figsize =(10, 5))
pvuv_hour = cal_pvuv(‘hour’) pvuv_hour.plot(x = ‘hour’, secondary_y = ‘uv’, grid = True, figsize = (10, 5), xticks = [x for x in range(24)], title = ‘pvuv_hour’)
uv_count = len(data.user_id.unique())
pv_count = data[data.behavior_type == ‘pv’].shape[0]
print(‘Average access depth is %.1f’ % (pv_count / uv_count))
pv_count_perUser = data[data[‘behavior_type’] == ‘pv’].groupby(‘user_id’)[‘behavior_type’] .count().reset_index().rename(columns = {‘behavior_type’:‘pv_count’})
bounce_user_count = pv_count_perUser[pv_count_perUser[‘pv_count’] == 1].shape[0] print('Bounce Rate is %.3f%% ’ % (100 * (bounce_user_count / uv_count))
pv_detail = data.groupby([‘behavior_type’,‘hour’])[‘user_id’].count().reset_index().rename(columns={‘user_id’:‘total_behavior’}) fig, axes = plt.subplots(2, 1, figsize = (10,8), sharex = True) sns.pointplot(x = ‘hour’,y = ‘total_behavior’, hue = ‘behavior_type’, data = pv_detail, ax = axes[0]) sns.pointplot(x = ‘hour’,y = ‘total_behavior’, hue = ‘behavior_type’, data = pv_detail[pv_detail.behavior_type!=‘pv’], ax = axes[1]) axes[0].set_title(‘different_behavior_count’) axes[0].grid() axes[1].set_title(‘different_behavior_count_exceptpv’) axes[1].grid()
def cal_retention(n = 1):
paying_user_count = data[data.behavior_type == ‘buy’].user_id.unique().shape[0]
print(‘Paying user Rate is %.2f%%’ % ( 100 * paying_user_count / uv_count))
#每个付费用户的购买次数 peruser_paying_count = data[data[‘behavior_type’] == ‘buy’].groupby(‘user_id’).count()[‘behavior_type’] .reset_index().rename(columns={‘behavior_type’:‘paying_count’})
paying_retention_user_count = peruser_paying_count[peruser_paying_count[‘paying_count’] >= 2][‘user_id’].count()
print(‘Buyer Retention Rate %.2f%%’ % (100 * paying_retention_user_count / paying_user_count))
buyer_retention_diff = data[data.type == ‘buy’].groupby(‘user_id’).date.apply(lambda x: x.sort_values().diff(1).dropna()) buyer_retention_diff = buyer_retention_diff.map(lambda x: x.days) buyer_retention_diff.describe()
def cal_topN (index, behavior_type, n): # 创建透视表 topN = pd.pivot_table(data, index = index, values = ‘user_id’, columns = ‘behavior_type’, fill_value=0, aggfunc=‘count’, margins = True).sort_values(by = behavior_type, ascending = False).fillna(0).head(n) topN[‘paying_rate’] = topN.apply(lambda x: x.buy / x.pv, axis = 1).apply(lambda x: format(x, ‘.2%’)) topN = topN[[‘pv’,‘buy’,‘paying_rate’]] return topN
category_pv_topN = cal_topN(‘category_id’, ‘pv’, 10)
category_buy_topN = cal_topN(‘category_id’, ‘buy’, 10)
category_pv_buy_topN = pd.merge(category_pv_topN, category_buy_topN, on = ‘category_id’, how =‘inner’)
data_buy = data[data[‘behavior_type’] == ‘buy’]
buy_category = data_buy[[‘category_id’,‘behavior_type’]].groupby(‘category_id’) .count().rename(columns = {‘behavior_type’:‘buy_count’})
buy_category = buy_category.sort_values(‘buy_count’,ascending=False).reset_index()
behav_category = pd.merge(data_buy[[‘user_id’,‘category_id’]], data, on = [‘user_id’,‘category_id’], how = ‘left’)
behav_category = behav_category[[‘category_id’, ‘behavior_type’]].groupby(‘category_id’).count() .reset_index().rename(columns={‘behavior_type’:‘behavior_count’})
buy_behav_category = pd.merge(buy_category, behav_category, on = ‘category_id’, how = ‘inner’) buy_behav_category = buy_behav_category.assign(behav_per_buy = buy_behav_category[‘behavior_count’] / buy_behav_category[‘buy_count’])
nowDate = datetime.datetime(2017,12,4) # 假定当前时间为(2017,12,4) user_recent_pay = data[data[‘behavior_type’] == ‘buy’].groupby(‘user_id’)[‘date’] .apply(lambda x: nowDate - x.sort_values().iloc[-1]) user_recent_pay = user_recent_pay.reset_index().rename(columns={‘date’:‘recent’})
user_freq = data[data[‘behavior_type’] == ‘buy’].groupby(‘user_id’).date.count() user_freq = user_freq.reset_index().rename(columns={‘date’:‘freq’})
rfm = pd.merge(user_recent_pay, user_freq, left_on=‘user_id’, right_on=‘user_id’)
rfm[‘score_recent’] = pd.qcut(rfm[‘recent’], 2, labels = [‘1’, ‘0’]) rfm[‘score_freq’] = pd.qcut(rfm[‘freq’], 2, labels = [‘0’, ‘1’])
rfm[‘rfm’] = rfm[‘score_recent’].str.cat(rfm[‘score_freq’])
rfm = rfm.assign(user_type = rfm[‘rfm’] .map({‘11’:‘重要客户’, ‘01’:‘保持客户’, ‘10’:‘发展客户’, ‘00’:‘挽留客户’}))