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

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

這樣獲得了df如下,篩選出了需要的數據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
- 環境 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
五、構建模型
得到數據集df,選擇'類別'進行groupby分組再進行mean值等到每個類別的值。

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


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

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

將三組數據集放在同一張圖上面。


很明顯是由于沒有做 數據標準化處理。
數據標準化處理之后


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

計算最后的得分

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

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


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


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