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

引入’性價比’這一列,性價比的計算方式將所有的評分相加再除以人均消費金額,計算出 分/元 為單位的數(shù)值,表示單位價格獲得的分數(shù) 來表示其性價比。

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

使用箱型圖進行異常值的排查。


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

構(gòu)建一個選擇具有競爭力的品類的公式的因素,例如’口味','人均消費’,'性價比’,然后通過異常值刪除的函數(shù)得出數(shù)據(jù)集。

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


很明顯是由于沒有做 數(shù)據(jù)標準化處理。
數(shù)據(jù)標準化處理之后


設計了一個計算公式,權重自己設計 分數(shù)的計算式 比如按照 口味:人均消費:性價比 = 2:5:3 的比例去計算。
先合并df_kw_max_min、df_rj_max_min、df_xjb_max_min,通過pd.merge合并。

計算最后的得分

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

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


補充:使用bokeh繪制空間互動圖形。


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