আমি কীভাবে কোনও সাইকিট-লার্ন গুচ্ছ অবজেক্ট থেকে ডেটা রূপান্তর করব একটি পান্ডাস ডেটা ফ্রেমে?
from sklearn.datasets import load_iris
import pandas as pd
data = load_iris()
print(type(data))
data1 = pd. # Is there a Pandas method to accomplish this?
আমি কীভাবে কোনও সাইকিট-লার্ন গুচ্ছ অবজেক্ট থেকে ডেটা রূপান্তর করব একটি পান্ডাস ডেটা ফ্রেমে?
from sklearn.datasets import load_iris
import pandas as pd
data = load_iris()
print(type(data))
data1 = pd. # Is there a Pandas method to accomplish this?
উত্তর:
ম্যানুয়ালি, আপনি pd.DataFrame
নির্মাতা ব্যবহার করতে পারেন , একটি নমপি অ্যারে ( data
) এবং কলামগুলির নামের তালিকা ( columns
) সরবরাহ করতে পারেন। একটি ডেটা ফ্রেমে সমস্ত কিছু রাখতে, আপনি বৈশিষ্ট্যগুলি এবং লক্ষ্যটিকে একটি নপি অ্যারেতে np.c_[...]
(নোট দ্রষ্টব্য []
) দিয়ে একত্র করতে পারেন :
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
# save load_iris() sklearn dataset to iris
# if you'd like to check dataset type use: type(load_iris())
# if you'd like to view list of attributes use: dir(load_iris())
iris = load_iris()
# np.c_ is the numpy concatenate function
# which is used to concat iris['data'] and iris['target'] arrays
# for pandas column argument: concat iris['feature_names'] list
# and string list (in this case one string); you can make this anything you'd like..
# the original dataset would probably call this ['Species']
data1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
columns= iris['feature_names'] + ['target'])
load_boston()
। এই উত্তর আরো সাধারণভাবে কাজ করে stackoverflow.com/a/46379878/1840471
from sklearn.datasets import load_iris
import pandas as pd
data = load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
df.head()
এই টিউটোরিয়ালটি আগ্রহের বিষয়: http://www.neural.cz/dataset-exploration-boston-house-pricing.html
টোমডিএলটি-র সমাধান সাইকিট-লার্নের সমস্ত ডেটাসেটের পক্ষে যথেষ্ট জেনেরিক নয়। উদাহরণস্বরূপ এটি বোস্টন হাউজিং ডেটাসেটের জন্য কাজ করে না। আমি একটি পৃথক সমাধান প্রস্তাব করি যা সর্বজনীন। পাশাপাশি নাম্পি ব্যবহার করার দরকার নেই।
from sklearn import datasets
import pandas as pd
boston_data = datasets.load_boston()
df_boston = pd.DataFrame(boston_data.data,columns=boston_data.feature_names)
df_boston['target'] = pd.Series(boston_data.target)
df_boston.head()
একটি সাধারণ ফাংশন হিসাবে:
def sklearn_to_df(sklearn_dataset):
df = pd.DataFrame(sklearn_dataset.data, columns=sklearn_dataset.feature_names)
df['target'] = pd.Series(sklearn_dataset.target)
return df
df_boston = sklearn_to_df(datasets.load_boston())
pd.Series(sklearn_dataset.target)
হয় এর সাথে প্রতিস্থাপন করা যাবে sklearn_dataset.target
? কমপক্ষে এটি পান্ডাসে আমার জন্য কাজ করে 1.1.3
এটি বের করতে আমাকে 2 ঘন্টা সময় নিয়েছে
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
##iris.keys()
df= pd.DataFrame(data= np.c_[iris['data'], iris['target']],
columns= iris['feature_names'] + ['target'])
df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)
আমার পান্ডার জন্য প্রজাতিগুলি ফিরে পান
ঠিক তেমন একটি বিকল্প যা আমি আমার মাথাটি প্রায় সহজভাবে গুটিয়ে রাখতে পারি:
data = load_iris()
df = pd.DataFrame(data['data'], columns=data['feature_names'])
df['target'] = data['target']
df.head()
মূলত গেটওয়ে থেকে কথা বলার পরিবর্তে বৈশিষ্ট্যগুলির ম্যাট্রিক্স দিয়ে একটি ডেটা ফ্রেম তৈরি করুন এবং তারপরে কেবলমাত্র ডেটা ['হোয়াটনেম'] সহ লক্ষ্য কলাম যুক্ত করুন এবং ডেটাসেট থেকে লক্ষ্য মানগুলি ধরুন
অন্যথায় সামুদ্রিক ডেটা সেটগুলি ব্যবহার করুন যা প্রকৃত পান্ডাস ডেটা ফ্রেম:
import seaborn
iris = seaborn.load_dataset("iris")
type(iris)
# <class 'pandas.core.frame.DataFrame'>
সাইকিট শিখুন ডেটা সেটগুলির সাথে তুলনা করুন:
from sklearn import datasets
iris = datasets.load_iris()
type(iris)
# <class 'sklearn.utils.Bunch'>
dir(iris)
# ['DESCR', 'data', 'feature_names', 'filename', 'target', 'target_names']
এটি আমার পক্ষে কাজ করে।
dataFrame = pd.dataFrame(data = np.c_[ [iris['data'],iris['target'] ],
columns=iris['feature_names'].tolist() + ['target'])
বৈশিষ্ট্য এবং লক্ষ্য ভেরিয়েবলগুলি একত্রিত করার অন্যান্য উপায় ব্যবহার করা যেতে পারে np.column_stack
( বিশদ )
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
data = load_iris()
df = pd.DataFrame(np.column_stack((data.data, data.target)), columns = data.feature_names+['target'])
print(df.head())
ফলাফল:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
0 5.1 3.5 1.4 0.2 0.0
1 4.9 3.0 1.4 0.2 0.0
2 4.7 3.2 1.3 0.2 0.0
3 4.6 3.1 1.5 0.2 0.0
4 5.0 3.6 1.4 0.2 0.0
আপনার যদি স্ট্রিং লেবেলের প্রয়োজন হয় target
তবে আপনি replace
রূপান্তর target_names
করে dictionary
একটি নতুন কলাম যুক্ত করে ব্যবহার করতে পারেন :
df['label'] = df.target.replace(dict(enumerate(data.target_names)))
print(df.head())
ফলাফল:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target label
0 5.1 3.5 1.4 0.2 0.0 setosa
1 4.9 3.0 1.4 0.2 0.0 setosa
2 4.7 3.2 1.3 0.2 0.0 setosa
3 4.6 3.1 1.5 0.2 0.0 setosa
4 5.0 3.6 1.4 0.2 0.0 setosa
মূলত আপনার যা দরকার তা হ'ল "ডেটা", এবং এটি সাইকিট গুচ্ছের মধ্যে রয়েছে, এখন আপনার কেবল "টার্গেট" (ভবিষ্যদ্বাণী) দরকার যা গুচ্ছের মধ্যেও রয়েছে।
সুতরাং ডেটা সম্পূর্ণরূপে তৈরি করার জন্য এই দু'জনকেই একত্রিত করা দরকার
data_df = pd.DataFrame(cancer.data,columns=cancer.feature_names)
target_df = pd.DataFrame(cancer.target,columns=['target'])
final_df = data_df.join(target_df)
সংস্করণ 0.23 হিসাবে, আপনি as_frame
যুক্তি ব্যবহার করে সরাসরি কোনও ডেটা ফ্রেম ফিরিয়ে দিতে পারেন । উদাহরণস্বরূপ, আইরিস ডেটা সেট লোড হচ্ছে:
from sklearn.datasets import load_iris
iris = load_iris(as_frame=True)
df = iris.data
অস্থায়ীভাবে প্রকাশিত নোটগুলি ব্যবহার করে আমার বোঝার ক্ষেত্রে , এটি স্তন_সংশ্লিষ্ট, ডায়াবেটিস, অঙ্কগুলি, আইরিস, ল্যাননারড, ওয়াইন এবং ক্যালিফোর্নিয়া_হাউসের ডেটা সেটগুলির জন্য কাজ করে।
as_frame=True
পান্ডাস ডেটাফ্রেমগুলি পেতে আপনি প্যারামিটারটি ব্যবহার করতে পারেন ।
from sklearn import datasets
X,y = datasets.load_iris(return_X_y=True) # numpy arrays
dic_data = datasets.load_iris(as_frame=True)
print(dic_data.keys())
df = dic_data['frame'] # pandas dataframe data + target
df_X = dic_data['data'] # pandas dataframe data only
ser_y = dic_data['target'] # pandas series target only
dic_data['target_names'] # numpy array
from sklearn import datasets
fnames = [ i for i in dir(datasets) if 'load_' in i]
print(fnames)
fname = 'load_boston'
loader = getattr(datasets,fname)()
df = pd.DataFrame(loader['data'],columns= loader['feature_names'])
df['target'] = loader['target']
df.head(2)
এই সহজ পদ্ধতিটি আমার পক্ষে কাজ করেছে।
boston = load_boston()
boston_frame = pd.DataFrame(data=boston.data, columns=boston.feature_names)
boston_frame["target"] = boston.target
তবে এটি লোড_ইরিসেও প্রয়োগ করতে পারে।
সর্বোত্তম উত্তরের বাইরে কাজ করা এবং আমার মন্তব্যকে সম্বোধন করা, রূপান্তরকরণের জন্য এখানে একটি ফাংশন
def bunch_to_dataframe(bunch):
fnames = bunch.feature_names
features = fnames.tolist() if isinstance(fnames, np.ndarray) else fnames
features += ['target']
return pd.DataFrame(data= np.c_[bunch['data'], bunch['target']],
columns=features)
টমডিএলটি যা কিছু উত্তর দিয়েছে তা আপনার কারও জন্য কার্যকর নাও হতে পারে
data1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
columns= iris['feature_names'] + ['target'])
কারণ আইরিস ['বৈশিষ্ট্য_নাম'] আপনাকে অসাধারণ অ্যারে প্রদান করে। ন্যালি অ্যারেতে আপনি কেবল + অপারেটর দ্বারা একটি অ্যারে এবং একটি তালিকা ['লক্ষ্য'] যুক্ত করতে পারবেন না। সুতরাং আপনাকে প্রথমে এটিকে তালিকায় রূপান্তর করতে হবে এবং তারপরে যুক্ত করতে হবে।
আপনি করতে পারেন
data1 = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
columns= list(iris['feature_names']) + ['target'])
এটি খুব ভাল কাজ করবে ..
এর চেয়ে আরও ভাল উপায় হতে পারে তবে এখানে আমি অতীতে যা করেছি এবং এটি বেশ ভালভাবে কাজ করে:
items = data.items() #Gets all the data from this Bunch - a huge list
mydata = pd.DataFrame(items[1][1]) #Gets the Attributes
mydata[len(mydata.columns)] = items[2][1] #Adds a column for the Target Variable
mydata.columns = items[-1][1] + [items[2][0]] #Gets the column names and updates the dataframe
এখন মায়াডাটাতে আপনার প্রয়োজনীয় সমস্ত কিছু থাকবে - বৈশিষ্ট্য, টার্গেট ভেরিয়েবল এবং কলামের নাম
mydata = pd.DataFrame(items[1][1])
নিক্ষেপTypeError: 'dict_items' object does not support indexing
এই স্নিপেটটি কেবল টমডিএলটি এবং রোলিয়েট যা ইতিমধ্যে অবদান এবং ব্যাখ্যা করেছে তার উপর নির্মিত সিনট্যাকটিক চিনি । পার্থক্যগুলি হ'ল কেবল অভিধানের পরিবর্তে একটি টুপল ফিরিয়ে দেবে এবং কলামগুলির নাম গণনা করা হবে।load_iris
df = pd.DataFrame(np.c_[load_iris(return_X_y=True)])
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
X = iris['data']
y = iris['target']
iris_df = pd.DataFrame(X, columns = iris['feature_names'])
iris_df.head()
অন্যতম সেরা উপায়:
data = pd.DataFrame(digits.data)
অঙ্কগুলি হ'ল স্ক্যালার ডেটাফ্রেম এবং আমি এটিকে একটি পান্ডাস ডেটা ফ্রেমে রূপান্তর করি
আমি আপনার উত্তরগুলি থেকে বেশ কয়েকটি ধারণা নিয়েছি এবং কীভাবে এটি আরও খাটো করা যায় তা আমি জানি না :)
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris['feature_names'])
df['target'] = iris['target']
এটি কলাম এবং রেঞ্জইন্ডেক্স হিসাবে বৈশিষ্ট্য_নাম প্লাস লক্ষ্য সহ একটি পান্ডাস ডেটা ফ্রেম দেয় (শুরু = 0, স্টপ = লেন (ডিএফ), পদক্ষেপ = 1)। আমি একটি সংক্ষিপ্ত কোড রাখতে চাই যেখানে আমি সরাসরি 'লক্ষ্য' যুক্ত করতে পারি।
প্রস্তাবিত প্রতিক্রিয়াগুলির তুলনায় এপিআইটি কিছুটা পরিষ্কার। এখানে, ব্যবহার করে as_frame
এবং পাশাপাশি একটি প্রতিক্রিয়া কলাম অন্তর্ভুক্ত করার বিষয়ে নিশ্চিত হওয়া।
import pandas as pd
from sklearn.datasets import load_wine
features, target = load_wine(as_frame=True).data, load_wine(as_frame=True).target
df = features
df['target'] = target
df.head(2)
এখানে আরও একটি সংহত পদ্ধতির উদাহরণ সম্ভবত সহায়ক।
from sklearn.datasets import load_iris
iris_X, iris_y = load_iris(return_X_y=True, as_frame=True)
type(iris_X), type(iris_y)
আইরিস_এক্স ডেটা পান্ডাস ডেটা ফ্রেম হিসাবে আমদানি করা হয় এবং লক্ষ্য আইরিস_ই প্যান্ডাস সিরিজ হিসাবে আমদানি করা হয়।
from sklearn.datasets import load_iris
import pandas as pd
iris_dataset = load_iris()
datasets = pd.DataFrame(iris_dataset['data'], columns =
iris_dataset['feature_names'])
target_val = pd.Series(iris_dataset['target'], name =
'target_values')
species = []
for val in target_val:
if val == 0:
species.append('iris-setosa')
if val == 1:
species.append('iris-versicolor')
if val == 2:
species.append('iris-virginica')
species = pd.Series(species)
datasets['target'] = target_val
datasets['target_name'] = species
datasets.head()