最近在學習極客時間APP中的《數(shù)據(jù)分析實戰(zhàn)45講》,每天學一點,積累起來是一座高高的壁壘。以下是每天學習的筆記。
《數(shù)據(jù)分析實戰(zhàn)45講》每日打卡
開篇詞,你為什么需要數(shù)據(jù)分析能力?
數(shù)據(jù)是未來的石油,誰掌握了數(shù)據(jù)分析能力,誰就擁有了財富。
如何學習數(shù)據(jù)分析呢?作者以前招過一個實習生,一年內(nèi)從3k月薪到1.3w,總結(jié)起這個實習生的學習方法概括為: MAS 方法。Multi-Dimension:想要掌握一個事物,就要從多個角度去認識它。Ask:不懂就問,程序員大多都很羞澀,突破這一點,不懂就問最重要。Sharing:最好的學習就是分享。用自己的語言講出來,是對知識的進一步梳理。
這個專欄的目的就是做到第一點,幫助學員從多個角度與數(shù)據(jù)分析建立鏈接。把學習重心放在工具和實踐上,即學即用,不斷積累成就感,思維也就慢慢養(yǎng)成了。
《數(shù)據(jù)分析實戰(zhàn)45講》每日打卡
第一講,數(shù)據(jù)分析全景圖及修煉指南
一、數(shù)據(jù)分析全景圖
我們在談論數(shù)據(jù)分析的時候在談論什么呢?主要分三個部分數(shù)據(jù)采集、數(shù)據(jù)挖掘、數(shù)據(jù)可視化。
1.數(shù)據(jù)采集
可以使用“八爪魚”等工具采集,也可以寫Python爬蟲。
2.數(shù)據(jù)挖掘
數(shù)據(jù)挖掘涉及數(shù)據(jù)和算法基礎,結(jié)合案例學習更合適。
3.數(shù)據(jù)可視化
數(shù)據(jù)往往是隱性的,數(shù)據(jù)量大了人很難感知,用數(shù)據(jù)可視化可以更好分析結(jié)果??梢允褂肞ython,也可以用第三方工具。
二、修煉指南
1.不要重復造輪子
2.熟練使用工具
《數(shù)據(jù)分析實戰(zhàn)45講》每日打卡
第二講,學習數(shù)據(jù)挖掘的最佳路徑是什么?
1.數(shù)據(jù)挖掘的基本流程
商業(yè)理解->數(shù)據(jù)理解->數(shù)據(jù)準備->模型建立->模型評估->上線發(fā)布
2.數(shù)據(jù)挖掘十大算法
分類算法:C4.5,樸素貝葉斯(Naive Bayes),SVM,KNN,Adaboost,CART
聚類算法:K-Means,EM
關聯(lián)分析:Aprioril
連接分析:PageRank
其他算法都是在這10個算法基礎上演變而來。
3.數(shù)學原理
概率論與數(shù)理統(tǒng)計、線性代數(shù)、圖論、最優(yōu)化方法。其中除了圖論,其他內(nèi)容在讀書時都有接觸。
《數(shù)據(jù)分析實戰(zhàn)45講》每日打卡
第三講,Python基礎語法
以前學過Python,了解基礎語法,簡單易用而且第三方庫很強大。除了 Python 自身的特點,Python 還有強大的開發(fā)者工具。在數(shù)據(jù)科學領域,Python 有許多非常著名的工具庫:比如科學計算工具 NumPy 和 Pandas 庫,深度學習工具 Keras 和 TensorFlow,以及機器學習工具 Scikit-learn,使用率都非常高。
IDE
Pycharm以前用過,啟動比較慢,但對python的原生支持很好。
Sublime Text,下載試用了一下,可以安裝各種插件,常用的package control(安裝插件的插件)、SublimeCodeIntel(代碼提示插件)。參考1(sublime+python配置),參考2(package control啟動問題).sublimecodeintel還有問題,參考3。sublime text雖然很快,很多插件,比較靈活,但是配置稍微復雜。還是用pycharm集成環(huán)境。Online Judge
浙大ACM的online judge平臺,在線編碼答題。對提高python語言和算法熟練度很有幫助。其他在線編碼平臺,leetcode,pythontip。
使用體驗:浙大的oj平臺全英文,不是很友好。
leetcode力扣上解答題目界面比較友好,而且可以看排名,算法時效性也能測出來,支持各種語言,主要是對熟練算法,比較不錯。
pythontip主要是考察python語法,對熟悉使用python很有幫助。
每天可以練習一題leetcode和pythontip,提高對算法和語法的熟練程度。問題回答
(1)如何引入scikit-learn庫
安裝skikit-learn庫后,import sklearn
(2)sum(list(range(1,100,2)))一句話寫完
《數(shù)據(jù)分析實戰(zhàn)45講》每日打卡
第四講,Numpy介紹
Numpy是Python中使用最多的第三方庫,是科學計算、數(shù)據(jù)分析的基礎,提供比Python更高效的數(shù)據(jù)結(jié)構(gòu)。
1.Numpy特點-高效
Numpy的數(shù)據(jù)結(jié)構(gòu)在底層使用連續(xù)內(nèi)存塊,比Python自帶的list分散存儲讀取效率更高。不需要為每個數(shù)組元素維護一個指針,節(jié)省空間。Numpy矩陣計算采用多線程方式,利用多核CPU,提高計算效率。
2.Numpy中的數(shù)據(jù)結(jié)構(gòu)
ndarray對象存儲多維數(shù)組,類似于matlab中的數(shù)組。Numpy中還可以通過dtype定義結(jié)構(gòu)類型,類似于C語言中的結(jié)構(gòu)體。
3.Numpy中的處理函數(shù)
ufun對數(shù)組中每個元素進行操作,用C語言編寫的,效率非常高。ufun函數(shù)包括:創(chuàng)建數(shù)組(arange、linespace),算數(shù)運算(加、減、乘、除、乘方、求模),統(tǒng)計函數(shù)(最值、平均數(shù)、方差、百分位數(shù)、中位數(shù)等),排序(sort函數(shù))
4.問題回答
import numpy as np
studenttype = np.dtype({
'names':['name', 'Chinese', 'English', 'Math'],
'formats':['S32', 'i', 'i', 'i']
})
students = np.array([('zhangfei',66, 65, 30),('guanyu', 95, 89, 98),('zhaoyun', 93, 92, 96),('huangzhong', 90, 89, 77),('dianwei', 80, 90, 90)],dtype=studenttype)
print(np.mean(studengts[:]['Chinese']))
print(np.min(students[:]['Chinese']))
print(np.max(students[:]['Chinese']))
print(np.var(students[:]['Chinese']))
print(np.std(students[:]['Chinese']))
《數(shù)據(jù)分析實戰(zhàn)45講》每日打卡
第五講,pandas介紹
在數(shù)據(jù)分析中,Pandas使用頻率很高,因為Pandas的數(shù)據(jù)結(jié)構(gòu)DataFrame與json契合度高,而且簡單的數(shù)據(jù)清晰幾句代碼搞定。
Pandas數(shù)據(jù)結(jié)構(gòu)
Series 是個定長的字典序列。說是定長是因為在存儲的時候,相當于兩個 ndarray,這也是和字典結(jié)構(gòu)最大的不同。因為在字典的結(jié)構(gòu)里,元素的個數(shù)是不固定的。
DataFrame 看成是由相同索引的 Series 組成的字典類型,類似數(shù)據(jù)庫中的表。數(shù)據(jù)導入導出
Pandas 允許直接從 xlsx,csv 等文件中導入數(shù)據(jù),也可以輸出到 xlsx, csv 等文件,非常方便。數(shù)據(jù)清洗
drop() 函數(shù) 刪除 DataFrame 中的不必要的列或行;rename() 函數(shù)重命名列名 ; drop_duplicates() 去重復的行;astype ()函數(shù)來規(guī)范數(shù)據(jù)格式;strip() 函數(shù)刪除數(shù)據(jù)間空格;isnull()查找空值;fillna()填補空值;apply()函數(shù)中可以自定義清洗規(guī)則。數(shù)據(jù)統(tǒng)計
count()計數(shù);min()最小值;max()最大值;sum()求和;mean()平均值等等。數(shù)據(jù)表合并
有時需要將多個渠道源的多個數(shù)據(jù)表進行合并,使用merge()函數(shù),有5中方式。
基于指定列進行連接pd.merge(df1, df2, on='name'),取name字段相同的部分合并;
內(nèi)連接pd.merge(df1, df2, how='inner'),取兩個表主鍵的交集的部分合并;
左連接pd.merge(df1, df2, how='left'),以第一個表為主,第二個表為輔助合并;
右連接pd.merge(df1, df2, how='right'),以第二個表為主,第一個表為輔助合并;
外連接pd.merge(df1, df2, how='outer')兩個表的并集。使用SQL,pandasql工具
使用pandasql工具可以直接使用 SQL 語句來操作 Pandas,pandasql 中的主要函數(shù)是 sqldf,它接收兩個參數(shù):一個 SQL 查詢語句,還有一組環(huán)境變量 globals() 或 locals()。-
問題回答
import pandas as pd from pandas import Series, DataFrame data = {'Chinese': [66, 95, 93, 90,80,80],'English': [65, 85, 92, 88, 90,90],'Math': [None, 98, 96, 77, 90,90]} df = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei', 'DianWei'], columns=['Chinese', 'English', 'Math']) print(df) df = df.drop_duplicates() print(df) def sum_subject(df): df = df.fillna(0) df['Sum'] = df['Chinese']+df['English']+df['Math'] return df df = df.apply(sum_subject,axis=1) print(df)