線性建模是任何對使用數據進行預測或對變量之間的關系進行推斷感興趣的人的基礎數據技能。
對于大數據分析師來說,能夠建立線性模型是絕對必要的,但是數據分析師甚至業余愛好者也可以從線性建模的功能中受益匪淺。
大數據分析R中的線性建模(R路徑中的 Data Analyst中的最新課程)將徹底教會您該技能。您準備好動手開始建模嗎?
從線性建模里面學到什么?
大數據分析R中的線性建模將教您如何使用模型進行預測和推理,從而從數據中獲取更多收益。同樣重要的是,它會教您如何在建立,評估和在不同類型的模型之間進行選擇時積累經驗,從而評估這些預測和推論的準確性。
在整個過程中,您將使用我們的交互式,瀏覽器內編碼界面。這意味著您將動手實踐,并在學習它們時使用R代碼應用這些概念。
您將通過學習構建和選擇模型的基礎知識來開始本課程,這不僅是線性建模方面的技能,而且是未來機器學習中所有技能的要求。我們將詳細介紹預測模型和可幫助您進行推斷以確定哪些變量影響結果的模型。
接下來,您將逐步完成在R中實際構建線性模型的逐步過程,并了解有關如何選擇輸入變量以進行準確的預測或推斷的更多信息。
建立初始模型后,您將深入研究如何進行擬合。在R中擬合模型很簡單,但要更加了解輸出的含義。在本課程中,您將學習有效地解釋結果,以便得出有益的結論。
然后,我們將更深入地評估您的模型。您將學習計算殘差標準誤差和R平方,如何可視化殘差,以及如何使用這些方法更好地了解模型的優缺點。
從頭到尾構建了一個模型之后,您將開始使用Broom軟件包快速,高效地擬合,分析和可視化多個線性模型,從而創建多個模型。
最后,您將負責將所有這些新知識整合到一個指導項目中,該任務將指導您分析真實的紐約房地產價格,以使用線性模型進行預測。
在課程結束時,您將對建模的基礎有深入的了解,并且將有信心在R中建立,擬合和評估線性模型。大數據分析R語言如何進行線性分析https://www.aaa-cg.com.cn/data/2293.html您還將獲得課程結業證書和完善的產品組合該項目使用真實的房地產數據來突出您在工作申請中的新技能。
為什么要學習大數據分析R語言線性建模?
線性建模是一種經過實踐檢驗的預測和推理方法。如果您一直在R路徑上與我們的數據分析師合作,那么您已經學會了分析數據。學習線性建??梢允鼓M一步,從而可以對未來進行預測。
如果您的目標是從事數據科學工作,那么了解線性建模將是課程的重要內容。即使您打算將大部分時間花在使用更高級的機器學習應用程序上,您在本課程中學習的基礎知識對于理解各種機器學習模型類型也至關重要。
但是,即使您根本不想擔任數據科學家或全職使用數據,線性建模也是一項有用的技能,可讓您釋放數據的預測能力,同時甚至對于數據愛好者來說也相對容易使用。無論您是分析師還是只是想從他們的數據中獲得更多收益的人,學習線性建模都是實現該目標的好方法,同時如果您感興趣的話,還可以為機器學習的未來研究奠定基礎。
相關推薦
了一段時間分析后,你是否會感覺分析結果還停留在數據表面現象,如果你和我有同感,請耐心讀完本篇文章,會受益匪淺。接下來一段時間,本人也會深入研究統計學方面的知識。因為學了統計學,你會發現很多時候的分析并不靠譜。比如很多人都喜歡用平均數去分析一個事物的結果,但是這往往是粗糙的,不準確的。如果學了統計學,那么我們就能以更多更科學的角度看待數據。更深層次的挖掘出數據背后的價值!統計學是數據分析的基石。
本文通過使用 Python+Pandas+Statsmodels 建立簡單一元線性回歸模型、多元線性回歸模型來預測世界幸福指數。
通過一個實際的案例,了解使用線性回歸建模的過程,測試、分析。
《世界幸福指數報告》是對全球幸福狀況的一次具有里程碑意義的調查。
民意測驗機構蓋洛普從 2012 年起,每年都會在聯合國計劃下發布《世界幸福指數報告》,報告會綜合兩年內 150 多個國家的國民對其所處社會、城市和自然環境等因素進行評價后,再根據他們所感知的幸福程度對國家進行排名。
《世界幸福指數報告》的編撰主要依賴于對 150 多個國家的 1000 多人提出一個簡單的主觀性問題:“如果有一個從 0 分到 10 分的階梯,頂層的 10 分代表你可能得到的最佳生活,底層的 0 分代表你可能得到的最差生活。你覺得你現在在哪一層?”
那么哪個國家在總體幸福指數上排名最高?哪些因素對幸福指數的影響最大?今天我們就用 Python+Pandas+Statsmodels 來聊一聊。
線性回歸是利用數理統計中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關系的一種統計分析方法。
【因變量】 我們選擇 happiness(幸福指數) 作為因變量,該變量度量了各個國家的幸福指數。
【自變量】我們選擇了影響幸福的六個因素,比如 GDP、健康預期壽命、自由權、慷慨程度、清廉指數、社會支持。
import pandas as pd
import numpy as np
# 可視化
import matplotlib.pyplot as plt
import seaborn as sns
import plotly as py
import plotly.graph_objs as go
import plotly.express as px
from plotly.offline import init_notebook_mode, iplot, plot
init_notebook_mode(connected=True)
plt.style.use('seaborn')
# 讀入數據
df_2015 = pd.read_csv('./deal_data/2015.csv')
df_2016 = pd.read_csv('./deal_data/2016.csv')
df_2017 = pd.read_csv('./deal_data/2017.csv')
df_2018 = pd.read_csv('./deal_data/2018.csv')
df_2019 = pd.read_csv('./deal_data/2019.csv')
# 新增列-年份
df_2015["year"] = str(2015)
df_2016["year"] = str(2016)
df_2017["year"] = str(2017)
df_2018["year"] = str(2018)
df_2019["year"] = str(2019)
# 合并數據
df_all = df_2015.append([df_2016, df_2017, df_2018, df_2019], sort=False)
df_all.drop('Unnamed: 0', axis=1, inplace=True)
df_all.head()
print(df_2015.shape, df_2016.shape, df_2017.shape, df_2018.shape, df_2019.shape)
data = dict(type = 'choropleth',
locations = df_2019['region'],
locationmode = 'country names',
colorscale = 'RdYlGn',
z = df_2019['happiness'],
text = df_2019['region'],
colorbar = {'title':'Happiness'})
layout = dict(title = 'Geographical Visualization of Happiness Score in 2019',
geo = dict(showframe = True, projection = {'type': 'azimuthal equal area'}))
choromap3 = go.Figure(data = [data], layout=layout)
plot(choromap3, filename='./html/世界幸福地圖.html')
結論:整體來看,北歐的國家幸福指數較高,如冰島、丹麥、挪威、芬蘭;東非和西非的國家幸福指數較低,如多哥、布隆迪、盧旺達和坦桑尼亞。
# 合并數據
rank_top10 = df_2019.head(10)[['rank', 'region', 'happiness']]
last_top10 = df_2019.tail(10)[['rank', 'region', 'happiness']]
rank_concat = pd.concat([rank_top10, last_top10])
# 條形圖
fig = px.bar(rank_concat,
x="region",
y="happiness",
color="region",
title="World's happiest and least happy countries in 2019")
plot(fig, filename='./html/2019世界幸福國家排行Top10和Last10.html')
# 熱力圖
plt.figure(figsize=(25, 20))
sns.heatmap(df_all.corr(), cmap='rainbow', linewidths=0.1, annot=True)
plt.title('Correlation between numeric variables', fontsize=18)
plt.xticks(fontsize=13)
plt.yticks(fontsize=13)
plt.show()
結論:從影響因素相關性熱力圖可以看出,在影響幸福得分的因素中,GDP、社會支持、健康預期壽命呈現高度相關,自由權呈現中度相關,國家的廉政水平呈現低度相關,慷慨程度則呈現極低的相關性;
GDP 與健康預期壽命、社會支持之間存在高度相關。說明 GDP 高的國家,醫療水平和社會福利較為完善,人民的預期壽命也會越高;
健康預期壽命與社會支持之間存在中度相關性。
# 散點圖
fig = px.scatter(df_all, x='gdp_per_capita',
y='happiness',
facet_row='year',
color='year',
trendline='ols'
)
fig.update_layout(height=800, title_text='GDP per capita and Happiness Score')
plot(fig, filename='./html/GDP和幸福得分.html')
結論:人均 GDP 與幸福得分呈高度線性正相關關系,GDP 越高的國家,幸福水平相對越高
# 散點圖
fig = px.scatter(df_all, x='healthy_life_expectancy',
y='happiness',
facet_row='year',
color='year',
trendline='ols'
)
fig.update_layout(height=800, title_text='Healthy Life Expecancy and Happiness Score')
plot(fig, filename='./html/健康預期壽命和幸福得分.html')
結論:健康預期壽命與幸福得分呈高度線性正相關關系,健康預期壽命越高的國家,幸福水平相對越高。
fig = px.scatter(df_all,
x='healthy_life_expectancy',
y='happiness',
animation_frame='year',
animation_group='region',
size='rank',
color='region',
hover_name='region',
trendline='ols'
)
fig.update_layout(title_text='Happiness Rank vs healthy_life_expectancy')
plot(fig, filename='./html/健康預期壽命和幸福水平動態圖展示.html')
fig = px.scatter(df_all,
x='healthy_life_expectancy',
y='happiness',
animation_frame='year',
animation_group='region',
size='rank',
color='region',
hover_name='region',
trendline='ols'
)
fig.update_layout(title_text='Happiness Rank vs healthy_life_expectancy')
plot(fig, filename='./html/健康預期壽命和幸福水平動態圖展示.html')
我們使用線性回歸進行建立一個基準模型,首先篩選一下建模變量,并刪除空值記錄。
from statsmodels.formula.api import ols
sel_cols = ['happiness', 'gdp_per_capita', 'healthy_life_expectancy',
'freedom_to_life_choise', 'corruption_perceptions', 'generosity']
# 重置索引
df_model.index = range(df_model.shape[0])
df_model = df_all[sel_cols]
# 刪除空值
df_model = df_model.dropna()
df_model.head()
本文使用最小二乘法來建模,它是很基礎、很強大的方法,應用非常廣泛。
最小二乘法通過使得因變量觀測值與因變量估計值之間的殘差平方和達到最小的方法,得到估計的回歸方程。最小二乘準則就是選擇能與樣本數據有最佳擬合方程的準則。
最小二乘法建立在假定之上,如果假設成立,建立的模型可以用來較準確地預測數據。反之,假設不成立,模型論斷將失去其有效性。
最小二乘法假定:
1)線性關系:假定因變量與自變量之間存在線性關系。如果不存在線性關系,線性回歸不是解釋數據的正確模型。
2)無多重共線性:因變量之間不存在相關性。如果某些因變量之間存在密切聯系,可以嘗試刪去其中一個或多個相關的因變量。因為多余的因變量提供了冗余信息,剔除多余變量并不會大大降低修正判定系數。
3)零條件均值假定:觀測值和線性擬合估計值之間的平均殘差為 0。有時候觀測值和估計值相比,偏大;有時候偏小,但之間的殘差不會無控制地偏向于一群值。
4)同方差:對于自變量的不同取值,因變量的誤差項都是獨立的,方差是相同的。
5)無自相關性 / 序列相關:自相關是指一個變量同自身其他觀測值有相互關系。比如,如果今天的股票價格影響著明天的股票價格,那么股票價格就是序列相關的。
簡單線性回歸使用一個自變量來預測一個因變量,二者之間的關系可以用一條直線近似表示。
簡單線性回歸模型:
我們將使用 statsmodels 中 ols 功能,構建 happiness 同 gdp_per_capita 之間的模型。
Statsmodels 是一個很強大的 Python 庫,用于擬合多種統計模型,執行統計測試以及數據探索和可視化。
對于線性回歸 linear regression,我們可以使用 Statsmodels 庫中最小二乘法 OLS(Ordinary-Least-Square)的功能來實現,可以得到豐富的數據信息。
# 建立簡單線性回歸模型
lm_m = ols(formula='happiness ~ gdp_per_capita',
data=df_model).fit()
lm_m.summary()
1) 修正判定系統 Adj.R-squared:63.3%。幸福指數變異性的 63.3% 能被其與 gdp_per_capita 之間的線性關系解釋。
2)回歸系數:2.19。代表 GDP 每增加一個單位,幸福指數將增加 2.19 個單位。和我們常識理解的想法一致,GDP 增加,幸福指數會增加。
3)回歸系數的標準誤差 stand error:0.061,即β的估計的標準差。通過每年的 GDP 數據,可以計算得到回歸系統的標準誤差。回歸系數標準誤差,是量度結果精密度的指標。這里計算得出的標準誤差為 0.061,數值很小,說明精確度還是不錯的。
( 補充:標準差是表示個體間變異大小的指標, 反映了整個樣本對樣本平均數的離散程度, 是數據精密度的衡量指標; 而標準誤反映樣本平均數對總體平均數的變異程度, 從而反映抽樣誤差的大小 , 是量度結果精密度的指標。)
4)p - 值為 0%。根據簡單線性回歸顯著性的 t 檢驗,原假設 happiness 同 gdp_per_capita 之間不存在線性關系,β為 0。而現在 p 值為 0%,小于顯著性水平 0.05。所以拒絕原假設,β顯著不等于 0。我們足以斷定,happiness 同 gdp_per_capita 之間存在一個顯著的關系。
5)β的 63% 的置信區間:2.076 ~ 2.315。我們有 63% 的信心,回歸系數β將落在置信區間 [2.076,2.315]中。換個角度來講,簡單線性回歸顯著性的 t 檢驗,假設β為 0,而β=0 并沒有包含在上述置信區間內,所以我們可以拒絕原假設,斷定 happiness 同 gdp_per_capita 之間存在一個顯著的關系。
我們知道僅僅考慮 GDP 是不能完全解釋幸福指數的。為了更加準確地分析影響幸福指數因素,應該引入一些不同的自變量來分析,看看哪些自變量的組合更優地滿足 OLS 最小二乘假定。這里利用六個自變量來測試一下。
from statsmodels.formula.api import ols
# 建立多元線性回歸模型
lm_m = ols(formula='happiness ~ gdp_per_capita + healthy_life_expectancy + freedom_to_life_choise + corruption_perceptions + generosity',
data=df_model).fit()
lm_m.summary()
1) 修正判定系統 Adj.R-squared 從之前的 63.3%% 上升到 74.3%。房屋價格指數變異性的 74.3% 能被其與多個自變量之間的線性關系解釋。
2)回歸系數: 控制其他變量不變的情況下,GDP 指數每增加一個單位,幸福指數增加 1.32 個單位,健康預期壽命指數每增加一個單位,幸福指數增加 1.21 個單位。
3)變量重要性排序為:gdp_per_capita、freedom_to_life_choise、healthy_life_expectancy、corruption_perceptions、generosity
5)新引入的自變量的 p 值都小于顯著性水平 0.05,說明這些自變量同幸福指數是有顯著關系的。考慮到判定系數的增加,更加說明多元線性回歸模型在這里是優于簡單一元線性回歸的。
y_pred = lm_m.predict(df_model[:])
df_pred = pd.concat([df_model['happiness'], y_pred], axis=1)
df_pred.columns = ['y_true', 'y_pred']
# 散點圖
fig = px.scatter(df_pred, x='y_true', y='y_pred', trendline='ols')
fig.update_layout(title='Resid of OLS Regression')
plot(fig, filename='./html/預測值和真實值分布圖.html')
殘差: y 預測值與 y 之間的差值
fig = px.histogram(x=lm_m.resid)
fig.update_layout(title='Resid of OLS Regression')
plot(fig, filename='./html/多元線性回歸殘差分布圖.html')
參考文獻:
CDA 數據分析師 :https://www.sohu.com/a/419787355_568359
問題先行,如何使用 CSS 實現下述滾動條效果?
就是頂部藍色的滾動進度條,隨著頁面的滾動進度而變化長短。
在繼續閱讀下文之前,你可以先緩一緩。嘗試思考一下上面的效果或者動手嘗試一下,不借助 JS ,能否巧妙地實現上述效果。
OK,繼續。這個效果是我在業務開發的過程中遇到的一個類似的小問題。其實即便讓我借助 Javascript ,我的第一反應也是,感覺很麻煩啊。所以我一直在想,有沒有可能只使用 CSS 完成這個效果呢?
第一眼看到這個效果,感覺這個跟隨滾動動畫,僅靠 CSS 是不可能完成的,因為這里涉及了頁面滾動距離的計算。
如果想只用 CSS 實現,只能另辟蹊徑,使用一些討巧的方法。
好,下面就借助一些奇技淫巧,使用 CSS 一步一步完成這個效果。分析一下難點:
正常分析應該是這樣的,但是這就陷入了傳統的思維。進度條就只是進度條,接收頁面滾動距離,改變寬度。如果頁面滾動和進度條是一個整體呢?
不賣關子了,下面我們運用線性漸變來實現這個功能。
假設我們的頁面被包裹在 <body> 中,可以滾動的是整個 body,給它添加這樣一個從左下到到右上角的線性漸變:
body {
background-image: linear-gradient(to right top, #ffcc00 50%, #eee 50%);
background-repeat: no-repeat;
}
復制代碼
那么,我們可以得到一個這樣的效果:
Wow,黃色塊的顏色變化其實已經很能表達整體的進度了。其實到這里,聰明的同學應該已經知道下面該怎么做了。
我們運用一個偽元素,把多出來的部分遮住:
body::after {
content: "";
position: fixed;
top: 5px;
left: 0;
bottom: 0;
right: 0;
background: #fff;
z-index: -1;
}
復制代碼
為了方便演示,我把上面白色底改成了黑色透明底,:
實際效果達成了這樣:
眼尖的同學可能會發現,這樣之后,滑到底的時候,進度條并沒有到底:
究其原因,是因為 body 的線性漸變高度設置了整個 body 的大小,我們調整一下漸變的高度:
body {
background-image: linear-gradient(to right top, #ffcc00 50%, #eee 50%);
background-size: 100% calc(100% - 100vh + 5px);
background-repeat: no-repeat;
}
復制代碼
這里使用了 calc 進行了運算,減去了 100vh,也就是減去一個屏幕的高度,這樣漸變剛好在滑動到底部的時候與右上角貼合。
而 + 5px 則是滾動進度條的高度,預留出 5px 的高度。再看看效果,完美:
至此,這個需求就完美實現啦,算是一個不錯的小技巧,完整的 Demo:
CodePen Demo -- 使用線性漸變實現滾動進度條
別人寫過的東西通常我都不會再寫,這個技巧很早
以前就有看到,中午在業務中剛好用到這個技巧就寫下了本文,沒有去考證最先發明這個技巧的是誰。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。