利用 numpy 将 age 列和 fare 列数据转化为矩阵,形式为 [[age fare]],命名为 titanic2。
时间: 2024-02-12 19:02:40 浏览: 61
假设你已经将数据读入为名为titanic的DataFrame,可以使用以下代码将age列和fare列数据转化为矩阵形式:
```python
import numpy as np
titanic2 = np.array([titanic['age'], titanic['fare']]).T
```
其中,np.array()将age列和fare列合并为一个二维数组,.T表示转置操作,将行向量转化为列向量。最终得到的titanic2矩阵的形式为[[age, fare], [age, fare], ...],每一行代表一组样本的age和fare数据。
相关问题
(1) 使用 pandas 读入数据 titanic.csv,命名为 origin,并查看数据维度与前 10 行。 (2) 处理缺失值: (a) 查看哪些列存在缺失值。 (b) 发现原始数据中存在年龄为空值的记录,可能是无法识别乘客年龄的缘故,因此去除 年龄为空的记录。(满足 age 为空的一行数据全部丢弃)并再次查看哪些列存在缺失 值。保存上述数据清洗后的数据至“titanic2_cleaned.csv”文件中,随后的题目都在 “titanic2_cleaned.csv”上进行。 1 (3) 筛选列名为 pclass,sex,age,fare,who,adult_male 的列,构成模型数据,命名为 titanic_model。 (4) 使用 patsy.dmatrices() 函数,建立变量 fare 对变量 age 的线性回归,为该线性模型产生设 计矩阵;根据最小二乘法计算回归拟合系数。 (5) 使用 Pandas.get_dummies() 将分类变量 sex、who 转化为虚拟变量,利用 patsy 将数值列 pclass 转化为分类变量。 (6) 使用 statsmodels 包,基于 statsmodels.api(数组接入),利用最小二乘法建立 fare 对 pclass、 sex、age、who 的线性回归模型,(pclass、age 为数值型变量,sex、who 为虚变量),并添 加截距项,展示拟合系数。
好的,以下是针对你的问题的回答:
(1) 使用 pandas 读入数据 titanic.csv,命名为 origin,并查看数据维度与前 10 行。
```python
import pandas as pd
origin = pd.read_csv('titanic.csv')
print("数据维度为:", origin.shape)
print("前10行数据为:\n", origin.head(10))
```
(2) 处理缺失值:
(a) 查看哪些列存在缺失值。
```python
print(origin.isnull().sum())
```
(b) 发现原始数据中存在年龄为空值的记录,可能是无法识别乘客年龄的缘故,因此去除年龄为空的记录。(满足 age 为空的一行数据全部丢弃)并再次查看哪些列存在缺失值。保存上述数据清洗后的数据至“titanic2_cleaned.csv”文件中,随后的题目都在“titanic2_cleaned.csv”上进行。
```python
# 去除 age 为空的行
titanic2 = origin.dropna(subset=['age'])
# 再次查看哪些列存在缺失值
print(titanic2.isnull().sum())
# 保存数据到 titanic2_cleaned.csv 文件中
titanic2.to_csv('titanic2_cleaned.csv', index=False)
```
(3) 筛选列名为 pclass,sex,age,fare,who,adult_male 的列,构成模型数据,命名为 titanic_model。
```python
titanic_model = titanic2[['pclass', 'sex', 'age', 'fare', 'who', 'adult_male']]
```
(4) 使用 patsy.dmatrices() 函数,建立变量 fare 对变量 age 的线性回归,为该线性模型产生设计矩阵;根据最小二乘法计算回归拟合系数。
```python
import patsy
import numpy as np
# 构建设计矩阵
y, X = patsy.dmatrices('fare ~ age', data=titanic_model, return_type='dataframe')
# 根据最小二乘法计算回归拟合系数
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X, y)
print("回归系数为:", lr.coef_)
```
(5) 使用 Pandas.get_dummies() 将分类变量 sex、who 转化为虚拟变量,利用 patsy 将数值列 pclass 转化为分类变量。
```python
# 将 sex、who 转化为虚拟变量
titanic_model = pd.get_dummies(titanic_model, columns=['sex', 'who'])
# 将 pclass 转化为分类变量
titanic_model['pclass'] = titanic_model['pclass'].astype('category')
titanic_model = patsy.dmatrix('pclass + age + fare + sex_female + sex_male + who_child + who_man + who_woman', data=titanic_model, return_type='dataframe')
```
(6) 使用 statsmodels 包,基于 statsmodels.api(数组接入),利用最小二乘法建立 fare 对 pclass、sex、age、who 的线性回归模型,(pclass、age 为数值型变量,sex、who 为虚变量),并添加截距项,展示拟合系数。
```python
import statsmodels.api as sm
# 为矩阵添加截距项
X = sm.add_constant(titanic_model)
# 建立线性回归模型
model = sm.OLS(y, X).fit()
# 展示拟合系数
print(model.params)
```
pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 49, saw 2以下代码出现错误import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np #将数据框命名为titanic titanic = pd.read_csv('train.csv') #将PassengerId设置为索引 titanic = titanic.set_index('PassengerId') #绘制一个展示男女乘客比例的扇形图 Male = (titanic.Sex == 'male').sum() Female = (titanic.Sex == 'female').sum() proportions = [Male,Female] plt.pie(proportions, labels=['Male','Female'],shadow=True, autopct='%1.1f%%',startangle=90,explode=(0.15,0)) plt.axis('equal') plt.title('Sex Proportion') plt.tight_layout() plt.show() #绘制一个展示船票Fare, 与乘客年龄和性别的散点图 lm = sns.lmplot(x='Age',y='Fare', data=titanic,hue='Sex',fit_reg=False) lm.set(title='Fare x Age') #设置坐标轴取值范围 axes = lm.axes axes[0,0].set_ylim(-5,) axes[0,0].set_xlim(-5,85) #有多少人生还? titanic.Survived.sum() #绘制一个展示船票价格的直方图 df = titanic.Fare.sort_values(ascending = False) plt.hist(df,bins = (np.arange(0,600,10))) plt.xlabel('Fare') plt.ylabel('Frequency') plt.title('Fare Payed Histrogram') plt.show()
这个错误通常是由于在读取文件时遇到了格式不正确的行而引起的。在这种情况下,pandas尝试将该行解析为DataFrame的一行,但是由于该行不符合所期望的格式,因此会出现解析错误。
要解决这个错误,你需要检查文件的第49行,看看它的格式是否正确。你可以打开文件并查看该行,或者使用其他工具(如记事本++或Excel)来查看该行。
在查找问题后,你可以选择删除该行,或者尝试修复该行以使其格式正确。一些常见的解决方法包括:
- 确保每行都有相同数量的字段。
- 检查是否有未转义的特殊字符或空格。
- 如果有必要,使用正确的分隔符来分隔数据。
希望这些提示能够帮助你解决问题。
阅读全文