数据分析学习小结

627 阅读3分钟

这一周学习了更多关于数据分析的相关知识,知道了一些方法,解决了一些之前困惑我的东西。

我之前很缺乏数据进行相关操作,但这周我学习了如何从各个网页中爬取一定的数据资源。

我之前对这些数据不能直观的展现而感到枯燥,但学习了matplotlib之后,将一些数据通过图像展现出来也变得十分有趣。

同时也学习了数组矩阵的乘法,pandas中数据的增删改,数据抽取,数据清洗,索引的重新设置,数据的排序和排名。

例如抓取证监会披露的IPO数据

from pandas import DataFrame
import csv
pd.set_option('display.unicode.east_asian_width', True)  # 对齐数据
df3 = pd.DataFrame(data=None, columns=['公司名称', '披露类型', '上市板块', '保荐机构', '披露时间', '公告'])
url = 'http://eid.csrc.gov.cn/ipo/1017/index.html'
df3_1 = pd.read_html(url, encoding='utf-8')[0]
print(df3_1)
df3_1.to_csv('证监会披露的IPO数据', index=False)  #把数据存储到'证监会披露的IPO数据.csv'这个文件夹中

抓取NBA球员的薪水信息

url = 'http://www.espn.com/nba/salaries'
df = pd.DataFrame()  # 创建一个空的DateFrame对象
# 给DataFrame对象添加对象
df = df.append(pd.read_html(url, header=0))
print(df)
# 将数据保存成CSV文件
df2 = df.to_csv('nba_salary.csv', index=False)

numpy中dot|@的用法 (向量点积和矩阵乘法)

向量点积

b1 = np.array([1, 2, 3, 4, 5, 6, 7])
b2 = np.array([2, 3, 4, 5, 6, 7, 8])
result = np.dot(b1, b2)
# 向量的内积
print(result)

原理:

image.png

矩阵乘法

x = np.array([[1, 2, 3], [4, 5, 6]])
y = np.array([[2, 3], [4, 5], [6, 7]])
result = np.dot(x, y)
print(result)
print('x阶数:' + str(x.shape))
print('y阶数:' + str(y.shape))
print('result阶数:' + str(result.shape))

结果为 image.png

原理

image.png

矩阵要是行等于列的两个矩阵

矩阵与向量相乘,向量往往要倒置。 通常使用array.T进行倒置 可一维数组不能使用,这时可以将数组转为matrix再进行倒置

x1 = np.array([[1, 2, 3], [4, 5, 6]])
y1 = np.matrix(np.array([1, 2, 3]))
result = np.dot(x1, y1.T)
print(result)

矩阵相乘的得到的矩阵形状规律就是(a,b)*(c,d) = (a,d)

关于pandas处理数据的一些基础操作

import pandas as pd

data = [[45, 65, 100], [56, 45, 50], [67, 67, 76]]
t = pd.DataFrame(data, columns=['数学', '语文', '英语'],
                 index=['张三', '李四', '王五'])
# 数据的修改
print(t)
# 直接使用columns属性
t.columns = ['数学(上)', '语文(上)', '英语(上)']
print(t)
# rename 重新赋值
# 修改列索引
t.rename(columns={'数学(上)': '数学(下)', '语文(上)': '语文(下)', '英语(上)': '英语(下)'}, inplace=True)
print(t)
# 修改行索引
t.index = list('abc')
print(t)
t.rename(index={'a': '一一', 'b': '二二', 'c': '三三'}, inplace=True)
print(t)
# 修改一整行数据
t.loc['一一'] = [100, 100, 120]
print(t)
t.iloc[0, :] = [90, 90, 90]
print(t)
# 修改所有行的数据
t.loc[:, '数学(下)'] = [90, 90, 90]
print(t)
# 修改某一处的数据
t.loc['二二', '语文(下)'] = 100
print(t)
t.iloc[1, 1] = 80
print(t)
# 删除数学列
print(t)
t.drop(['数学'], axis=1, inplace=True)
t.drop(columns='数学', inplace=True)
print(t)
# 删除数学成绩小于60的 (删除指定列)
t.drop(t[t['数学'] < 60].index, inplace=True)
print(t)

数据清洗

import pandas as pd
print('数据清洗--处理缺失值和重复值')
data = []
t = pd.DataFrame(data)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('excel数据.xlsx') # 读取相关数据
print(df.info()) # 查看是否有缺失值
# 删除有缺失值的那一行数据
df = df.dropna()
print(df)
# 将数据中的nan赋值为零
df['列索引'] = df['列索引'].fillna(0)
print(df)
# 判断是否具有重复值 duplicated()
print(df.duplicated())
# 重复值就要删除
print('去除掉全部的重复数据, 指的是行内容全部要重复')
df = df.drop_duplicates()
print(df)
print('去除指定列的重复数据,保留重复行中的最后一行')
df = df.drop_duplicates(['列索引'])
print(df)

设置索引

行索引
pd.set_option('display.unicode.east_asian_width', True) # 
print(df.reindex(['www', 'qqq', 'eee', 'rrr', 'ttt']))
# 列索引
print(df.reindex(columns=['数学', '语文', '英语', '政治', '历史']))

df1 = df.reindex(index=['www', 'qqq', 'eee', 'rrr', 'ttt'],
                 columns=['数学', '语文', '英语', '政治', '历史'],
                 fill_value=0)
print(df1)

# 主要是在数据清洗过后需要重新设置连续的索引
df = df.dropna().reset_index(drop=True)
print(df)

继续学习!