数据挖掘导论——可视化分析实验

1)商店客流量数据可视化

a) 数据来源

商店数据来自天池口碑商家客流量预测比赛,这里只筛选了一部分数据。
https://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100066.333.10.W
7qorD&raceId=231591

“shop_payNum_new.csv”的数据各个字段的含义
Field Sample Description
pay_num 1 客流量(每天使用支付宝在该店消费的人数)
shop_id 1 商家 id,与 shop_info 对应
time_stamp 2016/1/1 支付时间
cate_2_name fast food 商店的二级分类名称
b) 实验要求:
读取数据

import pandas as pd
import matplotlib.pyplot as plt

shop_payNum_new = pd.read_csv('dataset/shop_payNum_new.csv', parse_dates=True, index_col=0)

(1)绘制所有便利店的 10 月的客流量折线图。

代码:

convenience_store = shop_payNum_new[shop_payNum_new['cate_2_name'] == 'convenience store']

Oct_payNum = convenience_store[convenience_store.index.month == 10]
shop_id = Oct_payNum['shop_id'].drop_duplicates(keep='first', inplace=False) 

for i in shop_id:
    tmp = Oct_payNum[Oct_payNum['shop_id'] == i]
    tmp.plot(y = 'pay_num', title = 'convenience store and shop_id = ' + str(i), kind='line')
    plt.xlabel('day')
    plt.show()

思路:

  1. 取出所有cate_2_name为convenience store的行。
  2. 因为读取数据时使用parse_dates将时间解析成datetime时间对象,index_col=0将第一列,即时间那一列作为索引,索引类型为DatetimeIndex,所以可以取出10月的所有行。
  3. 遍历所有的shop_id并绘图。

执行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)绘制每类商家 10 月份的日平均客流量折线图。

代码:

cate_2_name=shop_payNum_new['cate_2_name'].drop_duplicates(keep='first', inplace=False)

for i in cate_2_name:
    tmp = shop_payNum_new[shop_payNum_new['cate_2_name'] == i]
    Oct_payNum = tmp[tmp.index.month == 10]
    day_payNum = Oct_payNum.groupby(Oct_payNum.index.day).mean()
    day_payNum.plot(y = 'pay_num', title=str(i)+ ' pay_num', kind='line')
    plt.xlabel('day')
    plt.show()

思路:

  1. 遍历所有cate_2_name,即所有商家的名字
  2. 取出商家10月份的数据,并按日期分组。
  3. 求均值后绘图。

执行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)选择一个商家,统计每月的总客流量,绘制柱状图。

代码:

fast_food = shop_payNum_new[shop_payNum_new['cate_2_name'] == 'fast food']
shop = fast_food[fast_food['shop_id'] == 196]
month_payNum = shop.groupby(shop.index.month).sum()
month_payNum.plot(y = 'pay_num', title='fast food && shop id = 196', kind='bar')
plt.xlabel('month')
plt.show()

思路:

  1. 选择fast food并且shop id 为196的商家。
  2. 将数据按时月分组并求和。
  3. 绘图。

执行结果:
在这里插入图片描述

(4)选择一个商家,统计某个月中,周一到周日的每天平均客流量,并绘制柱状图。

代码:

Oct_payNum = shop[shop.index.month == 10]
week_payNum = Oct_payNum.groupby(Oct_payNum.index.strftime('%w')).mean()

week_payNum.plot(y = 'pay_num', title = 'fast food week pay_num', kind = 'bar')
plt.xlabel('week')
plt.show()

思路:

  1. 选择fast food并且shop id = 196。
  2. 取出10月份的数据,按每周的日期分组。
  3. 求每天的均值并绘图。

执行结果:
在这里插入图片描述

(5)选择一个商家,绘制客流量直方图。

代码:

shop.plot(y = 'pay_num', kind='hist', title= 'fast food && shop id = 196', alpha = 0.5)
plt.show()

思路:

  1. 选择fast food并且shop id= 196的商家。
  2. 绘制直方图。

执行结果:
在这里插入图片描述

(6)选择一个商家,绘制客流量密度图。

代码:

shop.plot(y = 'pay_num', title = 'fast food && shop id = 196', kind = 'kde')
plt.show()

思路:

  1. 选择fast food并且shop id= 196的商家。
  2. 绘制流量密度图。

执行结果:
在这里插入图片描述

(7)统计某个月各个类别商店总客流量占该月总客流量的比例,绘制饼图。

代码:

shop = shop_payNum_new[shop_payNum_new.index.month == 10]
shop_rate = shop.groupby(shop['cate_2_name']).sum() / shop['pay_num'].sum()
shop_rate['pay_num'].plot(kind='pie', autopct='%.2f')
plt.title("Oct")
plt.show()

思路:

  1. 取出所有商店10月份的数据。
  2. 将商店的客流量分组求和再除以所有商店的客流量得到比例。
  3. 绘制饼图。

执行结果:
在这里插入图片描述

2)皮马印第安人糖尿病数据可视化

a) 数据来源: http://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes

“pima.csv”数据前 9 个字段的含义:
(1) Number of times pregnant
(2) Plasma glucose concentration a 2 hours in an oral glucose tolerance
test
(3) Diastolic blood pressure (mm Hg)
(4) Triceps skin fold thickness (mm)
(5) 2-Hour serum insulin (mu U/ml)
(6) Body mass index (weight in kg/(height in m)^2)
(7) Diabetes pedigree function
(8) Age (years)
(9) Class variable (0 or 1)
b) 实验要求:
读取数据:

import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import andrews_curves

pima = pd.read_csv('dataset/pima.csv', header = None)

(1)任选两个字段绘制散点图。

代码:

pima.columns = ['Number of times pregnant',  
                'Plasma glucose concentration a 2 hours in an oral glucosetolerancetest',  
                'Diastolic blood pressure (mm Hg)', 'Triceps skin fold thickness (mm)',  
                '2-Hour serum insulin (mu U/ml)', 'Body mass index', 'Diabetes pedigree function',  
                'Age (years)', 'Class variable'] 
PregnantNum = pima[['Age (years)', 'Number of times pregnant']]

means = PregnantNum['Number of times pregnant'].mean()

ax = PregnantNum[PregnantNum['Number of times pregnant'] >= means].plot(x = 'Age (years)', y = 'Number of times pregnant', kind='scatter', c='red', ax = None, label = 'Number of times pregnant >= mean')
PregnantNum[PregnantNum['Number of times pregnant'] < means].plot(x = 'Age (years)', y = 'Number of times pregnant', kind='scatter', c='blue', ax = ax, label = 'Number of times pregnant < mean')

思路:

  1. 为每一列加上列索引。
  2. 取出Age (years)和Number of times pregnant这两列。
  3. 求出Number of times pregnant的均值,怀孕次数大于均值的为红色,小于均值的为蓝色。
  4. 绘制散点图。

执行结果:
在这里插入图片描述

(2)使用全部或者部分特征绘制散布图。

代码:

color = {1:'green', 0:'red'}
pd.scatter_matrix(pima.iloc[:, [1, 2, 3]], figsize=(9,9), diagonal='kde', marker='o',
                 s = 40, alpha = 0.4,  c = pima['Class variable'].apply(lambda x : color[x]))
plt.show()

思路:

  1. 选择Plasma glucose concentration a 2 hours in an oral glucose tolerance test、Diastolic blood pressure (mm Hg) 、Triceps skin fold thickness (mm)和Class variable绘制图像。

执行结果:
在这里插入图片描述

(3)绘制调和曲线图

代码:

andrews_curves(pima, 'Class variable', color=['b', 'green'])
plt.show()

思路:

  1. 选择蓝色和绿色绘制调和曲线图

执行结果:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据可视化是数据科学领域中重要的一环,它通过图表、图形和其他可视化工具将数据呈现出来,以便能够更好地理解和分析数据。 首先,数据可视化可以帮助我们更好地理解数据。通过将数据可视化成图表或图像,我们可以直观地看到数据的分布、趋势和模式。这些可视化结果可以让我们更容易地发现数据中的有意义的信息,并且帮助我们深入理解数据所传达的含义。 其次,数据可视化还可以帮助我们发现数据中的异常值。通过对数据进行可视化,我们可以快速地发现与众不同的数据点或异常模式。这些异常值可能是我们的数据收集过程中的错误,或者是数据背后隐藏的重要信息。通过识别和处理这些异常值,我们可以提高数据质量和分析的准确性。 此外,数据可视化也有助于数据的传达和沟通。在现实世界中,不同背景的人对于数据的理解能力和统计分析的能力有所差异。数据可视化可以帮助我们以更直观的方式向其他人传达数据,使得他们更容易理解和接受数据的分析结果。通过合适的图表和图形,我们可以有效地解释数据背后的趋势和关系,并与其他人进行更有意义的讨论和决策。 综上所述,数据可视化在数据科学中起着重要的作用。它不仅帮助我们更好地理解和分析数据,发现异常值,还能够向他人有效传达和沟通数据。因此,在进行数据科学工作时,数据可视化是必不可少的一项技能和工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值