项目背景介绍
Adventure Works Cycles,是基于AdventureWorks 示例数据库所虚构的一家大型跨国生产公司。公司生产金属和复合材料的自行车,产品远销北美、欧洲和亚洲市场。公司总部设在华盛顿州的伯瑟尔市,拥有 290 名雇员,而且拥有多个活跃在世界各地的地区性销售团队。
1.产品介绍
作为自行车生产公司,Adventure Works Cycles 提供以下四类产品:
- Adventure Works Cycles 公司生产的自行车。
- 自行车组件(替换零件),例如,车轮、踏板或刹车部件。
- 从供应商购买的转售给 Adventure Works Cycles 客户的自行车装饰。
- 从供应商购买的转售给 Adventure Works Cycles 客户的自行车附件。
2.销售渠道
作为自行车生产公司,Adventure Works Cycles 拥有两类客户,分别代表两种不同的销售渠道:
- 线上渠道。个人可以从 Adventure Works Cycles 在线商店购买产品。
- 线下分销商渠道。即从 Adventure Works Cycles 销售代表处购买产品后进行转售的零售店或批发店。
项目需求分析
通过现有数据监控产品销售情况,获取商品销售趋势及区域分布情况,为销售和市场部、生产部提供指导性意见,以期通过增加销售份额,减少生产、库存成本来增加收益。
项目需求实现
1.数据处理
- 数据源
数据来源于Adventure Works Cycles公司的的样本数据库,包含30个csv文件和1个sql文件,csv文件没有表头,且以 “|” 为分隔符,sql文件包含了所有csv文件的建表语句。
- 数据格式转换
hive导入数据时默认的分隔符为 “,”,使用python修改csv文件的分隔符
os是操作系统(如Windows)的接口模块,os.walk() 方法是一个简单易用的文件、目录遍历器。
-
root 指的是当前正在遍历的文件夹的地址
-
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
-
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
-
使用 os.path.join(root,file) 方法将文件路径和文件名拼接在一起,得到文件的路径
-
pd.read_csv读取文件,pd.to_csv输出转换格式后的文件
import pandas as pd
import os
from_path = r'G:\python_learning\adventure_data'
to_path = r'.\data'
if not os.path.exists(to_path):
os.mkdir(to_path)
# 遍历文件得到文件路径
for root,dirs,files in os.walk(from_path):
for file in files:
file_path = os.path.join(root,file)
# 将缺失值填充为 “null”,pd.read_csv默认将整型数读成浮点数,所以设置dtype=str
try:
df=pd.read_csv(file_path,sep='|',encoding='utf- 16LE',header=None,na_values='null',dtype=str)
except Exception as e:
continue
# DataFrame默认sep=‘,’,默认整型数会保存为浮点数,故设置float_format=None,缺失值默认会被忽略,故设置na_rep='null'
tofile_path = os.path.join(to_path,file)
df.to_csv(tofile_path,index=False,header=False,float_format=
None, na_rep='null')
2.数据导入hive
-
新建create_table.txt文件,将sql文件中的建表语句提取到create_table.txt中
-
使用python正则解析create_table.txt文件,将30个表的表名和字段名存放到字典中
-
创建create_table.sh文件,解析字典中的表名和字