python抓取課工廠網站數據和分析|python數據分析實例

在線教育網站學習,是很多人利於閑余時間進行充電的一種選擇。本篇文章利用python抓取在線教育網站課工場課程頁面的數據,進行簡要分析。

通過使用requests庫對課工場課程列表頁進行抓取。

通過BeautifulSoup對課工場課程列表頁面進行解析,並從中獲課程名稱,課程類型,付費類型,課程學習人次的數據。

最後再利用python的pandas,matplotlib,seaborn模塊對數據進行處理和分析。

0,工作環境搭建

環境:win10+Anaconda +jupyter Notebook

模塊:

爬蟲和網頁解析相關的模塊:requests,BeautifulSoup,time

數據分析模塊:Numpy,pandas

畫圖模塊:matplotlib,seaborn

1,構建爬蟲,抓取需要的信息

構造爬蟲是需要注意

  • 開始抓取前先觀察下目標頁面或網站的結構,其中比較重要的是URL的結構
  • 在抓取網頁時,為了盡量偽裝成正常的請求,我們需要在http請求中設置一個頭部信息,否則很容易被封。頭部信息網上有很多現成的。並手動設置每次請求的時間間隔。

A,構造爬蟲

import requests,timefrom bs4 import BeautifulSoupurl = http://www.kgc.cn/list/230-+str(i)+-6-9-9-0.shtmlheaders={Accept:application/json, text/javascript, */*; q=0.01,Accept-Encoding:gzip, deflate, br,Accept-Language:zh-CN,zh;q=0.8,Connection:keep-alive,Referer:http://www.baidu.com/link?url=_andhfsjjjKRgEWkj7i9cFmYYGsisrnm2A-TN3XZDQXxvGsM9k9ZZSnikW2Yds4s&wd=&eqid=c3435a7d00006bd600000003582bfd1f} for i in range(1,64): if i==1: url = http://www.kgc.cn/list/230-+str(i)+-6-9-9-0.shtml r = requests.get(url=url,headers=headers) html = r.text else: url = http://www.kgc.cn/list/230-+str(i)+-6-9-9-0.shtml r = requests.get(url=url,headers=headers) html2 = r.text html = html + html2 time.sleep(0.8)

B,解析頁面,提取信息

kgc = BeautifulSoup(html,"html.parser")# 提取課程名稱name= kgc.find_all("a",attrs={"class":"yui3-u course-title-a"})c_name = []for n in name: course_name = n.string.split()[0] c_name.append(course_name)#提取課程參加人數number = kgc.find_all("span",attrs={"class":"course-pepo"})p_number=[]for p in number: people_number = p.string p_number.append(people_number)#提取付費信息price = kgc.find_all(class_=[view0-price f16,view0-old f14])p_type = []for p in price: price_type = p.string p_type.append(price_type)#提取課程類別category = kgc.find_all(class_="yui3-u course-title-a")c_category = []for c in category: soup=BeautifulSoup(str(c),"html.parser") tag = soup.a href = tag.attrs[href] c_category.append(href)

C,寫入pandas數據框中

import pandas as pdcourse = pd.DataFrame({"course_name":c_name,"student_number":p_number, "pay_type":p_type,"course_info":c_category})#檢查下數據集構造的情況course.head(10)

雖然我們已經把提取的信息構造為DataFarme結構的數據,但明顯能看到,這個數據集有些粗糙。所以我們還需要,對數據集進行進一步的處理。

2,數據處理(特徵構造)

數據處理的內容主要是對數據集進行數據清洗和加工。

數據處理的的目的是為了讓數據集變得更利於下一步分析。

#從course_info欄位中提取課程類別信息course["category"] = course["course_info"].apply(lambda x:x.split("/")[1].strip())#從course_pay欄位中提取付費信息import redef get_num(string): return (re.findall("d+.?d*",string))[0]course["course_pay"] = course["pay_type"].apply(get_num).astype(float)#將「pay_type」欄位中的「免費」替換為「0.00」course.replace({pay_type: {免費: ¥0.00, }}, inplace=True)#數據類型轉換course[student_number] = course[student_number].astype(float)import matplotlib.pyplot as pltplt.style.use("ggplot")plt.rc(font,family=STXihei)import missingno as msnoimport seaborn as snssns.set()%matplotlib inline%config InlineBackend.figure_format="retina"#缺失值檢查msno.matrix(course,figsize=(12,5))

3,數據分析(數據探索和可視化)

探索性數據分析(Exploratory Data Analysis,簡稱EDA)目的是最大化對數據的直覺,完成這個事情的方法只能是結合統計學的圖形以各種形式展現出來。通常涉及以下幾種方法的組合:

  • 原始數據集中每個欄位的單變數可視化和匯總統計
  • 數據集中每個自變數與目標變數之間的關係的雙變數可視化和匯總統計
  • 多元可視化以了解數據中不同欄位之間的交互作用
  • 讓觀察值聚類成有區別的小組

這裡對處理後的數據簡要的探索性分析。

A.學習人次以及付費人次

作為在線教育產品,知道有多少人次在學習課程,有多少人次學習付費課程,有多少人次是學習免費課程,是必須要關注的數據。

course.student_number.sum()#輸出:11611136.0no_pay = course.loc[course["course_pay"] == 0].student_number.sum()#輸出:3519971.0paid = course.loc[course["course_pay"] != 0].student_number.sum()#輸出:8091165.0

付費學習與免費學習兩種類型佔比

plt.rc(font, family=STXihei, size=20) plt.figure(figsize= (12,8))#創建畫布plt.pie([no_pay, paid],labels=[No Pay,Paid],autopct=%1.0f%%)plt.title(Paid rate) plt.axis("equal")

從數據中看出,該網站的課程,達到1100萬學習人次,付費人次達到800多萬,佔比70%。

B,課程價格分布

course.course_pay.describe()#輸出count 1557.000000mean 17.608863std 17.697668min 0.00000025% 0.00000050% 19.00000075% 29.000000max 299.000000Name: course_pay, dtype: float64

價格分布直方圖

course.course_pay.hist(bins=20)

課程價格多集中在20—30元左右,付費課程的平均價格是17元人民幣,按照800萬的付費人次計算,目前為止,課程銷售額不低於1.36億人民幣。

insight:

在千萬級學習人次中,付費學習人次達到800多萬,佔比70%,課程銷售額不低於1.36億人民幣。很厲害的轉化。

作為北大青鳥旗下的在線教育平台,除了依託北大青鳥自身的流量扶持。應該還在有流量引入能力的垂直領域類容分發平台,進行卡位。

經過驗證發現,課工場,在國內比較有知名度的在線課程內容分發平台如百度傳課,網易雲課堂,騰訊課堂都進行了內容分發和卡位。但在淘寶同學上,卻沒有找到課工場。

而且在知乎這個知識社區分享平台中搜「課工場」品牌名稱時,卻沒有關於它的內容,不知道為什麼課工場在各個在線課程內容分發平台都進行了卡位,卻在知乎上沒有行動。我覺得在這樣的知識分享社區,無論是從社區氛圍,還是從知乎社區用戶的角度看,最有利的廣告主就是做在線教育的,尤其是做IT培訓在線教育的。

C,課程類型分布

plt.rc(font, family=STXihei, size=15) plt.figure(figsize= (12,8))#創建畫布sns.countplot(y=category, data=course)plt.title(Course_category Count )

網站中課程類型,多是偏向於編程技術如Java,handoop,android,linux

再來看看,用戶參喜歡學習的課程多是哪些類型?

D,用戶參與學習課程類型分布

plt.rc(font, family=STXihei, size=15) plt.figure(figsize= (12,8))#創建畫布sns.barplot(data=course,x="student_number",y="category",ci=None)

位於前三的是Dotnet,office_software,personal_management,除了編程技術之外,職場辦公,個人管理的課程也是很受歡迎的。但網站中關於office_software,personal_management的課程太少。

insight

上面的數據表現,說明網站用戶中除了技術崗位的學習群體,還有不少是普通崗位(非技術向)的。在下一步的內容運營中,應該有意識的增加職場辦公,個人管理這兩個方向上的課程。

網站推廣中增加對普通職場(非技術向)群體的覆蓋。如果是選擇某類型的單品課程,針對這類群體推廣,應該把選擇方向上錨定在這兩個方向上職場辦公,個人管理類型的課程。

E,課程價格種類分布

course.course_pay.value_counts().plot(kind="bar",figsize=(12,8))

可以看到,付費課程的價格主要集中在9,19,29 ,這三個類別。

insight:

在上一步的分析中,可以看到,在參與學習人數最多的課程中,有兩類課程:職場辦公,個人管理

根這兩個方向的課程學習人數,我們也或可推斷,網站用戶,多集中在職場白領群體,這部分群體是有較高的付費能力和購買能力的。

對於職場白領群體,課程的價格多不超過30元,是太過偏低的,還有可提升的空間。

當然,因為課程定價跟課程質量,數量,和學習時間周期都是相關的,所以定價也需要考慮這些因素。因為所得數據有限,這樣的思考是基於這份數據而進行的假設,實際情況仍需要去通過更多的數據信息進行交叉驗證。

再來看看在付費課程類型中,購買人數最多的課程是哪些。

F,付費課程類型中,平均購買人數最多的課程

course.loc[course["course_pay"] != 0]/.groupby(["category","course_pay"])[["student_number"]].mean()/.sort_values(by="student_number",ascending=False)

可以看到,平均購買人數最多的課程多是偏於編程技術的,其中java 位居首位,其次是H5,

然後是AR。

在平均購買人數最多的課程中,屬於前端開發的課程佔據了3門:angularjs,vuejs,html5,這也說明web開發,的確很火熱。

但卻沒有看到,這兩年火熱程度,一直以火箭速度躥升的python的身影。

G,免費課程中,平均參與學習人數最多的課程

course.loc[course["course_pay"] == 0]./groupby(["category","course_pay"])[["student_number"]].mean()./sort_values(by="student_number",ascending=False)

在免費課程中,參與學習人數最多的是個人管理的課程,排名前3的課程中,有2門課程是關於職場辦公通用技能提升的課程:個人管理,office辦公軟體。

insight:

在後續的付費課程中,可以針對個人管理,office辦公軟體的方向上,出一些收費精品課程,

嘗試對非編程技術學習群體進行商業付費的轉化。

總結:

與應用相結合,讓數據產生商業價值,永遠是數據生命的所在,也是數據驅動業務優化的價值所在。

推薦閱讀:

回顧一個月的爬蟲學習
四、BeautifulSoup庫
網易雲音樂Ajax Post參數加密方法
利用requests爬取表情包
輪帶逛終極版! 抓取輪子哥(vczh)全部知乎動態

TAG:數據分析 | 產品運營 | python爬蟲 |