python-DataFrame练习
1.商品数据分析
文件名称: doc/chipo.csv
链接:提取码: jn96
文件描述: 每列数据分别代表如下: 订单编号, 订单数量, 商品名称, 商品详细选择项, 商品总价格
需求1:
1). 从文件中读取所有的数据;
2). 获取数据中所有的商品名称;
3). 跟据商品的价格进行排序, 降序,
将价格最高的20件产品信息写入mosthighPrice.xlsx文件中;
需求2:
1). 统计列[item_name]中每种商品出现的频率,绘制柱状图
(购买次数最多的商品排名-绘制前5条记录)
2). 根据列 [odrder_id] 分组,求出每个订单花费的总金额。
3). 根据每笔订单的总金额和其商品的总数量画出散点图。
需求1:
1). 从文件中读取所有的数据;
goodsInfo = pd.read_csv('doc/chipo.csv')
print(goodsInfo)
# print(goodsInfo.head())
# print(goodsInfo.tail())
# print(goodsInfo.info())
# print(goodsInfo.describe())
2). 获取数据中所有的商品名称;
print("商品名称显示: \n", goodsInfo['item_name'].head()) #显示前5
print("商品名称显示: \n", goodsInfo.item_name.head()) #同理
3). 跟据商品的价格进行排序, 降序,将价格最高的20件产品信息写入mosthighPrice.xlsx文件中;
# 重新赋值;因为价格里面有$符号,str.strip去掉$,字符串类型转为浮点型
goodsInfo.item_price = goodsInfo.item_price.str.strip('$').astype(np.float)
highPriceData = goodsInfo.sort_values('item_price', ascending=False)
print(highPriceData.head(5))
filename = '/tmp/mostHighPrice.xlsx'
highPriceData.to_excel(filename)
print("保存成功.......")
这里讲解一下字符串去掉$的操作:
import pandas as pd
import numpy as np
series1= pd.Series(['$A:1', '$B:2', '$C:3', np.nan, '$cat:3'])
print(series1)
# 将所有的字母转换为小写字母, 除了缺失值
print(series1.str.lower())
# 将所有的字母转换为大写字母, 除了缺失值
print(series1.str.upper())
# 分离
print(series1.str.split(":"))
# 去掉左右两端的某个字符
print(series1.str.strip('$'))
需求2:
1). 统计列[item_name]中每种商品出现的频率,绘制柱状图(购买次数最多的商品排名-绘制前5条记录)
goodsInfo = pd.read_csv('doc/chipo.csv')
# new_info会统计每个商品名出现的次数;其中 Unnamed: 0就是我们需要获取的商品出现频率;
newInfo = goodsInfo.groupby('item_name').count()
print(newInfo)
这里我装了一个 pip install pyecharts_snapshot,若自己有就不用按了
goodsInfo = pd.read_csv('doc/chipo.csv')
# new_info会统计每个商品名出现的次数;其中 Unnamed: 0就是我们需要获取的商品出现频率;
newInfo = goodsInfo.groupby('item_name').count()
# 取'Unnamed: 0'这一列的内容,取头五行
mostRaiseGoods = newInfo.sort_values('Unnamed: 0', ascending=False)['Unnamed: 0'].head(5)
print(mostRaiseGoods, type(mostRaiseGoods)) # series对象;
# 获取对象中的商品名称;index行索引
x = mostRaiseGoods.index
# 获取商品出现的次数;values对象的值
y = mostRaiseGoods.values
from pyecharts import Bar
bar = Bar("购买次数最多的商品排名")
bar.add("", x, y)
bar.render()
打印mostRaiseGoods:
render()结果:
需求2:
2). 根据列 [odrder_id] 分组,求出每个订单花费的总金额======订单数量(quantity)* 订单总价(item_price)
3). 根据每笔订单的总金额和其商品的总数量画出散点图。
goodsInfo = pd.read_csv('doc/chipo.csv')
# 获取订单数量
quantity = goodsInfo.quantity
# 获取订单总价
item_price = goodsInfo.item_price \
= goodsInfo.item_price.str.strip('$').astype(np.float)
# 根据列 [odrder_id] 分组
order_group = goodsInfo.groupby("order_id")
# 每笔订单的总金额
x = order_group.item_price.sum()
# 商品的总数量
y = order_group.quantity.sum()
from pyecharts import EffectScatter
scatter = EffectScatter("每笔订单的总金额和其商品的总数量关系散点图")
scatter.add("", x, y)
scatter.render()
2.消费金额和小费之间的关联与性别和吸烟与否的关系
文件名称: doc/tips.csv
链接: 提取码: g69h
文件内容: 总消费金额, 小费金额, 性别, 是否抽烟, 日期, 时间, 星期
需求:
- 分别吸烟顾客与不吸烟顾客的消费金额与小费之间的散点图;
- 女性与男性中吸烟与不吸烟顾客的消费金额与小费之间的散点图关系;
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
filename = '/home/kiosk/Desktop/python/python0225/tips.csv'
data = pd.read_csv(filename)
# 吸烟顾客消费金额与小费之间的散点图
#列信息: ,total_bill,tip,sex,smoker,day,time,size
#提取表格中'smoker'=='Yes'的数据
smoker = data[data['smoker'] == 'Yes']
print(smoker)
x_total_bill = smoker['total_bill']
y_tip = smoker['tip']
from pyecharts import Scatter
scatter = Scatter("吸烟顾客消费金额与小费之间的散点图")
scatter.add("", x_total_bill, y_tip)
scatter.render()
不吸烟与吸烟相反:
# 实现不吸烟顾客消费金额与小费之间的散点图
no_smoker = data[data['smoker'] != 'Yes']
# print(smoker.head())
x_total_bill = no_smoker['total_bill']
y_tip = no_smoker['tip']
from pyecharts import Scatter
scatter = Scatter("不吸烟顾客消费金额与小费之间的散点图")
scatter.add("", x_total_bill, y_tip)
scatter.render()
# 女性中吸烟与不吸烟顾客的消费金额与小费之间的散点图关系;
# 1). 获取所有吸烟的用户信息
smoker = data[data['smoker'] == 'Yes']
# 2).从所有的吸烟用户中找出性别为女的用户信息;
female_smoker = smoker[smoker['sex']=='Female']
# 1). 获取所有不吸烟的用户信息
no_smoker = data[data['smoker'] != 'Yes']
# 2).从所有的吸烟用户中找出性别为女的用户信息;
female_no_smoker = no_smoker[no_smoker['sex']=='Female']
# 3). 绘制散点图
from pyecharts import Scatter
scatter = Scatter("消费金额与小费之间的散点图")
scatter.add("吸烟女顾客", female_smoker['total_bill'], female_smoker['tip'])
scatter.add("不吸烟女顾客", female_no_smoker['total_bill'], female_no_smoker['tip'])
scatter.render()
3.电影时长和电影排名分析
文件名称:doc/special_top250.csv
链接:提取码: 45ey
1)电影时长与电影排名之间的关系散点图
2)绘制电影时常的频率分布直方图
1)电影时长与电影排名之间的关系散点图
filename = 'doc/special_top250.csv'
data = pd.read_csv(filename)
print(data.head())
# 获取电影时长
x_series = data.movie_duration
# 获取电影排名
y_series = data.num
from pyecharts import Scatter
scatter = Scatter("电影时长与电影排名的散点图")
scatter.add("", x_series, y_series)
scatter.render()
2)绘制电影时常的频率分布直方图
movie_duration = data.groupby("movie_duration").count()
x_time = movie_duration.index
y_count = movie_duration['Unnamed: 0']
print(x_time)
print(y_count)
from pyecharts import Bar
scatter = Bar("电影时长频率分布直方图")
scatter.add("", x_time, y_count)
scatter.render()