1. 程式人生 > 實用技巧 >Python-深入淺出資料分析-資料圖形化

Python-深入淺出資料分析-資料圖形化

目錄

在閱讀前,讀一下Python-深入淺出資料分析-總結會更好點,以後遇到問題比如程式碼執行不了,再讀讀也行,>-_-<

問題的起源

為了比較3個主頁的好壞,收集了很多資料,以便用資料說話。這些資料實在太多,告訴我們的資訊很多但是卻多到難以捕捉。

圖形化是不是會好點

利用書中提供的xls資料,來進行一下視覺化,我們想知道Revenue和其他因素的關係,嗯,那就來探索性分析一下。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

%matplotlib inline

df = pd.read_csv('./hfda_ch04_home_page1.csv').iloc[:, 1:]

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(1,1,1)

ax.axvline(x= 10, linestyle= '--')
ax.axhline(y= 40, linestyle= '--')

ax.axvline(x= df.TimeOnSite.mean())
ax.axhline(y= df.Revenue.mean())

ax.scatter(df.TimeOnSite.values, df.Revenue.values, s= 72, facecolors='none', edgecolors='r', linewidth= 2)

ax.set_xticks(np.arange(0, 50, 10))
ax.set_yticks(np.arange(0, 120, 20))

ax.set_xlabel('TimeOnSite')
ax.set_ylabel('Revenue')
ax.set_title('page1')

三種不同的主頁表現

我們想知道三種不同主頁的Revenue和其他因素的間的關係,以便我們可以挑選出好的主頁。
由於官網只提供了page1的檔案下載,所以自己造一些資料,這樣就可以把自己的思路實現,這些資料已經放到了我的github上

# plt.style.use('ggplot')  # 取消註釋試試看
fig = plt.figure(figsize=(20, 20))

def plot_var_revenue(df_var, df_revenue, ax, ax_title):
    ax.axvline(x= df_var.mean())
    ax.axhline(y= df_revenue.mean())

    ax.scatter(df_var.values, df_revenue.values, s= 72, facecolors='none', edgecolors='r', linewidth= 2)
    
    ax.set_xlabel(df_var.name, fontsize= 12)
    ax.set_ylabel(df_revenue.name, fontsize= 12)
    ax.set_title(ax_title, fontsize= 12)

all_pic_num = np.arange(1, 10).reshape((3,3))
for row_index, col_index in enumerate(all_pic_num):
    str_page = 'page{}'.format(row_index + 1)
    
    df = pd.read_csv('./hfda_ch04_home_{}.csv'.format(str_page)).iloc[:, 2:]
    
    for index in col_index:
        ax = fig.add_subplot(3, 3, index)
        
        col_index_real = index - row_index*3
        plot_var_revenue(df.iloc[:, col_index_real], df.Revenue, ax, str_page)
        
        if col_index_real == 1:
            ax.axvline(x= 10, linestyle= '--')
            ax.axhline(y= 40, linestyle= '--')
            ax.set_xticks(np.arange(0, 60, 10))
            ax.set_yticks(np.arange(0, 140, 20))
        elif col_index_real == 2:
            ax.axvline(x= 40, linestyle= '--')
            ax.axhline(y= 40, linestyle= '--')
            ax.set_xticks(np.arange(0, 140, 20))
            ax.set_yticks(np.arange(0, 140, 20))
        else:
            ax.axvline(x= 10, linestyle= '--')
            ax.axhline(y= 40, linestyle= '--')
            ax.set_xticks(np.arange(0, 40, 5))
            ax.set_yticks(np.arange(0, 140, 20))