初识 数据分析、数据清洗 附代码

2023-08-08 13:17:40 浏览数 (3)

背景:有同学问python作业,前面很简单,最后的数据清洗给我搞懵了

来看看吧

编程基础1:有四个数字:3、5、7、9,能组成多少个互不相同且无重复数字的三位数?输出所有的排列?

代码语言:javascript复制
#### 编程基础1:有四个数字:3、5、7、9,能组成多少个互不相同且无重复数字的三位数?输出所有的排列?
if __name__ == '__main__':
    num=0
    mylist = [3,5,7,9]#定义数组 3、5、7、9
    for i in mylist:  #循环赋值
        for j in mylist:
            for k in mylist:
                if(i!=j and j!=k and i!=k): #当每一个值不相等时 打印出来
                    num=num 1
                    print(str(i) str(j) str(k))
    print("能组成" str(num) "个互不相同且无重复数字的三位数,分别为以上")

随机生成一个包含20个取值在[1,10]之间的随机整数的列表,将其中的偶数按升序排列放置在列表前部,奇数按降序排列放置在列表后部

代码语言:javascript复制
import random
list = []
for i in range(20):
    t = random.randint(1, 10)
    list.append(t)

print("生成的随机20个数" str(list))
list_Ou = []
for i in range(20):
    if (list[i] % 2 == 0):
        list_Ou.append(list[i])
        # print(list[i])
print("偶数为" str(list_Ou))
#升序排列
oushu_sx_list=sorted(list_Ou)
print("升序排列" str(oushu_sx_list))
# print(list_Ou)


list_Ji = []
for i in range(20):
    if (i % 2 != 0):#奇数判断
        list_Ji.append(list[i])

print("奇数数组" str(list_Ji))

#降序操作
jishu_jx_list = sorted(list_Ji, reverse=True)

print("奇数数组降序" str(jishu_jx_list))
#数据整合 偶数放在前 奇数在后  :将其中的偶数按升序排列放置在列表前部,奇数按降序排列放置在列表后部
result_data=str(oushu_sx_list) str(jishu_jx_list)
print(result_data)

编程基础3:用字典存储下面表格的数据",

代码语言:javascript复制
"|姓名|兴趣爱好|n",
"|----|----|n",
"|李阳|音乐、读书、跑步|n",
"|王天薇|美食、诗歌、旅游|n",
"|郭晓强|编程、骑行、旅游、跑步|n",
"|文雨非|羽毛球、跑步、音乐、诗歌|n",
"|郑菲菲|美食、排球、舞蹈|n",
"n",
"找出具有共同爱好的人,并存储在字典中,例如: "美食:王天薇、郑菲菲"作为一个条目存储在结果字典中
代码语言:javascript复制
r1 = {"name": "李阳", 'hobby': '音乐、读书、跑步'}
r2 = {"name": "王天薇", 'hobby': '美食、诗歌、旅游'}
r3 = {"name": "郭晓强", 'hobby': '编程、骑行、旅游、跑步'}
r4 = {"name": "文雨非", 'hobby': '羽毛球、跑步、音乐、诗歌'}
r5 = {"name": "郑菲菲", 'hobby': '美食、排球、舞蹈'}
#共同爱好
r6 = {"name": "", 'hobby': '美食:'}
r7 = {"name": "", 'hobby': '音乐:'}
r8 = {"name": "", 'hobby': '跑步:'}
r9 = {"name": "", 'hobby': '诗歌:'}
r10 = {"name": "", 'hobby': '旅游:'}

# 建一个列表,整合三行字典数据
tb = [r1, r2, r3,r4,r5]

tb_aihao=[r6, r7, r8,r9,r10]


#美食爱好分类
meishi_aihao=""
for i in range(len(tb)):
    # print(len(tb[i].get('hobby')))#每个兴趣爱好的字符串长度
    for j in range(len(tb[i].get('hobby'))):#循环读取每一个字符
        if(tb[i].get('hobby')[j]=='美'):
            if(meishi_aihao==""):
                meishi_aihao=str(tb[i].get('name')) meishi_aihao
            else:
                meishi_aihao=str(tb[i].get('name')) ',' meishi_aihao
tb_aihao[0]['name'] = meishi_aihao

#音乐爱好分类
yinyue_aihao=""
for i in range(len(tb)):
    # print(len(tb[i].get('hobby')))#每个兴趣爱好的字符串长度
    for j in range(len(tb[i].get('hobby'))):#循环读取每一个字符
        if(tb[i].get('hobby')[j]=='音'):
            if(yinyue_aihao==""):
                yinyue_aihao=str(tb[i].get('name')) yinyue_aihao
            else:
                yinyue_aihao=str(tb[i].get('name')) ',' yinyue_aihao
tb_aihao[1]['name'] = yinyue_aihao

#跑步爱好分类
paobu_aihao=""
for i in range(len(tb)):
    # print(len(tb[i].get('hobby')))#每个兴趣爱好的字符串长度
    for j in range(len(tb[i].get('hobby'))):#循环读取每一个字符
        if(tb[i].get('hobby')[j]=='跑'):
            if(paobu_aihao==""):
                paobu_aihao=str(tb[i].get('name')) paobu_aihao
            else:
                paobu_aihao=str(tb[i].get('name')) ',' paobu_aihao
tb_aihao[2]['name'] = paobu_aihao

#诗歌爱好分类
shige_aihao=""
for i in range(len(tb)):
    # print(len(tb[i].get('hobby')))#每个兴趣爱好的字符串长度
    for j in range(len(tb[i].get('hobby'))):#循环读取每一个字符
        if(tb[i].get('hobby')[j]=='诗'):
            if(shige_aihao==""):
                shige_aihao=str(tb[i].get('name')) shige_aihao
            else:
                shige_aihao=str(tb[i].get('name')) ',' shige_aihao
tb_aihao[3]['name'] = shige_aihao


#旅游爱好分类
lvyou_aihao=""
for i in range(len(tb)):
    # print(len(tb[i].get('hobby')))#每个兴趣爱好的字符串长度
    for j in range(len(tb[i].get('hobby'))):#循环读取每一个字符
        if(tb[i].get('hobby')[j]=='旅'):
            if(lvyou_aihao==""):
                lvyou_aihao=str(tb[i].get('name')) lvyou_aihao
            else:
                lvyou_aihao=str(tb[i].get('name')) ',' lvyou_aihao
tb_aihao[4]['name'] = lvyou_aihao



# 打印数据
for i in range(len(tb)):
    print(tb[i].get('name'), tb[i].get('hobby'))
print("=====分类=====")
for i in range(len(tb_aihao)):
    print(tb_aihao[i].get('hobby'),tb_aihao[i].get('name'))

文件夹中的数据文件 kzpart.csv 包含有2020年10月用户从大型家用电器和电子产品在线商店的购买数据

代码语言:javascript复制
 "- event_time -事件发生时间n",
    "- product_id -产品编号n",
    "- category_id -产品的类别IDn",
    "- category_code -产品的类别代码(代码名称)n",
    "- brand -品牌名称n",
    "- price -产品价格n",
    "- user_id -用户IDn",
    "n",
    "#### 尝试完成以下分析,并解释分析结果(70分)n",
    "1. 用户消费金额、消费次数的描述性统计  n",
    "2. 用户消费次数、消费金额散点图  n",
    "3. 用户消费金额分布图  n",
    "4. 用户消费次数分布图  n",
    "5. 用户累计消费金额占比 n",
    "n",
    "在代码注释中清晰说明分析步骤"
代码语言:javascript复制
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
raw_data=pd.read_csv("kzpart.csv")
pd.set_option("display.max_columns",10)
raw_data.head(10)
raw_data.dtypes
raw_data.shape  # 数据形状(2616807,8)
np.sum(raw_data.duplicated())  # 重复数据有63356条
raw_data=raw_data.drop_duplicates()
raw_data.isnull().sum()
raw_data=raw_data.dropna()
raw_data.shape   # 数据形状(396632,8)
aa=raw_data.describe()  # price产品价格均值大于中位数,呈现右偏分布
print(aa)
# 用户消费金额、消费次数的描述性统计



raw_data["event_time"]=pd.to_datetime(raw_data["event_time"])
raw_data.info()
raw_data.to_csv("11.csv",index=False)   # 以备tableau进行探索性分析
raw_data.index=raw_data["event_time"]
raw_data_new=raw_data["2020-10":"2020-11"]
raw_data_new=raw_data_new[raw_data_new["price"]>0]
frequency_value=raw_data_new[["event_time","user_id"]].groupby(by="user_id").count()
frequency_value.describe()
frequency_value_fugou=frequency_value[frequency_value["event_time"]>1].count()
fugou_rate=frequency_value_fugou/frequency_value.count()

# 用户消费次数分布图
frequency=pd.cut(frequency_value["event_time"],bins=[0,1,2,10,100,800],labels=["1次","2次","3-10次","11-100次","101次以上"])
frequency.value_counts()
plt.rcParams["font.sans-serif"]="SimHei"
plt.rcParams["axes.unicode_minus"]=False
label1=["1次","3-10次","2次" ,"11-100次","101次以上"]
plt.bar(range(5),frequency.value_counts())
plt.xlabel("消费次数")
plt.ylabel("用户数量")
plt.xticks(range(5),label1)
plt.title("用户消费次数分布图")
plt.show()


# 消费金额分布图
monetary_value=raw_data_new[["price","user_id"]].groupby(by="user_id").sum()
monetary=pd.cut(monetary_value["price"],bins=[0,500,1000,5000,10000,150000],labels=["0-500元","501-1000元","1001-5000元","5001-10000元","10000元以上"])
monetary.value_counts()
label2=["0-500元","1001-5000元","501-1000元","5001-10000元","10000元以上"]
plt.bar(range(5),monetary.value_counts())
plt.xlabel("消费金额")
plt.ylabel("用户数量")
plt.xticks(range(5),label2)
plt.title("消费金额分布图")
plt.show()

# 用户消费次数、消费金额散点图
raw_data.groupby('user_id').sum().describe()
x = raw_data.groupby('user_id').count()['product_id']
y = raw_data.groupby('user_id').sum()['price']
plt.figure(figsize=(12,8))
plt.scatter(x,y,s=80, alpha=0.7)
plt.xlabel('消费次数',fontsize=40)
plt.ylabel('消费金额',fontsize=40)
plt.xticks(range(5),label2)
plt.title("散点图")
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.show()

1 人点赞