Python數(shù)據(jù)分析:大眾點(diǎn)評(píng)數(shù)據(jù)進(jìn)行選址
前言
本文的文字及圖片來(lái)源于網(wǎng)絡(luò),僅供學(xué)習(xí)、交流使用,不具有任何商業(yè)用途,版權(quán)歸原作者所有,如有問(wèn)題請(qǐng)及時(shí)聯(lián)系我們以作處理。
如果你處于想學(xué)Python或者正在學(xué)習(xí)Python,Python的教程不少了吧,但是是最新的嗎?說(shuō)不定你學(xué)了可能是兩年前人家就學(xué)過(guò)的內(nèi)容,在這小編分享一波2020最新的Python教程。
一、項(xiàng)目背景
- 案例類(lèi)型:練習(xí)
- 案例工具:Python、Qgis
- 案例目的:通過(guò)實(shí)戰(zhàn)進(jìn)行學(xué)習(xí),讓大家綜合運(yùn)用基礎(chǔ)知識(shí),加深印象鞏固記憶。
二 、提出問(wèn)題
- 通過(guò)餐飲數(shù)據(jù)分析選出最具有競(jìng)爭(zhēng)力的品類(lèi);
- 通過(guò)建立綜合分?jǐn)?shù)指標(biāo)的計(jì)算公式來(lái)挑選出最適合地址。
三、理解數(shù)據(jù)
讀取數(shù)據(jù)集后,通過(guò)info()和describe()方法來(lái)查看一下數(shù)據(jù)的基本情況。
- data.info()
- ——————————————————————————
- <class 'pandas.core.frame.DataFrame'>
- RangeIndex: 96398 entries, 0 to 96397
- Data columns (total 10 columns):
- 類(lèi)別 96258 non-null object
- 行政區(qū) 96255 non-null object
- 點(diǎn)評(píng)數(shù) 96398 non-null int64
- 口味 96398 non-null float64
- 環(huán)境 96398 non-null float64
- 服務(wù) 96398 non-null float64
- 人均消費(fèi) 96398 non-null int64
- 城市 96398 non-null object
- Lng 96398 non-null float64
- Lat 96398 non-null float64
- dtypes: float64(5), int64(2), object(3)
- memory usage: 7.4+ MB
- 數(shù)據(jù)共計(jì)96398個(gè),10個(gè)變量/特征,數(shù)據(jù)類(lèi)型數(shù)量為 float64(5), int64(2), object(3),粗略觀察,數(shù)據(jù)明顯有缺失值的情況,需要進(jìn)行數(shù)據(jù)的清洗。
四、數(shù)據(jù)處理
使用data.isnull().values.sum()檢查空值數(shù)量,檢查出283個(gè)空值。
由于空值占數(shù)據(jù)總量比例為283/96398 = 0.0029,刪除空值并不影響整體的數(shù)據(jù)情況,所以這里采用刪除的辦法來(lái)處理空值。
使用data.dropna()對(duì)空值進(jìn)行刪除,再使用data.isnull().values.sum()進(jìn)行檢查,結(jié)果為0。
數(shù)據(jù)清洗后的數(shù)據(jù)共計(jì)96255個(gè)。根據(jù)①通過(guò)餐飲數(shù)據(jù)分析選出最具有競(jìng)爭(zhēng)力的品類(lèi)的要求,選擇相關(guān)的變量,選擇['類(lèi)別', '口味', '環(huán)境', '服務(wù)', '人均消費(fèi)’]5個(gè)變量。
建立['類(lèi)別', '口味', '環(huán)境', '服務(wù)', '人均消費(fèi)’]的DataFrame,并且篩選出所有評(píng)分和消費(fèi)大于0的情況。因?yàn)楦鶕?jù)實(shí)際情況,評(píng)分和消費(fèi)為0的數(shù)據(jù)對(duì)此沒(méi)有參考作用。

引入’性?xún)r(jià)比’這一列,性?xún)r(jià)比的計(jì)算方式將所有的評(píng)分相加再除以人均消費(fèi)金額,計(jì)算出 分/元 為單位的數(shù)值,表示單位價(jià)格獲得的分?jǐn)?shù) 來(lái)表示其性?xún)r(jià)比。

這樣獲得了df如下,篩選出了需要的數(shù)據(jù)54886個(gè)。
- df.info()
- ——————————————————————————
- <class 'pandas.core.frame.DataFrame'>
- Int64Index: 54886 entries, 0 to 96395
- Data columns (total 6 columns):
- 類(lèi)別 54886 non-null object
- 口味 54886 non-null float64
- 環(huán)境 54886 non-null float64
- 服務(wù) 54886 non-null float64
- 人均消費(fèi) 54886 non-null int64
- 性?xún)r(jià)比 54886 non-null float64
- dtypes: float64(4), int64(1), object(1)
- memory usage: 2.9+ MB
五、構(gòu)建模型
得到數(shù)據(jù)集df,選擇'類(lèi)別'進(jìn)行g(shù)roupby分組再進(jìn)行mean值等到每個(gè)類(lèi)別的值。

使用箱型圖進(jìn)行異常值的排查。


箱型圖使用異常值刪除的函數(shù),對(duì)異常值進(jìn)行刪除。

構(gòu)建一個(gè)選擇具有競(jìng)爭(zhēng)力的品類(lèi)的公式的因素,例如’口味','人均消費(fèi)’,'性?xún)r(jià)比’,然后通過(guò)異常值刪除的函數(shù)得出數(shù)據(jù)集。

將三組數(shù)據(jù)集放在同一張圖上面。


很明顯是由于沒(méi)有做 數(shù)據(jù)標(biāo)準(zhǔn)化處理。
數(shù)據(jù)標(biāo)準(zhǔn)化處理之后


設(shè)計(jì)了一個(gè)計(jì)算公式,權(quán)重自己設(shè)計(jì) 分?jǐn)?shù)的計(jì)算式 比如按照 口味:人均消費(fèi):性?xún)r(jià)比 = 2:5:3 的比例去計(jì)算。
先合并df_kw_max_min、df_rj_max_min、df_xjb_max_min,通過(guò)pd.merge合并。

計(jì)算最后的得分

得出【甜品】是最佳的品類(lèi)。
使用Qgis制作出關(guān)于'人口密度'、'道路密度'、'餐飲密度'、'競(jìng)品密度’、'經(jīng)度’、’維度'相關(guān)的數(shù)據(jù)集。

數(shù)據(jù)集有空值,使用dealdata.fillna(0,inplace=True)進(jìn)行0的填充。
觀察數(shù)據(jù)得知,'人口密度'、'道路密度'、'餐飲密度'、'競(jìng)品密度’不在同一緯度上,所以進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理。再計(jì)算['綜合指標(biāo)’]這一新列的數(shù)值。按照’人口密度’:'道路密度’:'餐飲密度’:'競(jìng)品密度’=4:3:2:1的比例。
六、數(shù)據(jù)可視化
利用matplotlib進(jìn)行制圖,使用散點(diǎn)圖。


補(bǔ)充:使用bokeh繪制空間互動(dòng)圖形。


得出結(jié)論:
甜品店選址在(121°472′E,31°301′N)、(121°473′E,31°274′N)、(121°493′E,31°244′N)等地方開(kāi)設(shè)最優(yōu)
























