ラベル csv の投稿を表示しています。 すべての投稿を表示
ラベル csv の投稿を表示しています。 すべての投稿を表示

2019年3月6日水曜日

プログラミング言語

プログラミングの周辺の話題で、以前から興味があることがある。

というか、疑問。

「なんであんなにたくさん言語があるのか」




自然言語(英語とか日本語とか中国語とか普通に喋る用の言語)ならわかる。

歴史的要因や地理的要因、流行などその他諸々によって進化していくので、あれだけ数があることも、特別疑問に感じない。

でも、プログラミング言語の場合って、機械語やアセンブリ言語然り、Cなど低いレイヤーの言語があるじゃないですか。なんでそれ一本槍でいかないのかと。

というか、いい年をしてこんなことを疑問に思ってて、でも意外にみんな、そんな感じで素朴に質問されたら答えられないのではないかと思っている。



そこで、

「プログラミング言語はマシンを統制するための言語」

という視点にたち、

「最終的に機械語に置き換えられて実行されるんであれば、程度の差こそあれ『プログラミング言語』という一つのツールとしてみなせないのか」

と思って、いろんな言語同士をお互いに埋め込んだり、処理を受け渡したりする方法をちょこちょこ調べていたりする。

なんか我ながらマニアックなことをやっていると思う。

調べること中心で、あんまり実装はできていないけど、そういうものも含めて興味があることは、
  • pythonコードにC++を埋め込む
  • C++のコードにpythonを埋め込む
  • pythonのコードにJavaを埋め込む
  • Javaのコードにpythonを埋め込む(←あんまりやる意味ない?)
  • Javascriptの中にC++を埋め込む
などなど以下、他の言語同士でも同様。さらに、
  • C++のコードにアセンブリ言語を埋め込む
  • SVGの中にC++を埋め込む
  • C++からmatplotlibへ描画
  • C++からgnuplotへ描画
  • ProcessingにC++を埋め込む
などなど。あんまり理解していないので、そもそもやる意味ないやつとか、支離滅裂なことをいっている組み合わせもあるかも。




自然言語で話すときは、方言とか、違う言語通しチャンポンで話すことも結構あったりするのに、プログラミング言語でそれができないのは、なんかもどかしいなっていう感じ。

なんか発言がど素人的な発言だけど。

でもいいのさ。素人の目線でみて、専門家的に考え検討するの大事だと思うから気にしなーい!

2015年10月28日水曜日

csvファイルの扱い2---pythonを使って読み込み---

今回はpython3でcsvファイルを読み込む手順などについて書いていこうと思います

csvファイルの準備

前回、使用したファイルを流用して、次のようなcsvファイルを使うことにします。
#下の枠の中の内容だけをテキストファイルにかいて、名前を「(なんか適当な名前).csv」で保存する。ここでは、sample.csvにしてます。
3,2,7,8
5,11,1,5
13,4,2,3


csvファイルの読み込み(と表示)

まず、一番シンプルな、「読み込んで、内容を表示する」だけの処理は、もうすでにたくさんの他の人のブログやサイトなどでも紹介し尽くされているような気もしますが、こう書くそうです。
#  ややくどいというか、冗長な補足かもしれませんが、import csv以下の内容をテキストファイルに書いて、「(適当な名前).py」で保存。ここでは、一応「open.py」。そして、先ほど用意したsample.csvのファイルと今のopne.pyのファイルは同じフォルダ(ディレクトリ)に置いておく。

import csv
f = open("sample.csv")
reader = csv.reader(f)

for row in reader:
 print(row)

f.close()


先ほど用意したsample.csvのファイルと今のopne.pyのファイルは同じフォルダ(ディレクトリ)に置きます。
そしてターミナルにて、カレントディレクトリをsample.csvとopen.pyが置いてあるフォルダに移動します。
そうしたら、またターミナルで次のコマンドを打つとcsvファイルの中身が表示されます。

($のマークより前は中略・・・)$ python3 open.py    # 「python3 open.py」と打ってreturnを押す。
とすると、
['3', '2', '7', '8']
['5', '11', '1', '5']
['13', '4', '2', '3']

csvファイルの列だけ抽出

上の実行結果をみて推察されるように、csvファイルとして読み込むと、「各行を要素にもつリスト」として読み込まれます。(その各行それぞれもリストなわけですが。リストを要素にもつリスト、ということ)

いや、読み込まれます、とかいってますが、自分はあまりリストとイテレータの違いがよくわかっていません。
もしかしたら「イテレータとして読み込まれます」という表現が正しいのかも知れませんが、ここではとりあえずそのあたりには触れないようにします。
どなたか説明できる方がいれば教えてください。

なので、
import csv
f = open("sample.csv")
reader = csv.reader(f)

for row in reader:
    print(row[2])

f.close()

とすれば、実行結果は
7
1
2

となります。

言葉で表現するとやや紛らわしいですが、あえて表現してみると、「各行」がそれぞれリストの要素になっているわけですが(各行それ自体もリスト)、各行から3番目の要素を取り出す(くどいですが、誤植ではないです。3番目の要素。)という操作を各行に対して行う、という意味です。

readerオブジェクトの型と属性を調べてみる

上の部分で「「各行」がそれぞれリストの要素になっているわけですが」とか書いてますし、ネット上のドキュメントを読んでもそう書いてはあるのですが、書いてあるからと信用できないのが自分。

自分で確認できたことになるのかどうかすらも不明ですが、わからないなりにやるだけやってみました。

型を調べる

type関数を使うらしいです。

こんなコードを書いてみます。
import csv
f = open("sample.csv")
reader = csv.reader(f)

for row in reader:
 print(row)

print(type(reader))

f.close()

実行するとこうなります。

['3', '2', '7', '8']
['5', '11', '1', '5']
['13', '4', '2', '3']
     #この部分がtype関数に対する実行結果。


持っている属性を調べる

属性を調べるのはdir関数です。
先のコードに追加して次のようなコードにします。
import csv
f = open("sample.csv")
reader = csv.reader(f)

for row in reader:
 print(row)

print(type(reader))

for e in dir(reader):
 print(e)
f.close()

実行すると、次のようになります。
['3', '2', '7', '8']
['5', '11', '1', '5']
['13', '4', '2', '3']

__class__             #  この行より以下がdir関数に対する実行結果。
__delattr__
__dir__
__doc__
__eq__
__format__
__ge__
__getattribute__
__gt__
__hash__
__init__
__iter__
__le__
__lt__
__ne__
__new__
__next__
__reduce__
__reduce_ex__
__repr__
__setattr__
__sizeof__
__str__
__subclasshook__
dialect
line_num


2015年10月7日水曜日

csvファイルの扱い1---スプレッドシートやExcelとの絡みにて---

csvファイルについて調べたことを書いてみようと思います。

もともとの目標は、pythonなどのプログラミング言語でcsvファイルを扱う方法について調べようと思っていたのですが、もう少し基本的なことまで遡ってcsvファイルの扱い方について調べてみました。

csvファイルとは

そもそもなんなのか、という部分については検索すれば丁寧な解説がたくさんでているので、そちらへ譲ります。

要するに、windowsでいえばメモ帳、Macでいえばテキストエディタとかに書かれていて、カンマで区切られて書かれている

こういうファイルです。

これを、例えばExcelとか、もともとは表形式で作成したデータを、テキストファイル形式にして、他のアプリケーションとやりとりをしやすくします。

表形式のデータだと、ExcelとExcelの間のやりとりなら、まだいいとしても、他のソフトとやりとりをしようと思うと、ファイルの形式が合わず、うまくいきません。

データそのもの(つまりExcelの場合でいえば、各セルに入力されているデータ)以外にも、体裁を整えるための余分なデータがくっついてしまっているので。

で、データの基本的な部分だけ残して作ったものが、csvファイルです。

スプレッドシート→csvファイルの作成

Excelをあまり使ったことがないのでわかりませんが、おそらくExcelでも基本的には同じだと思います。

ここでは、Googleドライブのスプレッドシートからcsvファイルを作成します。

サンプル用のデータとして、次のようなデータを用意します。




データを作成したら、画面左上の「ファイル」をクリックし、「形式を指定してダウンロード」→「カンマ区切りの値(.csv、現在のシート)」を選んでクリックします。



クリックをすると、すぐにダウンロードされます。

普段ダウンロードされたデータが入る場所をみると、「.csv」のファイルができています。

今はMacを使っているので、「ダウンロード」というフォルダの中に入りました。

そのままcsvのデータを開くと、Excelとかデフォルトで指定されているソフトで開かれてしまうと思うので、どのソフトで開くかを指定します。

Macの場合であれば、


ここをクリックすると、


「このアプリケーションを開く」にマウスを合わせ、


「テキストエディタ」をクリックします。

そうすると、テキストエディタで

このように書かれたデータが表示されます。これがcsvファイルです。

csvファイル→スプレッドシート

具体的な操作手順に関してはいろいろあると思いますが、今回は次のような方法でいきます。

新規にスプレッドシートを開き、画面左上のメニューから「インポート」を選びます。



新しく出てくる画面で、アップロードを選び、画面の指示通り、該当のファイルを直接ドラッグするか、パソコンのから該当のファイルを選んで指定します。

そうすると、左下の「選択」のボタンが押せるようになるので、クリックします。


そうすると次のような画面がでます。




ここで操作を選びます。

インポート操作のところは、
  • 新しいスプレッドシートを作成する
    →今開いているスプレッドシートとは全く別に新規にスプレッドシートを開き、そこにcsvファイルを読み込み。

  • 新しいシートを挿入する。
    →現在開いているスプレッドシートで、新しいシートを追加し新しく追加したシートにcsvファイルを読み込み。

  • スプレッドシートを置き換えする。
    →現在のシートにそのままcsvファイルを流し込む。(それ以下の三つと混同しやすい表現ですが。。。)
それ以下三つの選択肢はやや説明が面倒なのでしません。

区切り文字の方は、文字通り「データの区切りの記号はなににしているか」です。
ここは「自動的に検出する」か、「カンマ」にします。csvですのでね。

「タブ」もあるのは、世の中にはcsv(Camma Separeted Value)に対して、「タブ」で区切られてるtsv(Tab Separated Value)なるものもあるからです。

それで読み込みをすると、こうなって無事読み込めます。




ちなみにcsvファイルを読み込むのに、区切り文字に「タブ」を選択すると、次のようになります。



これは、区切り文字は「タブ」と指定しているので、「タブ」がデータの区切りになっているわけです。

つまり、タブが現れるまでは一塊のデータです。

一方、csvと同じように改行コードがくれば、行が変わります。

csvファイルをtsvとして読み込むと、タブが来る前に改行コードが来ているので、一行目が、丸々ひとつのデータをして扱われ、改行コードにて次の行に読み込まれているわけです。

次回は、csvをpythonやCで扱う方法について書いてみようと思います。